react-day-picker 8.0.0-beta.38 → 8.0.0-beta.39

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 (34) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/DayPicker.d.ts +0 -1
  3. package/dist/components/Caption/Caption.d.ts +0 -1
  4. package/dist/components/CaptionLabel/CaptionLabel.d.ts +0 -1
  5. package/dist/components/Day/Day.d.ts +0 -1
  6. package/dist/components/DayContent/DayContent.d.ts +0 -1
  7. package/dist/components/Footer/Footer.d.ts +0 -1
  8. package/dist/components/Head/Head.d.ts +0 -1
  9. package/dist/components/IconDropdown/IconDropdown.d.ts +0 -1
  10. package/dist/components/IconLeft/IconLeft.d.ts +0 -1
  11. package/dist/components/IconRight/IconRight.d.ts +0 -1
  12. package/dist/components/Month/Month.d.ts +0 -1
  13. package/dist/components/MonthsDropdown/MonthsDropdown.d.ts +0 -1
  14. package/dist/components/Root/Root.d.ts +0 -1
  15. package/dist/components/Row/Row.d.ts +0 -1
  16. package/dist/components/Table/Table.d.ts +0 -1
  17. package/dist/components/Table/utils/daysToMonthWeeks.d.ts +8 -0
  18. package/dist/components/Table/utils/getMonthWeeks.d.ts +21 -0
  19. package/dist/components/WeekNumber/WeekNumber.d.ts +0 -1
  20. package/dist/components/YearsDropdown/YearsDropdown.d.ts +0 -1
  21. package/dist/contexts/Modifiers/utils/isMatch.d.ts +17 -1
  22. package/dist/contexts/Navigation/NavigationContext.d.ts +3 -3
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.esm.js +147 -186
  25. package/dist/index.esm.js.map +1 -1
  26. package/dist/index.js +147 -185
  27. package/dist/index.js.map +1 -1
  28. package/dist/react-day-picker.min.js +1 -1
  29. package/dist/style.css.d.ts +35 -36
  30. package/dist/types/Matchers.d.ts +51 -1
  31. package/package.json +20 -20
  32. package/dist/components/Table/utils/getOutsideEndDays.d.ts +0 -3
  33. package/dist/components/Table/utils/getOutsideStartDays.d.ts +0 -4
  34. package/dist/components/Table/utils/getWeeks.d.ts +0 -17
