react-day-picker 8.2.1 → 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/index.d.ts +1171 -40
  2. package/dist/index.esm.d.ts +1171 -0
  3. package/dist/index.esm.js +119 -120
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +123 -120
  6. package/dist/index.js.map +1 -1
  7. package/dist/react-day-picker.min.js +1 -1
  8. package/dist/style.css +9 -11
  9. package/dist/style.module.css +9 -11
  10. package/package.json +3 -3
  11. package/src/components/HeadRow/HeadRow.tsx +2 -1
  12. package/src/components/HeadRow/utils/getWeekdays.test.ts +10 -0
  13. package/src/components/HeadRow/utils/getWeekdays.ts +9 -3
  14. package/src/components/Month/Month.test.tsx +11 -0
  15. package/src/components/Month/Month.tsx +5 -1
  16. package/src/components/Table/Table.test.tsx +19 -3
  17. package/src/components/Table/Table.tsx +6 -2
  18. package/src/components/Table/__snapshots__/Table.test.tsx.snap +39 -21
  19. package/src/components/Table/utils/daysToMonthWeeks.ts +15 -3
  20. package/src/components/Table/utils/getMonthWeeks.test.ts +33 -1
  21. package/src/components/Table/utils/getMonthWeeks.ts +2 -3
  22. package/src/contexts/DayPicker/{useDayPicker.test.ts → DayPickerContext.test.ts} +13 -29
  23. package/src/contexts/DayPicker/DayPickerContext.tsx +34 -52
  24. package/src/contexts/DayPicker/{defaultContextValue.ts → defaultContextValues.ts} +18 -1
  25. package/src/contexts/DayPicker/index.ts +0 -1
  26. package/src/contexts/Focus/{useFocusContext.test.ts → FocusContext.test.ts} +0 -0
  27. package/src/contexts/Focus/FocusContext.tsx +19 -6
  28. package/src/contexts/Focus/index.ts +0 -1
  29. package/src/contexts/Focus/utils/getInitialFocusTarget.test.tsx +37 -8
  30. package/src/contexts/Focus/utils/getInitialFocusTarget.tsx +0 -1
  31. package/src/contexts/Focus/utils/getNextFocus.test.tsx +75 -50
  32. package/src/contexts/Focus/utils/getNextFocus.tsx +54 -19
  33. package/src/contexts/Modifiers/{useModifiers.test.ts → ModifiersContext.test.ts} +0 -0
  34. package/src/contexts/Modifiers/ModifiersContext.tsx +16 -1
  35. package/src/contexts/Modifiers/index.ts +1 -1
  36. package/src/contexts/Modifiers/utils/getInternalModifiers.test.ts +3 -2
  37. package/src/contexts/Modifiers/utils/isMatch.test.ts +24 -5
  38. package/src/contexts/Modifiers/utils/isMatch.ts +11 -3
  39. package/src/contexts/Navigation/{useNavigation.test.ts → NavigationContext.test.ts} +6 -5
  40. package/src/contexts/Navigation/NavigationContext.tsx +15 -1
  41. package/src/contexts/Navigation/index.ts +0 -1
  42. package/src/contexts/Navigation/useNavigationState.test.ts +4 -1
  43. package/src/contexts/SelectMultiple/{useSelectMultiple.test.ts → SelectMultipleContext.test.ts} +4 -2
  44. package/src/contexts/SelectMultiple/SelectMultipleContext.tsx +16 -1
  45. package/src/contexts/SelectMultiple/index.ts +0 -1
  46. package/src/contexts/SelectRange/{useSelectRange.test.ts → SelectRangeContext.test.ts} +4 -21
  47. package/src/contexts/SelectRange/SelectRangeContext.tsx +51 -36
  48. package/src/contexts/SelectRange/index.ts +0 -1
  49. package/src/contexts/SelectSingle/{useSelectSingle.test.ts → SelectSingleContext.test.ts} +1 -1
  50. package/src/contexts/SelectSingle/SelectSingleContext.tsx +16 -1
  51. package/src/contexts/SelectSingle/index.ts +0 -1
  52. package/src/style.css +9 -11
  53. package/src/types/DayPickerBase.ts +28 -6
  54. package/src/types/DayPickerDefault.ts +2 -2
  55. package/src/types/EventHandlers.ts +9 -11
  56. package/src/types/Matchers.ts +1 -1
  57. package/dist/DayPicker.d.ts +0 -93
  58. package/dist/components/Button/Button.d.ts +0 -7
  59. package/dist/components/Button/index.d.ts +0 -1
  60. package/dist/components/Caption/Caption.d.ts +0 -19
  61. package/dist/components/Caption/index.d.ts +0 -1
  62. package/dist/components/CaptionDropdowns/CaptionDropdowns.d.ts +0 -5
  63. package/dist/components/CaptionDropdowns/index.d.ts +0 -1
  64. package/dist/components/CaptionLabel/CaptionLabel.d.ts +0 -9
  65. package/dist/components/CaptionLabel/index.d.ts +0 -1
  66. package/dist/components/CaptionNavigation/CaptionNavigation.d.ts +0 -5
  67. package/dist/components/CaptionNavigation/index.d.ts +0 -1
  68. package/dist/components/Day/Day.d.ts +0 -12
  69. package/dist/components/Day/index.d.ts +0 -1
  70. package/dist/components/DayContent/DayContent.d.ts +0 -12
  71. package/dist/components/DayContent/index.d.ts +0 -1
  72. package/dist/components/Dropdown/Dropdown.d.ts +0 -20
  73. package/dist/components/Dropdown/index.d.ts +0 -1
  74. package/dist/components/Footer/Footer.d.ts +0 -2
  75. package/dist/components/Footer/index.d.ts +0 -1
  76. package/dist/components/Head/Head.d.ts +0 -2
  77. package/dist/components/Head/index.d.ts +0 -1
  78. package/dist/components/HeadRow/HeadRow.d.ts +0 -4
  79. package/dist/components/HeadRow/index.d.ts +0 -1
  80. package/dist/components/HeadRow/utils/getWeekdays.d.ts +0 -8
  81. package/dist/components/HeadRow/utils/index.d.ts +0 -1
  82. package/dist/components/IconDropdown/IconDropdown.d.ts +0 -5
  83. package/dist/components/IconDropdown/index.d.ts +0 -1
  84. package/dist/components/IconLeft/IconLeft.d.ts +0 -5
  85. package/dist/components/IconLeft/index.d.ts +0 -1
  86. package/dist/components/IconRight/IconRight.d.ts +0 -5
  87. package/dist/components/IconRight/index.d.ts +0 -1
  88. package/dist/components/Month/Month.d.ts +0 -7
  89. package/dist/components/Month/index.d.ts +0 -1
  90. package/dist/components/MonthsDropdown/MonthsDropdown.d.ts +0 -9
  91. package/dist/components/MonthsDropdown/index.d.ts +0 -1
  92. package/dist/components/Navigation/Navigation.d.ts +0 -20
  93. package/dist/components/Navigation/index.d.ts +0 -1
  94. package/dist/components/Root/Root.d.ts +0 -2
  95. package/dist/components/Root/index.d.ts +0 -1
  96. package/dist/components/Row/Row.d.ts +0 -13
  97. package/dist/components/Row/index.d.ts +0 -1
  98. package/dist/components/Table/Table.d.ts +0 -9
  99. package/dist/components/Table/index.d.ts +0 -1
  100. package/dist/components/Table/utils/daysToMonthWeeks.d.ts +0 -8
  101. package/dist/components/Table/utils/getMonthWeeks.d.ts +0 -21
  102. package/dist/components/WeekNumber/WeekNumber.d.ts +0 -14
  103. package/dist/components/WeekNumber/index.d.ts +0 -1
  104. package/dist/components/YearsDropdown/YearsDropdown.d.ts +0 -15
  105. package/dist/components/YearsDropdown/index.d.ts +0 -1
  106. package/dist/contexts/DayPicker/DayPickerContext.d.ts +0 -50
  107. package/dist/contexts/DayPicker/defaultClassNames.d.ts +0 -5
  108. package/dist/contexts/DayPicker/defaultContextValue.d.ts +0 -6
  109. package/dist/contexts/DayPicker/formatters/formatCaption.d.ts +0 -7
  110. package/dist/contexts/DayPicker/formatters/formatDay.d.ts +0 -7
  111. package/dist/contexts/DayPicker/formatters/formatMonthCaption.d.ts +0 -7
  112. package/dist/contexts/DayPicker/formatters/formatWeekNumber.d.ts +0 -4
  113. package/dist/contexts/DayPicker/formatters/formatWeekdayName.d.ts +0 -7
  114. package/dist/contexts/DayPicker/formatters/formatYearCaption.d.ts +0 -6
  115. package/dist/contexts/DayPicker/formatters/index.d.ts +0 -6
  116. package/dist/contexts/DayPicker/index.d.ts +0 -2
  117. package/dist/contexts/DayPicker/labels/index.d.ts +0 -7
  118. package/dist/contexts/DayPicker/labels/labelDay.d.ts +0 -5
  119. package/dist/contexts/DayPicker/labels/labelMonthDropdown.d.ts +0 -4
  120. package/dist/contexts/DayPicker/labels/labelNext.d.ts +0 -5
  121. package/dist/contexts/DayPicker/labels/labelPrevious.d.ts +0 -5
  122. package/dist/contexts/DayPicker/labels/labelWeekNumber.d.ts +0 -5
  123. package/dist/contexts/DayPicker/labels/labelWeekday.d.ts +0 -5
  124. package/dist/contexts/DayPicker/labels/labelYearDropdown.d.ts +0 -4
  125. package/dist/contexts/DayPicker/useDayPicker.d.ts +0 -8
  126. package/dist/contexts/DayPicker/utils/index.d.ts +0 -1
  127. package/dist/contexts/DayPicker/utils/parseFromToProps.d.ts +0 -6
  128. package/dist/contexts/Focus/FocusContext.d.ts +0 -36
  129. package/dist/contexts/Focus/index.d.ts +0 -2
  130. package/dist/contexts/Focus/useFocusContext.d.ts +0 -8
  131. package/dist/contexts/Focus/utils/getInitialFocusTarget.d.ts +0 -3
  132. package/dist/contexts/Focus/utils/getNextFocus.d.ts +0 -9
  133. package/dist/contexts/Modifiers/ModifiersContext.d.ts +0 -9
  134. package/dist/contexts/Modifiers/index.d.ts +0 -2
  135. package/dist/contexts/Modifiers/useModifiers.d.ts +0 -9
  136. package/dist/contexts/Modifiers/utils/getActiveModifiers.d.ts +0 -7
  137. package/dist/contexts/Modifiers/utils/getCustomModifiers.d.ts +0 -3
  138. package/dist/contexts/Modifiers/utils/getInternalModifiers.d.ts +0 -6
  139. package/dist/contexts/Modifiers/utils/isDateInRange.d.ts +0 -3
  140. package/dist/contexts/Modifiers/utils/isMatch.d.ts +0 -19
  141. package/dist/contexts/Modifiers/utils/matcherToArray.d.ts +0 -3
  142. package/dist/contexts/Navigation/NavigationContext.d.ts +0 -27
  143. package/dist/contexts/Navigation/index.d.ts +0 -2
  144. package/dist/contexts/Navigation/useNavigation.d.ts +0 -8
  145. package/dist/contexts/Navigation/useNavigationState.d.ts +0 -7
  146. package/dist/contexts/Navigation/utils/getDisplayMonths.d.ts +0 -8
  147. package/dist/contexts/Navigation/utils/getInitialMonth.d.ts +0 -3
  148. package/dist/contexts/Navigation/utils/getNextMonth.d.ts +0 -18
  149. package/dist/contexts/Navigation/utils/getPreviousMonth.d.ts +0 -19
  150. package/dist/contexts/RootProvider.d.ts +0 -8
  151. package/dist/contexts/SelectMultiple/SelectMultipleContext.d.ts +0 -35
  152. package/dist/contexts/SelectMultiple/index.d.ts +0 -2
  153. package/dist/contexts/SelectMultiple/useSelectMultiple.d.ts +0 -7
  154. package/dist/contexts/SelectRange/SelectRangeContext.d.ts +0 -36
  155. package/dist/contexts/SelectRange/index.d.ts +0 -2
  156. package/dist/contexts/SelectRange/useSelectRange.d.ts +0 -7
  157. package/dist/contexts/SelectRange/utils/addToRange.d.ts +0 -8
  158. package/dist/contexts/SelectSingle/SelectSingleContext.d.ts +0 -30
  159. package/dist/contexts/SelectSingle/index.d.ts +0 -2
  160. package/dist/contexts/SelectSingle/useSelectSingle.d.ts +0 -7
  161. package/dist/hooks/useActiveModifiers/index.d.ts +0 -1
  162. package/dist/hooks/useActiveModifiers/useActiveModifiers.d.ts +0 -15
  163. package/dist/hooks/useControlledValue/index.d.ts +0 -1
  164. package/dist/hooks/useControlledValue/useControlledValue.d.ts +0 -12
  165. package/dist/hooks/useDayEventHandlers/index.d.ts +0 -1
  166. package/dist/hooks/useDayEventHandlers/useDayEventHandlers.d.ts +0 -26
  167. package/dist/hooks/useDayRender/index.d.ts +0 -1
  168. package/dist/hooks/useDayRender/useDayRender.d.ts +0 -32
  169. package/dist/hooks/useDayRender/utils/getDayClassNames.d.ts +0 -10
  170. package/dist/hooks/useDayRender/utils/getDayStyle.d.ts +0 -5
  171. package/dist/hooks/useId/index.d.ts +0 -1
  172. package/dist/hooks/useId/useId.d.ts +0 -19
  173. package/dist/hooks/useInput/index.d.ts +0 -1
  174. package/dist/hooks/useInput/useInput.d.ts +0 -28
  175. package/dist/hooks/useInput/utils/isValidDate.d.ts +0 -2
  176. package/dist/hooks/useSelectedDays/index.d.ts +0 -1
  177. package/dist/hooks/useSelectedDays/useSelectedDays.d.ts +0 -10
  178. package/dist/types/DayPickerBase.d.ts +0 -255
  179. package/dist/types/DayPickerDefault.d.ts +0 -8
  180. package/dist/types/DayPickerMultiple.d.ts +0 -18
  181. package/dist/types/DayPickerRange.d.ts +0 -19
  182. package/dist/types/DayPickerSingle.d.ts +0 -16
  183. package/dist/types/EventHandlers.d.ts +0 -51
  184. package/dist/types/Formatters.d.ts +0 -24
  185. package/dist/types/Labels.d.ts +0 -28
  186. package/dist/types/Matchers.d.ts +0 -84
  187. package/dist/types/Modifiers.d.ts +0 -49
  188. package/dist/types/Styles.d.ts +0 -102
  189. package/src/contexts/DayPicker/useDayPicker.ts +0 -17
  190. package/src/contexts/Focus/useFocusContext.ts +0 -17
  191. package/src/contexts/Modifiers/useModifiers.ts +0 -20
  192. package/src/contexts/Navigation/useNavigation.ts +0 -17
  193. package/src/contexts/SelectMultiple/useSelectMultiple.ts +0 -21
  194. package/src/contexts/SelectRange/useSelectRange.ts +0 -19
  195. package/src/contexts/SelectSingle/useSelectSingle.ts +0 -21
