react-stately 3.46.0 → 3.47.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 (496) hide show
  1. package/dist/exports/Color.cjs.map +1 -1
  2. package/dist/exports/Color.js.map +1 -1
  3. package/dist/exports/Color.mjs.map +1 -1
  4. package/dist/exports/index.cjs.map +1 -1
  5. package/dist/exports/index.js.map +1 -1
  6. package/dist/exports/index.mjs.map +1 -1
  7. package/dist/exports/private/autocomplete/useAutocompleteState.cjs.map +1 -1
  8. package/dist/exports/private/autocomplete/useAutocompleteState.js.map +1 -1
  9. package/dist/exports/private/autocomplete/useAutocompleteState.mjs.map +1 -1
  10. package/dist/exports/private/collections/getChildNodes.cjs.map +1 -1
  11. package/dist/exports/private/collections/getChildNodes.js.map +1 -1
  12. package/dist/exports/private/collections/getChildNodes.mjs.map +1 -1
  13. package/dist/exports/private/flags/flags.cjs.map +1 -1
  14. package/dist/exports/private/flags/flags.js.map +1 -1
  15. package/dist/exports/private/flags/flags.mjs.map +1 -1
  16. package/dist/exports/private/form/useFormValidationState.cjs.map +1 -1
  17. package/dist/exports/private/form/useFormValidationState.js.map +1 -1
  18. package/dist/exports/private/form/useFormValidationState.mjs.map +1 -1
  19. package/dist/exports/private/grid/GridCollection.cjs.map +1 -1
  20. package/dist/exports/private/grid/GridCollection.js.map +1 -1
  21. package/dist/exports/private/grid/GridCollection.mjs.map +1 -1
  22. package/dist/exports/private/steplist/useStepListState.cjs.map +1 -1
  23. package/dist/exports/private/steplist/useStepListState.js.map +1 -1
  24. package/dist/exports/private/steplist/useStepListState.mjs.map +1 -1
  25. package/dist/exports/private/table/TableCollection.cjs.map +1 -1
  26. package/dist/exports/private/table/TableCollection.js.map +1 -1
  27. package/dist/exports/private/table/TableCollection.mjs.map +1 -1
  28. package/dist/exports/private/table/useTreeGridState.cjs.map +1 -1
  29. package/dist/exports/private/table/useTreeGridState.js.map +1 -1
  30. package/dist/exports/private/table/useTreeGridState.mjs.map +1 -1
  31. package/dist/exports/useAsyncList.cjs.map +1 -1
  32. package/dist/exports/useAsyncList.js.map +1 -1
  33. package/dist/exports/useAsyncList.mjs.map +1 -1
  34. package/dist/exports/useCalendarState.cjs.map +1 -1
  35. package/dist/exports/useCalendarState.js.map +1 -1
  36. package/dist/exports/useCalendarState.mjs.map +1 -1
  37. package/dist/exports/useColorAreaState.cjs.map +1 -1
  38. package/dist/exports/useColorAreaState.js.map +1 -1
  39. package/dist/exports/useColorAreaState.mjs.map +1 -1
  40. package/dist/exports/useColorFieldState.cjs.map +1 -1
  41. package/dist/exports/useColorFieldState.js.map +1 -1
  42. package/dist/exports/useColorFieldState.mjs.map +1 -1
  43. package/dist/exports/useColorPickerState.cjs.map +1 -1
  44. package/dist/exports/useColorPickerState.js.map +1 -1
  45. package/dist/exports/useColorPickerState.mjs.map +1 -1
  46. package/dist/exports/useColorSliderState.cjs.map +1 -1
  47. package/dist/exports/useColorSliderState.js.map +1 -1
  48. package/dist/exports/useColorSliderState.mjs.map +1 -1
  49. package/dist/exports/useColorWheelState.cjs.map +1 -1
  50. package/dist/exports/useColorWheelState.js.map +1 -1
  51. package/dist/exports/useColorWheelState.mjs.map +1 -1
  52. package/dist/exports/useComboBoxState.cjs +1 -1
  53. package/dist/exports/useComboBoxState.cjs.map +1 -1
  54. package/dist/exports/useComboBoxState.js +1 -1
  55. package/dist/exports/useComboBoxState.js.map +1 -1
  56. package/dist/exports/useComboBoxState.mjs +1 -1
  57. package/dist/exports/useComboBoxState.mjs.map +1 -1
  58. package/dist/exports/useDateFieldState.cjs.map +1 -1
  59. package/dist/exports/useDateFieldState.js.map +1 -1
  60. package/dist/exports/useDateFieldState.mjs.map +1 -1
  61. package/dist/exports/useDatePickerState.cjs.map +1 -1
  62. package/dist/exports/useDatePickerState.js.map +1 -1
  63. package/dist/exports/useDatePickerState.mjs.map +1 -1
  64. package/dist/exports/useDateRangePickerState.cjs.map +1 -1
  65. package/dist/exports/useDateRangePickerState.js.map +1 -1
  66. package/dist/exports/useDateRangePickerState.mjs.map +1 -1
  67. package/dist/exports/useDisclosureGroupState.cjs.map +1 -1
  68. package/dist/exports/useDisclosureGroupState.js.map +1 -1
  69. package/dist/exports/useDisclosureGroupState.mjs.map +1 -1
  70. package/dist/exports/useDraggableCollectionState.cjs.map +1 -1
  71. package/dist/exports/useDraggableCollectionState.js.map +1 -1
  72. package/dist/exports/useDraggableCollectionState.mjs.map +1 -1
  73. package/dist/exports/useDroppableCollectionState.cjs.map +1 -1
  74. package/dist/exports/useDroppableCollectionState.js.map +1 -1
  75. package/dist/exports/useDroppableCollectionState.mjs.map +1 -1
  76. package/dist/exports/useMenuTriggerState.cjs.map +1 -1
  77. package/dist/exports/useMenuTriggerState.js.map +1 -1
  78. package/dist/exports/useMenuTriggerState.mjs.map +1 -1
  79. package/dist/exports/useMultipleSelectionState.cjs.map +1 -1
  80. package/dist/exports/useMultipleSelectionState.js.map +1 -1
  81. package/dist/exports/useMultipleSelectionState.mjs.map +1 -1
  82. package/dist/exports/useOverlayTriggerState.cjs.map +1 -1
  83. package/dist/exports/useOverlayTriggerState.js.map +1 -1
  84. package/dist/exports/useOverlayTriggerState.mjs.map +1 -1
  85. package/dist/exports/useRangeCalendarState.cjs.map +1 -1
  86. package/dist/exports/useRangeCalendarState.js.map +1 -1
  87. package/dist/exports/useRangeCalendarState.mjs.map +1 -1
  88. package/dist/exports/useSelectState.cjs.map +1 -1
  89. package/dist/exports/useSelectState.js.map +1 -1
  90. package/dist/exports/useSelectState.mjs.map +1 -1
  91. package/dist/exports/useSingleSelectListState.cjs.map +1 -1
  92. package/dist/exports/useSingleSelectListState.js.map +1 -1
  93. package/dist/exports/useSingleSelectListState.mjs.map +1 -1
  94. package/dist/exports/useTableState.cjs.map +1 -1
  95. package/dist/exports/useTableState.js.map +1 -1
  96. package/dist/exports/useTableState.mjs.map +1 -1
  97. package/dist/exports/useTimeFieldState.cjs.map +1 -1
  98. package/dist/exports/useTimeFieldState.js.map +1 -1
  99. package/dist/exports/useTimeFieldState.mjs.map +1 -1
  100. package/dist/exports/useToastState.cjs.map +1 -1
  101. package/dist/exports/useToastState.js.map +1 -1
  102. package/dist/exports/useToastState.mjs.map +1 -1
  103. package/dist/private/autocomplete/useAutocompleteState.cjs.map +1 -1
  104. package/dist/private/autocomplete/useAutocompleteState.js.map +1 -1
  105. package/dist/private/autocomplete/useAutocompleteState.mjs.map +1 -1
  106. package/dist/private/calendar/useCalendarState.cjs +82 -30
  107. package/dist/private/calendar/useCalendarState.cjs.map +1 -1
  108. package/dist/private/calendar/useCalendarState.js +85 -32
  109. package/dist/private/calendar/useCalendarState.js.map +1 -1
  110. package/dist/private/calendar/useCalendarState.mjs +84 -32
  111. package/dist/private/calendar/useCalendarState.mjs.map +1 -1
  112. package/dist/private/calendar/useRangeCalendarState.cjs +53 -40
  113. package/dist/private/calendar/useRangeCalendarState.cjs.map +1 -1
  114. package/dist/private/calendar/useRangeCalendarState.js +55 -43
  115. package/dist/private/calendar/useRangeCalendarState.js.map +1 -1
  116. package/dist/private/calendar/useRangeCalendarState.mjs +55 -42
  117. package/dist/private/calendar/useRangeCalendarState.mjs.map +1 -1
  118. package/dist/private/calendar/utils.cjs +6 -1
  119. package/dist/private/calendar/utils.cjs.map +1 -1
  120. package/dist/private/calendar/utils.js +6 -2
  121. package/dist/private/calendar/utils.js.map +1 -1
  122. package/dist/private/calendar/utils.mjs +6 -2
  123. package/dist/private/calendar/utils.mjs.map +1 -1
  124. package/dist/private/checkbox/useCheckboxGroupState.cjs.map +1 -1
  125. package/dist/private/checkbox/useCheckboxGroupState.js.map +1 -1
  126. package/dist/private/checkbox/useCheckboxGroupState.mjs.map +1 -1
  127. package/dist/private/collections/CollectionBuilder.cjs.map +1 -1
  128. package/dist/private/collections/CollectionBuilder.js.map +1 -1
  129. package/dist/private/collections/CollectionBuilder.mjs.map +1 -1
  130. package/dist/private/collections/Item.cjs +1 -0
  131. package/dist/private/collections/Item.cjs.map +1 -1
  132. package/dist/private/collections/Item.js +1 -0
  133. package/dist/private/collections/Item.js.map +1 -1
  134. package/dist/private/collections/Item.mjs +1 -0
  135. package/dist/private/collections/Item.mjs.map +1 -1
  136. package/dist/private/collections/Section.cjs +1 -0
  137. package/dist/private/collections/Section.cjs.map +1 -1
  138. package/dist/private/collections/Section.js +1 -0
  139. package/dist/private/collections/Section.js.map +1 -1
  140. package/dist/private/collections/Section.mjs +1 -0
  141. package/dist/private/collections/Section.mjs.map +1 -1
  142. package/dist/private/collections/getChildNodes.cjs.map +1 -1
  143. package/dist/private/collections/getChildNodes.js.map +1 -1
  144. package/dist/private/collections/getChildNodes.mjs.map +1 -1
  145. package/dist/private/collections/useCollection.cjs.map +1 -1
  146. package/dist/private/collections/useCollection.js.map +1 -1
  147. package/dist/private/collections/useCollection.mjs.map +1 -1
  148. package/dist/private/color/Color.cjs +15 -9
  149. package/dist/private/color/Color.cjs.map +1 -1
  150. package/dist/private/color/Color.js +15 -9
  151. package/dist/private/color/Color.js.map +1 -1
  152. package/dist/private/color/Color.mjs +15 -9
  153. package/dist/private/color/Color.mjs.map +1 -1
  154. package/dist/private/color/useColorAreaState.cjs.map +1 -1
  155. package/dist/private/color/useColorAreaState.js.map +1 -1
  156. package/dist/private/color/useColorAreaState.mjs.map +1 -1
  157. package/dist/private/color/useColorChannelFieldState.cjs.map +1 -1
  158. package/dist/private/color/useColorChannelFieldState.js.map +1 -1
  159. package/dist/private/color/useColorChannelFieldState.mjs.map +1 -1
  160. package/dist/private/color/useColorFieldState.cjs.map +1 -1
  161. package/dist/private/color/useColorFieldState.js.map +1 -1
  162. package/dist/private/color/useColorFieldState.mjs.map +1 -1
  163. package/dist/private/color/useColorPickerState.cjs.map +1 -1
  164. package/dist/private/color/useColorPickerState.js.map +1 -1
  165. package/dist/private/color/useColorPickerState.mjs.map +1 -1
  166. package/dist/private/color/useColorSliderState.cjs +5 -3
  167. package/dist/private/color/useColorSliderState.cjs.map +1 -1
  168. package/dist/private/color/useColorSliderState.js +5 -3
  169. package/dist/private/color/useColorSliderState.js.map +1 -1
  170. package/dist/private/color/useColorSliderState.mjs +5 -3
  171. package/dist/private/color/useColorSliderState.mjs.map +1 -1
  172. package/dist/private/color/useColorWheelState.cjs.map +1 -1
  173. package/dist/private/color/useColorWheelState.js.map +1 -1
  174. package/dist/private/color/useColorWheelState.mjs.map +1 -1
  175. package/dist/private/combobox/useComboBoxState.cjs +8 -2
  176. package/dist/private/combobox/useComboBoxState.cjs.map +1 -1
  177. package/dist/private/combobox/useComboBoxState.js +8 -2
  178. package/dist/private/combobox/useComboBoxState.js.map +1 -1
  179. package/dist/private/combobox/useComboBoxState.mjs +8 -2
  180. package/dist/private/combobox/useComboBoxState.mjs.map +1 -1
  181. package/dist/private/data/useAsyncList.cjs.map +1 -1
  182. package/dist/private/data/useAsyncList.js.map +1 -1
  183. package/dist/private/data/useAsyncList.mjs.map +1 -1
  184. package/dist/private/data/useListData.cjs.map +1 -1
  185. package/dist/private/data/useListData.js.map +1 -1
  186. package/dist/private/data/useListData.mjs.map +1 -1
  187. package/dist/private/data/useTreeData.cjs.map +1 -1
  188. package/dist/private/data/useTreeData.js.map +1 -1
  189. package/dist/private/data/useTreeData.mjs.map +1 -1
  190. package/dist/private/datepicker/IncompleteDate.cjs +8 -2
  191. package/dist/private/datepicker/IncompleteDate.cjs.map +1 -1
  192. package/dist/private/datepicker/IncompleteDate.js +8 -2
  193. package/dist/private/datepicker/IncompleteDate.js.map +1 -1
  194. package/dist/private/datepicker/IncompleteDate.mjs +8 -2
  195. package/dist/private/datepicker/IncompleteDate.mjs.map +1 -1
  196. package/dist/private/datepicker/placeholders.cjs +5 -0
  197. package/dist/private/datepicker/placeholders.cjs.map +1 -1
  198. package/dist/private/datepicker/placeholders.js +5 -0
  199. package/dist/private/datepicker/placeholders.js.map +1 -1
  200. package/dist/private/datepicker/placeholders.mjs +5 -0
  201. package/dist/private/datepicker/placeholders.mjs.map +1 -1
  202. package/dist/private/datepicker/useDateFieldState.cjs.map +1 -1
  203. package/dist/private/datepicker/useDateFieldState.js.map +1 -1
  204. package/dist/private/datepicker/useDateFieldState.mjs.map +1 -1
  205. package/dist/private/datepicker/useDatePickerState.cjs.map +1 -1
  206. package/dist/private/datepicker/useDatePickerState.js.map +1 -1
  207. package/dist/private/datepicker/useDatePickerState.mjs.map +1 -1
  208. package/dist/private/datepicker/useDateRangePickerState.cjs +1 -1
  209. package/dist/private/datepicker/useDateRangePickerState.cjs.map +1 -1
  210. package/dist/private/datepicker/useDateRangePickerState.js +1 -1
  211. package/dist/private/datepicker/useDateRangePickerState.js.map +1 -1
  212. package/dist/private/datepicker/useDateRangePickerState.mjs +1 -1
  213. package/dist/private/datepicker/useDateRangePickerState.mjs.map +1 -1
  214. package/dist/private/datepicker/useTimeFieldState.cjs.map +1 -1
  215. package/dist/private/datepicker/useTimeFieldState.js.map +1 -1
  216. package/dist/private/datepicker/useTimeFieldState.mjs.map +1 -1
  217. package/dist/private/datepicker/utils.cjs +2 -2
  218. package/dist/private/datepicker/utils.cjs.map +1 -1
  219. package/dist/private/datepicker/utils.js +2 -2
  220. package/dist/private/datepicker/utils.js.map +1 -1
  221. package/dist/private/datepicker/utils.mjs +2 -2
  222. package/dist/private/datepicker/utils.mjs.map +1 -1
  223. package/dist/private/disclosure/useDisclosureGroupState.cjs.map +1 -1
  224. package/dist/private/disclosure/useDisclosureGroupState.js.map +1 -1
  225. package/dist/private/disclosure/useDisclosureGroupState.mjs.map +1 -1
  226. package/dist/private/disclosure/useDisclosureState.cjs.map +1 -1
  227. package/dist/private/disclosure/useDisclosureState.js.map +1 -1
  228. package/dist/private/disclosure/useDisclosureState.mjs.map +1 -1
  229. package/dist/private/dnd/useDraggableCollectionState.cjs.map +1 -1
  230. package/dist/private/dnd/useDraggableCollectionState.js.map +1 -1
  231. package/dist/private/dnd/useDraggableCollectionState.mjs.map +1 -1
  232. package/dist/private/dnd/useDroppableCollectionState.cjs.map +1 -1
  233. package/dist/private/dnd/useDroppableCollectionState.js.map +1 -1
  234. package/dist/private/dnd/useDroppableCollectionState.mjs.map +1 -1
  235. package/dist/private/form/useFormValidationState.cjs.map +1 -1
  236. package/dist/private/form/useFormValidationState.js.map +1 -1
  237. package/dist/private/form/useFormValidationState.mjs.map +1 -1
  238. package/dist/private/grid/GridCollection.cjs.map +1 -1
  239. package/dist/private/grid/GridCollection.js.map +1 -1
  240. package/dist/private/grid/GridCollection.mjs.map +1 -1
  241. package/dist/private/grid/useGridState.cjs.map +1 -1
  242. package/dist/private/grid/useGridState.js.map +1 -1
  243. package/dist/private/grid/useGridState.mjs.map +1 -1
  244. package/dist/private/layout/GridLayout.cjs +8 -3
  245. package/dist/private/layout/GridLayout.cjs.map +1 -1
  246. package/dist/private/layout/GridLayout.js +8 -3
  247. package/dist/private/layout/GridLayout.js.map +1 -1
  248. package/dist/private/layout/GridLayout.mjs +8 -3
  249. package/dist/private/layout/GridLayout.mjs.map +1 -1
  250. package/dist/private/layout/ListLayout.cjs +1 -1
  251. package/dist/private/layout/ListLayout.cjs.map +1 -1
  252. package/dist/private/layout/ListLayout.js +2 -1
  253. package/dist/private/layout/ListLayout.js.map +1 -1
  254. package/dist/private/layout/ListLayout.mjs +1 -1
  255. package/dist/private/layout/ListLayout.mjs.map +1 -1
  256. package/dist/private/layout/TableLayout.cjs +60 -35
  257. package/dist/private/layout/TableLayout.cjs.map +1 -1
  258. package/dist/private/layout/TableLayout.js +65 -38
  259. package/dist/private/layout/TableLayout.js.map +1 -1
  260. package/dist/private/layout/TableLayout.mjs +61 -36
  261. package/dist/private/layout/TableLayout.mjs.map +1 -1
  262. package/dist/private/layout/WaterfallLayout.cjs.map +1 -1
  263. package/dist/private/layout/WaterfallLayout.js.map +1 -1
  264. package/dist/private/layout/WaterfallLayout.mjs.map +1 -1
  265. package/dist/private/list/ListCollection.cjs.map +1 -1
  266. package/dist/private/list/ListCollection.js.map +1 -1
  267. package/dist/private/list/ListCollection.mjs.map +1 -1
  268. package/dist/private/list/useListState.cjs.map +1 -1
  269. package/dist/private/list/useListState.js.map +1 -1
  270. package/dist/private/list/useListState.mjs.map +1 -1
  271. package/dist/private/list/useSingleSelectListState.cjs.map +1 -1
  272. package/dist/private/list/useSingleSelectListState.js.map +1 -1
  273. package/dist/private/list/useSingleSelectListState.mjs.map +1 -1
  274. package/dist/private/menu/useMenuTriggerState.cjs.map +1 -1
  275. package/dist/private/menu/useMenuTriggerState.js.map +1 -1
  276. package/dist/private/menu/useMenuTriggerState.mjs.map +1 -1
  277. package/dist/private/menu/useSubmenuTriggerState.cjs.map +1 -1
  278. package/dist/private/menu/useSubmenuTriggerState.js.map +1 -1
  279. package/dist/private/menu/useSubmenuTriggerState.mjs.map +1 -1
  280. package/dist/private/numberfield/useNumberFieldState.cjs +13 -1
  281. package/dist/private/numberfield/useNumberFieldState.cjs.map +1 -1
  282. package/dist/private/numberfield/useNumberFieldState.js +13 -1
  283. package/dist/private/numberfield/useNumberFieldState.js.map +1 -1
  284. package/dist/private/numberfield/useNumberFieldState.mjs +13 -1
  285. package/dist/private/numberfield/useNumberFieldState.mjs.map +1 -1
  286. package/dist/private/overlays/useOverlayTriggerState.cjs.map +1 -1
  287. package/dist/private/overlays/useOverlayTriggerState.js.map +1 -1
  288. package/dist/private/overlays/useOverlayTriggerState.mjs.map +1 -1
  289. package/dist/private/radio/useRadioGroupState.cjs.map +1 -1
  290. package/dist/private/radio/useRadioGroupState.js.map +1 -1
  291. package/dist/private/radio/useRadioGroupState.mjs.map +1 -1
  292. package/dist/private/searchfield/useSearchFieldState.cjs.map +1 -1
  293. package/dist/private/searchfield/useSearchFieldState.js.map +1 -1
  294. package/dist/private/searchfield/useSearchFieldState.mjs.map +1 -1
  295. package/dist/private/select/useSelectState.cjs.map +1 -1
  296. package/dist/private/select/useSelectState.js.map +1 -1
  297. package/dist/private/select/useSelectState.mjs.map +1 -1
  298. package/dist/private/selection/SelectionManager.cjs +2 -1
  299. package/dist/private/selection/SelectionManager.cjs.map +1 -1
  300. package/dist/private/selection/SelectionManager.js +3 -2
  301. package/dist/private/selection/SelectionManager.js.map +1 -1
  302. package/dist/private/selection/SelectionManager.mjs +2 -1
  303. package/dist/private/selection/SelectionManager.mjs.map +1 -1
  304. package/dist/private/selection/useMultipleSelectionState.cjs.map +1 -1
  305. package/dist/private/selection/useMultipleSelectionState.js.map +1 -1
  306. package/dist/private/selection/useMultipleSelectionState.mjs.map +1 -1
  307. package/dist/private/slider/useSliderState.cjs +22 -2
  308. package/dist/private/slider/useSliderState.cjs.map +1 -1
  309. package/dist/private/slider/useSliderState.js +22 -2
  310. package/dist/private/slider/useSliderState.js.map +1 -1
  311. package/dist/private/slider/useSliderState.mjs +22 -2
  312. package/dist/private/slider/useSliderState.mjs.map +1 -1
  313. package/dist/private/steplist/useStepListState.cjs.map +1 -1
  314. package/dist/private/steplist/useStepListState.js.map +1 -1
  315. package/dist/private/steplist/useStepListState.mjs.map +1 -1
  316. package/dist/private/table/Cell.cjs +2 -1
  317. package/dist/private/table/Cell.cjs.map +1 -1
  318. package/dist/private/table/Cell.js +2 -1
  319. package/dist/private/table/Cell.js.map +1 -1
  320. package/dist/private/table/Cell.mjs +2 -1
  321. package/dist/private/table/Cell.mjs.map +1 -1
  322. package/dist/private/table/Column.cjs +1 -0
  323. package/dist/private/table/Column.cjs.map +1 -1
  324. package/dist/private/table/Column.js +1 -0
  325. package/dist/private/table/Column.js.map +1 -1
  326. package/dist/private/table/Column.mjs +1 -0
  327. package/dist/private/table/Column.mjs.map +1 -1
  328. package/dist/private/table/Row.cjs +2 -1
  329. package/dist/private/table/Row.cjs.map +1 -1
  330. package/dist/private/table/Row.js +2 -1
  331. package/dist/private/table/Row.js.map +1 -1
  332. package/dist/private/table/Row.mjs +2 -1
  333. package/dist/private/table/Row.mjs.map +1 -1
  334. package/dist/private/table/TableBody.cjs +4 -2
  335. package/dist/private/table/TableBody.cjs.map +1 -1
  336. package/dist/private/table/TableBody.js +4 -2
  337. package/dist/private/table/TableBody.js.map +1 -1
  338. package/dist/private/table/TableBody.mjs +4 -2
  339. package/dist/private/table/TableBody.mjs.map +1 -1
  340. package/dist/private/table/TableCollection.cjs +1 -1
  341. package/dist/private/table/TableCollection.cjs.map +1 -1
  342. package/dist/private/table/TableCollection.js +1 -1
  343. package/dist/private/table/TableCollection.js.map +1 -1
  344. package/dist/private/table/TableCollection.mjs +1 -1
  345. package/dist/private/table/TableCollection.mjs.map +1 -1
  346. package/dist/private/table/TableColumnLayout.cjs +4 -1
  347. package/dist/private/table/TableColumnLayout.cjs.map +1 -1
  348. package/dist/private/table/TableColumnLayout.js +4 -1
  349. package/dist/private/table/TableColumnLayout.js.map +1 -1
  350. package/dist/private/table/TableColumnLayout.mjs +4 -1
  351. package/dist/private/table/TableColumnLayout.mjs.map +1 -1
  352. package/dist/private/table/TableHeader.cjs +4 -2
  353. package/dist/private/table/TableHeader.cjs.map +1 -1
  354. package/dist/private/table/TableHeader.js +4 -2
  355. package/dist/private/table/TableHeader.js.map +1 -1
  356. package/dist/private/table/TableHeader.mjs +4 -2
  357. package/dist/private/table/TableHeader.mjs.map +1 -1
  358. package/dist/private/table/TableUtils.cjs +1 -1
  359. package/dist/private/table/TableUtils.cjs.map +1 -1
  360. package/dist/private/table/TableUtils.js +1 -1
  361. package/dist/private/table/TableUtils.js.map +1 -1
  362. package/dist/private/table/TableUtils.mjs +1 -1
  363. package/dist/private/table/TableUtils.mjs.map +1 -1
  364. package/dist/private/table/useTableColumnResizeState.cjs.map +1 -1
  365. package/dist/private/table/useTableColumnResizeState.js.map +1 -1
  366. package/dist/private/table/useTableColumnResizeState.mjs.map +1 -1
  367. package/dist/private/table/useTableState.cjs +2 -1
  368. package/dist/private/table/useTableState.cjs.map +1 -1
  369. package/dist/private/table/useTableState.js +2 -1
  370. package/dist/private/table/useTableState.js.map +1 -1
  371. package/dist/private/table/useTableState.mjs +2 -1
  372. package/dist/private/table/useTableState.mjs.map +1 -1
  373. package/dist/private/table/useTreeGridState.cjs +2 -1
  374. package/dist/private/table/useTreeGridState.cjs.map +1 -1
  375. package/dist/private/table/useTreeGridState.js +2 -1
  376. package/dist/private/table/useTreeGridState.js.map +1 -1
  377. package/dist/private/table/useTreeGridState.mjs +2 -1
  378. package/dist/private/table/useTreeGridState.mjs.map +1 -1
  379. package/dist/private/tabs/useTabListState.cjs.map +1 -1
  380. package/dist/private/tabs/useTabListState.js.map +1 -1
  381. package/dist/private/tabs/useTabListState.mjs.map +1 -1
  382. package/dist/private/toast/useToastState.cjs.map +1 -1
  383. package/dist/private/toast/useToastState.js.map +1 -1
  384. package/dist/private/toast/useToastState.mjs.map +1 -1
  385. package/dist/private/toggle/useToggleGroupState.cjs.map +1 -1
  386. package/dist/private/toggle/useToggleGroupState.js.map +1 -1
  387. package/dist/private/toggle/useToggleGroupState.mjs.map +1 -1
  388. package/dist/private/toggle/useToggleState.cjs.map +1 -1
  389. package/dist/private/toggle/useToggleState.js.map +1 -1
  390. package/dist/private/toggle/useToggleState.mjs.map +1 -1
  391. package/dist/private/tooltip/useTooltipTriggerState.cjs.map +1 -1
  392. package/dist/private/tooltip/useTooltipTriggerState.js.map +1 -1
  393. package/dist/private/tooltip/useTooltipTriggerState.mjs.map +1 -1
  394. package/dist/private/tree/TreeCollection.cjs.map +1 -1
  395. package/dist/private/tree/TreeCollection.js.map +1 -1
  396. package/dist/private/tree/TreeCollection.mjs.map +1 -1
  397. package/dist/private/tree/useTreeState.cjs.map +1 -1
  398. package/dist/private/tree/useTreeState.js.map +1 -1
  399. package/dist/private/tree/useTreeState.mjs.map +1 -1
  400. package/dist/private/utils/number.cjs +2 -1
  401. package/dist/private/utils/number.cjs.map +1 -1
  402. package/dist/private/utils/number.js +2 -1
  403. package/dist/private/utils/number.js.map +1 -1
  404. package/dist/private/utils/number.mjs +2 -1
  405. package/dist/private/utils/number.mjs.map +1 -1
  406. package/dist/private/utils/useControlledState.cjs.map +1 -1
  407. package/dist/private/utils/useControlledState.js.map +1 -1
  408. package/dist/private/utils/useControlledState.mjs.map +1 -1
  409. package/dist/private/virtualizer/Layout.cjs.map +1 -1
  410. package/dist/private/virtualizer/Layout.js.map +1 -1
  411. package/dist/private/virtualizer/Layout.mjs.map +1 -1
  412. package/dist/private/virtualizer/LayoutInfo.cjs +4 -2
  413. package/dist/private/virtualizer/LayoutInfo.cjs.map +1 -1
  414. package/dist/private/virtualizer/LayoutInfo.js +4 -2
  415. package/dist/private/virtualizer/LayoutInfo.js.map +1 -1
  416. package/dist/private/virtualizer/LayoutInfo.mjs +4 -2
  417. package/dist/private/virtualizer/LayoutInfo.mjs.map +1 -1
  418. package/dist/private/virtualizer/Rect.cjs +4 -0
  419. package/dist/private/virtualizer/Rect.cjs.map +1 -1
  420. package/dist/private/virtualizer/Rect.js +4 -0
  421. package/dist/private/virtualizer/Rect.js.map +1 -1
  422. package/dist/private/virtualizer/Rect.mjs +4 -0
  423. package/dist/private/virtualizer/Rect.mjs.map +1 -1
  424. package/dist/private/virtualizer/ReusableView.cjs.map +1 -1
  425. package/dist/private/virtualizer/ReusableView.js.map +1 -1
  426. package/dist/private/virtualizer/ReusableView.mjs.map +1 -1
  427. package/dist/private/virtualizer/Size.cjs.map +1 -1
  428. package/dist/private/virtualizer/Size.js.map +1 -1
  429. package/dist/private/virtualizer/Size.mjs.map +1 -1
  430. package/dist/private/virtualizer/Virtualizer.cjs +4 -4
  431. package/dist/private/virtualizer/Virtualizer.cjs.map +1 -1
  432. package/dist/private/virtualizer/Virtualizer.js +4 -4
  433. package/dist/private/virtualizer/Virtualizer.js.map +1 -1
  434. package/dist/private/virtualizer/Virtualizer.mjs +4 -4
  435. package/dist/private/virtualizer/Virtualizer.mjs.map +1 -1
  436. package/dist/private/virtualizer/useVirtualizerState.cjs.map +1 -1
  437. package/dist/private/virtualizer/useVirtualizerState.js.map +1 -1
  438. package/dist/private/virtualizer/useVirtualizerState.mjs.map +1 -1
  439. package/dist/types/exports/useCalendarState.d.ts +1 -1
  440. package/dist/types/src/autocomplete/useAutocompleteState.d.ts +4 -1
  441. package/dist/types/src/calendar/types.d.ts +50 -14
  442. package/dist/types/src/calendar/useCalendarState.d.ts +20 -6
  443. package/dist/types/src/calendar/useRangeCalendarState.d.ts +14 -5
  444. package/dist/types/src/calendar/utils.d.ts +1 -0
  445. package/dist/types/src/checkbox/useCheckboxGroupState.d.ts +1 -0
  446. package/dist/types/src/collections/useCollection.d.ts +1 -1
  447. package/dist/types/src/color/useColorAreaState.d.ts +21 -8
  448. package/dist/types/src/color/useColorFieldState.d.ts +2 -3
  449. package/dist/types/src/color/useColorSliderState.d.ts +4 -1
  450. package/dist/types/src/color/useColorWheelState.d.ts +5 -1
  451. package/dist/types/src/combobox/useComboBoxState.d.ts +19 -6
  452. package/dist/types/src/data/useAsyncList.d.ts +2 -2
  453. package/dist/types/src/data/useListData.d.ts +13 -1
  454. package/dist/types/src/data/useTreeData.d.ts +11 -0
  455. package/dist/types/src/datepicker/IncompleteDate.d.ts +11 -5
  456. package/dist/types/src/datepicker/types.d.ts +37 -11
  457. package/dist/types/src/datepicker/useDateFieldState.d.ts +13 -4
  458. package/dist/types/src/datepicker/useDatePickerState.d.ts +10 -4
  459. package/dist/types/src/datepicker/useDateRangePickerState.d.ts +12 -3
  460. package/dist/types/src/dnd/useDraggableCollectionState.d.ts +4 -1
  461. package/dist/types/src/form/useFormValidationState.d.ts +4 -1
  462. package/dist/types/src/grid/GridCollection.d.ts +2 -1
  463. package/dist/types/src/grid/useGridState.d.ts +7 -3
  464. package/dist/types/src/layout/GridLayout.d.ts +18 -2
  465. package/dist/types/src/layout/ListLayout.d.ts +34 -12
  466. package/dist/types/src/layout/TableLayout.d.ts +11 -4
  467. package/dist/types/src/layout/WaterfallLayout.d.ts +9 -2
  468. package/dist/types/src/list/useListState.d.ts +2 -2
  469. package/dist/types/src/menu/useMenuTriggerState.d.ts +3 -1
  470. package/dist/types/src/menu/useSubmenuTriggerState.d.ts +2 -2
  471. package/dist/types/src/numberfield/useNumberFieldState.d.ts +15 -11
  472. package/dist/types/src/radio/useRadioGroupState.d.ts +4 -1
  473. package/dist/types/src/select/useSelectState.d.ts +13 -2
  474. package/dist/types/src/selection/types.d.ts +4 -1
  475. package/dist/types/src/selection/useMultipleSelectionState.d.ts +2 -0
  476. package/dist/types/src/slider/useSliderState.d.ts +22 -2
  477. package/dist/types/src/table/Column.d.ts +4 -1
  478. package/dist/types/src/table/Row.d.ts +5 -3
  479. package/dist/types/src/table/TableBody.d.ts +3 -2
  480. package/dist/types/src/table/TableCollection.d.ts +4 -1
  481. package/dist/types/src/table/TableColumnLayout.d.ts +4 -1
  482. package/dist/types/src/table/TableHeader.d.ts +7 -3
  483. package/dist/types/src/table/TableUtils.d.ts +19 -16
  484. package/dist/types/src/table/useTableColumnResizeState.d.ts +5 -3
  485. package/dist/types/src/table/useTableState.d.ts +15 -6
  486. package/dist/types/src/table/useTreeGridState.d.ts +3 -2
  487. package/dist/types/src/toggle/useToggleGroupState.d.ts +1 -0
  488. package/dist/types/src/toggle/useToggleState.d.ts +2 -1
  489. package/dist/types/src/tooltip/useTooltipTriggerState.d.ts +8 -2
  490. package/dist/types/src/tree/useTreeState.d.ts +1 -1
  491. package/dist/types/src/utils/number.d.ts +2 -1
  492. package/dist/types/src/virtualizer/Layout.d.ts +5 -2
  493. package/dist/types/src/virtualizer/LayoutInfo.d.ts +10 -3
  494. package/dist/types/src/virtualizer/Rect.d.ts +4 -0
  495. package/dist/types/src/virtualizer/Virtualizer.d.ts +5 -4
  496. package/package.json +8 -7
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, CalendarIdentifier, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarPropsBase, CalendarState, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useRef, useState} from 'react';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue> extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean\n}\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string,\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar,\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n * @default {months: 1}\n */\n visibleDuration?: DateDuration,\n /** \n * Determines the alignment of the visible months on initial render based on the current selection or current date if there is no selection. \n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end'\n}\n\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps} = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<Partial<RangeValue<DateValue>> | null>(null);\n let [availableRange, setAvailableRange] = useState<Partial<RangeValue<DateValue>>|null>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(date, calendar, -1);\n const nextAvailableEndDate = nextUnavailableDate(date, calendar, 1);\n availableRangeRef.current = {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate | null) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.cjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n GregorianCalendar,\n maxDate,\n minDate,\n toCalendar,\n toCalendarDate\n} from '@internationalized/date';\nimport {CalendarPropsBase, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useCallback, useMemo, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue>\n extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable. The second argument provides the current selection anchor date, if any. This can\n * be used to adjust the available dates based on the user's first selected date.\n */\n isDateUnavailable?: (date: DateValue, anchorDate: CalendarDate | null) => boolean;\n}\n\nexport interface RangeCalendarStateOptions<\n T extends DateValue = DateValue\n> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n\n/**\n * Provides state management for a range calendar component. A range calendar displays one or more\n * date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(\n props: RangeCalendarStateOptions<T>\n): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps\n } = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDate] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(\n toCalendarDate(value.start),\n visibleDuration,\n locale,\n minValue,\n maxValue\n );\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n let isDateUnavailable = useMemo(() => {\n let isDateUnavailable = props.isDateUnavailable;\n if (!isDateUnavailable) {\n return undefined;\n }\n\n return (date: DateValue) => isDateUnavailable(date, anchorDate);\n }, [props.isDateUnavailable, anchorDate]);\n\n let getAvailableRange = useCallback(\n (anchorDate: CalendarDate | null) => {\n if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n -1\n );\n const nextAvailableEndDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n 1\n );\n return {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n } else {\n return null;\n }\n },\n [isDateUnavailable, visibleDuration, props.allowsNonContiguousRanges]\n );\n\n let availableRange = useMemo(\n () => getAvailableRange(anchorDate),\n [getAvailableRange, anchorDate]\n );\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment,\n isDateUnavailable\n });\n\n let highlightedRange = anchorDate\n ? makeRange(anchorDate, calendar.focusedDate)\n : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(\n constrainedDate,\n calendar.visibleRange.start,\n isDateUnavailable\n );\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n if (!calendar.isCellUnavailable(calendar.focusedDate)) {\n selectDate(calendar.focusedDate);\n }\n },\n commitSelection() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(\n highlightedRange &&\n date.compare(highlightedRange.start) >= 0 &&\n date.compare(highlightedRange.end) <= 0 &&\n !calendar.isCellDisabled(date) &&\n !calendar.isCellUnavailable(date)\n );\n },\n isInvalid(date) {\n return (\n calendar.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end)\n );\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n },\n focusNearestAvailableDate(anchorDate) {\n let availableRange = getAvailableRange(anchorDate);\n let isDateInvalid = (date: CalendarDate) =>\n this.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end);\n let nextDay = anchorDate.add({days: 1});\n if (isDateInvalid(nextDay)) {\n nextDay = anchorDate.subtract({days: 1});\n }\n if (!isDateInvalid(nextDay)) {\n this.setFocusedDate(nextDay);\n this.setFocused(true);\n }\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(\n anchorDate: CalendarDate,\n isDateUnavailable: (date: CalendarDate) => boolean,\n visibleDuration: DateDuration,\n dir: number\n): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n let minDate = anchorDate.subtract(visibleDuration);\n let maxDate = anchorDate.add(visibleDuration);\n while (\n (dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) &&\n !isDateUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (isDateUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.cjs.map"}
@@ -1,8 +1,8 @@
1
1
  import {alignCenter as $4f2e4d26acdebef8$export$f4a51ff076cc9a09, constrainValue as $4f2e4d26acdebef8$export$4f5203c0d889109e, isInvalid as $4f2e4d26acdebef8$export$eac50920cf2fd59a, previousAvailableDate as $4f2e4d26acdebef8$export$a1d3911297b952d7} from "./utils.js";
2
2
  import {useCalendarState as $2ff2cc7e373be77a$export$6d095e787d2b5e1f} from "./useCalendarState.js";
3
3
  import {useControlledState as $2a35a170cf8e413e$export$40bfa8c7b0832715} from "../utils/useControlledState.js";
4
- import {toCalendarDate as $edC1q$toCalendarDate, maxDate as $edC1q$maxDate, minDate as $edC1q$minDate, isEqualDay as $edC1q$isEqualDay, toCalendar as $edC1q$toCalendar, GregorianCalendar as $edC1q$GregorianCalendar} from "@internationalized/date";
5
- import {useState as $edC1q$useState, useRef as $edC1q$useRef, useMemo as $edC1q$useMemo} from "react";
4
+ import {toCalendarDate as $edC1q$toCalendarDate, maxDate as $edC1q$maxDate, minDate as $edC1q$minDate, toCalendar as $edC1q$toCalendar, GregorianCalendar as $edC1q$GregorianCalendar} from "@internationalized/date";
5
+ import {useState as $edC1q$useState, useMemo as $edC1q$useMemo, useCallback as $edC1q$useCallback} from "react";
6
6
 
7
7
  /*
8
8
  * Copyright 2020 Adobe. All rights reserved.
@@ -24,7 +24,7 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
24
24
  months: 1
25
25
  }, minValue: minValue, maxValue: maxValue, ...calendarProps } = props;
26
26
  let [value, setValue] = (0, $2a35a170cf8e413e$export$40bfa8c7b0832715)(valueProp, defaultValue || null, onChange);
27
- let [anchorDate, setAnchorDateState] = (0, $edC1q$useState)(null);
27
+ let [anchorDate, setAnchorDate] = (0, $edC1q$useState)(null);
28
28
  let alignment = 'center';
29
29
  if (value && value.start && value.end) {
30
30
  let start = (0, $4f2e4d26acdebef8$export$f4a51ff076cc9a09)((0, $edC1q$toCalendarDate)(value.start), visibleDuration, locale, minValue, maxValue);
@@ -33,9 +33,32 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
33
33
  });
34
34
  if (value.end.compare(end) > 0) alignment = 'start';
35
35
  }
36
- // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.
37
- let availableRangeRef = (0, $edC1q$useRef)(null);
38
- let [availableRange, setAvailableRange] = (0, $edC1q$useState)(null);
36
+ let isDateUnavailable = (0, $edC1q$useMemo)(()=>{
37
+ let isDateUnavailable = props.isDateUnavailable;
38
+ if (!isDateUnavailable) return undefined;
39
+ return (date)=>isDateUnavailable(date, anchorDate);
40
+ }, [
41
+ props.isDateUnavailable,
42
+ anchorDate
43
+ ]);
44
+ let getAvailableRange = (0, $edC1q$useCallback)((anchorDate)=>{
45
+ if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {
46
+ const nextAvailableStartDate = $346f7b0e8cbbe0a3$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, -1);
47
+ const nextAvailableEndDate = $346f7b0e8cbbe0a3$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, 1);
48
+ return {
49
+ start: nextAvailableStartDate,
50
+ end: nextAvailableEndDate
51
+ };
52
+ } else return null;
53
+ }, [
54
+ isDateUnavailable,
55
+ visibleDuration,
56
+ props.allowsNonContiguousRanges
57
+ ]);
58
+ let availableRange = (0, $edC1q$useMemo)(()=>getAvailableRange(anchorDate), [
59
+ getAvailableRange,
60
+ anchorDate
61
+ ]);
39
62
  let min = (0, $edC1q$useMemo)(()=>(0, $edC1q$maxDate)(minValue, availableRange === null || availableRange === void 0 ? void 0 : availableRange.start), [
40
63
  minValue,
41
64
  availableRange
@@ -52,42 +75,14 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
52
75
  visibleDuration: visibleDuration,
53
76
  minValue: min,
54
77
  maxValue: max,
55
- selectionAlignment: props.selectionAlignment || alignment
78
+ selectionAlignment: props.selectionAlignment || alignment,
79
+ isDateUnavailable: isDateUnavailable
56
80
  });
57
- let updateAvailableRange = (date)=>{
58
- if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
- const nextAvailableStartDate = $346f7b0e8cbbe0a3$var$nextUnavailableDate(date, calendar, -1);
60
- const nextAvailableEndDate = $346f7b0e8cbbe0a3$var$nextUnavailableDate(date, calendar, 1);
61
- availableRangeRef.current = {
62
- start: nextAvailableStartDate,
63
- end: nextAvailableEndDate
64
- };
65
- setAvailableRange(availableRangeRef.current);
66
- } else {
67
- availableRangeRef.current = null;
68
- setAvailableRange(null);
69
- }
70
- };
71
- // If the visible range changes, we need to update the available range.
72
- let [lastVisibleRange, setLastVisibleRange] = (0, $edC1q$useState)(calendar.visibleRange);
73
- if (!(0, $edC1q$isEqualDay)(calendar.visibleRange.start, lastVisibleRange.start) || !(0, $edC1q$isEqualDay)(calendar.visibleRange.end, lastVisibleRange.end)) {
74
- updateAvailableRange(anchorDate);
75
- setLastVisibleRange(calendar.visibleRange);
76
- }
77
- let setAnchorDate = (date)=>{
78
- if (date) {
79
- setAnchorDateState(date);
80
- updateAvailableRange(date);
81
- } else {
82
- setAnchorDateState(null);
83
- updateAvailableRange(null);
84
- }
85
- };
86
81
  let highlightedRange = anchorDate ? $346f7b0e8cbbe0a3$var$makeRange(anchorDate, calendar.focusedDate) : value && $346f7b0e8cbbe0a3$var$makeRange(value.start, value.end);
87
82
  let selectDate = (date)=>{
88
83
  if (props.isReadOnly) return;
89
84
  const constrainedDate = (0, $4f2e4d26acdebef8$export$4f5203c0d889109e)(date, min, max);
90
- const previousAvailableConstrainedDate = (0, $4f2e4d26acdebef8$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);
85
+ const previousAvailableConstrainedDate = (0, $4f2e4d26acdebef8$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, isDateUnavailable);
91
86
  if (!previousAvailableConstrainedDate) return;
92
87
  if (!anchorDate) setAnchorDate(previousAvailableConstrainedDate);
93
88
  else {
@@ -100,7 +95,6 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
100
95
  }
101
96
  };
102
97
  let [isDragging, setDragging] = (0, $edC1q$useState)(false);
103
- let { isDateUnavailable: isDateUnavailable } = props;
104
98
  let isInvalidSelection = (0, $edC1q$useMemo)(()=>{
105
99
  if (!value || anchorDate) return false;
106
100
  if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) return true;
@@ -124,6 +118,9 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
124
118
  validationState: validationState,
125
119
  isValueInvalid: isValueInvalid,
126
120
  selectFocusedDate () {
121
+ if (!calendar.isCellUnavailable(calendar.focusedDate)) selectDate(calendar.focusedDate);
122
+ },
123
+ commitSelection () {
127
124
  selectDate(calendar.focusedDate);
128
125
  },
129
126
  selectDate: selectDate,
@@ -134,14 +131,27 @@ function $346f7b0e8cbbe0a3$export$9a987164d97ecc90(props) {
134
131
  return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));
135
132
  },
136
133
  isInvalid (date) {
137
- var _availableRangeRef_current, _availableRangeRef_current1;
138
- return calendar.isInvalid(date) || (0, $4f2e4d26acdebef8$export$eac50920cf2fd59a)(date, (_availableRangeRef_current = availableRangeRef.current) === null || _availableRangeRef_current === void 0 ? void 0 : _availableRangeRef_current.start, (_availableRangeRef_current1 = availableRangeRef.current) === null || _availableRangeRef_current1 === void 0 ? void 0 : _availableRangeRef_current1.end);
134
+ return calendar.isInvalid(date) || (0, $4f2e4d26acdebef8$export$eac50920cf2fd59a)(date, availableRange === null || availableRange === void 0 ? void 0 : availableRange.start, availableRange === null || availableRange === void 0 ? void 0 : availableRange.end);
139
135
  },
140
136
  isDragging: isDragging,
141
137
  setDragging: setDragging,
142
138
  clearSelection () {
143
139
  setAnchorDate(null);
144
140
  setValue(null);
141
+ },
142
+ focusNearestAvailableDate (anchorDate) {
143
+ let availableRange = getAvailableRange(anchorDate);
144
+ let isDateInvalid = (date)=>this.isInvalid(date) || (0, $4f2e4d26acdebef8$export$eac50920cf2fd59a)(date, availableRange === null || availableRange === void 0 ? void 0 : availableRange.start, availableRange === null || availableRange === void 0 ? void 0 : availableRange.end);
145
+ let nextDay = anchorDate.add({
146
+ days: 1
147
+ });
148
+ if (isDateInvalid(nextDay)) nextDay = anchorDate.subtract({
149
+ days: 1
150
+ });
151
+ if (!isDateInvalid(nextDay)) {
152
+ this.setFocusedDate(nextDay);
153
+ this.setFocused(true);
154
+ }
145
155
  }
146
156
  };
147
157
  }
@@ -164,14 +174,16 @@ function $346f7b0e8cbbe0a3$var$convertValue(newValue, oldValue) {
164
174
  if (oldValue && 'hour' in oldValue) return oldValue.set(newValue);
165
175
  return newValue;
166
176
  }
167
- function $346f7b0e8cbbe0a3$var$nextUnavailableDate(anchorDate, state, dir) {
177
+ function $346f7b0e8cbbe0a3$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, dir) {
168
178
  let nextDate = anchorDate.add({
169
179
  days: dir
170
180
  });
171
- while((dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) && !state.isCellUnavailable(nextDate))nextDate = nextDate.add({
181
+ let minDate = anchorDate.subtract(visibleDuration);
182
+ let maxDate = anchorDate.add(visibleDuration);
183
+ while((dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) && !isDateUnavailable(nextDate))nextDate = nextDate.add({
172
184
  days: dir
173
185
  });
174
- if (state.isCellUnavailable(nextDate)) return nextDate.add({
186
+ if (isDateUnavailable(nextDate)) return nextDate.add({
175
187
  days: -dir
176
188
  });
177
189
  }
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, CalendarIdentifier, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarPropsBase, CalendarState, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useRef, useState} from 'react';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue> extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean\n}\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string,\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar,\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n * @default {months: 1}\n */\n visibleDuration?: DateDuration,\n /** \n * Determines the alignment of the visible months on initial render based on the current selection or current date if there is no selection. \n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end'\n}\n\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps} = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<Partial<RangeValue<DateValue>> | null>(null);\n let [availableRange, setAvailableRange] = useState<Partial<RangeValue<DateValue>>|null>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(date, calendar, -1);\n const nextAvailableEndDate = nextUnavailableDate(date, calendar, 1);\n availableRangeRef.current = {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate | null) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.js.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n GregorianCalendar,\n maxDate,\n minDate,\n toCalendar,\n toCalendarDate\n} from '@internationalized/date';\nimport {CalendarPropsBase, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useCallback, useMemo, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue>\n extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable. The second argument provides the current selection anchor date, if any. This can\n * be used to adjust the available dates based on the user's first selected date.\n */\n isDateUnavailable?: (date: DateValue, anchorDate: CalendarDate | null) => boolean;\n}\n\nexport interface RangeCalendarStateOptions<\n T extends DateValue = DateValue\n> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n\n/**\n * Provides state management for a range calendar component. A range calendar displays one or more\n * date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(\n props: RangeCalendarStateOptions<T>\n): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps\n } = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDate] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(\n toCalendarDate(value.start),\n visibleDuration,\n locale,\n minValue,\n maxValue\n );\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n let isDateUnavailable = useMemo(() => {\n let isDateUnavailable = props.isDateUnavailable;\n if (!isDateUnavailable) {\n return undefined;\n }\n\n return (date: DateValue) => isDateUnavailable(date, anchorDate);\n }, [props.isDateUnavailable, anchorDate]);\n\n let getAvailableRange = useCallback(\n (anchorDate: CalendarDate | null) => {\n if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n -1\n );\n const nextAvailableEndDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n 1\n );\n return {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n } else {\n return null;\n }\n },\n [isDateUnavailable, visibleDuration, props.allowsNonContiguousRanges]\n );\n\n let availableRange = useMemo(\n () => getAvailableRange(anchorDate),\n [getAvailableRange, anchorDate]\n );\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment,\n isDateUnavailable\n });\n\n let highlightedRange = anchorDate\n ? makeRange(anchorDate, calendar.focusedDate)\n : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(\n constrainedDate,\n calendar.visibleRange.start,\n isDateUnavailable\n );\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n if (!calendar.isCellUnavailable(calendar.focusedDate)) {\n selectDate(calendar.focusedDate);\n }\n },\n commitSelection() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(\n highlightedRange &&\n date.compare(highlightedRange.start) >= 0 &&\n date.compare(highlightedRange.end) <= 0 &&\n !calendar.isCellDisabled(date) &&\n !calendar.isCellUnavailable(date)\n );\n },\n isInvalid(date) {\n return (\n calendar.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end)\n );\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n },\n focusNearestAvailableDate(anchorDate) {\n let availableRange = getAvailableRange(anchorDate);\n let isDateInvalid = (date: CalendarDate) =>\n this.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end);\n let nextDay = anchorDate.add({days: 1});\n if (isDateInvalid(nextDay)) {\n nextDay = anchorDate.subtract({days: 1});\n }\n if (!isDateInvalid(nextDay)) {\n this.setFocusedDate(nextDay);\n this.setFocused(true);\n }\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(\n anchorDate: CalendarDate,\n isDateUnavailable: (date: CalendarDate) => boolean,\n visibleDuration: DateDuration,\n dir: number\n): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n let minDate = anchorDate.subtract(visibleDuration);\n let maxDate = anchorDate.add(visibleDuration);\n while (\n (dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) &&\n !isDateUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (isDateUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.js.map"}
@@ -1,8 +1,8 @@
1
1
  import {alignCenter as $dd602d3c757202f2$export$f4a51ff076cc9a09, constrainValue as $dd602d3c757202f2$export$4f5203c0d889109e, isInvalid as $dd602d3c757202f2$export$eac50920cf2fd59a, previousAvailableDate as $dd602d3c757202f2$export$a1d3911297b952d7} from "./utils.mjs";
2
2
  import {useCalendarState as $ea0ea6e62ae0d7ca$export$6d095e787d2b5e1f} from "./useCalendarState.mjs";
3
3
  import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from "../utils/useControlledState.mjs";
4
- import {toCalendarDate as $1ppdM$toCalendarDate, maxDate as $1ppdM$maxDate, minDate as $1ppdM$minDate, isEqualDay as $1ppdM$isEqualDay, toCalendar as $1ppdM$toCalendar, GregorianCalendar as $1ppdM$GregorianCalendar} from "@internationalized/date";
5
- import {useState as $1ppdM$useState, useRef as $1ppdM$useRef, useMemo as $1ppdM$useMemo} from "react";
4
+ import {toCalendarDate as $1ppdM$toCalendarDate, maxDate as $1ppdM$maxDate, minDate as $1ppdM$minDate, toCalendar as $1ppdM$toCalendar, GregorianCalendar as $1ppdM$GregorianCalendar} from "@internationalized/date";
5
+ import {useState as $1ppdM$useState, useMemo as $1ppdM$useMemo, useCallback as $1ppdM$useCallback} from "react";
6
6
 
7
7
  /*
8
8
  * Copyright 2020 Adobe. All rights reserved.
@@ -24,7 +24,7 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
24
24
  months: 1
25
25
  }, minValue: minValue, maxValue: maxValue, ...calendarProps } = props;
26
26
  let [value, setValue] = (0, $3e6197669829fe11$export$40bfa8c7b0832715)(valueProp, defaultValue || null, onChange);
27
- let [anchorDate, setAnchorDateState] = (0, $1ppdM$useState)(null);
27
+ let [anchorDate, setAnchorDate] = (0, $1ppdM$useState)(null);
28
28
  let alignment = 'center';
29
29
  if (value && value.start && value.end) {
30
30
  let start = (0, $dd602d3c757202f2$export$f4a51ff076cc9a09)((0, $1ppdM$toCalendarDate)(value.start), visibleDuration, locale, minValue, maxValue);
@@ -33,9 +33,32 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
33
33
  });
34
34
  if (value.end.compare(end) > 0) alignment = 'start';
35
35
  }
36
- // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.
37
- let availableRangeRef = (0, $1ppdM$useRef)(null);
38
- let [availableRange, setAvailableRange] = (0, $1ppdM$useState)(null);
36
+ let isDateUnavailable = (0, $1ppdM$useMemo)(()=>{
37
+ let isDateUnavailable = props.isDateUnavailable;
38
+ if (!isDateUnavailable) return undefined;
39
+ return (date)=>isDateUnavailable(date, anchorDate);
40
+ }, [
41
+ props.isDateUnavailable,
42
+ anchorDate
43
+ ]);
44
+ let getAvailableRange = (0, $1ppdM$useCallback)((anchorDate)=>{
45
+ if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {
46
+ const nextAvailableStartDate = $a0a87fb6fcfb22ec$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, -1);
47
+ const nextAvailableEndDate = $a0a87fb6fcfb22ec$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, 1);
48
+ return {
49
+ start: nextAvailableStartDate,
50
+ end: nextAvailableEndDate
51
+ };
52
+ } else return null;
53
+ }, [
54
+ isDateUnavailable,
55
+ visibleDuration,
56
+ props.allowsNonContiguousRanges
57
+ ]);
58
+ let availableRange = (0, $1ppdM$useMemo)(()=>getAvailableRange(anchorDate), [
59
+ getAvailableRange,
60
+ anchorDate
61
+ ]);
39
62
  let min = (0, $1ppdM$useMemo)(()=>(0, $1ppdM$maxDate)(minValue, availableRange?.start), [
40
63
  minValue,
41
64
  availableRange
@@ -52,42 +75,14 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
52
75
  visibleDuration: visibleDuration,
53
76
  minValue: min,
54
77
  maxValue: max,
55
- selectionAlignment: props.selectionAlignment || alignment
78
+ selectionAlignment: props.selectionAlignment || alignment,
79
+ isDateUnavailable: isDateUnavailable
56
80
  });
57
- let updateAvailableRange = (date)=>{
58
- if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
- const nextAvailableStartDate = $a0a87fb6fcfb22ec$var$nextUnavailableDate(date, calendar, -1);
60
- const nextAvailableEndDate = $a0a87fb6fcfb22ec$var$nextUnavailableDate(date, calendar, 1);
61
- availableRangeRef.current = {
62
- start: nextAvailableStartDate,
63
- end: nextAvailableEndDate
64
- };
65
- setAvailableRange(availableRangeRef.current);
66
- } else {
67
- availableRangeRef.current = null;
68
- setAvailableRange(null);
69
- }
70
- };
71
- // If the visible range changes, we need to update the available range.
72
- let [lastVisibleRange, setLastVisibleRange] = (0, $1ppdM$useState)(calendar.visibleRange);
73
- if (!(0, $1ppdM$isEqualDay)(calendar.visibleRange.start, lastVisibleRange.start) || !(0, $1ppdM$isEqualDay)(calendar.visibleRange.end, lastVisibleRange.end)) {
74
- updateAvailableRange(anchorDate);
75
- setLastVisibleRange(calendar.visibleRange);
76
- }
77
- let setAnchorDate = (date)=>{
78
- if (date) {
79
- setAnchorDateState(date);
80
- updateAvailableRange(date);
81
- } else {
82
- setAnchorDateState(null);
83
- updateAvailableRange(null);
84
- }
85
- };
86
81
  let highlightedRange = anchorDate ? $a0a87fb6fcfb22ec$var$makeRange(anchorDate, calendar.focusedDate) : value && $a0a87fb6fcfb22ec$var$makeRange(value.start, value.end);
87
82
  let selectDate = (date)=>{
88
83
  if (props.isReadOnly) return;
89
84
  const constrainedDate = (0, $dd602d3c757202f2$export$4f5203c0d889109e)(date, min, max);
90
- const previousAvailableConstrainedDate = (0, $dd602d3c757202f2$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);
85
+ const previousAvailableConstrainedDate = (0, $dd602d3c757202f2$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, isDateUnavailable);
91
86
  if (!previousAvailableConstrainedDate) return;
92
87
  if (!anchorDate) setAnchorDate(previousAvailableConstrainedDate);
93
88
  else {
@@ -100,7 +95,6 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
100
95
  }
101
96
  };
102
97
  let [isDragging, setDragging] = (0, $1ppdM$useState)(false);
103
- let { isDateUnavailable: isDateUnavailable } = props;
104
98
  let isInvalidSelection = (0, $1ppdM$useMemo)(()=>{
105
99
  if (!value || anchorDate) return false;
106
100
  if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) return true;
@@ -124,6 +118,9 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
124
118
  validationState: validationState,
125
119
  isValueInvalid: isValueInvalid,
126
120
  selectFocusedDate () {
121
+ if (!calendar.isCellUnavailable(calendar.focusedDate)) selectDate(calendar.focusedDate);
122
+ },
123
+ commitSelection () {
127
124
  selectDate(calendar.focusedDate);
128
125
  },
129
126
  selectDate: selectDate,
@@ -134,13 +131,27 @@ function $a0a87fb6fcfb22ec$export$9a987164d97ecc90(props) {
134
131
  return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));
135
132
  },
136
133
  isInvalid (date) {
137
- return calendar.isInvalid(date) || (0, $dd602d3c757202f2$export$eac50920cf2fd59a)(date, availableRangeRef.current?.start, availableRangeRef.current?.end);
134
+ return calendar.isInvalid(date) || (0, $dd602d3c757202f2$export$eac50920cf2fd59a)(date, availableRange?.start, availableRange?.end);
138
135
  },
139
136
  isDragging: isDragging,
140
137
  setDragging: setDragging,
141
138
  clearSelection () {
142
139
  setAnchorDate(null);
143
140
  setValue(null);
141
+ },
142
+ focusNearestAvailableDate (anchorDate) {
143
+ let availableRange = getAvailableRange(anchorDate);
144
+ let isDateInvalid = (date)=>this.isInvalid(date) || (0, $dd602d3c757202f2$export$eac50920cf2fd59a)(date, availableRange?.start, availableRange?.end);
145
+ let nextDay = anchorDate.add({
146
+ days: 1
147
+ });
148
+ if (isDateInvalid(nextDay)) nextDay = anchorDate.subtract({
149
+ days: 1
150
+ });
151
+ if (!isDateInvalid(nextDay)) {
152
+ this.setFocusedDate(nextDay);
153
+ this.setFocused(true);
154
+ }
144
155
  }
145
156
  };
146
157
  }
@@ -163,14 +174,16 @@ function $a0a87fb6fcfb22ec$var$convertValue(newValue, oldValue) {
163
174
  if (oldValue && 'hour' in oldValue) return oldValue.set(newValue);
164
175
  return newValue;
165
176
  }
166
- function $a0a87fb6fcfb22ec$var$nextUnavailableDate(anchorDate, state, dir) {
177
+ function $a0a87fb6fcfb22ec$var$nextUnavailableDate(anchorDate, isDateUnavailable, visibleDuration, dir) {
167
178
  let nextDate = anchorDate.add({
168
179
  days: dir
169
180
  });
170
- while((dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) && !state.isCellUnavailable(nextDate))nextDate = nextDate.add({
181
+ let minDate = anchorDate.subtract(visibleDuration);
182
+ let maxDate = anchorDate.add(visibleDuration);
183
+ while((dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) && !isDateUnavailable(nextDate))nextDate = nextDate.add({
171
184
  days: dir
172
185
  });
173
- if (state.isCellUnavailable(nextDate)) return nextDate.add({
186
+ if (isDateUnavailable(nextDate)) return nextDate.add({
174
187
  days: -dir
175
188
  });
176
189
  }
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, CalendarIdentifier, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarPropsBase, CalendarState, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useRef, useState} from 'react';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue> extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean\n}\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string,\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar,\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n * @default {months: 1}\n */\n visibleDuration?: DateDuration,\n /** \n * Determines the alignment of the visible months on initial render based on the current selection or current date if there is no selection. \n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end'\n}\n\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps} = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<Partial<RangeValue<DateValue>> | null>(null);\n let [availableRange, setAvailableRange] = useState<Partial<RangeValue<DateValue>>|null>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(date, calendar, -1);\n const nextAvailableEndDate = nextUnavailableDate(date, calendar, 1);\n availableRangeRef.current = {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate | null) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.mjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/calendar/useRangeCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n GregorianCalendar,\n maxDate,\n minDate,\n toCalendar,\n toCalendarDate\n} from '@internationalized/date';\nimport {CalendarPropsBase, DateValue, MappedDateValue, RangeCalendarState} from './types';\nimport {RangeValue, ValidationState, ValueBase} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useCallback, useMemo, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport type DateRange = RangeValue<DateValue> | null;\nexport interface RangeCalendarProps<T extends DateValue>\n extends CalendarPropsBase, ValueBase<RangeValue<T> | null, RangeValue<MappedDateValue<T>>> {\n /**\n * When combined with `isDateUnavailable`, determines whether non-contiguous ranges,\n * i.e. ranges containing unavailable dates, may be selected.\n */\n allowsNonContiguousRanges?: boolean;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable. The second argument provides the current selection anchor date, if any. This can\n * be used to adjust the available dates based on the user's first selected date.\n */\n isDateUnavailable?: (date: DateValue, anchorDate: CalendarDate | null) => boolean;\n}\n\nexport interface RangeCalendarStateOptions<\n T extends DateValue = DateValue\n> extends RangeCalendarProps<T> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n\n/**\n * Provides state management for a range calendar component. A range calendar displays one or more\n * date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(\n props: RangeCalendarStateOptions<T>\n): RangeCalendarState<T> {\n let {\n value: valueProp,\n defaultValue,\n onChange,\n createCalendar,\n locale,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n ...calendarProps\n } = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<MappedDateValue<T>>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDate] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(\n toCalendarDate(value.start),\n visibleDuration,\n locale,\n minValue,\n maxValue\n );\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n let isDateUnavailable = useMemo(() => {\n let isDateUnavailable = props.isDateUnavailable;\n if (!isDateUnavailable) {\n return undefined;\n }\n\n return (date: DateValue) => isDateUnavailable(date, anchorDate);\n }, [props.isDateUnavailable, anchorDate]);\n\n let getAvailableRange = useCallback(\n (anchorDate: CalendarDate | null) => {\n if (anchorDate && isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n -1\n );\n const nextAvailableEndDate = nextUnavailableDate(\n anchorDate,\n isDateUnavailable,\n visibleDuration,\n 1\n );\n return {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n } else {\n return null;\n }\n },\n [isDateUnavailable, visibleDuration, props.allowsNonContiguousRanges]\n );\n\n let availableRange = useMemo(\n () => getAvailableRange(anchorDate),\n [getAvailableRange, anchorDate]\n );\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: props.selectionAlignment || alignment,\n isDateUnavailable\n });\n\n let highlightedRange = anchorDate\n ? makeRange(anchorDate, calendar.focusedDate)\n : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(\n constrainedDate,\n calendar.visibleRange.start,\n isDateUnavailable\n );\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n if (!calendar.isCellUnavailable(calendar.focusedDate)) {\n selectDate(calendar.focusedDate);\n }\n },\n commitSelection() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(\n highlightedRange &&\n date.compare(highlightedRange.start) >= 0 &&\n date.compare(highlightedRange.end) <= 0 &&\n !calendar.isCellDisabled(date) &&\n !calendar.isCellUnavailable(date)\n );\n },\n isInvalid(date) {\n return (\n calendar.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end)\n );\n },\n isDragging,\n setDragging,\n clearSelection() {\n setAnchorDate(null);\n setValue(null);\n },\n focusNearestAvailableDate(anchorDate) {\n let availableRange = getAvailableRange(anchorDate);\n let isDateInvalid = (date: CalendarDate) =>\n this.isInvalid(date) || isInvalid(date, availableRange?.start, availableRange?.end);\n let nextDay = anchorDate.add({days: 1});\n if (isDateInvalid(nextDay)) {\n nextDay = anchorDate.subtract({days: 1});\n }\n if (!isDateInvalid(nextDay)) {\n this.setFocusedDate(nextDay);\n this.setFocused(true);\n }\n }\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(\n anchorDate: CalendarDate,\n isDateUnavailable: (date: CalendarDate) => boolean,\n visibleDuration: DateDuration,\n dir: number\n): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n let minDate = anchorDate.subtract(visibleDuration);\n let maxDate = anchorDate.add(visibleDuration);\n while (\n (dir < 0 ? nextDate.compare(minDate) >= 0 : nextDate.compare(maxDate) <= 0) &&\n !isDateUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (isDateUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.mjs.map"}
@@ -12,6 +12,7 @@ $parcel$export(module.exports, "constrainStart", function () { return $8b8d00440
12
12
  $parcel$export(module.exports, "alignEnd", function () { return $8b8d004404afcaba$export$530edbfc915b2b04; });
13
13
  $parcel$export(module.exports, "constrainValue", function () { return $8b8d004404afcaba$export$4f5203c0d889109e; });
14
14
  $parcel$export(module.exports, "previousAvailableDate", function () { return $8b8d004404afcaba$export$a1d3911297b952d7; });
15
+ $parcel$export(module.exports, "isEqualDuration", function () { return $8b8d004404afcaba$export$6595e603c409b4b8; });
15
16
  /*
16
17
  * Copyright 2020 Adobe. All rights reserved.
17
18
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
@@ -40,7 +41,7 @@ function $8b8d004404afcaba$export$144a00ba6044eb9(date, duration, locale, minVal
40
41
  let aligned = date;
41
42
  if (duration.years) aligned = (0, $eHctm$internationalizeddate.startOfYear)(date);
42
43
  else if (duration.months) aligned = (0, $eHctm$internationalizeddate.startOfMonth)(date);
43
- else if (duration.weeks) aligned = (0, $eHctm$internationalizeddate.startOfWeek)(date, locale);
44
+ else if (duration.weeks || duration.days && duration.days > 7) aligned = (0, $eHctm$internationalizeddate.startOfWeek)(date, locale);
44
45
  return $8b8d004404afcaba$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
46
  }
46
47
  function $8b8d004404afcaba$export$530edbfc915b2b04(date, duration, locale, minValue, maxValue) {
@@ -85,6 +86,10 @@ function $8b8d004404afcaba$export$a1d3911297b952d7(date, minValue, isDateUnavail
85
86
  if (date.compare(minValue) >= 0) return date;
86
87
  return null;
87
88
  }
89
+ function $8b8d004404afcaba$export$6595e603c409b4b8(a, b) {
90
+ if (a === b) return true;
91
+ return a.days === b.days && a.weeks === b.weeks && a.months === b.months && a.years === b.years;
92
+ }
88
93
 
89
94
 
90
95
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/calendar/utils.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from './types';\n\nexport function isInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null): boolean {\n return (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--;\n } else if (d.weeks) {\n d.weeks--;\n } else if (d.months) {\n d.months--;\n } else if (d.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null): CalendarDate {\n if (minValue && date.compare(minValue) >= 0) {\n let newDate = maxDate(\n aligned,\n alignStart(toCalendarDate(minValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n let newDate = minDate(\n aligned,\n alignEnd(toCalendarDate(maxValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n if (minValue) {\n let newDate = maxDate(date, toCalendarDate(minValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n if (maxValue) {\n let newDate = minDate(date, toCalendarDate(maxValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable?: (date: CalendarDate) => boolean): CalendarDate | null {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n return null;\n}\n"],"names":[],"version":3,"file":"utils.cjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/calendar/utils.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from './types';\n\nexport function isInvalid(\n date: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): boolean {\n return (\n (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0)\n );\n}\n\nexport function alignCenter(\n date: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): CalendarDate {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(\n date: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): CalendarDate {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks || (duration.days && duration.days > 7)) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(\n date: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): CalendarDate {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--;\n } else if (d.weeks) {\n d.weeks--;\n } else if (d.months) {\n d.months--;\n } else if (d.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): CalendarDate {\n if (minValue && date.compare(minValue) >= 0) {\n let newDate = maxDate(aligned, alignStart(toCalendarDate(minValue), duration, locale));\n if (newDate) {\n aligned = newDate;\n }\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n let newDate = minDate(aligned, alignEnd(toCalendarDate(maxValue), duration, locale));\n if (newDate) {\n aligned = newDate;\n }\n }\n\n return aligned;\n}\n\nexport function constrainValue(\n date: CalendarDate,\n minValue?: DateValue | null,\n maxValue?: DateValue | null\n): CalendarDate {\n if (minValue) {\n let newDate = maxDate(date, toCalendarDate(minValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n if (maxValue) {\n let newDate = minDate(date, toCalendarDate(maxValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n return date;\n}\n\nexport function previousAvailableDate(\n date: CalendarDate,\n minValue: DateValue,\n isDateUnavailable?: (date: CalendarDate) => boolean\n): CalendarDate | null {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n return null;\n}\n\nexport function isEqualDuration(a: DateDuration, b: DateDuration): boolean {\n if (a === b) {\n return true;\n }\n\n return a.days === b.days && a.weeks === b.weeks && a.months === b.months && a.years === b.years;\n}\n"],"names":[],"version":3,"file":"utils.cjs.map"}