@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/date.ts"],"sourcesContent":["import { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\nimport { lightFormat } from 'date-fns';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null,\n timezone?: string,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nexport const convertDateFromTimeZone = (\n date?: Date | null,\n timezone?: string,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return date ? TZDateMini.tz(systemTimezone, date) : undefined;\n};\n\nexport function format(date: Date | number, format: string): string {\n return lightFormat(date, format);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n"],"names":["TZDateMini","lightFormat","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","convertDateFromTimeZone","systemTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","isMatch","isNaN"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/date.ts"],"sourcesContent":["import { isSameDate } from '@vkontakte/vkjs';\nimport { TZDateMini } from '@vkontakte/vkui-date-fns-tz';\n\nexport function parse(input: string, format: string, referenceDate: Date = new Date()): Date {\n const match2 = /^\\d\\d/; // 00 - 99\n const match4 = /^\\d{4}/; // 0000 - 9999\n\n const entries: Array<[string, RegExp, (val: string) => [string, number, boolean]]> = [\n ['yyyy', match4, (val) => ['Y', +val, true]],\n [\n 'MM',\n match2,\n (val) => {\n const numVal = +val;\n const okay = numVal > 0 && numVal <= 12;\n\n return ['M', numVal - 1, okay];\n },\n ],\n ['dd', match2, (val) => ['D', +val, true]],\n [\n 'HH',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 24;\n\n return ['h', numVal, okay];\n },\n ],\n [\n 'mm',\n match2,\n (val) => {\n const numVal = parseInt(val, 10);\n const okay = numVal >= 0 && numVal < 60;\n\n return ['m', numVal, okay];\n },\n ],\n ];\n\n const superRegExp = new RegExp(entries.map((item) => item[0]).join('|'), 'g');\n\n const store: {\n [key: string]: number;\n } = {\n y: referenceDate.getFullYear(),\n M: referenceDate.getMonth(),\n d: referenceDate.getDate(),\n h: referenceDate.getHours(),\n m: referenceDate.getMinutes(),\n s: referenceDate.getSeconds(),\n ms: referenceDate.getMilliseconds(),\n };\n\n let prevInputIndex = 0;\n let lastNonFormatting = '';\n let lastFormatIndex = 0;\n let found = false;\n\n while (true) {\n const match = superRegExp.exec(format);\n\n if (!match) {\n break;\n }\n\n const length = match[0].length;\n const atIndex = superRegExp.lastIndex - length;\n\n const item = entries.find((item) => item[0] === match[0])!;\n\n lastNonFormatting = format.slice(lastFormatIndex, atIndex);\n lastFormatIndex = superRegExp.lastIndex;\n\n if (\n input.slice(prevInputIndex, prevInputIndex + lastNonFormatting.length) !== lastNonFormatting\n ) {\n return new Date('');\n }\n\n const value = input.slice(prevInputIndex + lastNonFormatting.length).match(item[1]);\n\n if (!value) {\n return new Date('');\n }\n\n prevInputIndex = prevInputIndex + lastNonFormatting.length + value[0].length;\n\n const [key, newValue, okay] = item[2](value[0]);\n\n if (!okay) {\n return new Date('');\n }\n\n store[key] = newValue;\n found = true;\n }\n\n if (!found) {\n return new Date('');\n }\n\n const date = new Date(store.Y, store.M, store.D, store.h, store.m, store.s, store.ms);\n\n // Since days of months are dynamic, they can't be validated in entries,\n // so we check it here, in the finalized date\n if (date.getMonth() !== store.M || date.getDate() !== store.D) {\n return new Date('');\n }\n\n return date;\n}\n\nexport const convertDateToTimeZone = (\n date?: Date | null,\n timezone?: string,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n return date ? TZDateMini.tz(timezone, date) : undefined;\n};\n\nexport const convertDateFromTimeZone = (\n date?: Date | null,\n timezone?: string,\n): Date | undefined | null => {\n if (!timezone) {\n return date;\n }\n if (date === null) {\n return null;\n }\n // eslint-disable-next-line new-cap\n const systemTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return date ? TZDateMini.tz(systemTimezone, date) : undefined;\n};\n\nconst dateOptions: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n};\n\n// dd.MM.yyyy\nexport const dateFormatter = /*#__PURE__*/ new Intl.DateTimeFormat('ru-RU', dateOptions);\n\nclass DateTimeFormat extends Intl.DateTimeFormat {\n constructor() {\n super('ru-RU', {\n ...dateOptions,\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n format(date?: Date | number): string {\n return super.format(date).replace(',', '');\n }\n}\n\n// dd.MM.yyyy HH:mm\nexport const dateTimeFormatter = /*#__PURE__*/ new DateTimeFormat();\n\n/**\n * Возвращает дату конца месяца\n */\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n const month = result.getMonth();\n result.setFullYear(result.getFullYear(), month + 1, 0);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\n/**\n * Проверяет, что переданные даты относятся к одному и тому же месяцу\n *\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { isSameMonth } from './date.ts';\n *\n * const d1 = new Date();\n * const d2 = new Date();\n * assert.ok(isSameMonth(d1, d2));\n * ```\n */\nexport function isSameMonth(d1: Date, d2: Date): boolean {\n return d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear();\n}\n\nexport function isLastDayOfMonth(date: Date) {\n return +endOfDay(date) === +endOfMonth(date);\n}\n\nexport function isWithinInterval(date: Date, interval: [Date, Date]) {\n const [startTime, endTime] = interval.sort((a, b) => +a - +b);\n\n return date >= startTime && date <= endTime;\n}\n\nexport function isToday(date: Date) {\n return isSameDate(date, new Date());\n}\n\nexport function isYesterday(date: Date) {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n return isSameDate(date, yesterday);\n}\n\nexport function isMatch(input: string, format: string): boolean {\n return !isNaN(+parse(input, format));\n}\n\nexport const millisecondsInSecond = 1000;\n"],"names":["isSameDate","TZDateMini","parse","input","format","referenceDate","Date","match2","match4","entries","val","numVal","okay","parseInt","superRegExp","RegExp","map","item","join","store","y","getFullYear","M","getMonth","d","getDate","h","getHours","m","getMinutes","s","getSeconds","ms","getMilliseconds","prevInputIndex","lastNonFormatting","lastFormatIndex","found","match","exec","length","atIndex","lastIndex","find","slice","value","key","newValue","date","Y","D","convertDateToTimeZone","timezone","tz","undefined","convertDateFromTimeZone","systemTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","dateOptions","day","month","year","dateFormatter","hour","minute","replace","dateTimeFormatter","endOfMonth","result","setFullYear","setHours","endOfDay","isSameMonth","d1","d2","isLastDayOfMonth","isWithinInterval","interval","startTime","endTime","sort","a","b","isToday","isYesterday","yesterday","setDate","isMatch","isNaN","millisecondsInSecond"],"mappings":"AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAAQ,8BAA8B;AAEzD,OAAO,SAASC,MAAMC,KAAa,EAAEC,MAAc,EAAEC,gBAAsB,IAAIC,MAAM;IACnF,MAAMC,SAAS,SAAS,UAAU;IAClC,MAAMC,SAAS,UAAU,cAAc;IAEvC,MAAMC,UAA+E;QACnF;YAAC;YAAQD;YAAQ,CAACE,MAAQ;oBAAC;oBAAK,CAACA;oBAAK;iBAAK;SAAC;QAC5C;YACE;YACAH;YACA,CAACG;gBACC,MAAMC,SAAS,CAACD;gBAChB,MAAME,OAAOD,SAAS,KAAKA,UAAU;gBAErC,OAAO;oBAAC;oBAAKA,SAAS;oBAAGC;iBAAK;YAChC;SACD;QACD;YAAC;YAAML;YAAQ,CAACG,MAAQ;oBAAC;oBAAK,CAACA;oBAAK;iBAAK;SAAC;QAC1C;YACE;YACAH;YACA,CAACG;gBACC,MAAMC,SAASE,SAASH,KAAK;gBAC7B,MAAME,OAAOD,UAAU,KAAKA,SAAS;gBAErC,OAAO;oBAAC;oBAAKA;oBAAQC;iBAAK;YAC5B;SACD;QACD;YACE;YACAL;YACA,CAACG;gBACC,MAAMC,SAASE,SAASH,KAAK;gBAC7B,MAAME,OAAOD,UAAU,KAAKA,SAAS;gBAErC,OAAO;oBAAC;oBAAKA;oBAAQC;iBAAK;YAC5B;SACD;KACF;IAED,MAAME,cAAc,IAAIC,OAAON,QAAQO,GAAG,CAAC,CAACC,OAASA,IAAI,CAAC,EAAE,EAAEC,IAAI,CAAC,MAAM;IAEzE,MAAMC,QAEF;QACFC,GAAGf,cAAcgB,WAAW;QAC5BC,GAAGjB,cAAckB,QAAQ;QACzBC,GAAGnB,cAAcoB,OAAO;QACxBC,GAAGrB,cAAcsB,QAAQ;QACzBC,GAAGvB,cAAcwB,UAAU;QAC3BC,GAAGzB,cAAc0B,UAAU;QAC3BC,IAAI3B,cAAc4B,eAAe;IACnC;IAEA,IAAIC,iBAAiB;IACrB,IAAIC,oBAAoB;IACxB,IAAIC,kBAAkB;IACtB,IAAIC,QAAQ;IAEZ,MAAO,KAAM;QACX,MAAMC,QAAQxB,YAAYyB,IAAI,CAACnC;QAE/B,IAAI,CAACkC,OAAO;YACV;QACF;QAEA,MAAME,SAASF,KAAK,CAAC,EAAE,CAACE,MAAM;QAC9B,MAAMC,UAAU3B,YAAY4B,SAAS,GAAGF;QAExC,MAAMvB,OAAOR,QAAQkC,IAAI,CAAC,CAAC1B,OAASA,IAAI,CAAC,EAAE,KAAKqB,KAAK,CAAC,EAAE;QAExDH,oBAAoB/B,OAAOwC,KAAK,CAACR,iBAAiBK;QAClDL,kBAAkBtB,YAAY4B,SAAS;QAEvC,IACEvC,MAAMyC,KAAK,CAACV,gBAAgBA,iBAAiBC,kBAAkBK,MAAM,MAAML,mBAC3E;YACA,OAAO,IAAI7B,KAAK;QAClB;QAEA,MAAMuC,QAAQ1C,MAAMyC,KAAK,CAACV,iBAAiBC,kBAAkBK,MAAM,EAAEF,KAAK,CAACrB,IAAI,CAAC,EAAE;QAElF,IAAI,CAAC4B,OAAO;YACV,OAAO,IAAIvC,KAAK;QAClB;QAEA4B,iBAAiBA,iBAAiBC,kBAAkBK,MAAM,GAAGK,KAAK,CAAC,EAAE,CAACL,MAAM;QAE5E,MAAM,CAACM,KAAKC,UAAUnC,KAAK,GAAGK,IAAI,CAAC,EAAE,CAAC4B,KAAK,CAAC,EAAE;QAE9C,IAAI,CAACjC,MAAM;YACT,OAAO,IAAIN,KAAK;QAClB;QAEAa,KAAK,CAAC2B,IAAI,GAAGC;QACbV,QAAQ;IACV;IAEA,IAAI,CAACA,OAAO;QACV,OAAO,IAAI/B,KAAK;IAClB;IAEA,MAAM0C,OAAO,IAAI1C,KAAKa,MAAM8B,CAAC,EAAE9B,MAAMG,CAAC,EAAEH,MAAM+B,CAAC,EAAE/B,MAAMO,CAAC,EAAEP,MAAMS,CAAC,EAAET,MAAMW,CAAC,EAAEX,MAAMa,EAAE;IAEpF,wEAAwE;IACxE,6CAA6C;IAC7C,IAAIgB,KAAKzB,QAAQ,OAAOJ,MAAMG,CAAC,IAAI0B,KAAKvB,OAAO,OAAON,MAAM+B,CAAC,EAAE;QAC7D,OAAO,IAAI5C,KAAK;IAClB;IAEA,OAAO0C;AACT;AAEA,OAAO,MAAMG,wBAAwB,CACnCH,MACAI;IAEA,IAAI,CAACA,UAAU;QACb,OAAOJ;IACT;IACA,IAAIA,SAAS,MAAM;QACjB,OAAO;IACT;IACA,OAAOA,OAAO/C,WAAWoD,EAAE,CAACD,UAAUJ,QAAQM;AAChD,EAAE;AAEF,OAAO,MAAMC,0BAA0B,CACrCP,MACAI;IAEA,IAAI,CAACA,UAAU;QACb,OAAOJ;IACT;IACA,IAAIA,SAAS,MAAM;QACjB,OAAO;IACT;IACA,mCAAmC;IACnC,MAAMQ,iBAAiBC,KAAKC,cAAc,GAAGC,eAAe,GAAGC,QAAQ;IACvE,OAAOZ,OAAO/C,WAAWoD,EAAE,CAACG,gBAAgBR,QAAQM;AACtD,EAAE;AAEF,MAAMO,cAA0C;IAC9CC,KAAK;IACLC,OAAO;IACPC,MAAM;AACR;AAEA,aAAa;AACb,OAAO,MAAMC,gBAAgB,WAAW,GAAG,IAAIR,KAAKC,cAAc,CAAC,SAASG,aAAa;AAEzF,MAAMH,uBAAuBD,KAAKC,cAAc;IAC9C,aAAc;QACZ,KAAK,CAAC,SAAS;YACb,GAAGG,WAAW;YACdK,MAAM;YACNC,QAAQ;QACV;IACF;IAEA/D,OAAO4C,IAAoB,EAAU;QACnC,OAAO,KAAK,CAAC5C,OAAO4C,MAAMoB,OAAO,CAAC,KAAK;IACzC;AACF;AAEA,mBAAmB;AACnB,OAAO,MAAMC,oBAAoB,WAAW,GAAG,IAAIX,iBAAiB;AAEpE;;CAEC,GACD,OAAO,SAASY,WAAWtB,IAAU;IACnC,MAAMuB,SAAS,IAAIjE,KAAK0C;IACxB,MAAMe,QAAQQ,OAAOhD,QAAQ;IAC7BgD,OAAOC,WAAW,CAACD,OAAOlD,WAAW,IAAI0C,QAAQ,GAAG;IACpDQ,OAAOE,QAAQ,CAAC,IAAI,IAAI,IAAI;IAC5B,OAAOF;AACT;AAEA,OAAO,SAASG,SAAS1B,IAAU;IACjC,MAAMuB,SAAS,IAAIjE,KAAK0C;IACxBuB,OAAOE,QAAQ,CAAC,IAAI,IAAI,IAAI;IAC5B,OAAOF;AACT;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASI,YAAYC,EAAQ,EAAEC,EAAQ;IAC5C,OAAOD,GAAGrD,QAAQ,OAAOsD,GAAGtD,QAAQ,MAAMqD,GAAGvD,WAAW,OAAOwD,GAAGxD,WAAW;AAC/E;AAEA,OAAO,SAASyD,iBAAiB9B,IAAU;IACzC,OAAO,CAAC0B,SAAS1B,UAAU,CAACsB,WAAWtB;AACzC;AAEA,OAAO,SAAS+B,iBAAiB/B,IAAU,EAAEgC,QAAsB;IACjE,MAAM,CAACC,WAAWC,QAAQ,GAAGF,SAASG,IAAI,CAAC,CAACC,GAAGC,IAAM,CAACD,IAAI,CAACC;IAE3D,OAAOrC,QAAQiC,aAAajC,QAAQkC;AACtC;AAEA,OAAO,SAASI,QAAQtC,IAAU;IAChC,OAAOhD,WAAWgD,MAAM,IAAI1C;AAC9B;AAEA,OAAO,SAASiF,YAAYvC,IAAU;IACpC,MAAMwC,YAAY,IAAIlF;IACtBkF,UAAUC,OAAO,CAACD,UAAU/D,OAAO,KAAK;IAExC,OAAOzB,WAAWgD,MAAMwC;AAC1B;AAEA,OAAO,SAASE,QAAQvF,KAAa,EAAEC,MAAc;IACnD,OAAO,CAACuF,MAAM,CAACzF,MAAMC,OAAOC;AAC9B;AAEA,OAAO,MAAMwF,uBAAuB,KAAK"}
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { arrowMiddleware, autoPlacementMiddleware, flipMiddleware, hideMiddleware, offsetMiddleware, shiftMiddleware, sizeMiddleware } from "../adapters.js";
3
3
  import { checkIsNotAutoPlacement, getAutoPlacementAlign } from "../functions.js";