package/dist/index.js CHANGED
@@ -17,18 +17,23 @@ var isBefore = require('date-fns/isBefore');
17
17
  var isSameMonth = require('date-fns/isSameMonth');
18
18
  var differenceInCalendarMonths = require('date-fns/differenceInCalendarMonths');
19
19
  var addDays = require('date-fns/addDays');
20
+ var startOfISOWeek = require('date-fns/startOfISOWeek');
20
21
  var startOfWeek = require('date-fns/startOfWeek');
21
22
  var getUnixTime = require('date-fns/getUnixTime');
22
23
  var isSameDay = require('date-fns/isSameDay');
23
24
  var differenceInCalendarDays = require('date-fns/differenceInCalendarDays');
25
+ var subDays = require('date-fns/subDays');
24
26
  var isAfter = require('date-fns/isAfter');
27
+ var dateFns = require('date-fns');
25
28
  var isDate = require('date-fns/isDate');
26
29
  var addWeeks = require('date-fns/addWeeks');
27
30
  var addYears = require('date-fns/addYears');
31
+ var endOfISOWeek = require('date-fns/endOfISOWeek');
28
32
  var endOfWeek = require('date-fns/endOfWeek');
29
33
  var max = require('date-fns/max');
30
34
  var min = require('date-fns/min');