package/dist/index.js CHANGED
@@ -525,7 +525,7 @@ function MonthsDropdown(props) {
525
525
  * Render the "previous month" button in the navigation.
526
526
  */
527
527
  function IconLeft(props) {
528
- return (React__default["default"].createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120", "data-testid": "iconLeft" }, props),
528
+ return (React__default["default"].createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
529
529
  React__default["default"].createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" })));
530
530
  }
531
531
 
@@ -533,7 +533,7 @@ function IconLeft(props) {
533
533
  * Render the "next month" button in the navigation.
534
534
  */
535
535
  function IconRight(props) {
536
- return (React__default["default"].createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props, { "data-testid": "iconRight" }),
536
+ return (React__default["default"].createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
537
537
  React__default["default"].createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" })));
538
538
  }
539
539
 
@@ -556,32 +556,26 @@ var Button = React.forwardRef(function (props, ref) {
556
556
 
557
557
  /** A component rendering the navigation buttons or the drop-downs. */
558
558
  function Navigation(props) {
559
- var _a;
560
- var _b, _c;
561
- var _d = useDayPicker(), dir = _d.dir, locale = _d.locale, classNames = _d.classNames, styles = _d.styles, _e = _d.labels, labelPrevious = _e.labelPrevious, labelNext = _e.labelNext, components = _d.components;
562
- var onPreviousClick = props.onPreviousClick, onNextClick = props.onNextClick;
563
- if (dir === 'rtl') {
564
- _a = [onPreviousClick, onNextClick], onNextClick = _a[0], onPreviousClick = _a[1];
559
+ var _a, _b;
560
+ var _c = useDayPicker(), dir = _c.dir, locale = _c.locale, classNames = _c.classNames, styles = _c.styles, _d = _c.labels, labelPrevious = _d.labelPrevious, labelNext = _d.labelNext, components = _c.components;
561
+ if (!props.nextMonth && !props.previousMonth) {
562
+ return React__default["default"].createElement(React__default["default"].Fragment, null);
565
563
  }
566
- var previousMonth = props.previousMonth, nextMonth = props.nextMonth;
567
- var previousLabel = labelPrevious(previousMonth, { locale: locale });
564
+ var previousLabel = labelPrevious(props.previousMonth, { locale: locale });
568
565
  var previousClassName = [
569
566
  classNames.nav_button,
570
567
  classNames.nav_button_previous
571
568
  ].join(' ');
572
- var nextLabel = labelNext(nextMonth, { locale: locale });
569
+ var nextLabel = labelNext(props.nextMonth, { locale: locale });
573
570
  var nextClassName = [
574
571
  classNames.nav_button,
575
572
  classNames.nav_button_next
576
573
  ].join(' ');
577
- if (!nextMonth && !previousMonth) {
578
- return React__default["default"].createElement(React__default["default"].Fragment, null);
579
- }
580
- var IconRightComponent = (_b = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _b !== void 0 ? _b : IconRight;
581
- var IconLeftComponent = (_c = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _c !== void 0 ? _c : IconLeft;
574
+ var IconRightComponent = (_a = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a !== void 0 ? _a : IconRight;
575
+ var IconLeftComponent = (_b = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b !== void 0 ? _b : IconLeft;
582
576
  return (React__default["default"].createElement("div", { className: classNames.nav, style: styles.nav },
583
- !props.hidePrevious && (React__default["default"].createElement(Button, { "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_next, disabled: !previousMonth, onClick: dir === 'rtl' ? onNextClick : onPreviousClick }, dir === 'rtl' ? (React__default["default"].createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default["default"].createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
584
- !props.hideNext && (React__default["default"].createElement(Button, { "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !nextMonth, onClick: dir === 'rtl' ? onPreviousClick : onNextClick }, dir === 'rtl' ? (React__default["default"].createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default["default"].createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
577
+ !props.hidePrevious && (React__default["default"].createElement(Button, { "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props.previousMonth, onClick: props.onPreviousClick }, dir === 'rtl' ? (React__default["default"].createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default["default"].createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
578
+ !props.hideNext && (React__default["default"].createElement(Button, { "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props.nextMonth, onClick: props.onNextClick }, dir === 'rtl' ? (React__default["default"].createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default["default"].createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
585
579
  }
586
580
 
587
581
  /**
@@ -651,7 +645,7 @@ function useNavigationState() {
651
645
  var goToMonth = function (date) {
652
646
  if (context.disableNavigation)
653
647
  return;
654
- setMonth(date);
648
+ setMonth(dateFns.startOfMonth(date));
655
649
  };
656
650
  return [month, goToMonth];
657
651
  }
@@ -741,10 +735,10 @@ var NavigationContext = React.createContext(undefined);
741
735
  /** Provides the values for the [[NavigationContext]]. */
742
736
  function NavigationProvider(props) {
743
737
  var dayPicker = useDayPicker();
744
- var _a = useNavigationState(), month = _a[0], goToMonth = _a[1];
745
- var displayMonths = getDisplayMonths(month, dayPicker);
746
- var nextMonth = getNextMonth(month, dayPicker);
747
- var previousMonth = getPreviousMonth(month, dayPicker);
738
+ var _a = useNavigationState(), currentMonth = _a[0], goToMonth = _a[1];
739
+ var displayMonths = getDisplayMonths(currentMonth, dayPicker);
740
+ var nextMonth = getNextMonth(currentMonth, dayPicker);
741
+ var previousMonth = getPreviousMonth(currentMonth, dayPicker);
748
742
  var isDateDisplayed = function (date) {
749
743
  return displayMonths.some(function (displayMonth) {
750
744
  return dateFns.isSameMonth(date, displayMonth);
@@ -762,7 +756,7 @@ function NavigationProvider(props) {
762
756
  }
763
757
  };
764
758
  var value = {
765
- month: month,
759
+ currentMonth: currentMonth,
766
760
  displayMonths: displayMonths,
767
761
  goToMonth: goToMonth,
768
762
  goToDate: goToDate,
@@ -912,53 +906,47 @@ function SelectMultipleProvider(props) {
912
906
  }
913
907
  function SelectMultipleProviderInternal(_a) {
914
908
  var initialProps = _a.initialProps, children = _a.children;
915
- var selected = initialProps.selected;
916
- var onDayClick = function (day, modifiers, e) {
909
+ var selected = initialProps.selected, min = initialProps.min, max = initialProps.max;
910
+ var onDayClick = function (day, activeModifiers, e) {
917
911
  var _a, _b;
918
- (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, modifiers, e);
919
- var isMinSelected = Boolean(initialProps.min &&
920
- modifiers.selected &&
921
- selected &&
922
- selected.length === initialProps.min);
912
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
913
+ var isMinSelected = Boolean(activeModifiers.selected && min && (selected === null || selected === void 0 ? void 0 : selected.length) === min);
923
914
  if (isMinSelected) {
924
915
  return;
925
916
  }
926
- var isMaxSelected = Boolean(initialProps.max &&
927
- !modifiers.selected &&
928
- selected &&
929
- selected.length === initialProps.max);
917
+ var isMaxSelected = Boolean(!activeModifiers.selected && max && (selected === null || selected === void 0 ? void 0 : selected.length) === max);
930
918
  if (isMaxSelected) {
931
919
  return;
932
920
  }
933
- var days = selected ? __spreadArray([], selected, true) : [];
934
- if (modifiers.selected) {
935
- var index = days.findIndex(function (selectedDay) {
921
+ var selectedDays = selected ? __spreadArray([], selected, true) : [];
922
+ if (activeModifiers.selected) {
923
+ var index = selectedDays.findIndex(function (selectedDay) {
936
924
  return dateFns.isSameDay(day, selectedDay);
937
925
  });
938
- days.splice(index, 1);
926
+ selectedDays.splice(index, 1);
939
927
  }
940
928
  else {
941
- days.push(day);
929
+ selectedDays.push(day);
942
930
  }
943
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, days, day, modifiers, e);
931
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, selectedDays, day, activeModifiers, e);
944
932
  };
945
933
  var modifiers = {
946
934
  disabled: []
947
935
  };
948
936
  if (selected) {
949
- modifiers.disabled = [
950
- function disableDay(day) {
951
- var isMaxSelected = initialProps.max &&
952
- selected &&
953
- selected.length > initialProps.max - 1;
954
- var isSelected = selected === null || selected === void 0 ? void 0 : selected.some(function (selectedDay) {
955
- return dateFns.isSameDay(selectedDay, day);
956
- });
957
- return Boolean(isMaxSelected && !isSelected);
958
- }
959
- ];
937
+ modifiers.disabled.push(function (day) {
938
+ var isMaxSelected = max && selected.length > max - 1;
939
+ var isSelected = selected.some(function (selectedDay) {
940
+ return dateFns.isSameDay(selectedDay, day);
941
+ });
942
+ return Boolean(isMaxSelected && !isSelected);
943
+ });
960
944
  }
961
- var contextValue = { selected: selected, onDayClick: onDayClick, modifiers: modifiers };
945
+ var contextValue = {
946
+ selected: selected,
947
+ onDayClick: onDayClick,
948
+ modifiers: modifiers
949
+ };
962
950
  return (React__default["default"].createElement(SelectMultipleContext.Provider, { value: contextValue }, children));
963
951
  }
964
952
 
@@ -1037,26 +1025,24 @@ function SelectRangeProvider(props) {
1037
1025
  function SelectRangeProviderInternal(_a) {
1038
1026
  var initialProps = _a.initialProps, children = _a.children;
1039
1027
  var selected = initialProps.selected;
1028
+ var _b = selected || {}, selectedFrom = _b.from, selectedTo = _b.to;
1040
1029
  var min = initialProps.min;
1041
1030
  var max = initialProps.max;
1042
- var onDayClick = function (day, modifiers, e) {
1031
+ var onDayClick = function (day, activeModifiers, e) {
1043
1032
  var _a, _b;
1044
- (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, modifiers, e);
1045
- var newValue = addToRange(day, selected);
1033
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
1034
+ var range = addToRange(day, selected);
1046
1035
  if ((min || max) &&
1047
1036
  selected &&
1048
- (newValue === null || newValue === void 0 ? void 0 : newValue.to) &&
1049
- newValue.from &&
1050
- newValue.from !== newValue.to) {
1051
- var diff = Math.abs(dateFns.differenceInCalendarDays(newValue === null || newValue === void 0 ? void 0 : newValue.to, newValue === null || newValue === void 0 ? void 0 : newValue.from));
1052
- if (min && diff < min) {
1053
- return;
1054
- }
1055
- if (max && diff >= max) {
1037
+ (range === null || range === void 0 ? void 0 : range.to) &&
1038
+ range.from &&
1039
+ range.from !== range.to) {
1040
+ var diff = Math.abs(dateFns.differenceInCalendarDays(range === null || range === void 0 ? void 0 : range.to, range === null || range === void 0 ? void 0 : range.from));
1041
+ if ((min && diff < min) || (max && diff >= max)) {
1056
1042
  return;
1057
1043
  }
1058
1044
  }
1059
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, newValue, day, modifiers, e);
1045
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, range, day, activeModifiers, e);
1060
1046
  };
1061
1047
  var modifiers = {
1062
1048
  range_start: [],
@@ -1064,63 +1050,37 @@ function SelectRangeProviderInternal(_a) {
1064
1050
  range_middle: [],
1065
1051
  disabled: []
1066
1052
  };
1067
- if (selected) {
1068
- if (selected.from) {
1069
- modifiers.range_start = [selected.from];
1070
- if (selected.to) {
1071
- modifiers.range_middle = [
1072
- {
1073
- after: selected.from,
1074
- before: selected.to
1075
- }
1076
- ];
1077
- if (max || min) {
1078
- modifiers.disabled = [
1079
- function (date) {
1080
- if (max &&
1081
- selected.to &&
1082
- selected.from &&
1083
- dateFns.isBefore(date, selected.from)) {
1084
- var diff = dateFns.differenceInCalendarDays(selected.to, date);
1085
- if (diff >= max) {
1086
- return true;
1087
- }
1088
- }
1089
- if (max &&
1090
- selected.to &&
1091
- selected.from &&
1092
- dateFns.isAfter(date, selected.to)) {
1093
- var diff = dateFns.differenceInCalendarDays(date, selected.from);
1094
- if (diff >= max) {
1095
- return true;
1096
- }
1097
- }
1098
- if (min && selected.from && dateFns.isBefore(date, selected.from)) {
1099
- var diff = dateFns.differenceInCalendarDays(selected.from, date);
1100
- if (diff < min) {
1101
- return true;
1102
- }
1103
- }
1104
- if (min &&
1105
- selected.to &&
1106
- selected.from &&
1107
- dateFns.isAfter(date, selected.to)) {
1108
- var diff = dateFns.differenceInCalendarDays(date, selected.from);
1109
- if (diff < min) {
1110
- return true;
1111
- }
1112
- }
1113
- return false;
1114
- }
1115
- ];
1053
+ if (selectedFrom) {
1054
+ modifiers.range_start = [selectedFrom];
1055
+ if (!selectedTo) {
1056
+ modifiers.range_end = [selectedFrom];
1057
+ }
1058
+ else {
1059
+ modifiers.range_end = [selectedTo];
1060
+ modifiers.range_middle = [
1061
+ {
1062
+ after: selectedFrom,
1063
+ before: selectedTo
1116
1064
  }
1117
- modifiers.range_end = [selected.to];
1118
- }
1119
- else {
1120
- modifiers.range_end = [selected.from];
1121
- }
1065
+ ];
1122
1066
  }
1123
1067
  }
1068
+ if (min && selectedFrom && selectedTo) {
1069
+ modifiers.disabled.push(function (date) {
1070
+ return ((dateFns.isBefore(date, selectedFrom) &&
1071
+ dateFns.differenceInCalendarDays(selectedFrom, date) < min) ||
1072
+ (dateFns.isAfter(date, selectedTo) &&
1073
+ dateFns.differenceInCalendarDays(date, selectedFrom) < min));
1074
+ });
1075
+ }
1076
+ if (max && selectedFrom && selectedTo) {
1077
+ modifiers.disabled.push(function (date) {
1078
+ return ((dateFns.isBefore(date, selectedFrom) &&
1079
+ dateFns.differenceInCalendarDays(selectedTo, date) >= max) ||
1080
+ (dateFns.isAfter(date, selectedTo) &&
1081
+ dateFns.differenceInCalendarDays(date, selectedFrom) >= max));
1082
+ });
1083
+ }
1124
1084
  return (React__default["default"].createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
1125
1085
  }
1126
1086
 
@@ -1287,7 +1247,23 @@ function isDateType(value) {
1287
1247
  function isArrayOfDates(value) {
1288
1248
  return Array.isArray(value) && value.every(dateFns.isDate);
1289
1249
  }
1290
- /** Returns `true` whether the day matches against the given matchers. */
1250
+ /**
1251
+ * Returns whether a day matches against at least one of the given Matchers.
1252
+ *
1253
+ * ```
1254
+ * const day = new Date(2022, 5, 19);
1255
+ * const matcher1: DateRange = {
1256
+ * from: new Date(2021, 12, 21),
1257
+ * to: new Date(2021, 12, 30)
1258
+ * }
1259
+ * const matcher2: DateRange = {
1260
+ * from: new Date(2022, 5, 1),
1261
+ * to: new Date(2022, 5, 23)
1262
+ * }
1263
+ *
1264
+ * const isMatch(day, [matcher1, matcher2]); // true, since day is in the matcher1 range.
1265
+ * ```
1266
+ * */
1291
1267
  function isMatch(day, matchers) {
1292
1268
  return matchers.some(function (matcher) {
1293
1269
  if (typeof matcher === 'boolean') {
@@ -1537,13 +1513,14 @@ function SelectSingleProvider(props) {
1537
1513
  }
1538
1514
  function SelectSingleProviderInternal(_a) {
1539
1515
  var initialProps = _a.initialProps, children = _a.children;
1540
- var onDayClick = function (day, dayModifiers, e) {
1541
- var _a, _b;
1542
- if (dayModifiers.selected && !initialProps.required) {
1543
- (_a = initialProps.onSelect) === null || _a === void 0 ? void 0 : _a.call(initialProps, undefined, day, dayModifiers, e);
1516
+ var onDayClick = function (day, activeModifiers, e) {
1517
+ var _a, _b, _c;
1518
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
1519
+ if (activeModifiers.selected && !initialProps.required) {
1520
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, undefined, day, activeModifiers, e);
1544
1521
  return;
1545
1522
  }
1546
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, day, day, dayModifiers, e);
1523
+ (_c = initialProps.onSelect) === null || _c === void 0 ? void 0 : _c.call(initialProps, day, day, activeModifiers, e);
1547
1524
  };
1548
1525
  var contextValue = {
1549
1526
  selected: initialProps.selected,
@@ -1833,14 +1810,14 @@ function Day(props) {
1833
1810
  function WeekNumber(props) {
1834
1811
  var weekNumber = props.number, dates = props.dates;
1835
1812
  var _a = useDayPicker(), onWeekNumberClick = _a.onWeekNumberClick, styles = _a.styles, classNames = _a.classNames, locale = _a.locale, labelWeekNumber = _a.labels.labelWeekNumber, formatWeekNumber = _a.formatters.formatWeekNumber;
1836
- var handleClick = function (e) {
1837
- onWeekNumberClick === null || onWeekNumberClick === void 0 ? void 0 : onWeekNumberClick(weekNumber, dates, e);
1838
- };
1839
1813
  var content = formatWeekNumber(Number(weekNumber), { locale: locale });
1840
1814
  if (!onWeekNumberClick) {
1841
1815
  return (React__default["default"].createElement("span", { className: classNames.weeknumber, style: styles.weeknumber }, content));
1842
1816
  }
1843
1817
  var label = labelWeekNumber(Number(weekNumber), { locale: locale });
1818
+ var handleClick = function (e) {
1819
+ onWeekNumberClick(weekNumber, dates, e);
1820
+ };
1844
1821
  return (React__default["default"].createElement(Button, { "aria-label": label, className: classNames.weeknumber, style: styles.weeknumber, onClick: handleClick }, content));
1845
1822
  }
1846
1823
 
@@ -1861,77 +1838,61 @@ function Row(props) {
1861
1838
  React__default["default"].createElement(DayComponent, { displayMonth: props.displayMonth, date: date }))); })));
1862
1839
  }
1863
1840
 
1864
- function getOutsideEndDays(month, options) {
1865
- var days = [];
1866
- var lastDayOfWeek = dateFns.endOfWeek(month, options);
1867
- var endDiff = dateFns.differenceInCalendarDays(lastDayOfWeek, month);
1868
- for (var i = 1; i <= endDiff; i++) {
1869
- var dayDate = dateFns.addDays(month, i);
1870
- days.push(dayDate);
1871
- }
1872
- return days;
1873
- }
1874
-
1875
- function getOutsideStartDays(month, options) {
1841
+ /** Return the weeks between two dates. */
1842
+ function daysToMonthWeeks(fromDate, toDate, options) {
1843
+ var toWeek = dateFns.endOfWeek(toDate, options);
1844
+ var fromWeek = dateFns.startOfWeek(fromDate, options);
1845
+ var nOfDays = dateFns.differenceInCalendarDays(toWeek, fromWeek);
1876
1846
  var days = [];
1877
- var firstDayOfWeek = dateFns.startOfWeek(month, options);
1878
- var startDiff = dateFns.differenceInCalendarDays(month, firstDayOfWeek);
1879
- for (var i = 0; i < startDiff; i++) {
1880
- var newDay = dateFns.addDays(firstDayOfWeek, i);
1881
- days.push(newDay);
1882
- }
1883
- return days;
1847
+ for (var i = 0; i <= nOfDays; i++) {
1848
+ days.push(dateFns.addDays(fromWeek, i));
1849
+ }
1850
+ var weeksInMonth = days.reduce(function (result, date) {
1851
+ var weekNumber = dateFns.getWeek(date, options);
1852
+ var existingWeek = result.find(function (value) { return value.weekNumber === weekNumber; });
1853
+ if (existingWeek) {
1854
+ existingWeek.dates.push(date);
1855
+ return result;
1856
+ }
1857
+ result.push({
1858
+ weekNumber: weekNumber,
1859
+ dates: [date]
1860
+ });
1861
+ return result;
1862
+ }, []);
1863
+ return weeksInMonth;
1884
1864
  }
1885
1865
 
1886
1866
  /**
1887
- * Return the weeks belonging to the given month.
1867
+ * Return the weeks belonging to the given month, adding the "outside days" to
1868
+ * the first and last week.
1888
1869
  */
1889
- function getWeeks(month, _a) {
1890
- var locale = _a.locale, fixedWeeks = _a.fixedWeeks;
1891
- var monthStart = dateFns.startOfMonth(month);
1892
- var monthEnd = dateFns.endOfMonth(month);
1893
- var diff = dateFns.differenceInCalendarDays(monthEnd, monthStart);
1894
- var weeks = [];
1895
- var lastWeek = { weekNumber: 0, dates: [] };
1896
- for (var i = 0; i <= diff; i++) {
1897
- var date = dateFns.addDays(monthStart, i);
1898
- var week = dateFns.getWeek(date, { locale: locale });
1899
- if (lastWeek.weekNumber !== week) {
1900
- // Create a new week by adding outside start days
1901
- var startDays = getOutsideStartDays(date, { locale: locale });
1902
- lastWeek = { weekNumber: week, dates: startDays };
1903
- weeks.push(lastWeek);
1904
- }
1905
- lastWeek.dates.push(date);
1906
- }
1907
- var lastDay = lastWeek.dates[lastWeek.dates.length - 1];
1908
- var endDays = getOutsideEndDays(lastDay, { locale: locale });
1909
- lastWeek.dates = lastWeek.dates.concat(endDays);
1870
+ function getMonthWeeks(
1871
+ /** The month to get the weeks from */
1872
+ month, options) {
1873
+ var weeksInMonth = daysToMonthWeeks(dateFns.startOfMonth(month), dateFns.endOfMonth(month), options);
1910
1874
  // Add extra weeks to the month, up to 6 weeks
1911
- if (fixedWeeks) {
1912
- var lastWeekDate = lastWeek.dates[lastWeek.dates.length - 1];
1913
- var weeksInMonth = dateFns.getWeeksInMonth(month, { locale: locale });
1914
- if (weeksInMonth < 6) {
1915
- var diffDays = dateFns.differenceInCalendarDays(dateFns.addWeeks(lastWeekDate, 6 - weeksInMonth), lastWeekDate);
1916
- for (var i = 0; i < diffDays; i++) {
1917
- var date = dateFns.addDays(lastWeekDate, i + 1);
1918
- var week = dateFns.getWeek(date, { locale: locale });
1919
- if (lastWeek.weekNumber !== week) {
1920
- lastWeek = { weekNumber: week, dates: [] };
1921
- weeks.push(lastWeek);
1922
- }
1923
- lastWeek.dates.push(date);
1924
- }
1875
+ if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) {
1876
+ var nrOfMonthWeeks = dateFns.getWeeksInMonth(month, options);
1877
+ if (nrOfMonthWeeks < 6) {
1878
+ var lastWeek = weeksInMonth[weeksInMonth.length - 1];
1879
+ var lastDate = lastWeek.dates[lastWeek.dates.length - 1];
1880
+ var toDate = dateFns.addWeeks(lastDate, 6 - nrOfMonthWeeks);
1881
+ var extraWeeks = daysToMonthWeeks(dateFns.addWeeks(lastDate, 1), toDate, options);
1882
+ weeksInMonth.push.apply(weeksInMonth, extraWeeks);
1925
1883
  }
1926
1884
  }
1927
- return weeks;
1885
+ return weeksInMonth;
1928
1886
  }
1929
1887
 
1930
1888
  /** Render the table with the calendar. */
1931
1889
  function Table(props) {
1932
1890
  var _a, _b, _c;
1933
1891
  var _d = useDayPicker(), locale = _d.locale, classNames = _d.classNames, styles = _d.styles, hideHead = _d.hideHead, fixedWeeks = _d.fixedWeeks, components = _d.components;
1934
- var weeks = getWeeks(props.displayMonth, { locale: locale, fixedWeeks: fixedWeeks });
1892
+ var weeks = getMonthWeeks(props.displayMonth, {
1893
+ useFixedWeeks: Boolean(fixedWeeks),
1894
+ locale: locale
1895
+ });
1935
1896
  var HeadComponent = (_a = components === null || components === void 0 ? void 0 : components.Head) !== null && _a !== void 0 ? _a : Head;
1936
1897
  var RowComponent = (_b = components === null || components === void 0 ? void 0 : components.Row) !== null && _b !== void 0 ? _b : Row;
1937
1898
  var FooterComponent = (_c = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c !== void 0 ? _c : Footer;
@@ -2257,6 +2218,7 @@ exports.isDayPickerCustom = isDayPickerCustom;
2257
2218
  exports.isDayPickerMultiple = isDayPickerMultiple;
2258
2219
  exports.isDayPickerRange = isDayPickerRange;
2259
2220
  exports.isDayPickerSingle = isDayPickerSingle;
2221
+ exports.isMatch = isMatch;
2260
2222
  exports.useActiveModifiers = useActiveModifiers;
2261
2223
  exports.useDayPicker = useDayPicker;
2262
2224
  exports.useDayRender = useDayRender;