4
- export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, flipMiddlewareFallbackAxisSideDirection = 'end' })=>{
4
+ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', arrowRef = null, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, disableShiftMiddleware = false, flipMiddlewareFallbackAxisSideDirection = 'end' })=>{
5
5
  return React.useMemo(()=>{
6
6
  const isAutoPlacement = !checkIsNotAutoPlacement(placement);
7
7
  const middlewares = [
@@ -10,25 +10,34 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
10
10
  mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis
11
11
  })
12
12
  ];
13
- const shiftMiddlewareInstance = shiftMiddleware();
13
+ const shift = disableShiftMiddleware ? null : shiftMiddleware();
14
14
  // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs
15
15
  if (isAutoPlacement) {
16
16
  middlewares.push(autoPlacementMiddleware({
17
17
  alignment: getAutoPlacementAlign(placement)
18
- }), shiftMiddlewareInstance);
18
+ }));
19
+ if (shift) {
20
+ middlewares.push(shift);
21
+ }
19
22
  } else if (!disableFlipMiddleware) {
20
- const flipMiddlewareInstance = flipMiddleware({
23
+ const flip = flipMiddleware({
21
24
  crossAxis: 'alignment',
22
25
  fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection
23
26
  });
24
27
  // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs
25
28
  if (placement.includes('-')) {
26
- middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);
29
+ middlewares.push(flip);
30
+ if (shift) {
31
+ middlewares.push(shift);
32
+ }
27
33
  } else {
28
- middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);
34
+ if (shift) {
35
+ middlewares.push(shift);
36
+ }
37
+ middlewares.push(flip);
29
38
  }
30
- } else {
31
- middlewares.push(shiftMiddlewareInstance);
39
+ } else if (shift) {
40
+ middlewares.push(shift);
32
41
  }
33
42
  if (sameWidth) {
34
43
  middlewares.push(sizeMiddleware({
@@ -63,6 +72,7 @@ export const useFloatingMiddlewaresBootstrap = ({ placement = 'bottom-start', ar
63
72
  arrowHeight,
64
73
  offsetByMainAxis,
65
74
  disableFlipMiddleware,
75
+ disableShiftMiddleware,
66
76
  flipMiddlewareFallbackAxisSideDirection,
67
77
  sameWidth,
68
78
  customMiddlewares,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n /**\n * Задаёт резервный вариант размещения по перпендикулярной оси.\n */\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = 'end',\n}: UseFloatingMiddlewaresBootstrapOptions): {\n middlewares: UseFloatingMiddleware[];\n strictPlacement: Placement | undefined;\n} => {\n return React.useMemo(() => {\n const isAutoPlacement = !checkIsNotAutoPlacement(placement);\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetByCrossAxis,\n mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis,\n }),\n ];\n\n const shiftMiddlewareInstance = shiftMiddleware();\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs\n if (isAutoPlacement) {\n middlewares.push(\n autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }),\n shiftMiddlewareInstance,\n );\n } else if (!disableFlipMiddleware) {\n const flipMiddlewareInstance = flipMiddleware({\n crossAxis: 'alignment',\n fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection,\n });\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs\n if (placement.includes('-')) {\n middlewares.push(flipMiddlewareInstance, shiftMiddlewareInstance);\n } else {\n middlewares.push(shiftMiddlewareInstance, flipMiddlewareInstance);\n }\n } else {\n middlewares.push(shiftMiddlewareInstance);\n }\n\n if (sameWidth) {\n middlewares.push(\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n );\n }\n\n if (customMiddlewares) {\n middlewares.push(...customMiddlewares);\n }\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n }\n\n if (hideWhenReferenceHidden) {\n middlewares.push(hideMiddleware());\n }\n\n return { middlewares, strictPlacement: isAutoPlacement ? undefined : placement };\n }, [\n placement,\n offsetByCrossAxis,\n arrow,\n arrowHeight,\n offsetByMainAxis,\n disableFlipMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n sameWidth,\n customMiddlewares,\n hideWhenReferenceHidden,\n arrowRef,\n arrowPadding,\n ]);\n};\n"],"names":["React","arrowMiddleware","autoPlacementMiddleware","flipMiddleware","hideMiddleware","offsetMiddleware","shiftMiddleware","sizeMiddleware","checkIsNotAutoPlacement","getAutoPlacementAlign","useFloatingMiddlewaresBootstrap","placement","arrowRef","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","flipMiddlewareFallbackAxisSideDirection","useMemo","isAutoPlacement","middlewares","crossAxis","mainAxis","shiftMiddlewareInstance","push","alignment","flipMiddlewareInstance","fallbackAxisSideDirection","includes","apply","rects","elements","Object","assign","floating","style","width","reference","element","padding","strictPlacement","undefined"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,eAAe,EACfC,uBAAuB,EACvBC,cAAc,EAEdC,cAAc,EACdC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,QACT,iBAAc;AACrB,SAASC,uBAAuB,EAAEC,qBAAqB,QAAQ,kBAAe;AAyD9E,OAAO,MAAMC,kCAAkC,CAAC,EAC9CC,YAAY,cAAc,EAC1BC,WAAW,IAAI,EACfC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAC7BC,0CAA0C,KAAK,EACR;IAIvC,OAAOtB,MAAMuB,OAAO,CAAC;QACnB,MAAMC,kBAAkB,CAAChB,wBAAwBG;QACjD,MAAMc,cAAuC;YAC3CpB,iBAAiB;gBACfqB,WAAWR;gBACXS,UAAUd,SAASC,cAAcG,mBAAmBH,cAAcG;YACpE;SACD;QAED,MAAMW,0BAA0BtB;QAEhC,4IAA4I;QAC5I,IAAIkB,iBAAiB;YACnBC,YAAYI,IAAI,CACd3B,wBAAwB;gBAAE4B,WAAWrB,sBAAsBE;YAAW,IACtEiB;QAEJ,OAAO,IAAI,CAACP,uBAAuB;YACjC,MAAMU,yBAAyB5B,eAAe;gBAC5CuB,WAAW;gBACXM,2BAA2BV;YAC7B;YAEA,qIAAqI;YACrI,IAAIX,UAAUsB,QAAQ,CAAC,MAAM;gBAC3BR,YAAYI,IAAI,CAACE,wBAAwBH;YAC3C,OAAO;gBACLH,YAAYI,IAAI,CAACD,yBAAyBG;YAC5C;QACF,OAAO;YACLN,YAAYI,IAAI,CAACD;QACnB;QAEA,IAAIZ,WAAW;YACbS,YAAYI,IAAI,CACdtB,eAAe;gBACb2B,OAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE;oBACvBC,OAAOC,MAAM,CAACF,SAASG,QAAQ,CAACC,KAAK,EAAE;wBACrCC,OAAO,GAAGN,MAAMO,SAAS,CAACD,KAAK,CAAC,EAAE,CAAC;oBACrC;gBACF;YACF;QAEJ;QAEA,IAAItB,mBAAmB;YACrBM,YAAYI,IAAI,IAAIV;QACtB;QAEA,qHAAqH;QACrH,IAAIN,OAAO;YACTY,YAAYI,IAAI,CACd5B,gBAAgB;gBACd0C,SAAS/B;gBACTgC,SAAS7B;YACX;QAEJ;QAEA,IAAIK,yBAAyB;YAC3BK,YAAYI,IAAI,CAACzB;QACnB;QAEA,OAAO;YAAEqB;YAAaoB,iBAAiBrB,kBAAkBsB,YAAYnC;QAAU;IACjF,GAAG;QACDA;QACAO;QACAL;QACAC;QACAG;QACAI;QACAC;QACAN;QACAG;QACAC;QACAR;QACAG;KACD;AACH,EAAE"}