31
35
  var getWeeksInMonth = require('date-fns/getWeeksInMonth');
36
+ var getISOWeek = require('date-fns/getISOWeek');
32
37
  var getWeek = require('date-fns/getWeek');
33
38
  var parse = require('date-fns/parse');
34
39
 
@@ -68,18 +73,22 @@ var isBefore__default = /*#__PURE__*/_interopDefaultLegacy(isBefore);
68
73
  var isSameMonth__default = /*#__PURE__*/_interopDefaultLegacy(isSameMonth);
69
74
  var differenceInCalendarMonths__default = /*#__PURE__*/_interopDefaultLegacy(differenceInCalendarMonths);
70
75
  var addDays__default = /*#__PURE__*/_interopDefaultLegacy(addDays);
76
+ var startOfISOWeek__default = /*#__PURE__*/_interopDefaultLegacy(startOfISOWeek);
71
77
  var startOfWeek__default = /*#__PURE__*/_interopDefaultLegacy(startOfWeek);
72
78
  var getUnixTime__default = /*#__PURE__*/_interopDefaultLegacy(getUnixTime);
73
79
  var isSameDay__default = /*#__PURE__*/_interopDefaultLegacy(isSameDay);
74
80
  var differenceInCalendarDays__default = /*#__PURE__*/_interopDefaultLegacy(differenceInCalendarDays);