1
+ {"version":3,"sources":["../../../../../src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n flipMiddleware,\n type FlipMiddlewareOptions,\n hideMiddleware,\n offsetMiddleware,\n shiftMiddleware,\n sizeMiddleware,\n} from '../adapters';\nimport { checkIsNotAutoPlacement, getAutoPlacementAlign } from '../functions';\nimport {\n type ArrowOptions,\n type Placement,\n type PlacementWithAuto,\n type UseFloatingMiddleware,\n} from '../types/common';\n\nexport interface UseFloatingMiddlewaresBootstrapOptions {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства.\n */\n placement?: PlacementWithAuto;\n /**\n * Указанное значение `placement` форсируется, даже если для выпадающего элемента недостаточно места.\n * Не оказывает влияния при `placement` значениях - `'auto' | 'auto-start' | 'auto-end'`\n */\n disableFlipMiddleware?: boolean;\n /**\n * Позволяет отключить смещение по главной оси,\n * которое не даёт всплывающему элементу выходить за границы видимой области.\n */\n disableShiftMiddleware?: boolean;\n /**\n * Задаёт резервный вариант размещения по перпендикулярной оси.\n */\n flipMiddlewareFallbackAxisSideDirection?: FlipMiddlewareOptions['fallbackAxisSideDirection'];\n /**\n * Отступ по главной оси.\n */\n offsetByMainAxis?: number;\n /**\n * Отступ по вспомогательной оси.\n */\n offsetByCrossAxis?: number;\n arrowRef?: ArrowOptions['element'];\n /**\n * Отображать ли стрелку, указывающую на якорный элемент.\n */\n arrow?: boolean;\n /**\n * Высота стрелки. Складывается с `mainAxis`, чтобы стрелка не залезала на якорный элемент.\n */\n arrowHeight?: number;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Выставлять ширину равной target элементу.\n */\n sameWidth?: boolean;\n /**\n * Массив кастомных модификаторов для Popper (необходимо мемоизировать).\n */\n customMiddlewares?: UseFloatingMiddleware[];\n /**\n * Принудительно скрывает компонент если целевой элемент вышел за область видимости.\n */\n hideWhenReferenceHidden?: boolean;\n}\n\nexport const useFloatingMiddlewaresBootstrap = ({\n placement = 'bottom-start',\n arrowRef = null,\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n disableShiftMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection = 'end',\n}: UseFloatingMiddlewaresBootstrapOptions): {\n middlewares: UseFloatingMiddleware[];\n strictPlacement: Placement | undefined;\n} => {\n return React.useMemo(() => {\n const isAutoPlacement = !checkIsNotAutoPlacement(placement);\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetByCrossAxis,\n mainAxis: arrow && arrowHeight ? offsetByMainAxis + arrowHeight : offsetByMainAxis,\n }),\n ];\n\n const shift = disableShiftMiddleware ? null : shiftMiddleware();\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#conflict-with-autoplacementjs\n if (isAutoPlacement) {\n middlewares.push(autoPlacementMiddleware({ alignment: getAutoPlacementAlign(placement) }));\n if (shift) {\n middlewares.push(shift);\n }\n } else if (!disableFlipMiddleware) {\n const flip = flipMiddleware({\n crossAxis: 'alignment',\n fallbackAxisSideDirection: flipMiddlewareFallbackAxisSideDirection,\n });\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/flip.mdx#combining-with-shiftjs\n if (placement.includes('-')) {\n middlewares.push(flip);\n if (shift) {\n middlewares.push(shift);\n }\n } else {\n if (shift) {\n middlewares.push(shift);\n }\n middlewares.push(flip);\n }\n } else if (shift) {\n middlewares.push(shift);\n }\n\n if (sameWidth) {\n middlewares.push(\n sizeMiddleware({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n );\n }\n\n if (customMiddlewares) {\n middlewares.push(...customMiddlewares);\n }\n\n // см. https://github.com/floating-ui/floating-ui/blob/%40floating-ui/core%401.7.1/website/pages/docs/arrow.mdx#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n }\n\n if (hideWhenReferenceHidden) {\n middlewares.push(hideMiddleware());\n }\n\n return { middlewares, strictPlacement: isAutoPlacement ? undefined : placement };\n }, [\n placement,\n offsetByCrossAxis,\n arrow,\n arrowHeight,\n offsetByMainAxis,\n disableFlipMiddleware,\n disableShiftMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n sameWidth,\n customMiddlewares,\n hideWhenReferenceHidden,\n arrowRef,\n arrowPadding,\n ]);\n};\n"],"names":["React","arrowMiddleware","autoPlacementMiddleware","flipMiddleware","hideMiddleware","offsetMiddleware","shiftMiddleware","sizeMiddleware","checkIsNotAutoPlacement","getAutoPlacementAlign","useFloatingMiddlewaresBootstrap","placement","arrowRef","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","disableShiftMiddleware","flipMiddlewareFallbackAxisSideDirection","useMemo","isAutoPlacement","middlewares","crossAxis","mainAxis","shift","push","alignment","flip","fallbackAxisSideDirection","includes","apply","rects","elements","Object","assign","floating","style","width","reference","element","padding","strictPlacement","undefined"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,eAAe,EACfC,uBAAuB,EACvBC,cAAc,EAEdC,cAAc,EACdC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,QACT,iBAAc;AACrB,SAASC,uBAAuB,EAAEC,qBAAqB,QAAQ,kBAAe;AA8D9E,OAAO,MAAMC,kCAAkC,CAAC,EAC9CC,YAAY,cAAc,EAC1BC,WAAW,IAAI,EACfC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAC7BC,yBAAyB,KAAK,EAC9BC,0CAA0C,KAAK,EACR;IAIvC,OAAOvB,MAAMwB,OAAO,CAAC;QACnB,MAAMC,kBAAkB,CAACjB,wBAAwBG;QACjD,MAAMe,cAAuC;YAC3CrB,iBAAiB;gBACfsB,WAAWT;gBACXU,UAAUf,SAASC,cAAcG,mBAAmBH,cAAcG;YACpE;SACD;QAED,MAAMY,QAAQP,yBAAyB,OAAOhB;QAE9C,4IAA4I;QAC5I,IAAImB,iBAAiB;YACnBC,YAAYI,IAAI,CAAC5B,wBAAwB;gBAAE6B,WAAWtB,sBAAsBE;YAAW;YACvF,IAAIkB,OAAO;gBACTH,YAAYI,IAAI,CAACD;YACnB;QACF,OAAO,IAAI,CAACR,uBAAuB;YACjC,MAAMW,OAAO7B,eAAe;gBAC1BwB,WAAW;gBACXM,2BAA2BV;YAC7B;YAEA,qIAAqI;YACrI,IAAIZ,UAAUuB,QAAQ,CAAC,MAAM;gBAC3BR,YAAYI,IAAI,CAACE;gBACjB,IAAIH,OAAO;oBACTH,YAAYI,IAAI,CAACD;gBACnB;YACF,OAAO;gBACL,IAAIA,OAAO;oBACTH,YAAYI,IAAI,CAACD;gBACnB;gBACAH,YAAYI,IAAI,CAACE;YACnB;QACF,OAAO,IAAIH,OAAO;YAChBH,YAAYI,IAAI,CAACD;QACnB;QAEA,IAAIb,WAAW;YACbU,YAAYI,IAAI,CACdvB,eAAe;gBACb4B,OAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE;oBACvBC,OAAOC,MAAM,CAACF,SAASG,QAAQ,CAACC,KAAK,EAAE;wBACrCC,OAAO,GAAGN,MAAMO,SAAS,CAACD,KAAK,CAAC,EAAE,CAAC;oBACrC;gBACF;YACF;QAEJ;QAEA,IAAIvB,mBAAmB;YACrBO,YAAYI,IAAI,IAAIX;QACtB;QAEA,qHAAqH;QACrH,IAAIN,OAAO;YACTa,YAAYI,IAAI,CACd7B,gBAAgB;gBACd2C,SAAShC;gBACTiC,SAAS9B;YACX;QAEJ;QAEA,IAAIK,yBAAyB;YAC3BM,YAAYI,IAAI,CAAC1B;QACnB;QAEA,OAAO;YAAEsB;YAAaoB,iBAAiBrB,kBAAkBsB,YAAYpC;QAAU;IACjF,GAAG;QACDA;QACAO;QACAL;QACAC;QACAG;QACAI;QACAC;QACAC;QACAP;QACAG;QACAC;QACAR;QACAG;KACD;AACH,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"sourcesContent":["import {\n type FloatingPositionStrategy,\n type Placement,\n type UseFloatingData,\n type UseFloatingMiddleware,\n type UseFloatingRefs,\n} from '../types/common';\n\nexport type InteractiveTriggerType = 'click' | 'hover' | 'focus';\n\nexport type ManualTriggerType = 'manual';\n\nexport type TriggerType = ManualTriggerType | InteractiveTriggerType | InteractiveTriggerType[];\n\nexport type RestoreFocusType = boolean | 'anchor-element' | HTMLElement;\n\nexport type ShownChangeReason =\n | 'click-outside'\n | 'escape-key'\n | 'click'\n | 'hover'\n | 'focus'\n | 'callback';\n\nexport type OnShownChange = (shown: boolean, reason?: ShownChangeReason) => void;\n\nexport interface UseFloatingWithInteractionsProps {\n placement?: Placement;\n /**\n * Стратегия позиционирования всплывающего элемента.\n *\n * - `\"fixed\"` - позиционируется, используя `position: fixed`. Является значением по умолчанию\n * - `\"absolute\"` - позиционируется, используя `position: absolute`, относительно ближайшего элемента с `position: relative`\n *\n * > `strategy=\"absolute\"` Рекомендуется использовать с `usePortal={false}`. И нужно не забыть обернуть в элемент с `position: relative`\n */\n strategy?: FloatingPositionStrategy;\n middlewares?: UseFloatingMiddleware[];\n /**\n * Механика вызова всплывающего элемента.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – будет показываться/скрывается при наведении/отведении мыши.\n * - `\"focus\"` – будет показываться/скрывается при фокусе/потере фокуса мыши.\n * - `\"manual\"` – будет показываться/скрывается только через свойство `shown`. `onShownChange`\n * будет вызываться при нажатии за пределы целевого и всплывающего элементов, а также по кнопке\n * ESC.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что\n * > не будет закрываться при повторном нажатии на целевой элемент. Для закрытия необходимо нажать\n * > на область вне целевого элемента и выпадающего окна.\n */\n trigger?: TriggerType;\n /**\n * Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента\n * при наведении.\n *\n * > Чтобы задать разное время на показ и скрытие, передайте массив типа `[<показ>, <скрытие>]`.\n *\n * > Используется только для `trigger=\"hover\"`.\n */\n hoverDelay?: number | [number, number];\n /**\n * При `trigger=\"hover\"` закрывает всплывающий элемент при нажатии на целевой элемент.\n */\n closeAfterClick?: boolean;\n /**\n * Блокирует изменение состояния.\n */\n disabled?: boolean;\n /**\n * Отключает взаимодействие со всплывающим элементом.\n */\n disableInteractive?: boolean;\n /**\n * Отключает закрытие нажатием на область вне целевого и всплывающего элемента.\n */\n disableCloseOnClickOutside?: boolean;\n /**\n * Отключает закрытие нажатием на кнопку ESC.\n */\n disableCloseOnEscKey?: boolean;\n /**\n * Начальное состояние всплывающего элемента.\n */\n defaultShown?: boolean;\n /**\n * Если передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента.\n */\n onShownChange?: OnShownChange;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации.\n */\n onShownChanged?: OnShownChange;\n}\n\nexport type ReferenceProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T>\n> &\n Pick<React.DOMAttributes<T>, 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'>;\n\nexport type FloatingProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T> | 'style'\n> & { style: React.CSSProperties } & Pick<\n React.DOMAttributes<T>,\n 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onAnimationStart' | 'onAnimationEnd'\n >;\n\nexport interface UseFloatingWithInteractionsReturn<T extends HTMLElement = HTMLElement> {\n placement: Placement;\n shown: boolean;\n willBeHide: boolean;\n refs: UseFloatingRefs<T>;\n referenceProps: ReferenceProps<T>;\n floatingProps: FloatingProps<T>;\n middlewareData: UseFloatingData['middlewareData'];\n onClose: (this: void) => void;\n onEscapeKeyDown?: (this: void) => void;\n onRestoreFocus: (restoreFocus?: RestoreFocusType) => boolean | HTMLElement;\n}\n"],"names":[],"mappings":"AAkHA,WAWC"}
1
+ {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"sourcesContent":["import {\n type FloatingPositionStrategy,\n type Placement,\n type UseFloatingData,\n type UseFloatingMiddleware,\n type UseFloatingRefs,\n} from '../types/common';\n\nexport type InteractiveTriggerType = 'click' | 'hover' | 'focus';\n\nexport type ManualTriggerType = 'manual';\n\nexport type TriggerType = ManualTriggerType | InteractiveTriggerType | InteractiveTriggerType[];\n\nexport type RestoreFocusType = boolean | 'anchor-element' | HTMLElement;\n\nexport type ShownChangeReason =\n | 'click-outside'\n | 'escape-key'\n | 'click'\n | 'hover'\n | 'focus'\n | 'callback';\n\nexport type OnShownChange = (shown: boolean, reason?: ShownChangeReason) => void;\n\nexport interface UseFloatingWithInteractionsProps {\n placement?: Placement;\n /**\n * Стратегия позиционирования всплывающего элемента.\n *\n * - `\"fixed\"` - позиционируется, используя `position: fixed`. Является значением по умолчанию\n * - `\"absolute\"` - позиционируется, используя `position: absolute`, относительно ближайшего элемента с `position: relative`\n *\n * > `strategy=\"absolute\"` Рекомендуется использовать с `usePortal={false}`. И нужно не забыть обернуть в элемент с `position: relative`\n */\n strategy?: FloatingPositionStrategy;\n middlewares?: UseFloatingMiddleware[];\n /**\n * Механика вызова всплывающего элемента.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – будет показываться/скрывается при наведении/отведении мыши.\n * - `\"focus\"` – будет показываться/скрывается при фокусе/потере фокуса мыши.\n * - `\"manual\"` – будет показываться/скрывается только через свойство `shown`. `onShownChange`\n * будет вызываться при нажатии за пределы целевого и всплывающего элементов, а также по кнопке\n * ESC.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что\n * > не будет закрываться при повторном нажатии на целевой элемент. Для закрытия необходимо нажать\n * > на область вне целевого элемента и выпадающего окна.\n *\n * **Избегайте использования `trigger=\"hover\"` как единственного механизма активации, так как пользователи клавиатуры или скринридеров не смогут использовать компонент**\n */\n trigger?: TriggerType;\n /**\n * Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента\n * при наведении.\n *\n * > Чтобы задать разное время на показ и скрытие, передайте массив типа `[<показ>, <скрытие>]`.\n *\n * > Используется только для `trigger=\"hover\"`.\n */\n hoverDelay?: number | [number, number];\n /**\n * При `trigger=\"hover\"` закрывает всплывающий элемент при нажатии на целевой элемент.\n */\n closeAfterClick?: boolean;\n /**\n * Блокирует изменение состояния.\n */\n disabled?: boolean;\n /**\n * Отключает взаимодействие со всплывающим элементом.\n */\n disableInteractive?: boolean;\n /**\n * Отключает закрытие нажатием на область вне целевого и всплывающего элемента.\n */\n disableCloseOnClickOutside?: boolean;\n /**\n * Отключает закрытие нажатием на кнопку ESC.\n */\n disableCloseOnEscKey?: boolean;\n /**\n * Начальное состояние всплывающего элемента.\n */\n defaultShown?: boolean;\n /**\n * Если передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента.\n */\n onShownChange?: OnShownChange;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации.\n */\n onShownChanged?: OnShownChange;\n}\n\nexport type ReferenceProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T>\n> &\n Pick<React.DOMAttributes<T>, 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'>;\n\nexport type FloatingProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T> | 'style'\n> & { style: React.CSSProperties } & Pick<\n React.DOMAttributes<T>,\n 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onAnimationStart' | 'onAnimationEnd'\n >;\n\nexport interface UseFloatingWithInteractionsReturn<T extends HTMLElement = HTMLElement> {\n placement: Placement;\n shown: boolean;\n willBeHide: boolean;\n refs: UseFloatingRefs<T>;\n referenceProps: ReferenceProps<T>;\n floatingProps: FloatingProps<T>;\n middlewareData: UseFloatingData['middlewareData'];\n onClose: (this: void) => void;\n onEscapeKeyDown?: (this: void) => void;\n onRestoreFocus: (restoreFocus?: RestoreFocusType) => boolean | HTMLElement;\n}\n"],"names":[],"mappings":"AAoHA,WAWC"}
@@ -1,6 +1,6 @@
1
+ import { millisecondsInSecond } from "../date.js";
1
2
  import { getFirstTouchEventData } from "../dom.js";
2
3
  const DEFAULT_INITIAL_TIME = 0;
3
- const MILLISECONDS = 1000;
4
4
  /**
5
5
  * JS имплементация класса из UIKIt iOS.
6
6
  *
@@ -37,7 +37,7 @@ const MILLISECONDS = 1000;
37
37
  return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
38
38
  }
39
39
  velocity() {
40
- const deltaTime = (Date.now() - this.initialTime) / MILLISECONDS;
40
+ const deltaTime = (Date.now() - this.initialTime) / millisecondsInSecond;
41
41
  if (deltaTime <= 0) {
42
42
  return {
43
43
  x: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/touch/UIPanGestureRecognizer.ts"],"sourcesContent":["import { getFirstTouchEventData } from '../dom';\n\nexport type Direction = { axis: 'x' | 'y'; direction: -1 | 1 | null };\n\nexport type Coords = { x: number; y: number };\n\nconst DEFAULT_INITIAL_TIME = 0;\nconst MILLISECONDS = 1000;\n\n/**\n * JS имплементация класса из UIKIt iOS.\n *\n * https://developer.apple.com/documentation/uikit/uipangesturerecognizer\n */\nexport class UIPanGestureRecognizer {\n private initialTime = DEFAULT_INITIAL_TIME;\n x1 = 0;\n y1 = 0;\n x2 = 0;\n y2 = 0;\n\n setInitialTimeOnce(): void {\n if (this.initialTime === DEFAULT_INITIAL_TIME) {\n this.initialTime = Date.now();\n }\n }\n\n setStartCoords(event: UIEvent): void {\n const { clientX, clientY } = getFirstTouchEventData(event);\n this.x1 = clientX;\n this.y1 = clientY;\n }\n\n setEndCoords(event: UIEvent): void {\n const { clientX, clientY } = getFirstTouchEventData(event);\n this.x2 = clientX;\n this.y2 = clientY;\n }\n\n delta(): Coords {\n return {\n x: this.x2 - this.x1,\n y: this.y2 - this.y1,\n };\n }\n\n distance(): number {\n const { x, y } = this.delta();\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n }\n\n velocity(): Coords {\n const deltaTime = (Date.now() - this.initialTime) / MILLISECONDS;\n\n if (deltaTime <= 0) {\n return { x: 0, y: 0 };\n }\n\n const { x, y } = this.delta();\n return { x: x / deltaTime, y: y / deltaTime };\n }\n\n angle(): number {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const radians = Math.atan2(deltaY, deltaX);\n const degrees = (radians * 180) / Math.PI;\n return degrees < 0 ? 360 + degrees : degrees;\n }\n\n direction(): Direction {\n const { x, y } = this.delta();\n return Math.abs(x) > Math.abs(y)\n ? { axis: 'x', direction: x > 0 ? 1 : x < 0 ? -1 : null }\n : { axis: 'y', direction: y > 0 ? 1 : y < 0 ? -1 : null };\n }\n\n reset(): void {\n this.initialTime = DEFAULT_INITIAL_TIME;\n this.x1 = this.y1 = 0;\n this.x2 = this.y2 = 0;\n }\n}\n"],"names":["getFirstTouchEventData","DEFAULT_INITIAL_TIME","MILLISECONDS","UIPanGestureRecognizer","initialTime","x1","y1","x2","y2","setInitialTimeOnce","Date","now","setStartCoords","event","clientX","clientY","setEndCoords","delta","x","y","distance","Math","sqrt","pow","velocity","deltaTime","angle","deltaX","deltaY","radians","atan2","degrees","PI","direction","abs","axis","reset"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,YAAS;AAMhD,MAAMC,uBAAuB;AAC7B,MAAMC,eAAe;AAErB;;;;CAIC,GACD,OAAO,MAAMC;IACHC,cAAcH,qBAAqB;IAC3CI,KAAK,EAAE;IACPC,KAAK,EAAE;IACPC,KAAK,EAAE;IACPC,KAAK,EAAE;IAEPC,qBAA2B;QACzB,IAAI,IAAI,CAACL,WAAW,KAAKH,sBAAsB;YAC7C,IAAI,CAACG,WAAW,GAAGM,KAAKC,GAAG;QAC7B;IACF;IAEAC,eAAeC,KAAc,EAAQ;QACnC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGf,uBAAuBa;QACpD,IAAI,CAACR,EAAE,GAAGS;QACV,IAAI,CAACR,EAAE,GAAGS;IACZ;IAEAC,aAAaH,KAAc,EAAQ;QACjC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGf,uBAAuBa;QACpD,IAAI,CAACN,EAAE,GAAGO;QACV,IAAI,CAACN,EAAE,GAAGO;IACZ;IAEAE,QAAgB;QACd,OAAO;YACLC,GAAG,IAAI,CAACX,EAAE,GAAG,IAAI,CAACF,EAAE;YACpBc,GAAG,IAAI,CAACX,EAAE,GAAG,IAAI,CAACF,EAAE;QACtB;IACF;IAEAc,WAAmB;QACjB,MAAM,EAAEF,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAOI,KAAKC,IAAI,CAACD,KAAKE,GAAG,CAACL,GAAG,KAAKG,KAAKE,GAAG,CAACJ,GAAG;IAChD;IAEAK,WAAmB;QACjB,MAAMC,YAAY,AAACf,CAAAA,KAAKC,GAAG,KAAK,IAAI,CAACP,WAAW,AAAD,IAAKF;QAEpD,IAAIuB,aAAa,GAAG;YAClB,OAAO;gBAAEP,GAAG;gBAAGC,GAAG;YAAE;QACtB;QAEA,MAAM,EAAED,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAO;YAAEC,GAAGA,IAAIO;YAAWN,GAAGA,IAAIM;QAAU;IAC9C;IAEAC,QAAgB;QACd,MAAMC,SAAS,IAAI,CAACpB,EAAE,GAAG,IAAI,CAACF,EAAE;QAChC,MAAMuB,SAAS,IAAI,CAACpB,EAAE,GAAG,IAAI,CAACF,EAAE;QAChC,MAAMuB,UAAUR,KAAKS,KAAK,CAACF,QAAQD;QACnC,MAAMI,UAAU,AAACF,UAAU,MAAOR,KAAKW,EAAE;QACzC,OAAOD,UAAU,IAAI,MAAMA,UAAUA;IACvC;IAEAE,YAAuB;QACrB,MAAM,EAAEf,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAOI,KAAKa,GAAG,CAAChB,KAAKG,KAAKa,GAAG,CAACf,KAC1B;YAAEgB,MAAM;YAAKF,WAAWf,IAAI,IAAI,IAAIA,IAAI,IAAI,CAAC,IAAI;QAAK,IACtD;YAAEiB,MAAM;YAAKF,WAAWd,IAAI,IAAI,IAAIA,IAAI,IAAI,CAAC,IAAI;QAAK;IAC5D;IAEAiB,QAAc;QACZ,IAAI,CAAChC,WAAW,GAAGH;QACnB,IAAI,CAACI,EAAE,GAAG,IAAI,CAACC,EAAE,GAAG;QACpB,IAAI,CAACC,EAAE,GAAG,IAAI,CAACC,EAAE,GAAG;IACtB;AACF"}
1
+ {"version":3,"sources":["../../../../src/lib/touch/UIPanGestureRecognizer.ts"],"sourcesContent":["import { millisecondsInSecond } from '../date';\nimport { getFirstTouchEventData } from '../dom';\n\nexport type Direction = { axis: 'x' | 'y'; direction: -1 | 1 | null };\n\nexport type Coords = { x: number; y: number };\n\nconst DEFAULT_INITIAL_TIME = 0;\n\n/**\n * JS имплементация класса из UIKIt iOS.\n *\n * https://developer.apple.com/documentation/uikit/uipangesturerecognizer\n */\nexport class UIPanGestureRecognizer {\n private initialTime = DEFAULT_INITIAL_TIME;\n x1 = 0;\n y1 = 0;\n x2 = 0;\n y2 = 0;\n\n setInitialTimeOnce(): void {\n if (this.initialTime === DEFAULT_INITIAL_TIME) {\n this.initialTime = Date.now();\n }\n }\n\n setStartCoords(event: UIEvent): void {\n const { clientX, clientY } = getFirstTouchEventData(event);\n this.x1 = clientX;\n this.y1 = clientY;\n }\n\n setEndCoords(event: UIEvent): void {\n const { clientX, clientY } = getFirstTouchEventData(event);\n this.x2 = clientX;\n this.y2 = clientY;\n }\n\n delta(): Coords {\n return {\n x: this.x2 - this.x1,\n y: this.y2 - this.y1,\n };\n }\n\n distance(): number {\n const { x, y } = this.delta();\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n }\n\n velocity(): Coords {\n const deltaTime = (Date.now() - this.initialTime) / millisecondsInSecond;\n\n if (deltaTime <= 0) {\n return { x: 0, y: 0 };\n }\n\n const { x, y } = this.delta();\n return { x: x / deltaTime, y: y / deltaTime };\n }\n\n angle(): number {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const radians = Math.atan2(deltaY, deltaX);\n const degrees = (radians * 180) / Math.PI;\n return degrees < 0 ? 360 + degrees : degrees;\n }\n\n direction(): Direction {\n const { x, y } = this.delta();\n return Math.abs(x) > Math.abs(y)\n ? { axis: 'x', direction: x > 0 ? 1 : x < 0 ? -1 : null }\n : { axis: 'y', direction: y > 0 ? 1 : y < 0 ? -1 : null };\n }\n\n reset(): void {\n this.initialTime = DEFAULT_INITIAL_TIME;\n this.x1 = this.y1 = 0;\n this.x2 = this.y2 = 0;\n }\n}\n"],"names":["millisecondsInSecond","getFirstTouchEventData","DEFAULT_INITIAL_TIME","UIPanGestureRecognizer","initialTime","x1","y1","x2","y2","setInitialTimeOnce","Date","now","setStartCoords","event","clientX","clientY","setEndCoords","delta","x","y","distance","Math","sqrt","pow","velocity","deltaTime","angle","deltaX","deltaY","radians","atan2","degrees","PI","direction","abs","axis","reset"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,aAAU;AAC/C,SAASC,sBAAsB,QAAQ,YAAS;AAMhD,MAAMC,uBAAuB;AAE7B;;;;CAIC,GACD,OAAO,MAAMC;IACHC,cAAcF,qBAAqB;IAC3CG,KAAK,EAAE;IACPC,KAAK,EAAE;IACPC,KAAK,EAAE;IACPC,KAAK,EAAE;IAEPC,qBAA2B;QACzB,IAAI,IAAI,CAACL,WAAW,KAAKF,sBAAsB;YAC7C,IAAI,CAACE,WAAW,GAAGM,KAAKC,GAAG;QAC7B;IACF;IAEAC,eAAeC,KAAc,EAAQ;QACnC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGd,uBAAuBY;QACpD,IAAI,CAACR,EAAE,GAAGS;QACV,IAAI,CAACR,EAAE,GAAGS;IACZ;IAEAC,aAAaH,KAAc,EAAQ;QACjC,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGd,uBAAuBY;QACpD,IAAI,CAACN,EAAE,GAAGO;QACV,IAAI,CAACN,EAAE,GAAGO;IACZ;IAEAE,QAAgB;QACd,OAAO;YACLC,GAAG,IAAI,CAACX,EAAE,GAAG,IAAI,CAACF,EAAE;YACpBc,GAAG,IAAI,CAACX,EAAE,GAAG,IAAI,CAACF,EAAE;QACtB;IACF;IAEAc,WAAmB;QACjB,MAAM,EAAEF,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAOI,KAAKC,IAAI,CAACD,KAAKE,GAAG,CAACL,GAAG,KAAKG,KAAKE,GAAG,CAACJ,GAAG;IAChD;IAEAK,WAAmB;QACjB,MAAMC,YAAY,AAACf,CAAAA,KAAKC,GAAG,KAAK,IAAI,CAACP,WAAW,AAAD,IAAKJ;QAEpD,IAAIyB,aAAa,GAAG;YAClB,OAAO;gBAAEP,GAAG;gBAAGC,GAAG;YAAE;QACtB;QAEA,MAAM,EAAED,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAO;YAAEC,GAAGA,IAAIO;YAAWN,GAAGA,IAAIM;QAAU;IAC9C;IAEAC,QAAgB;QACd,MAAMC,SAAS,IAAI,CAACpB,EAAE,GAAG,IAAI,CAACF,EAAE;QAChC,MAAMuB,SAAS,IAAI,CAACpB,EAAE,GAAG,IAAI,CAACF,EAAE;QAChC,MAAMuB,UAAUR,KAAKS,KAAK,CAACF,QAAQD;QACnC,MAAMI,UAAU,AAACF,UAAU,MAAOR,KAAKW,EAAE;QACzC,OAAOD,UAAU,IAAI,MAAMA,UAAUA;IACvC;IAEAE,YAAuB;QACrB,MAAM,EAAEf,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACF,KAAK;QAC3B,OAAOI,KAAKa,GAAG,CAAChB,KAAKG,KAAKa,GAAG,CAACf,KAC1B;YAAEgB,MAAM;YAAKF,WAAWf,IAAI,IAAI,IAAIA,IAAI,IAAI,CAAC,IAAI;QAAK,IACtD;YAAEiB,MAAM;YAAKF,WAAWd,IAAI,IAAI,IAAIA,IAAI,IAAI,CAAC,IAAI;QAAK;IAC5D;IAEAiB,QAAc;QACZ,IAAI,CAAChC,WAAW,GAAGF;QACnB,IAAI,CAACG,EAAE,GAAG,IAAI,CAACC,EAAE,GAAG;QACpB,IAAI,CAACC,EAAE,GAAG,IAAI,CAACC,EAAE,GAAG;IACtB;AACF"}
@@ -23,6 +23,7 @@ export function multiRef(...refs) {
23
23
  };
24
24
  }
25
25
  export const stopPropagation = (event)=>event.stopPropagation();
26
+ export const preventDefault = (event)=>event.preventDefault();
26
27
  export function addClassNameToElement(element1, className) {
27
28
  const elementClassName = element1.getAttribute('class') || '';
28
29
  const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { shouldTriggerClickOnEnterOrSpace } from './accessibility';\nimport { isHTMLElement } from './dom';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.RefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T | null> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T): void =>\n event.stopPropagation();\n\nexport function addClassNameToElement(element: HTMLElement, className: string): void {\n const elementClassName = element.getAttribute('class') || '';\n const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;\n\n element.setAttribute('class', updatedClassName);\n}\n\nexport function removeClassNameFromElement(element: HTMLElement, classNameToRemove: string): void {\n const classNamesArray = (element.getAttribute('class') || '').split(/\\s+/);\n const elementIndexToRemove = classNamesArray.findIndex(\n (className) => className === classNameToRemove,\n );\n if (elementIndexToRemove === -1) {\n return;\n }\n classNamesArray.splice(elementIndexToRemove, 1);\n\n element.setAttribute('class', classNamesArray.join(' '));\n}\n\ntype ExcludeKeysWithUndefined<T> = {\n [P in keyof T]?: Exclude<T[P], undefined>;\n};\n\nexport const excludeKeysWithUndefined = <T extends Record<string | number | symbol, any>>(\n obj: T,\n): ExcludeKeysWithUndefined<T> => {\n const filteredObj: ExcludeKeysWithUndefined<T> = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] !== undefined) {\n filteredObj[key] = obj[key];\n }\n }\n return filteredObj;\n};\n\nexport const isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } =>\n typeof element.type === 'string';\n\nexport function isValidNotReactFragmentElement(\n children: Parameters<typeof React.isValidElement>[0],\n): children is React.ReactElement<Record<PropertyKey, any>> {\n return (\n React.isValidElement(children) &&\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n children.$$typeof !== Symbol.for('react.fragment')\n );\n}\n\nexport function isForwardRefElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n children: Parameters<typeof React.isValidElement>[0],\n): children is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } {\n if (!React.isValidElement(children)) {\n return false;\n }\n\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n // черпаем вдохновение из react-is https://github.com/facebook/react/blob/d48dbb824985166ecb7b2959db03090a8593dce0/packages/react-is/src/ReactIs.js#L119-L121\n const typeOfOfType = children.type && children.type.$$typeof;\n return typeOfOfType === Symbol.for('react.forward_ref');\n}\n\n/**\n * При использовании пропа fetchPriority генерируется warning \"Invalid DOM property\" (версия React 18.*)\n * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования\n */\nexport function getFetchPriorityProp(value: React.ImgHTMLAttributes<HTMLElement>['fetchPriority']):\n | {\n fetchPriority: 'high' | 'low' | 'auto' | undefined;\n }\n | {\n fetchpriority: 'high' | 'low' | 'auto' | undefined;\n } {\n if (React.version.startsWith('19')) {\n return { fetchPriority: value };\n }\n return { fetchpriority: value };\n}\n\n/*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\nexport function clickByKeyboardHandler(event: React.KeyboardEvent<HTMLDivElement>): void {\n if (!isHTMLElement(event.target) || !shouldTriggerClickOnEnterOrSpace(event)) {\n return;\n }\n\n event.preventDefault();\n event.target.click?.();\n}\n"],"names":["React","shouldTriggerClickOnEnterOrSpace","isHTMLElement","setRef","element","ref","current","multiRef","refs","forEach","stopPropagation","event","addClassNameToElement","className","elementClassName","getAttribute","updatedClassName","setAttribute","removeClassNameFromElement","classNameToRemove","classNamesArray","split","elementIndexToRemove","findIndex","splice","join","excludeKeysWithUndefined","obj","filteredObj","key","hasOwnProperty","undefined","isDOMTypeElement","type","isValidNotReactFragmentElement","children","isValidElement","$$typeof","Symbol","for","isForwardRefElement","typeOfOfType","getFetchPriorityProp","value","version","startsWith","fetchPriority","fetchpriority","clickByKeyboardHandler","target","preventDefault","click"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gCAAgC,QAAQ,qBAAkB;AACnE,SAASC,aAAa,QAAQ,WAAQ;AAStC,OAAO,SAASC,OAAUC,QAAU,EAAEC,GAAkB;IACtD,IAAIA,KAAK;QACP,IAAI,OAAOA,QAAQ,YAAY;YAC7BA,IAAID;QACN,OAAO;YACJC,IAA2BC,OAAO,GAAGF;QACxC;IACF;AACF;AAEA,OAAO,SAASG,SAAY,GAAGC,IAAqC;IAClE,IAAIF,UAAoB;IACxB,OAAO;QACL,IAAIA,WAAU;YACZ,OAAOA;QACT;QACA,IAAIA,SAAQF,QAAS;YACnBE,UAAUF;YACVI,KAAKC,OAAO,CAAC,CAACJ,MAAQA,OAAOF,OAAOC,SAASC;QAC/C;IACF;AACF;AAEA,OAAO,MAAMK,kBAAkB,CAAiCC,QAC9DA,MAAMD,eAAe,GAAG;AAE1B,OAAO,SAASE,sBAAsBR,QAAoB,EAAES,SAAiB;IAC3E,MAAMC,mBAAmBV,SAAQW,YAAY,CAAC,YAAY;IAC1D,MAAMC,mBAAmB,GAAGF,mBAAmBA,mBAAmB,MAAM,KAAKD,WAAW;IAExFT,SAAQa,YAAY,CAAC,SAASD;AAChC;AAEA,OAAO,SAASE,2BAA2Bd,QAAoB,EAAEe,iBAAyB;IACxF,MAAMC,kBAAkB,AAAChB,CAAAA,SAAQW,YAAY,CAAC,YAAY,EAAC,EAAGM,KAAK,CAAC;IACpE,MAAMC,uBAAuBF,gBAAgBG,SAAS,CACpD,CAACV,YAAcA,cAAcM;IAE/B,IAAIG,yBAAyB,CAAC,GAAG;QAC/B;IACF;IACAF,gBAAgBI,MAAM,CAACF,sBAAsB;IAE7ClB,SAAQa,YAAY,CAAC,SAASG,gBAAgBK,IAAI,CAAC;AACrD;AAMA,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,cAA2C,CAAC;IAClD,IAAK,MAAMC,OAAOF,IAAK;QACrB,IAAIA,IAAIG,cAAc,CAACD,QAAQF,GAAG,CAACE,IAAI,KAAKE,WAAW;YACrDH,WAAW,CAACC,IAAI,GAAGF,GAAG,CAACE,IAAI;QAC7B;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMI,mBAAmB,CAI9B5B,WAEA,OAAOA,SAAQ6B,IAAI,KAAK,SAAS;AAEnC,OAAO,SAASC,+BACdC,QAAoD;IAEpD,OACEnC,MAAMoC,cAAc,CAACD,aACrB,yHAAyH;IACzHA,SAASE,QAAQ,KAAKC,OAAOC,GAAG,CAAC;AAErC;AAEA,OAAO,SAASC,oBAIdL,QAAoD;IAEpD,IAAI,CAACnC,MAAMoC,cAAc,CAACD,WAAW;QACnC,OAAO;IACT;IAEA,yHAAyH;IACzH,6JAA6J;IAC7J,MAAMM,eAAeN,SAASF,IAAI,IAAIE,SAASF,IAAI,CAACI,QAAQ;IAC5D,OAAOI,iBAAiBH,OAAOC,GAAG,CAAC;AACrC;AAEA;;;CAGC,GACD,OAAO,SAASG,qBAAqBC,KAA4D;IAO/F,IAAI3C,MAAM4C,OAAO,CAACC,UAAU,CAAC,OAAO;QAClC,OAAO;YAAEC,eAAeH;QAAM;IAChC;IACA,OAAO;QAAEI,eAAeJ;IAAM;AAChC;AAEA;;;;;;CAMC,GACD,OAAO,SAASK,uBAAuBrC,KAA0C;IAC/E,IAAI,CAACT,cAAcS,MAAMsC,MAAM,KAAK,CAAChD,iCAAiCU,QAAQ;QAC5E;IACF;IAEAA,MAAMuC,cAAc;IACpBvC,MAAMsC,MAAM,CAACE,KAAK;AACpB"}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { shouldTriggerClickOnEnterOrSpace } from './accessibility';\nimport { isHTMLElement } from './dom';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.RefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T | null> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T): void =>\n event.stopPropagation();\n\nexport const preventDefault = <T extends React.SyntheticEvent>(event: T): void =>\n event.preventDefault();\n\nexport function addClassNameToElement(element: HTMLElement, className: string): void {\n const elementClassName = element.getAttribute('class') || '';\n const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;\n\n element.setAttribute('class', updatedClassName);\n}\n\nexport function removeClassNameFromElement(element: HTMLElement, classNameToRemove: string): void {\n const classNamesArray = (element.getAttribute('class') || '').split(/\\s+/);\n const elementIndexToRemove = classNamesArray.findIndex(\n (className) => className === classNameToRemove,\n );\n if (elementIndexToRemove === -1) {\n return;\n }\n classNamesArray.splice(elementIndexToRemove, 1);\n\n element.setAttribute('class', classNamesArray.join(' '));\n}\n\ntype ExcludeKeysWithUndefined<T> = {\n [P in keyof T]?: Exclude<T[P], undefined>;\n};\n\nexport const excludeKeysWithUndefined = <T extends Record<string | number | symbol, any>>(\n obj: T,\n): ExcludeKeysWithUndefined<T> => {\n const filteredObj: ExcludeKeysWithUndefined<T> = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] !== undefined) {\n filteredObj[key] = obj[key];\n }\n }\n return filteredObj;\n};\n\nexport const isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } =>\n typeof element.type === 'string';\n\nexport function isValidNotReactFragmentElement(\n children: Parameters<typeof React.isValidElement>[0],\n): children is React.ReactElement<Record<PropertyKey, any>> {\n return (\n React.isValidElement(children) &&\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n children.$$typeof !== Symbol.for('react.fragment')\n );\n}\n\nexport function isForwardRefElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n children: Parameters<typeof React.isValidElement>[0],\n): children is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } {\n if (!React.isValidElement(children)) {\n return false;\n }\n\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n // черпаем вдохновение из react-is https://github.com/facebook/react/blob/d48dbb824985166ecb7b2959db03090a8593dce0/packages/react-is/src/ReactIs.js#L119-L121\n const typeOfOfType = children.type && children.type.$$typeof;\n return typeOfOfType === Symbol.for('react.forward_ref');\n}\n\n/**\n * При использовании пропа fetchPriority генерируется warning \"Invalid DOM property\" (версия React 18.*)\n * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования\n */\nexport function getFetchPriorityProp(value: React.ImgHTMLAttributes<HTMLElement>['fetchPriority']):\n | {\n fetchPriority: 'high' | 'low' | 'auto' | undefined;\n }\n | {\n fetchpriority: 'high' | 'low' | 'auto' | undefined;\n } {\n if (React.version.startsWith('19')) {\n return { fetchPriority: value };\n }\n return { fetchpriority: value };\n}\n\n/*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\nexport function clickByKeyboardHandler(event: React.KeyboardEvent<HTMLDivElement>): void {\n if (!isHTMLElement(event.target) || !shouldTriggerClickOnEnterOrSpace(event)) {\n return;\n }\n\n event.preventDefault();\n event.target.click?.();\n}\n"],"names":["React","shouldTriggerClickOnEnterOrSpace","isHTMLElement","setRef","element","ref","current","multiRef","refs","forEach","stopPropagation","event","preventDefault","addClassNameToElement","className","elementClassName","getAttribute","updatedClassName","setAttribute","removeClassNameFromElement","classNameToRemove","classNamesArray","split","elementIndexToRemove","findIndex","splice","join","excludeKeysWithUndefined","obj","filteredObj","key","hasOwnProperty","undefined","isDOMTypeElement","type","isValidNotReactFragmentElement","children","isValidElement","$$typeof","Symbol","for","isForwardRefElement","typeOfOfType","getFetchPriorityProp","value","version","startsWith","fetchPriority","fetchpriority","clickByKeyboardHandler","target","click"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gCAAgC,QAAQ,qBAAkB;AACnE,SAASC,aAAa,QAAQ,WAAQ;AAStC,OAAO,SAASC,OAAUC,QAAU,EAAEC,GAAkB;IACtD,IAAIA,KAAK;QACP,IAAI,OAAOA,QAAQ,YAAY;YAC7BA,IAAID;QACN,OAAO;YACJC,IAA2BC,OAAO,GAAGF;QACxC;IACF;AACF;AAEA,OAAO,SAASG,SAAY,GAAGC,IAAqC;IAClE,IAAIF,UAAoB;IACxB,OAAO;QACL,IAAIA,WAAU;YACZ,OAAOA;QACT;QACA,IAAIA,SAAQF,QAAS;YACnBE,UAAUF;YACVI,KAAKC,OAAO,CAAC,CAACJ,MAAQA,OAAOF,OAAOC,SAASC;QAC/C;IACF;AACF;AAEA,OAAO,MAAMK,kBAAkB,CAAiCC,QAC9DA,MAAMD,eAAe,GAAG;AAE1B,OAAO,MAAME,iBAAiB,CAAiCD,QAC7DA,MAAMC,cAAc,GAAG;AAEzB,OAAO,SAASC,sBAAsBT,QAAoB,EAAEU,SAAiB;IAC3E,MAAMC,mBAAmBX,SAAQY,YAAY,CAAC,YAAY;IAC1D,MAAMC,mBAAmB,GAAGF,mBAAmBA,mBAAmB,MAAM,KAAKD,WAAW;IAExFV,SAAQc,YAAY,CAAC,SAASD;AAChC;AAEA,OAAO,SAASE,2BAA2Bf,QAAoB,EAAEgB,iBAAyB;IACxF,MAAMC,kBAAkB,AAACjB,CAAAA,SAAQY,YAAY,CAAC,YAAY,EAAC,EAAGM,KAAK,CAAC;IACpE,MAAMC,uBAAuBF,gBAAgBG,SAAS,CACpD,CAACV,YAAcA,cAAcM;IAE/B,IAAIG,yBAAyB,CAAC,GAAG;QAC/B;IACF;IACAF,gBAAgBI,MAAM,CAACF,sBAAsB;IAE7CnB,SAAQc,YAAY,CAAC,SAASG,gBAAgBK,IAAI,CAAC;AACrD;AAMA,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,cAA2C,CAAC;IAClD,IAAK,MAAMC,OAAOF,IAAK;QACrB,IAAIA,IAAIG,cAAc,CAACD,QAAQF,GAAG,CAACE,IAAI,KAAKE,WAAW;YACrDH,WAAW,CAACC,IAAI,GAAGF,GAAG,CAACE,IAAI;QAC7B;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMI,mBAAmB,CAI9B7B,WAEA,OAAOA,SAAQ8B,IAAI,KAAK,SAAS;AAEnC,OAAO,SAASC,+BACdC,QAAoD;IAEpD,OACEpC,MAAMqC,cAAc,CAACD,aACrB,yHAAyH;IACzHA,SAASE,QAAQ,KAAKC,OAAOC,GAAG,CAAC;AAErC;AAEA,OAAO,SAASC,oBAIdL,QAAoD;IAEpD,IAAI,CAACpC,MAAMqC,cAAc,CAACD,WAAW;QACnC,OAAO;IACT;IAEA,yHAAyH;IACzH,6JAA6J;IAC7J,MAAMM,eAAeN,SAASF,IAAI,IAAIE,SAASF,IAAI,CAACI,QAAQ;IAC5D,OAAOI,iBAAiBH,OAAOC,GAAG,CAAC;AACrC;AAEA;;;CAGC,GACD,OAAO,SAASG,qBAAqBC,KAA4D;IAO/F,IAAI5C,MAAM6C,OAAO,CAACC,UAAU,CAAC,OAAO;QAClC,OAAO;YAAEC,eAAeH;QAAM;IAChC;IACA,OAAO;QAAEI,eAAeJ;IAAM;AAChC;AAEA;;;;;;CAMC,GACD,OAAO,SAASK,uBAAuBtC,KAA0C;IAC/E,IAAI,CAACT,cAAcS,MAAMuC,MAAM,KAAK,CAACjD,iCAAiCU,QAAQ;QAC5E;IACF;IAEAA,MAAMC,cAAc;IACpBD,MAAMuC,MAAM,CAACC,KAAK;AACpB"}
@@ -42,7 +42,7 @@
42
42
  --vkui--font_title1--font_weight--regular: 600;
43
43
  --vkui--font_title2--font_size--regular: 20px;
44
44
  --vkui--font_title2--line_height--regular: 24px;
45
- --vkui--font_title2--font_weight--regular: 600;
45
+ --vkui--font_title2--font_weight--regular: 500;
46
46
  --vkui--font_title3--font_size--regular: 17px;
47
47
  --vkui--font_title3--line_height--regular: 22px;
48
48
  --vkui--font_title3--font_weight--regular: 600;
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendar.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,WAAW,uBACf,SAAQ,IAAI,CACV,aAAa,EACX,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,mBAAmB,GACnB,eAAe,GACf,aAAa,CAChB;IACD,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,GACZ,EAAE,uBAAuB,GAAG;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IACtE,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC;IACrC,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C,CAgHA"}
1
+ {"version":3,"file":"useCalendar.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIrE,MAAM,WAAW,uBACf,SAAQ,IAAI,CACV,aAAa,EACX,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,mBAAmB,GACnB,eAAe,GACf,aAAa,CAChB;IACD,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,GACZ,EAAE,uBAAuB,GAAG;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IACtE,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC;IACrC,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C,CAgHA"}
@@ -1,6 +1,8 @@
1
1
  import * as React from "react";
2
- import { addMonths, endOfDay, isAfter, isBefore, isSameDay, startOfDay, subMonths } from "date-fns";
2
+ import { isSameDate } from "@vkontakte/vkjs";
3
+ import { addMonths, startOfDay, subMonths } from "date-fns";
3
4
  import { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, isDayMinMaxRestricted } from "../lib/calendar.js";
5
+ import { endOfDay } from "../lib/date.js";
4
6
  export function useCalendar({ value, disablePast, disableFuture, shouldDisableDate, onHeaderChange, onNextMonth, onPrevMonth, minDateTime, maxDateTime }) {
5
7
  var _ref;
6
8
  const [viewDate, setViewDate] = React.useState((_ref = Array.isArray(value) ? value[0] : value) !== null && _ref !== void 0 ? _ref : new Date());
@@ -27,7 +29,7 @@ export function useCalendar({ value, disablePast, disableFuture, shouldDisableDa
27
29
  }, [
28
30
  onHeaderChange
29
31
  ]);
30
- const isDayFocused = React.useCallback((day)=>Boolean(focusedDay && isSameDay(day, focusedDay)), [
32
+ const isDayFocused = React.useCallback((day)=>Boolean(focusedDay && isSameDate(day, focusedDay)), [
31
33
  focusedDay
32
34
  ]);
33
35
  const isDayDisabled = React.useCallback((day, withTime)=>{
@@ -36,10 +38,10 @@ export function useCalendar({ value, disablePast, disableFuture, shouldDisableDa
36
38
  return shouldDisableDate(day);
37
39
  }
38
40
  if (disableFuture) {
39
- return isAfter(startOfDay(day), now);
41
+ return startOfDay(day) > now;
40
42
  }
41
43
  if (disablePast) {
42
- return isBefore(endOfDay(day), now);
44
+ return endOfDay(day) < now;
43
45
  }
44
46
  if (minDateTime || maxDateTime) {
45
47
  return isDayMinMaxRestricted(day, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useCalendar.ts"],"sourcesContent":["import * as React from 'react';\nimport { addMonths, endOfDay, isAfter, isBefore, isSameDay, startOfDay, subMonths } from 'date-fns';\nimport type { CalendarProps } from '../components/Calendar/Calendar';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, isDayMinMaxRestricted } from '../lib/calendar';\n\nexport interface UseCalendarDependencies\n extends Pick<\n CalendarProps,\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'minDateTime'\n | 'maxDateTime'\n | 'shouldDisableDate'\n | 'disableFuture'\n | 'disablePast'\n > {\n value?: Array<Date | null> | Date | null;\n}\n\nexport function useCalendar({\n value,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n}: UseCalendarDependencies): {\n viewDate: Date;\n setViewDate: (value: Date) => void;\n setPrevMonth: () => void;\n setNextMonth: () => void;\n focusedDay: Date | undefined;\n setFocusedDay: React.Dispatch<React.SetStateAction<Date | undefined>>;\n isDayFocused: (day: Date) => boolean;\n isDayDisabled: (day: Date, withTime?: boolean) => boolean;\n isMonthDisabled: (month: number, year?: number) => boolean;\n isYearDisabled: (year: number) => boolean;\n} {\n const [viewDate, setViewDate] = React.useState(\n (Array.isArray(value) ? value[0] : value) ?? new Date(),\n );\n // соответствует дню, на котором сейчас есть фокус\n // меняется при переключении дней с помощью стрелок\n const [focusedDay, setFocusedDay] = React.useState<Date>();\n\n const setPrevMonth = React.useCallback(() => {\n onPrevMonth?.();\n setViewDate(subMonths(viewDate, 1));\n }, [viewDate, onPrevMonth]);\n const setNextMonth = React.useCallback(() => {\n onNextMonth?.();\n setViewDate(addMonths(viewDate, 1));\n }, [viewDate, onNextMonth]);\n\n const handleSetViewDate = React.useCallback(\n (value: Date) => {\n onHeaderChange?.(value);\n setViewDate(value);\n },\n [onHeaderChange],\n );\n\n const isDayFocused = React.useCallback(\n (day: Date) => Boolean(focusedDay && isSameDay(day, focusedDay)),\n [focusedDay],\n );\n\n const isDayDisabled = React.useCallback(\n (day: Date, withTime?: boolean) => {\n const now = new Date();\n if (shouldDisableDate) {\n return shouldDisableDate(day);\n }\n if (disableFuture) {\n return isAfter(startOfDay(day), now);\n }\n if (disablePast) {\n return isBefore(endOfDay(day), now);\n }\n if (minDateTime || maxDateTime) {\n return isDayMinMaxRestricted(day, { min: minDateTime, max: maxDateTime, withTime });\n }\n\n return false;\n },\n [disableFuture, disablePast, shouldDisableDate, minDateTime, maxDateTime],\n );\n\n const isMonthDisabled = React.useCallback(\n (month: number, year?: number): boolean => {\n const now = new Date();\n year = year || viewDate.getFullYear();\n const minMonth = minDateTime ? minDateTime.getMonth() : 0;\n const maxMonth = maxDateTime ? maxDateTime.getMonth() : 11;\n const minYear = minDateTime?.getFullYear() || DEFAULT_MIN_YEAR;\n const maxYear = maxDateTime?.getFullYear() || DEFAULT_MAX_YEAR;\n\n let isDisabled =\n year >= minYear && year <= maxYear\n ? (year === minYear && minMonth > month) || (year === maxYear && month > maxMonth)\n : true;\n\n if (disableFuture) {\n isDisabled =\n isDisabled ||\n (year === now.getFullYear() ? month > now.getMonth() : year > now.getFullYear());\n }\n if (disablePast) {\n isDisabled =\n isDisabled ||\n (year === now.getFullYear() ? month < now.getMonth() : year < now.getFullYear());\n }\n\n return isDisabled;\n },\n [disableFuture, disablePast, viewDate, minDateTime, maxDateTime],\n );\n\n const isYearDisabled = React.useCallback(\n (year: number): boolean => {\n const now = new Date();\n const minYear = minDateTime?.getFullYear() || DEFAULT_MIN_YEAR;\n const maxYear = maxDateTime?.getFullYear() || DEFAULT_MAX_YEAR;\n\n let isDisabled = minYear > year || year > maxYear;\n if (disableFuture) {\n isDisabled = isDisabled || year > now.getFullYear();\n }\n if (disablePast) {\n isDisabled = isDisabled || year < now.getFullYear();\n }\n\n return isDisabled;\n },\n [disableFuture, disablePast, minDateTime, maxDateTime],\n );\n\n return {\n viewDate,\n setViewDate: handleSetViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n };\n}\n"],"names":["React","addMonths","endOfDay","isAfter","isBefore","isSameDay","startOfDay","subMonths","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","isDayMinMaxRestricted","useCalendar","value","disablePast","disableFuture","shouldDisableDate","onHeaderChange","onNextMonth","onPrevMonth","minDateTime","maxDateTime","Array","viewDate","setViewDate","useState","isArray","Date","focusedDay","setFocusedDay","setPrevMonth","useCallback","setNextMonth","handleSetViewDate","isDayFocused","day","Boolean","isDayDisabled","withTime","now","min","max","isMonthDisabled","month","year","getFullYear","minMonth","getMonth","maxMonth","minYear","maxYear","isDisabled","isYearDisabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/hooks/useCalendar.ts"],"sourcesContent":["import * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { addMonths, startOfDay, subMonths } from 'date-fns';\nimport type { CalendarProps } from '../components/Calendar/Calendar';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, isDayMinMaxRestricted } from '../lib/calendar';\nimport { endOfDay } from '../lib/date';\n\nexport interface UseCalendarDependencies\n extends Pick<\n CalendarProps,\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'minDateTime'\n | 'maxDateTime'\n | 'shouldDisableDate'\n | 'disableFuture'\n | 'disablePast'\n > {\n value?: Array<Date | null> | Date | null;\n}\n\nexport function useCalendar({\n value,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n}: UseCalendarDependencies): {\n viewDate: Date;\n setViewDate: (value: Date) => void;\n setPrevMonth: () => void;\n setNextMonth: () => void;\n focusedDay: Date | undefined;\n setFocusedDay: React.Dispatch<React.SetStateAction<Date | undefined>>;\n isDayFocused: (day: Date) => boolean;\n isDayDisabled: (day: Date, withTime?: boolean) => boolean;\n isMonthDisabled: (month: number, year?: number) => boolean;\n isYearDisabled: (year: number) => boolean;\n} {\n const [viewDate, setViewDate] = React.useState(\n (Array.isArray(value) ? value[0] : value) ?? new Date(),\n );\n // соответствует дню, на котором сейчас есть фокус\n // меняется при переключении дней с помощью стрелок\n const [focusedDay, setFocusedDay] = React.useState<Date>();\n\n const setPrevMonth = React.useCallback(() => {\n onPrevMonth?.();\n setViewDate(subMonths(viewDate, 1));\n }, [viewDate, onPrevMonth]);\n const setNextMonth = React.useCallback(() => {\n onNextMonth?.();\n setViewDate(addMonths(viewDate, 1));\n }, [viewDate, onNextMonth]);\n\n const handleSetViewDate = React.useCallback(\n (value: Date) => {\n onHeaderChange?.(value);\n setViewDate(value);\n },\n [onHeaderChange],\n );\n\n const isDayFocused = React.useCallback(\n (day: Date) => Boolean(focusedDay && isSameDate(day, focusedDay)),\n [focusedDay],\n );\n\n const isDayDisabled = React.useCallback(\n (day: Date, withTime?: boolean) => {\n const now = new Date();\n if (shouldDisableDate) {\n return shouldDisableDate(day);\n }\n if (disableFuture) {\n return startOfDay(day) > now;\n }\n if (disablePast) {\n return endOfDay(day) < now;\n }\n if (minDateTime || maxDateTime) {\n return isDayMinMaxRestricted(day, { min: minDateTime, max: maxDateTime, withTime });\n }\n\n return false;\n },\n [disableFuture, disablePast, shouldDisableDate, minDateTime, maxDateTime],\n );\n\n const isMonthDisabled = React.useCallback(\n (month: number, year?: number): boolean => {\n const now = new Date();\n year = year || viewDate.getFullYear();\n const minMonth = minDateTime ? minDateTime.getMonth() : 0;\n const maxMonth = maxDateTime ? maxDateTime.getMonth() : 11;\n const minYear = minDateTime?.getFullYear() || DEFAULT_MIN_YEAR;\n const maxYear = maxDateTime?.getFullYear() || DEFAULT_MAX_YEAR;\n\n let isDisabled =\n year >= minYear && year <= maxYear\n ? (year === minYear && minMonth > month) || (year === maxYear && month > maxMonth)\n : true;\n\n if (disableFuture) {\n isDisabled =\n isDisabled ||\n (year === now.getFullYear() ? month > now.getMonth() : year > now.getFullYear());\n }\n if (disablePast) {\n isDisabled =\n isDisabled ||\n (year === now.getFullYear() ? month < now.getMonth() : year < now.getFullYear());\n }\n\n return isDisabled;\n },\n [disableFuture, disablePast, viewDate, minDateTime, maxDateTime],\n );\n\n const isYearDisabled = React.useCallback(\n (year: number): boolean => {\n const now = new Date();\n const minYear = minDateTime?.getFullYear() || DEFAULT_MIN_YEAR;\n const maxYear = maxDateTime?.getFullYear() || DEFAULT_MAX_YEAR;\n\n let isDisabled = minYear > year || year > maxYear;\n if (disableFuture) {\n isDisabled = isDisabled || year > now.getFullYear();\n }\n if (disablePast) {\n isDisabled = isDisabled || year < now.getFullYear();\n }\n\n return isDisabled;\n },\n [disableFuture, disablePast, minDateTime, maxDateTime],\n );\n\n return {\n viewDate,\n setViewDate: handleSetViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n };\n}\n"],"names":["React","isSameDate","addMonths","startOfDay","subMonths","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","isDayMinMaxRestricted","endOfDay","useCalendar","value","disablePast","disableFuture","shouldDisableDate","onHeaderChange","onNextMonth","onPrevMonth","minDateTime","maxDateTime","Array","viewDate","setViewDate","useState","isArray","Date","focusedDay","setFocusedDay","setPrevMonth","useCallback","setNextMonth","handleSetViewDate","isDayFocused","day","Boolean","isDayDisabled","withTime","now","min","max","isMonthDisabled","month","year","getFullYear","minMonth","getMonth","maxMonth","minYear","maxYear","isDisabled","isYearDisabled"],"mappings":"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"}
@@ -22,5 +22,5 @@ export type UseFloatingResult<ReferenceElement extends HTMLElement = HTMLElement
22
22
  anchorProps: ReferenceProps<ReferenceElement>;
23
23
  component: React.ReactNode | null;
24
24
  };
25
- export declare const useFloatingElement: <ReferenceElement extends HTMLElement = HTMLElement, FloatingElement extends HTMLElement = HTMLElement>({ placement, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis, offsetByCrossAxis, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware, trigger, hoverDelay, closeAfterClick, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, defaultShown, shown: shownProp, onShownChange, onShownChanged, strategy, onReferenceHiddenChange, onPlacementChange, renderFloatingComponent, externalFloatingElementRef, remapReferenceProps, }: UseFloatingElementProps<FloatingElement, ReferenceElement>) => UseFloatingResult<ReferenceElement>;
25
+ export declare const useFloatingElement: <ReferenceElement extends HTMLElement = HTMLElement, FloatingElement extends HTMLElement = HTMLElement>({ placement, arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis, offsetByCrossAxis, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware, disableShiftMiddleware, trigger, hoverDelay, closeAfterClick, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, defaultShown, shown: shownProp, onShownChange, onShownChanged, strategy, onReferenceHiddenChange, onPlacementChange, renderFloatingComponent, externalFloatingElementRef, remapReferenceProps, }: UseFloatingElementProps<FloatingElement, ReferenceElement>) => UseFloatingResult<ReferenceElement>;
26
26
  //# sourceMappingURL=useFloatingElement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingElement.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,sCAAsC,EAE3C,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EAEvC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKxF,MAAM,MAAM,sBAAsB,CAAC,eAAe,SAAS,WAAW,GAAG,WAAW,IAAI,IAAI,CAC1F,iCAAiC,EAC/B,OAAO,GACP,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,SAAS,GACT,gBAAgB,GAChB,WAAW,CACd,GAAG;IACF,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,eAAe,SAAS,WAAW,GAAG,WAAW,IAAI,CACzF,KAAK,EAAE,sBAAsB,CAAC,eAAe,CAAC,KAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAE5B,MAAM,MAAM,qBAAqB,CAAC,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAAI,CACtF,KAAK,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,KACzD,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAEtC,MAAM,MAAM,uBAAuB,CACjC,eAAe,SAAS,WAAW,GAAG,WAAW,EACjD,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAChD,IAAI,CAAC,sCAAsC,EAAE,UAAU,CAAC,GAC1D,IAAI,CAAC,gCAAgC,EAAE,WAAW,CAAC,GAAG;IACpD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,uBAAuB,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IACpE,mBAAmB,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAC9D,0BAA0B,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;CACzD,CAAC;AAEJ,MAAM,MAAM,iBAAiB,CAAC,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAAI;IAClF,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjC,WAAW,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,gBAAgB,SAAS,WAAW,GAAG,WAAW,EAClD,eAAe,SAAS,WAAW,GAAG,WAAW,EACjD,0dAiCC,uBAAuB,CACxB,eAAe,EACf,gBAAgB,CACjB,KAAG,iBAAiB,CAAC,gBAAgB,CA4ErC,CAAC"}
1
+ {"version":3,"file":"useFloatingElement.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,sCAAsC,EAE3C,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EAEvC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKxF,MAAM,MAAM,sBAAsB,CAAC,eAAe,SAAS,WAAW,GAAG,WAAW,IAAI,IAAI,CAC1F,iCAAiC,EAC/B,OAAO,GACP,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,SAAS,GACT,gBAAgB,GAChB,WAAW,CACd,GAAG;IACF,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,eAAe,SAAS,WAAW,GAAG,WAAW,IAAI,CACzF,KAAK,EAAE,sBAAsB,CAAC,eAAe,CAAC,KAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAE5B,MAAM,MAAM,qBAAqB,CAAC,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAAI,CACtF,KAAK,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,KACzD,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAEtC,MAAM,MAAM,uBAAuB,CACjC,eAAe,SAAS,WAAW,GAAG,WAAW,EACjD,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAChD,IAAI,CAAC,sCAAsC,EAAE,UAAU,CAAC,GAC1D,IAAI,CAAC,gCAAgC,EAAE,WAAW,CAAC,GAAG;IACpD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,uBAAuB,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IACpE,mBAAmB,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAC9D,0BAA0B,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;CACzD,CAAC;AAEJ,MAAM,MAAM,iBAAiB,CAAC,gBAAgB,SAAS,WAAW,GAAG,WAAW,IAAI;IAClF,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjC,WAAW,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,gBAAgB,SAAS,WAAW,GAAG,WAAW,EAClD,eAAe,SAAS,WAAW,GAAG,WAAW,EACjD,kfAkCC,uBAAuB,CACxB,eAAe,EACf,gBAAgB,CACjB,KAAG,iBAAiB,CAAC,gBAAgB,CA6ErC,CAAC"}
@@ -7,7 +7,7 @@ import { useReferenceHiddenChangeCallback } from "../lib/floating/useReferenceHi
7
7
  import { useExternRef } from "./useExternRef.js";
8
8
  import { useGlobalEscKeyDown } from "./useGlobalEscKeyDown.js";
9
9
  export const useFloatingElement = ({ // useFloatingMiddlewaresBootstrap
10
- placement = 'bottom-start', arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, // useFloatingWithInteractions
10
+ placement = 'bottom-start', arrow, arrowHeight, arrowPadding, sameWidth, offsetByMainAxis = 0, offsetByCrossAxis = 0, customMiddlewares, hideWhenReferenceHidden, disableFlipMiddleware = false, disableShiftMiddleware = false, // useFloatingWithInteractions
11
11
  trigger, hoverDelay, closeAfterClick, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, defaultShown, shown: shownProp, onShownChange, onShownChanged, strategy, onReferenceHiddenChange, onPlacementChange, renderFloatingComponent, externalFloatingElementRef, remapReferenceProps })=>{
12
12
  const [arrowRef, setArrowRef] = React.useState(null);
13
13
  const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({
@@ -21,7 +21,8 @@ trigger, hoverDelay, closeAfterClick, disabled, disableInteractive, disableClose
21
21
  arrowRef,
22
22
  arrowPadding,
23
23
  arrowHeight,
24
- disableFlipMiddleware
24
+ disableFlipMiddleware,
25
+ disableShiftMiddleware
25
26
  });
26
27
  const { placement: resolvedPlacement, shown, willBeHide, refs, referenceProps, floatingProps, middlewareData, onClose, onRestoreFocus, onEscapeKeyDown } = useFloatingWithInteractions({
27
28
  middlewares,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useFloatingElement.tsx"],"sourcesContent":["import * as React from 'react';\nimport { type Ref, useMemo } from 'react';\nimport {\n type OnPlacementChange,\n useFloatingMiddlewaresBootstrap,\n type UseFloatingMiddlewaresBootstrapOptions,\n useFloatingWithInteractions,\n type UseFloatingWithInteractionsProps,\n type UseFloatingWithInteractionsReturn,\n usePlacementChangeCallback,\n} from '../lib/floating';\nimport { type ReferenceProps } from '../lib/floating/useFloatingWithInteractions/types';\nimport { useReferenceHiddenChangeCallback } from '../lib/floating/useReferenceHiddenChangeCallback';\nimport { useExternRef } from './useExternRef';\nimport { useGlobalEscKeyDown } from './useGlobalEscKeyDown';\n\nexport type FloatingComponentProps<FloatingElement extends HTMLElement = HTMLElement> = Pick<\n UseFloatingWithInteractionsReturn,\n | 'shown'\n | 'willBeHide'\n | 'floatingProps'\n | 'middlewareData'\n | 'onClose'\n | 'onRestoreFocus'\n | 'placement'\n> & {\n floatingRef: React.Ref<FloatingElement>;\n setArrowRef: React.Dispatch<React.SetStateAction<HTMLDivElement | null>>;\n};\n\nexport type RenderFloatingComponentFn<FloatingElement extends HTMLElement = HTMLElement> = (\n props: FloatingComponentProps<FloatingElement>,\n) => React.ReactNode | null;\n\nexport type RemapReferencePropsFn<ReferenceElement extends HTMLElement = HTMLElement> = (\n props: ReferenceProps<ReferenceElement> & { shown: boolean },\n) => ReferenceProps<ReferenceElement>;\n\nexport type UseFloatingElementProps<\n FloatingElement extends HTMLElement = HTMLElement,\n ReferenceElement extends HTMLElement = HTMLElement,\n> = Omit<UseFloatingMiddlewaresBootstrapOptions, 'arrowRef'> &\n Omit<UseFloatingWithInteractionsProps, 'placement'> & {\n onPlacementChange?: OnPlacementChange;\n onReferenceHiddenChange?: (hidden: boolean) => void;\n renderFloatingComponent: RenderFloatingComponentFn<FloatingElement>;\n remapReferenceProps?: RemapReferencePropsFn<ReferenceElement>;\n externalFloatingElementRef?: React.Ref<FloatingElement>;\n };\n\nexport type UseFloatingResult<ReferenceElement extends HTMLElement = HTMLElement> = {\n anchorRef: Ref<ReferenceElement>;\n anchorProps: ReferenceProps<ReferenceElement>;\n component: React.ReactNode | null;\n};\n\nexport const useFloatingElement = <\n ReferenceElement extends HTMLElement = HTMLElement,\n FloatingElement extends HTMLElement = HTMLElement,\n>({\n // useFloatingMiddlewaresBootstrap\n placement = 'bottom-start',\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n\n // useFloatingWithInteractions\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n strategy,\n onReferenceHiddenChange,\n\n onPlacementChange,\n\n renderFloatingComponent,\n externalFloatingElementRef,\n remapReferenceProps,\n}: UseFloatingElementProps<\n FloatingElement,\n ReferenceElement\n>): UseFloatingResult<ReferenceElement> => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement,\n offsetByMainAxis,\n offsetByCrossAxis,\n customMiddlewares,\n hideWhenReferenceHidden,\n sameWidth,\n arrow,\n arrowRef,\n arrowPadding,\n arrowHeight,\n disableFlipMiddleware,\n });\n\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n strategy,\n placement: strictPlacement,\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n });\n\n const resultRef = useExternRef<FloatingElement>(externalFloatingElementRef, refs.setFloating);\n\n usePlacementChangeCallback(placement, resolvedPlacement, onPlacementChange);\n\n useReferenceHiddenChangeCallback(middlewareData.hide, onReferenceHiddenChange);\n\n const component = renderFloatingComponent({\n shown,\n willBeHide,\n floatingProps,\n floatingRef: resultRef,\n middlewareData,\n placement: resolvedPlacement,\n onClose,\n onRestoreFocus,\n setArrowRef,\n });\n\n useGlobalEscKeyDown(shown, onEscapeKeyDown);\n\n const remappedReferenceProps = useMemo(\n () =>\n remapReferenceProps ? remapReferenceProps({ ...referenceProps, shown }) : referenceProps,\n [remapReferenceProps, shown, referenceProps],\n );\n\n return {\n anchorRef: refs.setReference,\n anchorProps: remappedReferenceProps,\n component,\n };\n};\n"],"names":["React","useMemo","useFloatingMiddlewaresBootstrap","useFloatingWithInteractions","usePlacementChangeCallback","useReferenceHiddenChangeCallback","useExternRef","useGlobalEscKeyDown","useFloatingElement","placement","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","trigger","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChanged","strategy","onReferenceHiddenChange","onPlacementChange","renderFloatingComponent","externalFloatingElementRef","remapReferenceProps","arrowRef","setArrowRef","useState","middlewares","strictPlacement","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","resultRef","setFloating","hide","component","floatingRef","remappedReferenceProps","anchorRef","setReference","anchorProps"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAAmBC,OAAO,QAAQ,QAAQ;AAC1C,SAEEC,+BAA+B,EAE/BC,2BAA2B,EAG3BC,0BAA0B,QACrB,2BAAkB;AAEzB,SAASC,gCAAgC,QAAQ,sDAAmD;AACpG,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SAASC,mBAAmB,QAAQ,2BAAwB;AA0C5D,OAAO,MAAMC,qBAAqB,CAGhC,EACA,kCAAkC;AAClCC,YAAY,cAAc,EAC1BC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAE7B,8BAA8B;AAC9BC,OAAO,EACPC,UAAU,EACVC,eAAe,EACfC,QAAQ,EACRC,kBAAkB,EAClBC,0BAA0B,EAC1BC,oBAAoB,EACpBC,YAAY,EACZC,OAAOC,SAAS,EAChBC,aAAa,EACbC,cAAc,EACdC,QAAQ,EACRC,uBAAuB,EAEvBC,iBAAiB,EAEjBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,mBAAmB,EAIpB;IACC,MAAM,CAACC,UAAUC,YAAY,GAAGtC,MAAMuC,QAAQ,CAAwB;IAEtE,MAAM,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGvC,gCAAgC;QACvEO;QACAK;QACAC;QACAC;QACAC;QACAJ;QACAH;QACA2B;QACAzB;QACAD;QACAO;IACF;IAEA,MAAM,EACJT,WAAWiC,iBAAiB,EAC5Bf,KAAK,EACLgB,UAAU,EACVC,IAAI,EACJC,cAAc,EACdC,aAAa,EACbC,cAAc,EACdC,OAAO,EACPC,cAAc,EACdC,eAAe,EAChB,GAAG/C,4BAA4B;QAC9BqC;QACAT;QACAtB,WAAWgC;QACXtB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC,OAAOC;QACPC;QACAC;IACF;IAEA,MAAMqB,YAAY7C,aAA8B6B,4BAA4BS,KAAKQ,WAAW;IAE5FhD,2BAA2BK,WAAWiC,mBAAmBT;IAEzD5B,iCAAiC0C,eAAeM,IAAI,EAAErB;IAEtD,MAAMsB,YAAYpB,wBAAwB;QACxCP;QACAgB;QACAG;QACAS,aAAaJ;QACbJ;QACAtC,WAAWiC;QACXM;QACAC;QACAX;IACF;IAEA/B,oBAAoBoB,OAAOuB;IAE3B,MAAMM,yBAAyBvD,QAC7B,IACEmC,sBAAsBA,oBAAoB,wCAAKS;YAAgBlB;cAAWkB,gBAC5E;QAACT;QAAqBT;QAAOkB;KAAe;IAG9C,OAAO;QACLY,WAAWb,KAAKc,YAAY;QAC5BC,aAAaH;QACbF;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../../src/hooks/useFloatingElement.tsx"],"sourcesContent":["import * as React from 'react';\nimport { type Ref, useMemo } from 'react';\nimport {\n type OnPlacementChange,\n useFloatingMiddlewaresBootstrap,\n type UseFloatingMiddlewaresBootstrapOptions,\n useFloatingWithInteractions,\n type UseFloatingWithInteractionsProps,\n type UseFloatingWithInteractionsReturn,\n usePlacementChangeCallback,\n} from '../lib/floating';\nimport { type ReferenceProps } from '../lib/floating/useFloatingWithInteractions/types';\nimport { useReferenceHiddenChangeCallback } from '../lib/floating/useReferenceHiddenChangeCallback';\nimport { useExternRef } from './useExternRef';\nimport { useGlobalEscKeyDown } from './useGlobalEscKeyDown';\n\nexport type FloatingComponentProps<FloatingElement extends HTMLElement = HTMLElement> = Pick<\n UseFloatingWithInteractionsReturn,\n | 'shown'\n | 'willBeHide'\n | 'floatingProps'\n | 'middlewareData'\n | 'onClose'\n | 'onRestoreFocus'\n | 'placement'\n> & {\n floatingRef: React.Ref<FloatingElement>;\n setArrowRef: React.Dispatch<React.SetStateAction<HTMLDivElement | null>>;\n};\n\nexport type RenderFloatingComponentFn<FloatingElement extends HTMLElement = HTMLElement> = (\n props: FloatingComponentProps<FloatingElement>,\n) => React.ReactNode | null;\n\nexport type RemapReferencePropsFn<ReferenceElement extends HTMLElement = HTMLElement> = (\n props: ReferenceProps<ReferenceElement> & { shown: boolean },\n) => ReferenceProps<ReferenceElement>;\n\nexport type UseFloatingElementProps<\n FloatingElement extends HTMLElement = HTMLElement,\n ReferenceElement extends HTMLElement = HTMLElement,\n> = Omit<UseFloatingMiddlewaresBootstrapOptions, 'arrowRef'> &\n Omit<UseFloatingWithInteractionsProps, 'placement'> & {\n onPlacementChange?: OnPlacementChange;\n onReferenceHiddenChange?: (hidden: boolean) => void;\n renderFloatingComponent: RenderFloatingComponentFn<FloatingElement>;\n remapReferenceProps?: RemapReferencePropsFn<ReferenceElement>;\n externalFloatingElementRef?: React.Ref<FloatingElement>;\n };\n\nexport type UseFloatingResult<ReferenceElement extends HTMLElement = HTMLElement> = {\n anchorRef: Ref<ReferenceElement>;\n anchorProps: ReferenceProps<ReferenceElement>;\n component: React.ReactNode | null;\n};\n\nexport const useFloatingElement = <\n ReferenceElement extends HTMLElement = HTMLElement,\n FloatingElement extends HTMLElement = HTMLElement,\n>({\n // useFloatingMiddlewaresBootstrap\n placement = 'bottom-start',\n arrow,\n arrowHeight,\n arrowPadding,\n sameWidth,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n customMiddlewares,\n hideWhenReferenceHidden,\n disableFlipMiddleware = false,\n disableShiftMiddleware = false,\n\n // useFloatingWithInteractions\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n strategy,\n onReferenceHiddenChange,\n\n onPlacementChange,\n\n renderFloatingComponent,\n externalFloatingElementRef,\n remapReferenceProps,\n}: UseFloatingElementProps<\n FloatingElement,\n ReferenceElement\n>): UseFloatingResult<ReferenceElement> => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement,\n offsetByMainAxis,\n offsetByCrossAxis,\n customMiddlewares,\n hideWhenReferenceHidden,\n sameWidth,\n arrow,\n arrowRef,\n arrowPadding,\n arrowHeight,\n disableFlipMiddleware,\n disableShiftMiddleware,\n });\n\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n strategy,\n placement: strictPlacement,\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n });\n\n const resultRef = useExternRef<FloatingElement>(externalFloatingElementRef, refs.setFloating);\n\n usePlacementChangeCallback(placement, resolvedPlacement, onPlacementChange);\n\n useReferenceHiddenChangeCallback(middlewareData.hide, onReferenceHiddenChange);\n\n const component = renderFloatingComponent({\n shown,\n willBeHide,\n floatingProps,\n floatingRef: resultRef,\n middlewareData,\n placement: resolvedPlacement,\n onClose,\n onRestoreFocus,\n setArrowRef,\n });\n\n useGlobalEscKeyDown(shown, onEscapeKeyDown);\n\n const remappedReferenceProps = useMemo(\n () =>\n remapReferenceProps ? remapReferenceProps({ ...referenceProps, shown }) : referenceProps,\n [remapReferenceProps, shown, referenceProps],\n );\n\n return {\n anchorRef: refs.setReference,\n anchorProps: remappedReferenceProps,\n component,\n };\n};\n"],"names":["React","useMemo","useFloatingMiddlewaresBootstrap","useFloatingWithInteractions","usePlacementChangeCallback","useReferenceHiddenChangeCallback","useExternRef","useGlobalEscKeyDown","useFloatingElement","placement","arrow","arrowHeight","arrowPadding","sameWidth","offsetByMainAxis","offsetByCrossAxis","customMiddlewares","hideWhenReferenceHidden","disableFlipMiddleware","disableShiftMiddleware","trigger","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChanged","strategy","onReferenceHiddenChange","onPlacementChange","renderFloatingComponent","externalFloatingElementRef","remapReferenceProps","arrowRef","setArrowRef","useState","middlewares","strictPlacement","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","resultRef","setFloating","hide","component","floatingRef","remappedReferenceProps","anchorRef","setReference","anchorProps"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAAmBC,OAAO,QAAQ,QAAQ;AAC1C,SAEEC,+BAA+B,EAE/BC,2BAA2B,EAG3BC,0BAA0B,QACrB,2BAAkB;AAEzB,SAASC,gCAAgC,QAAQ,sDAAmD;AACpG,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SAASC,mBAAmB,QAAQ,2BAAwB;AA0C5D,OAAO,MAAMC,qBAAqB,CAGhC,EACA,kCAAkC;AAClCC,YAAY,cAAc,EAC1BC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,iBAAiB,EACjBC,uBAAuB,EACvBC,wBAAwB,KAAK,EAC7BC,yBAAyB,KAAK,EAE9B,8BAA8B;AAC9BC,OAAO,EACPC,UAAU,EACVC,eAAe,EACfC,QAAQ,EACRC,kBAAkB,EAClBC,0BAA0B,EAC1BC,oBAAoB,EACpBC,YAAY,EACZC,OAAOC,SAAS,EAChBC,aAAa,EACbC,cAAc,EACdC,QAAQ,EACRC,uBAAuB,EAEvBC,iBAAiB,EAEjBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,mBAAmB,EAIpB;IACC,MAAM,CAACC,UAAUC,YAAY,GAAGvC,MAAMwC,QAAQ,CAAwB;IAEtE,MAAM,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGxC,gCAAgC;QACvEO;QACAK;QACAC;QACAC;QACAC;QACAJ;QACAH;QACA4B;QACA1B;QACAD;QACAO;QACAC;IACF;IAEA,MAAM,EACJV,WAAWkC,iBAAiB,EAC5Bf,KAAK,EACLgB,UAAU,EACVC,IAAI,EACJC,cAAc,EACdC,aAAa,EACbC,cAAc,EACdC,OAAO,EACPC,cAAc,EACdC,eAAe,EAChB,GAAGhD,4BAA4B;QAC9BsC;QACAT;QACAvB,WAAWiC;QACXtB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC,OAAOC;QACPC;QACAC;IACF;IAEA,MAAMqB,YAAY9C,aAA8B8B,4BAA4BS,KAAKQ,WAAW;IAE5FjD,2BAA2BK,WAAWkC,mBAAmBT;IAEzD7B,iCAAiC2C,eAAeM,IAAI,EAAErB;IAEtD,MAAMsB,YAAYpB,wBAAwB;QACxCP;QACAgB;QACAG;QACAS,aAAaJ;QACbJ;QACAvC,WAAWkC;QACXM;QACAC;QACAX;IACF;IAEAhC,oBAAoBqB,OAAOuB;IAE3B,MAAMM,yBAAyBxD,QAC7B,IACEoC,sBAAsBA,oBAAoB,wCAAKS;YAAgBlB;cAAWkB,gBAC5E;QAACT;QAAqBT;QAAOkB;KAAe;IAG9C,OAAO;QACLY,WAAWb,KAAKc,YAAY;QAC5BC,aAAaH;QACbF;IACF;AACF,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTodayDate.d.ts","sourceRoot":"","sources":["../../src/hooks/useTodayDate.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,yBAAyB,UAAQ,GAAG,IAAI,CAiDpE"}
1
+ {"version":3,"file":"useTodayDate.d.ts","sourceRoot":"","sources":["../../src/hooks/useTodayDate.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,yBAAyB,UAAQ,GAAG,IAAI,CAiDpE"}
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
- import { differenceInMilliseconds, isSameDay, startOfTomorrow } from "date-fns";
2
+ import { isSameDate } from "@vkontakte/vkjs";
3
+ import { differenceInMilliseconds, startOfTomorrow } from "date-fns";
3
4
  import { useDOM } from "../lib/dom.js";
4
5
  /**
5
6
  * Опционально обновляемая дата сегодняшнего дня
@@ -28,7 +29,7 @@ import { useDOM } from "../lib/dom.js";
28
29
  setTodayDate(new Date());
29
30
  }, timeToDayChange);
30
31
  // Если todayDate не обновился в таймаут - обновить при заходе на вкладку
31
- if (!isSameDay(todayDate, now)) {
32
+ if (!isSameDate(todayDate, now)) {
32
33
  setTodayDate(now);
33
34
  }
34
35
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useTodayDate.ts"],"sourcesContent":["import * as React from 'react';\nimport { differenceInMilliseconds, isSameDay, startOfTomorrow } from 'date-fns';\nimport { useDOM } from '../lib/dom';\n\n/**\n * Опционально обновляемая дата сегодняшнего дня\n *\n * Дата - сегодня (в соответствии с системным временем)\n *\n * Часы, минуты, секунды, миллисекунды - произвольные\n *\n * @param listenDayChangesForUpdate - флаг по которому определяется, будет ли создаваться подписка на смену календарного дня\n */\nexport function useTodayDate(listenDayChangesForUpdate = false): Date {\n const { document, window } = useDOM();\n const [todayDate, setTodayDate] = React.useState(() => new Date());\n\n React.useEffect(\n function setupTodaysDateRecalculationListener() {\n if (!listenDayChangesForUpdate || !document || !window) {\n return;\n }\n\n let timeout: number | undefined = undefined;\n\n const recalcTimeout = () => {\n if (document.visibilityState === 'visible') {\n const now = new Date();\n\n const timeToDayChange = differenceInMilliseconds(startOfTomorrow(), now);\n\n // Удаляем старый таймаут\n window.clearTimeout(timeout);\n\n // Создаем новый таймаут\n timeout = window.setTimeout(() => {\n setTodayDate(new Date());\n }, timeToDayChange);\n\n // Если todayDate не обновился в таймаут - обновить при заходе на вкладку\n if (!isSameDay(todayDate, now)) {\n setTodayDate(now);\n }\n }\n };\n\n recalcTimeout();\n\n // Создаем слушатель visibilitychange, чтобы предотвратить пропуск обновления стейта после заморозки вкладки\n // Если человек ее долго не трогал или закрывал крышку ноута и тп\n // https://developer.chrome.com/blog/page-lifecycle-api/\n document.addEventListener('visibilitychange', recalcTimeout);\n\n return () => {\n window.clearTimeout(timeout);\n document.removeEventListener('visibilitychange', recalcTimeout);\n };\n },\n [document, listenDayChangesForUpdate, todayDate, window],\n );\n\n return todayDate;\n}\n"],"names":["React","differenceInMilliseconds","isSameDay","startOfTomorrow","useDOM","useTodayDate","listenDayChangesForUpdate","document","window","todayDate","setTodayDate","useState","Date","useEffect","setupTodaysDateRecalculationListener","timeout","undefined","recalcTimeout","visibilityState","now","timeToDayChange","clearTimeout","setTimeout","addEventListener","removeEventListener"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,wBAAwB,EAAEC,SAAS,EAAEC,eAAe,QAAQ,WAAW;AAChF,SAASC,MAAM,QAAQ,gBAAa;AAEpC;;;;;;;;CAQC,GACD,OAAO,SAASC,aAAaC,4BAA4B,KAAK;IAC5D,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGJ;IAC7B,MAAM,CAACK,WAAWC,aAAa,GAAGV,MAAMW,QAAQ,CAAC,IAAM,IAAIC;IAE3DZ,MAAMa,SAAS,CACb,SAASC;QACP,IAAI,CAACR,6BAA6B,CAACC,YAAY,CAACC,QAAQ;YACtD;QACF;QAEA,IAAIO,UAA8BC;QAElC,MAAMC,gBAAgB;YACpB,IAAIV,SAASW,eAAe,KAAK,WAAW;gBAC1C,MAAMC,MAAM,IAAIP;gBAEhB,MAAMQ,kBAAkBnB,yBAAyBE,mBAAmBgB;gBAEpE,yBAAyB;gBACzBX,OAAOa,YAAY,CAACN;gBAEpB,wBAAwB;gBACxBA,UAAUP,OAAOc,UAAU,CAAC;oBAC1BZ,aAAa,IAAIE;gBACnB,GAAGQ;gBAEH,yEAAyE;gBACzE,IAAI,CAAClB,UAAUO,WAAWU,MAAM;oBAC9BT,aAAaS;gBACf;YACF;QACF;QAEAF;QAEA,4GAA4G;QAC5G,iEAAiE;QACjE,wDAAwD;QACxDV,SAASgB,gBAAgB,CAAC,oBAAoBN;QAE9C,OAAO;YACLT,OAAOa,YAAY,CAACN;YACpBR,SAASiB,mBAAmB,CAAC,oBAAoBP;QACnD;IACF,GACA;QAACV;QAAUD;QAA2BG;QAAWD;KAAO;IAG1D,OAAOC;AACT"}
1
+ {"version":3,"sources":["../../src/hooks/useTodayDate.ts"],"sourcesContent":["import * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { differenceInMilliseconds, startOfTomorrow } from 'date-fns';\nimport { useDOM } from '../lib/dom';\n\n/**\n * Опционально обновляемая дата сегодняшнего дня\n *\n * Дата - сегодня (в соответствии с системным временем)\n *\n * Часы, минуты, секунды, миллисекунды - произвольные\n *\n * @param listenDayChangesForUpdate - флаг по которому определяется, будет ли создаваться подписка на смену календарного дня\n */\nexport function useTodayDate(listenDayChangesForUpdate = false): Date {\n const { document, window } = useDOM();\n const [todayDate, setTodayDate] = React.useState(() => new Date());\n\n React.useEffect(\n function setupTodaysDateRecalculationListener() {\n if (!listenDayChangesForUpdate || !document || !window) {\n return;\n }\n\n let timeout: number | undefined = undefined;\n\n const recalcTimeout = () => {\n if (document.visibilityState === 'visible') {\n const now = new Date();\n\n const timeToDayChange = differenceInMilliseconds(startOfTomorrow(), now);\n\n // Удаляем старый таймаут\n window.clearTimeout(timeout);\n\n // Создаем новый таймаут\n timeout = window.setTimeout(() => {\n setTodayDate(new Date());\n }, timeToDayChange);\n\n // Если todayDate не обновился в таймаут - обновить при заходе на вкладку\n if (!isSameDate(todayDate, now)) {\n setTodayDate(now);\n }\n }\n };\n\n recalcTimeout();\n\n // Создаем слушатель visibilitychange, чтобы предотвратить пропуск обновления стейта после заморозки вкладки\n // Если человек ее долго не трогал или закрывал крышку ноута и тп\n // https://developer.chrome.com/blog/page-lifecycle-api/\n document.addEventListener('visibilitychange', recalcTimeout);\n\n return () => {\n window.clearTimeout(timeout);\n document.removeEventListener('visibilitychange', recalcTimeout);\n };\n },\n [document, listenDayChangesForUpdate, todayDate, window],\n );\n\n return todayDate;\n}\n"],"names":["React","isSameDate","differenceInMilliseconds","startOfTomorrow","useDOM","useTodayDate","listenDayChangesForUpdate","document","window","todayDate","setTodayDate","useState","Date","useEffect","setupTodaysDateRecalculationListener","timeout","undefined","recalcTimeout","visibilityState","now","timeToDayChange","clearTimeout","setTimeout","addEventListener","removeEventListener"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,wBAAwB,EAAEC,eAAe,QAAQ,WAAW;AACrE,SAASC,MAAM,QAAQ,gBAAa;AAEpC;;;;;;;;CAQC,GACD,OAAO,SAASC,aAAaC,4BAA4B,KAAK;IAC5D,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGJ;IAC7B,MAAM,CAACK,WAAWC,aAAa,GAAGV,MAAMW,QAAQ,CAAC,IAAM,IAAIC;IAE3DZ,MAAMa,SAAS,CACb,SAASC;QACP,IAAI,CAACR,6BAA6B,CAACC,YAAY,CAACC,QAAQ;YACtD;QACF;QAEA,IAAIO,UAA8BC;QAElC,MAAMC,gBAAgB;YACpB,IAAIV,SAASW,eAAe,KAAK,WAAW;gBAC1C,MAAMC,MAAM,IAAIP;gBAEhB,MAAMQ,kBAAkBlB,yBAAyBC,mBAAmBgB;gBAEpE,yBAAyB;gBACzBX,OAAOa,YAAY,CAACN;gBAEpB,wBAAwB;gBACxBA,UAAUP,OAAOc,UAAU,CAAC;oBAC1BZ,aAAa,IAAIE;gBACnB,GAAGQ;gBAEH,yEAAyE;gBACzE,IAAI,CAACnB,WAAWQ,WAAWU,MAAM;oBAC/BT,aAAaS;gBACf;YACF;QACF;QAEAF;QAEA,4GAA4G;QAC5G,iEAAiE;QACjE,wDAAwD;QACxDV,SAASgB,gBAAgB,CAAC,oBAAoBN;QAE9C,OAAO;YACLT,OAAOa,YAAY,CAACN;YACpBR,SAASiB,mBAAmB,CAAC,oBAAoBP;QACnD;IACF,GACA;QAACV;QAAUD;QAA2BG;QAAWD;KAAO;IAG1D,OAAOC;AACT"}
package/dist/index.d.ts CHANGED
@@ -254,8 +254,9 @@ export { DropZone } from './components/DropZone/DropZone';
254
254
  export type { DropZoneProps } from './components/DropZone/DropZone';
255
255
  export { Input } from './components/Input/Input';
256
256
  export type { InputProps } from './components/Input/Input';
257
+ export type { ChipProps } from './components/ChipsInputBase/Chip/Chip';
257
258
  export { Chip } from './components/ChipsInputBase/Chip/Chip';
258
- export type { ChipProps, ChipOption, RenderChipProps, ChipOptionValue, ChipOptionLabel, } from './components/ChipsInputBase/types';
259
+ export type { ChipOption, RenderChipProps, ChipOptionValue, ChipOptionLabel, } from './components/ChipsInputBase/types';
259
260
  export { ChipsInput } from './components/ChipsInput/ChipsInput';
260
261
  export type { ChipsInputProps } from './components/ChipsInput/ChipsInput';
261
262
  export { ChipsSelect } from './components/ChipsSelect/ChipsSelect';
@@ -280,7 +281,8 @@ export type { SelectMimicryProps } from './components/SelectMimicry/SelectMimicr
280
281
  export { NativeSelect } from './components/NativeSelect/NativeSelect';
281
282
  export type { NativeSelectProps } from './components/NativeSelect/NativeSelect';
282
283
  export { CustomSelect } from './components/CustomSelect/CustomSelect';
283
- export type { SelectProps, CustomSelectOptionInterface, CustomSelectRenderOption, CustomSelectClearButtonProps, } from './components/CustomSelect/CustomSelect';
284
+ export type { SelectProps, CustomSelectClearButtonProps, } from './components/CustomSelect/CustomSelect';
285
+ export type { CustomSelectOptionInterface, CustomSelectRenderOption, } from './components/CustomSelect/types';
284
286
  export { CustomSelectOption } from './components/CustomSelectOption/CustomSelectOption';
285
287
  export type { CustomSelectOptionProps } from './components/CustomSelectOption/CustomSelectOption';
286
288
  export { SegmentedControl } from './components/SegmentedControl/SegmentedControl';