81
+ var subDays__default = /*#__PURE__*/_interopDefaultLegacy(subDays);
75
82
  var isAfter__default = /*#__PURE__*/_interopDefaultLegacy(isAfter);
76
83
  var isDate__default = /*#__PURE__*/_interopDefaultLegacy(isDate);
77
84
  var addWeeks__default = /*#__PURE__*/_interopDefaultLegacy(addWeeks);
78
85
  var addYears__default = /*#__PURE__*/_interopDefaultLegacy(addYears);
86
+ var endOfISOWeek__default = /*#__PURE__*/_interopDefaultLegacy(endOfISOWeek);
79
87
  var endOfWeek__default = /*#__PURE__*/_interopDefaultLegacy(endOfWeek);
80
88
  var max__default = /*#__PURE__*/_interopDefaultLegacy(max);
81
89
  var min__default = /*#__PURE__*/_interopDefaultLegacy(min);
82
90
  var getWeeksInMonth__default = /*#__PURE__*/_interopDefaultLegacy(getWeeksInMonth);
91
+ var getISOWeek__default = /*#__PURE__*/_interopDefaultLegacy(getISOWeek);
83
92
  var getWeek__default = /*#__PURE__*/_interopDefaultLegacy(getWeek);
84
93
  var parse__default = /*#__PURE__*/_interopDefaultLegacy(parse);
85
94
 
@@ -309,7 +318,7 @@ var labels = /*#__PURE__*/Object.freeze({
309
318
  * Returns the default values to use in the DayPickerContext, in case they are
310
319
  * not passed down with the DayPicker initial props.
311
320
  */
312
- function getDefaultContextValue() {
321
+ function getDefaultContextValues() {
313
322
  var captionLayout = 'buttons';
314
323
  var classNames = defaultClassNames;
315
324
  var locale = enUS__default["default"];
@@ -368,12 +377,13 @@ var DayPickerContext = React.createContext(undefined);
368
377
  * initial DayPicker props.
369
378
  */
370
379
  function DayPickerProvider(props) {
371
- var _a, _b, _c, _d;
380
+ var _a;
372
381
  var initialProps = props.initialProps;
373
- var defaults = getDefaultContextValue();
374
- var _e = parseFromToProps(initialProps), fromDate = _e.fromDate, toDate = _e.toDate;
375
- var captionLayout = (_a = initialProps.captionLayout) !== null && _a !== void 0 ? _a : defaults.captionLayout;
382
+ var defaultContextValues = getDefaultContextValues();
383
+ var _b = parseFromToProps(initialProps), fromDate = _b.fromDate, toDate = _b.toDate;
384
+ var captionLayout = (_a = initialProps.captionLayout) !== null && _a !== void 0 ? _a : defaultContextValues.captionLayout;
376
385
  if (captionLayout !== 'buttons' && (!fromDate || !toDate)) {
386
+ // When no from/to dates are set, the caption is always buttons
377
387
  captionLayout = 'buttons';
378
388
  }
379
389
  var onSelect;
@@ -382,61 +392,9 @@ function DayPickerProvider(props) {
382
392
  isDayPickerRange(initialProps)) {
383
393
  onSelect = initialProps.onSelect;
384
394
  }
385
- var value = {
386
- captionLayout: captionLayout,
387
- className: initialProps.className,
388
- classNames: __assign(__assign({}, defaults.classNames), initialProps.classNames),
389
- components: __assign(__assign({}, defaults.components), initialProps.components),
390
- defaultMonth: initialProps.defaultMonth,
391
- dir: initialProps.dir,
392
- disabled: initialProps.disabled,
393
- disableNavigation: initialProps.disableNavigation,
394
- fixedWeeks: initialProps.fixedWeeks,
395
- footer: initialProps.footer,
396
- formatters: __assign(__assign({}, defaults.formatters), initialProps.formatters),
397
- fromDate: fromDate,
398
- hidden: initialProps.hidden,
399
- hideHead: initialProps.hideHead,
400
- initialFocus: initialProps.initialFocus,
401
- labels: __assign(__assign({}, defaults.labels), initialProps.labels),
402
- locale: (_b = initialProps.locale) !== null && _b !== void 0 ? _b : defaults.locale,
403
- mode: initialProps.mode || 'default',
404
- modifiers: __assign(__assign({}, defaults.modifiers), initialProps.modifiers),
405
- modifiersClassNames: __assign(__assign({}, defaults.modifiersClassNames), initialProps.modifiersClassNames),
406
- modifiersStyles: initialProps.modifiersStyles,
407
- month: initialProps.month,
408
- numberOfMonths: (_c = initialProps.numberOfMonths) !== null && _c !== void 0 ? _c : defaults.numberOfMonths,
409
- onDayBlur: initialProps.onDayBlur,
410
- onDayClick: initialProps.onDayClick,
411
- onDayFocus: initialProps.onDayFocus,
412
- onDayKeyDown: initialProps.onDayKeyDown,
413
- onDayKeyPress: initialProps.onDayKeyPress,
414
- onDayKeyUp: initialProps.onDayKeyUp,
415
- onDayMouseEnter: initialProps.onDayMouseEnter,
416
- onDayMouseLeave: initialProps.onDayMouseLeave,
417
- onDayTouchCancel: initialProps.onDayTouchCancel,
418
- onDayTouchEnd: initialProps.onDayTouchEnd,
419
- onDayTouchMove: initialProps.onDayTouchMove,
420
- onDayTouchStart: initialProps.onDayTouchStart,
421
- onMonthChange: initialProps.onMonthChange,
422
- onNextClick: initialProps.onNextClick,
423
- onPrevClick: initialProps.onPrevClick,
424
- onSelect: onSelect,
425
- onWeekNumberClick: initialProps.onWeekNumberClick,
426
- pagedNavigation: initialProps.pagedNavigation,
427
- reverseMonths: initialProps.reverseMonths,
428
- selected: initialProps.selected,
429
- showOutsideDays: initialProps.showOutsideDays,
430
- showWeekNumber: initialProps.showWeekNumber,
431
- style: initialProps.style,
432
- styles: __assign(__assign({}, defaults.styles), initialProps.styles),
433
- toDate: toDate,
434
- today: (_d = initialProps.today) !== null && _d !== void 0 ? _d : defaults.today,
435
- weekStartsOn: initialProps.weekStartsOn
436
- };
395
+ var value = __assign(__assign(__assign({}, defaultContextValues), initialProps), { captionLayout: captionLayout, classNames: __assign(__assign({}, defaultContextValues.classNames), initialProps.classNames), components: __assign({}, initialProps.components), formatters: __assign(__assign({}, defaultContextValues.formatters), initialProps.formatters), fromDate: fromDate, labels: __assign(__assign({}, defaultContextValues.labels), initialProps.labels), mode: initialProps.mode || defaultContextValues.mode, modifiers: __assign(__assign({}, defaultContextValues.modifiers), initialProps.modifiers), modifiersClassNames: __assign(__assign({}, defaultContextValues.modifiersClassNames), initialProps.modifiersClassNames), onSelect: onSelect, styles: __assign(__assign({}, defaultContextValues.styles), initialProps.styles), toDate: toDate });
437
396
  return (React__default["default"].createElement(DayPickerContext.Provider, { value: value }, props.children));
438
397
  }
439
-
440
398
  /**
441
399
  * Hook to access the {@link DayPickerContextValue}.
442
400
  *
@@ -705,7 +663,6 @@ function NavigationProvider(props) {
705
663
  };
706
664
  return (React__default["default"].createElement(NavigationContext.Provider, { value: value }, props.children));
707
665
  }
708
-
709
666
  /**
710
667
  * Hook to access the {@link NavigationContextValue}. Use this hook to navigate
711
668
  * between months or years in DayPicker.
@@ -866,9 +823,13 @@ function Footer() {
866
823
  * the weekday names (Monday, Tuesday, etc.).
867
824
  */
868
825
  function getWeekdays(locale,
869
- /** The index of the first day of the week (0 - Sunday) */
870
- weekStartsOn) {
871
- var start = startOfWeek__default["default"](new Date(), { locale: locale, weekStartsOn: weekStartsOn });
826
+ /** The index of the first day of the week (0 - Sunday). */
827
+ weekStartsOn,
828
+ /** Use ISOWeek instead of locale/ */
829
+ ISOWeek) {
830
+ var start = ISOWeek
831
+ ? startOfISOWeek__default["default"](new Date())
832
+ : startOfWeek__default["default"](new Date(), { locale: locale, weekStartsOn: weekStartsOn });
872
833
  var days = [];
873
834
  for (var i = 0; i < 7; i++) {
874
835
  var day = addDays__default["default"](start, i);
@@ -881,8 +842,8 @@ weekStartsOn) {
881
842
  * Render the HeadRow component - i.e. the table head row with the weekday names.
882
843
  */
883
844
  function HeadRow() {
884
- var _a = useDayPicker(), classNames = _a.classNames, styles = _a.styles, showWeekNumber = _a.showWeekNumber, locale = _a.locale, weekStartsOn = _a.weekStartsOn, formatWeekdayName = _a.formatters.formatWeekdayName, labelWeekday = _a.labels.labelWeekday;
885
- var weekdays = getWeekdays(locale, weekStartsOn);
845
+ var _a = useDayPicker(), classNames = _a.classNames, styles = _a.styles, showWeekNumber = _a.showWeekNumber, locale = _a.locale, weekStartsOn = _a.weekStartsOn, ISOWeek = _a.ISOWeek, formatWeekdayName = _a.formatters.formatWeekdayName, labelWeekday = _a.labels.labelWeekday;
846
+ var weekdays = getWeekdays(locale, weekStartsOn, ISOWeek);
886
847
  return (React__default["default"].createElement("tr", { style: styles.head_row, className: classNames.head_row },
887
848
  showWeekNumber && (React__default["default"].createElement("th", { scope: "col", style: styles.head_cell, className: classNames.head_cell })),
888
849
  weekdays.map(function (weekday, i) { return (React__default["default"].createElement("th", { key: i, scope: "col", className: classNames.head_cell, style: styles.head_cell },
@@ -970,7 +931,6 @@ function SelectMultipleProviderInternal(_a) {
970
931
  };
971
932
  return (React__default["default"].createElement(SelectMultipleContext.Provider, { value: contextValue }, children));
972
933
  }
973
-
974
934
  /**
975
935
  * Hook to access the {@link SelectMultipleContextValue}.
976
936
  *
@@ -1051,18 +1011,8 @@ function SelectRangeProviderInternal(_a) {
1051
1011
  var onDayClick = function (day, activeModifiers, e) {
1052
1012
  var _a, _b;
1053
1013
  (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
1054
- var range = addToRange(day, selected);
1055
- if ((min || max) &&
1056
- selected &&
1057
- (range === null || range === void 0 ? void 0 : range.to) &&
1058
- range.from &&
1059
- range.from !== range.to) {
1060
- var diff = Math.abs(differenceInCalendarDays__default["default"](range === null || range === void 0 ? void 0 : range.to, range === null || range === void 0 ? void 0 : range.from));
1061
- if ((min && diff < min) || (max && diff >= max)) {
1062
- return;
1063
- }
1064
- }
1065
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, range, day, activeModifiers, e);
1014
+ var newRange = addToRange(day, selected);
1015
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, newRange, day, activeModifiers, e);
1066
1016
  };
1067
1017
  var modifiers = {
1068
1018
  range_start: [],
@@ -1085,25 +1035,42 @@ function SelectRangeProviderInternal(_a) {
1085
1035
  ];
1086
1036
  }
1087
1037
  }
1088
- if (min && selectedFrom && selectedTo) {
1089
- modifiers.disabled.push(function (date) {
1090
- return ((isBefore__default["default"](date, selectedFrom) &&
1091
- differenceInCalendarDays__default["default"](selectedFrom, date) < min) ||
1092
- (isAfter__default["default"](date, selectedTo) &&
1093
- differenceInCalendarDays__default["default"](date, selectedFrom) < min));
1094
- });
1038
+ if (min) {
1039
+ if (selectedFrom && !selectedTo) {
1040
+ modifiers.disabled.push({
1041
+ after: subDays__default["default"](selectedFrom, min - 1),
1042
+ before: addDays__default["default"](selectedFrom, min - 1)
1043
+ });
1044
+ }
1045
+ if (selectedFrom && selectedTo) {
1046
+ modifiers.disabled.push({
1047
+ after: selectedFrom,
1048
+ before: addDays__default["default"](selectedFrom, min - 1)
1049
+ });
1050
+ }
1095
1051
  }
1096
- if (max && selectedFrom && selectedTo) {
1097
- modifiers.disabled.push(function (date) {
1098
- return ((isBefore__default["default"](date, selectedFrom) &&
1099
- differenceInCalendarDays__default["default"](selectedTo, date) >= max) ||
1100
- (isAfter__default["default"](date, selectedTo) &&
1101
- differenceInCalendarDays__default["default"](date, selectedFrom) >= max));
1102
- });
1052
+ if (max) {
1053
+ if (selectedFrom && !selectedTo) {
1054
+ modifiers.disabled.push({
1055
+ before: addDays__default["default"](selectedFrom, -max + 1)
1056
+ });
1057
+ modifiers.disabled.push({
1058
+ after: addDays__default["default"](selectedFrom, max - 1)
1059
+ });
1060
+ }
1061
+ if (selectedFrom && selectedTo) {
1062
+ var selectedCount = differenceInCalendarDays__default["default"](selectedTo, selectedFrom) + 1;
1063
+ var offset = max - selectedCount;
1064
+ modifiers.disabled.push({
1065
+ before: subDays__default["default"](selectedFrom, offset)
1066
+ });
1067
+ modifiers.disabled.push({
1068
+ after: addDays__default["default"](selectedTo, offset)
1069
+ });
1070
+ }
1103
1071
  }
1104
1072
  return (React__default["default"].createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
1105
1073
  }
1106
-
1107
1074
  /**
1108
1075
  * Hook to access the {@link SelectRangeContextValue}.
1109
1076
  *
@@ -1204,7 +1171,6 @@ function ModifiersProvider(props) {
1204
1171
  var modifiers = __assign(__assign({}, internalModifiers), customModifiers);
1205
1172
  return (React__default["default"].createElement(ModifiersContext.Provider, { value: modifiers }, props.children));
1206
1173
  }
1207
-
1208
1174
  /**
1209
1175
  * Return the modifiers used by DayPicker.
1210
1176
  *
@@ -1308,9 +1274,17 @@ function isMatch(day, matchers) {
1308
1274
  return matcher.dayOfWeek.includes(day.getDay());
1309
1275
  }
1310
1276
  if (isDateInterval(matcher)) {
1311
- var isBefore = differenceInCalendarDays__default["default"](matcher.before, day) > 0;
1312
- var isAfter = differenceInCalendarDays__default["default"](day, matcher.after) > 0;
1313
- return isBefore && isAfter;
1277
+ var diffBefore = differenceInCalendarDays__default["default"](matcher.before, day);
1278
+ var diffAfter = differenceInCalendarDays__default["default"](matcher.after, day);
1279
+ var isDayBefore = diffBefore > 0;
1280
+ var isDayAfter = diffAfter < 0;
1281
+ var isClosedInterval = dateFns.isAfter(matcher.before, matcher.after);
1282
+ if (isClosedInterval) {
1283
+ return isDayAfter && isDayBefore;
1284
+ }
1285
+ else {
1286
+ return isDayBefore || isDayAfter;
1287
+ }
1314
1288
  }
1315
1289
  if (isDateAfterType(matcher)) {
1316
1290
  return differenceInCalendarDays__default["default"](day, matcher.after) > 0;
@@ -1380,18 +1354,26 @@ function getInitialFocusTarget(displayMonths, modifiers) {
1380
1354
  }
1381
1355
  }
1382
1356
 
1357
+ var MAX_RETRY = 365;
1383
1358
  /** Return the next date to be focused. */
1384
- function getNextFocus(
1385
- /** The day that is focused. */
1386
- focusedDay, moveBy, direction, options, modifiers) {
1387
- var weekStartsOn = options.weekStartsOn, fromDate = options.fromDate, toDate = options.toDate, locale = options.locale;
1359
+ function getNextFocus(focusedDay, options) {
1360
+ var moveBy = options.moveBy, direction = options.direction, context = options.context, modifiers = options.modifiers, _a = options.retry, retry = _a === void 0 ? { count: 0, lastFocused: focusedDay } : _a;
1361
+ var weekStartsOn = context.weekStartsOn, fromDate = context.fromDate, toDate = context.toDate, locale = context.locale;
1388
1362
  var moveFns = {
1389
1363
  day: addDays__default["default"],
1390
1364
  week: addWeeks__default["default"],
1391
1365
  month: addMonths__default["default"],
1392
1366
  year: addYears__default["default"],
1393
- startOfWeek: function (date) { return startOfWeek__default["default"](date, { locale: locale, weekStartsOn: weekStartsOn }); },
1394
- endOfWeek: function (date) { return endOfWeek__default["default"](date, { locale: locale, weekStartsOn: weekStartsOn }); }
1367
+ startOfWeek: function (date) {
1368
+ return context.ISOWeek
1369
+ ? startOfISOWeek__default["default"](date)
1370
+ : startOfWeek__default["default"](date, { locale: locale, weekStartsOn: weekStartsOn });
1371
+ },
1372
+ endOfWeek: function (date) {
1373
+ return context.ISOWeek
1374
+ ? endOfISOWeek__default["default"](date)
1375
+ : endOfWeek__default["default"](date, { locale: locale, weekStartsOn: weekStartsOn });
1376
+ }
1395
1377
  };
1396
1378
  var newFocusedDay = moveFns[moveBy](focusedDay, direction === 'after' ? 1 : -1);
1397
1379
  if (direction === 'before' && fromDate) {
@@ -1400,14 +1382,26 @@ focusedDay, moveBy, direction, options, modifiers) {
1400
1382
  else if (direction === 'after' && toDate) {
1401
1383
  newFocusedDay = min__default["default"]([toDate, newFocusedDay]);
1402
1384
  }
1385
+ var isFocusable = true;
1403
1386
  if (modifiers) {
1404
1387
  var activeModifiers = getActiveModifiers(newFocusedDay, modifiers);
1405
- var isFocusable = !activeModifiers.disabled && !activeModifiers.hidden;
1406
- if (!isFocusable) {
1407
- return getNextFocus(newFocusedDay, moveBy, direction, options, modifiers);
1388
+ isFocusable = !activeModifiers.disabled && !activeModifiers.hidden;
1389
+ }
1390
+ if (isFocusable) {
1391
+ return newFocusedDay;
1392
+ }
1393
+ else {
1394
+ if (retry.count > MAX_RETRY) {
1395
+ return retry.lastFocused;
1408
1396
  }
1397
+ return getNextFocus(newFocusedDay, {
1398
+ moveBy: moveBy,
1399
+ direction: direction,
1400
+ context: context,
1401
+ modifiers: modifiers,
1402
+ retry: __assign(__assign({}, retry), { count: retry.count + 1 })
1403
+ });
1409
1404
  }
1410
- return newFocusedDay;
1411
1405
  }
1412
1406
 
1413
1407
  /**
@@ -1434,11 +1428,16 @@ function FocusProvider(props) {
1434
1428
  var focus = function (date) {
1435
1429
  setFocusedDay(date);
1436
1430
  };
1437
- var dayPicker = useDayPicker();
1431
+ var context = useDayPicker();
1438
1432
  var moveFocus = function (moveBy, direction) {
1439
1433
  if (!focusedDay)
1440
1434
  return;
1441
- var nextFocused = getNextFocus(focusedDay, moveBy, direction, dayPicker, modifiers);
1435
+ var nextFocused = getNextFocus(focusedDay, {
1436
+ moveBy: moveBy,
1437
+ direction: direction,
1438
+ context: context,
1439
+ modifiers: modifiers
1440
+ });
1442
1441
  if (isSameDay__default["default"](focusedDay, nextFocused))
1443
1442
  return undefined;
1444
1443
  navigation.goToDate(nextFocused, focusedDay);
@@ -1462,7 +1461,6 @@ function FocusProvider(props) {
1462
1461
  };
1463
1462
  return (React__default["default"].createElement(FocusContext.Provider, { value: value }, props.children));
1464
1463
  }
1465
-
1466
1464
  /**
1467
1465
  * Hook to access the {@link FocusContextValue}. Use this hook to handle the
1468
1466
  * focus state of the elements.
@@ -1530,7 +1528,6 @@ function SelectSingleProviderInternal(_a) {
1530
1528
  };
1531
1529
  return (React__default["default"].createElement(SelectSingleContext.Provider, { value: contextValue }, children));
1532
1530
  }
1533
-
1534
1531
  /**
1535
1532
  * Hook to access the {@link SelectSingleContextValue}.
1536
1533
  *
@@ -1865,15 +1862,21 @@ function Row(props) {
1865
1862
 
1866
1863
  /** Return the weeks between two dates. */
1867
1864
  function daysToMonthWeeks(fromDate, toDate, options) {
1868
- var toWeek = endOfWeek__default["default"](toDate, options);
1869
- var fromWeek = startOfWeek__default["default"](fromDate, options);
1865
+ var toWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek)
1866
+ ? endOfISOWeek__default["default"](toDate)
1867
+ : endOfWeek__default["default"](toDate, options);
1868
+ var fromWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek)
1869
+ ? startOfISOWeek__default["default"](fromDate)
1870
+ : startOfWeek__default["default"](fromDate, options);
1870
1871
  var nOfDays = differenceInCalendarDays__default["default"](toWeek, fromWeek);
1871
1872
  var days = [];
1872
1873
  for (var i = 0; i <= nOfDays; i++) {
1873
1874
  days.push(addDays__default["default"](fromWeek, i));
1874
1875
  }
1875
1876
  var weeksInMonth = days.reduce(function (result, date) {
1876
- var weekNumber = getWeek__default["default"](date, options);
1877
+ var weekNumber = (options === null || options === void 0 ? void 0 : options.ISOWeek)
1878
+ ? getISOWeek__default["default"](date)
1879
+ : getWeek__default["default"](date, options);
1877
1880
  var existingWeek = result.find(function (value) { return value.weekNumber === weekNumber; });
1878
1881
  if (existingWeek) {
1879
1882
  existingWeek.dates.push(date);
@@ -1892,12 +1895,10 @@ function daysToMonthWeeks(fromDate, toDate, options) {
1892
1895
  * Return the weeks belonging to the given month, adding the "outside days" to
1893
1896
  * the first and last week.
1894
1897
  */
1895
- function getMonthWeeks(
1896
- /** The month to get the weeks from */
1897
- month, options) {
1898
+ function getMonthWeeks(month, options) {
1898
1899
  var weeksInMonth = daysToMonthWeeks(startOfMonth__default["default"](month), endOfMonth__default["default"](month), options);
1899
- // Add extra weeks to the month, up to 6 weeks
1900
1900
  if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) {
1901
+ // Add extra weeks to the month, up to 6 weeks
1901
1902
  var nrOfMonthWeeks = getWeeksInMonth__default["default"](month, options);
1902
1903
  if (nrOfMonthWeeks < 6) {
1903
1904
  var lastWeek = weeksInMonth[weeksInMonth.length - 1];
@@ -1913,11 +1914,13 @@ month, options) {
1913
1914
  /** Render the table with the calendar. */
1914
1915
  function Table(props) {
1915
1916
  var _a, _b, _c;
1916
- var _d = useDayPicker(), locale = _d.locale, classNames = _d.classNames, styles = _d.styles, hideHead = _d.hideHead, fixedWeeks = _d.fixedWeeks, components = _d.components, weekStartsOn = _d.weekStartsOn;
1917
+ var _d = useDayPicker(), locale = _d.locale, classNames = _d.classNames, styles = _d.styles, hideHead = _d.hideHead, fixedWeeks = _d.fixedWeeks, components = _d.components, weekStartsOn = _d.weekStartsOn, firstWeekContainsDate = _d.firstWeekContainsDate, ISOWeek = _d.ISOWeek;
1917
1918
  var weeks = getMonthWeeks(props.displayMonth, {
1918
1919
  useFixedWeeks: Boolean(fixedWeeks),
1920
+ ISOWeek: ISOWeek,
1919
1921
  locale: locale,
1920
- weekStartsOn: weekStartsOn
1922
+ weekStartsOn: weekStartsOn,
1923
+ firstWeekContainsDate: firstWeekContainsDate
1921
1924
  });
1922
1925
  var HeadComponent = (_a = components === null || components === void 0 ? void 0 : components.Head) !== null && _a !== void 0 ? _a : Head;
1923
1926
  var RowComponent = (_b = components === null || components === void 0 ? void 0 : components.Row) !== null && _b !== void 0 ? _b : Row;
@@ -2012,7 +2015,7 @@ function Month(props) {
2012
2015
  var dayPicker = useDayPicker();
2013
2016
  var dir = dayPicker.dir, classNames = dayPicker.classNames, styles = dayPicker.styles, components = dayPicker.components;
2014
2017
  var displayMonths = useNavigation().displayMonths;
2015
- var captionId = useId();
2018
+ var captionId = useId(dayPicker.id ? "".concat(dayPicker.id, "-").concat(props.displayIndex) : undefined);
2016
2019
  var className = [classNames.month];
2017
2020
  var style = styles.month;
2018
2021
  var isStart = props.displayIndex === 0;