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.esm.js CHANGED
@@ -516,7 +516,7 @@ function MonthsDropdown(props) {
516
516
  * Render the "previous month" button in the navigation.
517
517
  */
518
518
  function IconLeft(props) {
519
- return (React.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120", "data-testid": "iconLeft" }, props),
519
+ return (React.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
520
520
  React.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" })));
521
521
  }
522
522
 
@@ -524,7 +524,7 @@ function IconLeft(props) {
524
524
  * Render the "next month" button in the navigation.
525
525
  */
526
526
  function IconRight(props) {
527
- return (React.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props, { "data-testid": "iconRight" }),
527
+ return (React.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
528
528
  React.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" })));
529
529
  }
530
530
 
@@ -547,32 +547,26 @@ var Button = forwardRef(function (props, ref) {
547
547
 
548
548
  /** A component rendering the navigation buttons or the drop-downs. */
549
549
  function Navigation(props) {
550
- var _a;
551
- var _b, _c;
552
- 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;
553
- var onPreviousClick = props.onPreviousClick, onNextClick = props.onNextClick;
554
- if (dir === 'rtl') {
555
- _a = [onPreviousClick, onNextClick], onNextClick = _a[0], onPreviousClick = _a[1];
550
+ var _a, _b;
551
+ 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;
552
+ if (!props.nextMonth && !props.previousMonth) {
553
+ return React.createElement(React.Fragment, null);
556
554
  }
557
- var previousMonth = props.previousMonth, nextMonth = props.nextMonth;
558
- var previousLabel = labelPrevious(previousMonth, { locale: locale });
555
+ var previousLabel = labelPrevious(props.previousMonth, { locale: locale });
559
556
  var previousClassName = [
560
557
  classNames.nav_button,
561
558
  classNames.nav_button_previous
562
559
  ].join(' ');
563
- var nextLabel = labelNext(nextMonth, { locale: locale });
560
+ var nextLabel = labelNext(props.nextMonth, { locale: locale });
564
561
  var nextClassName = [
565
562
  classNames.nav_button,
566
563
  classNames.nav_button_next
567
564
  ].join(' ');
568
- if (!nextMonth && !previousMonth) {
569
- return React.createElement(React.Fragment, null);
570
- }
571
- var IconRightComponent = (_b = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _b !== void 0 ? _b : IconRight;
572
- var IconLeftComponent = (_c = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _c !== void 0 ? _c : IconLeft;
565
+ var IconRightComponent = (_a = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a !== void 0 ? _a : IconRight;
566
+ var IconLeftComponent = (_b = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b !== void 0 ? _b : IconLeft;
573
567
  return (React.createElement("div", { className: classNames.nav, style: styles.nav },
574
- !props.hidePrevious && (React.createElement(Button, { "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_next, disabled: !previousMonth, onClick: dir === 'rtl' ? onNextClick : onPreviousClick }, dir === 'rtl' ? (React.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
575
- !props.hideNext && (React.createElement(Button, { "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !nextMonth, onClick: dir === 'rtl' ? onPreviousClick : onNextClick }, dir === 'rtl' ? (React.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
568
+ !props.hidePrevious && (React.createElement(Button, { "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props.previousMonth, onClick: props.onPreviousClick }, dir === 'rtl' ? (React.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
569
+ !props.hideNext && (React.createElement(Button, { "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props.nextMonth, onClick: props.onNextClick }, dir === 'rtl' ? (React.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
576
570
  }
577
571
 
578
572
  /**
@@ -642,7 +636,7 @@ function useNavigationState() {
642
636
  var goToMonth = function (date) {
643
637
  if (context.disableNavigation)
644
638
  return;
645
- setMonth(date);
639
+ setMonth(startOfMonth(date));
646
640
  };
647
641
  return [month, goToMonth];
648
642
  }
@@ -732,10 +726,10 @@ var NavigationContext = createContext(undefined);
732
726
  /** Provides the values for the [[NavigationContext]]. */
733
727
  function NavigationProvider(props) {
734
728
  var dayPicker = useDayPicker();
735
- var _a = useNavigationState(), month = _a[0], goToMonth = _a[1];
736
- var displayMonths = getDisplayMonths(month, dayPicker);
737
- var nextMonth = getNextMonth(month, dayPicker);
738
- var previousMonth = getPreviousMonth(month, dayPicker);
729
+ var _a = useNavigationState(), currentMonth = _a[0], goToMonth = _a[1];
730
+ var displayMonths = getDisplayMonths(currentMonth, dayPicker);
731
+ var nextMonth = getNextMonth(currentMonth, dayPicker);
732
+ var previousMonth = getPreviousMonth(currentMonth, dayPicker);
739
733
  var isDateDisplayed = function (date) {
740
734
  return displayMonths.some(function (displayMonth) {
741
735
  return isSameMonth(date, displayMonth);
@@ -753,7 +747,7 @@ function NavigationProvider(props) {
753
747
  }
754
748
  };
755
749
  var value = {
756
- month: month,
750
+ currentMonth: currentMonth,
757
751
  displayMonths: displayMonths,
758
752
  goToMonth: goToMonth,
759
753
  goToDate: goToDate,
@@ -903,53 +897,47 @@ function SelectMultipleProvider(props) {
903
897
  }
904
898
  function SelectMultipleProviderInternal(_a) {
905
899
  var initialProps = _a.initialProps, children = _a.children;
906
- var selected = initialProps.selected;
907
- var onDayClick = function (day, modifiers, e) {
900
+ var selected = initialProps.selected, min = initialProps.min, max = initialProps.max;
901
+ var onDayClick = function (day, activeModifiers, e) {
908
902
  var _a, _b;
909
- (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, modifiers, e);
910
- var isMinSelected = Boolean(initialProps.min &&
911
- modifiers.selected &&
912
- selected &&
913
- selected.length === initialProps.min);
903
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
904
+ var isMinSelected = Boolean(activeModifiers.selected && min && (selected === null || selected === void 0 ? void 0 : selected.length) === min);
914
905
  if (isMinSelected) {
915
906
  return;
916
907
  }
917
- var isMaxSelected = Boolean(initialProps.max &&
918
- !modifiers.selected &&
919
- selected &&
920
- selected.length === initialProps.max);
908
+ var isMaxSelected = Boolean(!activeModifiers.selected && max && (selected === null || selected === void 0 ? void 0 : selected.length) === max);
921
909
  if (isMaxSelected) {
922
910
  return;
923
911
  }
924
- var days = selected ? __spreadArray([], selected, true) : [];
925
- if (modifiers.selected) {
926
- var index = days.findIndex(function (selectedDay) {
912
+ var selectedDays = selected ? __spreadArray([], selected, true) : [];
913
+ if (activeModifiers.selected) {
914
+ var index = selectedDays.findIndex(function (selectedDay) {
927
915
  return isSameDay(day, selectedDay);
928
916
  });
929
- days.splice(index, 1);
917
+ selectedDays.splice(index, 1);
930
918
  }
931
919
  else {
932
- days.push(day);
920
+ selectedDays.push(day);
933
921
  }
934
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, days, day, modifiers, e);
922
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, selectedDays, day, activeModifiers, e);
935
923
  };
936
924
  var modifiers = {
937
925
  disabled: []
938
926
  };
939
927
  if (selected) {
940
- modifiers.disabled = [
941
- function disableDay(day) {
942
- var isMaxSelected = initialProps.max &&
943
- selected &&
944
- selected.length > initialProps.max - 1;
945
- var isSelected = selected === null || selected === void 0 ? void 0 : selected.some(function (selectedDay) {
946
- return isSameDay(selectedDay, day);
947
- });
948
- return Boolean(isMaxSelected && !isSelected);
949
- }
950
- ];
928
+ modifiers.disabled.push(function (day) {
929
+ var isMaxSelected = max && selected.length > max - 1;
930
+ var isSelected = selected.some(function (selectedDay) {
931
+ return isSameDay(selectedDay, day);
932
+ });
933
+ return Boolean(isMaxSelected && !isSelected);
934
+ });
951
935
  }
952
- var contextValue = { selected: selected, onDayClick: onDayClick, modifiers: modifiers };
936
+ var contextValue = {
937
+ selected: selected,
938
+ onDayClick: onDayClick,
939
+ modifiers: modifiers
940
+ };
953
941
  return (React.createElement(SelectMultipleContext.Provider, { value: contextValue }, children));
954
942
  }
955
943
 
@@ -1028,26 +1016,24 @@ function SelectRangeProvider(props) {
1028
1016
  function SelectRangeProviderInternal(_a) {
1029
1017
  var initialProps = _a.initialProps, children = _a.children;
1030
1018
  var selected = initialProps.selected;
1019
+ var _b = selected || {}, selectedFrom = _b.from, selectedTo = _b.to;
1031
1020
  var min = initialProps.min;
1032
1021
  var max = initialProps.max;
1033
- var onDayClick = function (day, modifiers, e) {
1022
+ var onDayClick = function (day, activeModifiers, e) {
1034
1023
  var _a, _b;
1035
- (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, modifiers, e);
1036
- var newValue = addToRange(day, selected);
1024
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
1025
+ var range = addToRange(day, selected);
1037
1026
  if ((min || max) &&
1038
1027
  selected &&
1039
- (newValue === null || newValue === void 0 ? void 0 : newValue.to) &&
1040
- newValue.from &&
1041
- newValue.from !== newValue.to) {
1042
- var diff = Math.abs(differenceInCalendarDays(newValue === null || newValue === void 0 ? void 0 : newValue.to, newValue === null || newValue === void 0 ? void 0 : newValue.from));
1043
- if (min && diff < min) {
1044
- return;
1045
- }
1046
- if (max && diff >= max) {
1028
+ (range === null || range === void 0 ? void 0 : range.to) &&
1029
+ range.from &&
1030
+ range.from !== range.to) {
1031
+ var diff = Math.abs(differenceInCalendarDays(range === null || range === void 0 ? void 0 : range.to, range === null || range === void 0 ? void 0 : range.from));
1032
+ if ((min && diff < min) || (max && diff >= max)) {
1047
1033
  return;
1048
1034
  }
1049
1035
  }
1050
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, newValue, day, modifiers, e);
1036
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, range, day, activeModifiers, e);
1051
1037
  };
1052
1038
  var modifiers = {
1053
1039
  range_start: [],
@@ -1055,63 +1041,37 @@ function SelectRangeProviderInternal(_a) {
1055
1041
  range_middle: [],
1056
1042
  disabled: []
1057
1043
  };
1058
- if (selected) {
1059
- if (selected.from) {
1060
- modifiers.range_start = [selected.from];
1061
- if (selected.to) {
1062
- modifiers.range_middle = [
1063
- {
1064
- after: selected.from,
1065
- before: selected.to
1066
- }
1067
- ];
1068
- if (max || min) {
1069
- modifiers.disabled = [
1070
- function (date) {
1071
- if (max &&
1072
- selected.to &&
1073
- selected.from &&
1074
- isBefore(date, selected.from)) {
1075
- var diff = differenceInCalendarDays(selected.to, date);
1076
- if (diff >= max) {
1077
- return true;
1078
- }
1079
- }
1080
- if (max &&
1081
- selected.to &&
1082
- selected.from &&
1083
- isAfter(date, selected.to)) {
1084
- var diff = differenceInCalendarDays(date, selected.from);
1085
- if (diff >= max) {
1086
- return true;
1087
- }
1088
- }
1089
- if (min && selected.from && isBefore(date, selected.from)) {
1090
- var diff = differenceInCalendarDays(selected.from, date);
1091
- if (diff < min) {
1092
- return true;
1093
- }
1094
- }
1095
- if (min &&
1096
- selected.to &&
1097
- selected.from &&
1098
- isAfter(date, selected.to)) {
1099
- var diff = differenceInCalendarDays(date, selected.from);
1100
- if (diff < min) {
1101
- return true;
1102
- }
1103
- }
1104
- return false;
1105
- }
1106
- ];
1044
+ if (selectedFrom) {
1045
+ modifiers.range_start = [selectedFrom];
1046
+ if (!selectedTo) {
1047
+ modifiers.range_end = [selectedFrom];
1048
+ }
1049
+ else {
1050
+ modifiers.range_end = [selectedTo];
1051
+ modifiers.range_middle = [
1052
+ {
1053
+ after: selectedFrom,
1054
+ before: selectedTo
1107
1055
  }
1108
- modifiers.range_end = [selected.to];
1109
- }
1110
- else {
1111
- modifiers.range_end = [selected.from];
1112
- }
1056
+ ];
1113
1057
  }
1114
1058
  }
1059
+ if (min && selectedFrom && selectedTo) {
1060
+ modifiers.disabled.push(function (date) {
1061
+ return ((isBefore(date, selectedFrom) &&
1062
+ differenceInCalendarDays(selectedFrom, date) < min) ||
1063
+ (isAfter(date, selectedTo) &&
1064
+ differenceInCalendarDays(date, selectedFrom) < min));
1065
+ });
1066
+ }
1067
+ if (max && selectedFrom && selectedTo) {
1068
+ modifiers.disabled.push(function (date) {
1069
+ return ((isBefore(date, selectedFrom) &&
1070
+ differenceInCalendarDays(selectedTo, date) >= max) ||
1071
+ (isAfter(date, selectedTo) &&
1072
+ differenceInCalendarDays(date, selectedFrom) >= max));
1073
+ });
1074
+ }
1115
1075
  return (React.createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
1116
1076
  }
1117
1077
 
@@ -1278,7 +1238,23 @@ function isDateType(value) {
1278
1238
  function isArrayOfDates(value) {
1279
1239
  return Array.isArray(value) && value.every(isDate);
1280
1240
  }
1281
- /** Returns `true` whether the day matches against the given matchers. */
1241
+ /**
1242
+ * Returns whether a day matches against at least one of the given Matchers.
1243
+ *
1244
+ * ```
1245
+ * const day = new Date(2022, 5, 19);
1246
+ * const matcher1: DateRange = {
1247
+ * from: new Date(2021, 12, 21),
1248
+ * to: new Date(2021, 12, 30)
1249
+ * }
1250
+ * const matcher2: DateRange = {
1251
+ * from: new Date(2022, 5, 1),
1252
+ * to: new Date(2022, 5, 23)
1253
+ * }
1254
+ *
1255
+ * const isMatch(day, [matcher1, matcher2]); // true, since day is in the matcher1 range.
1256
+ * ```
1257
+ * */
1282
1258
  function isMatch(day, matchers) {
1283
1259
  return matchers.some(function (matcher) {
1284
1260
  if (typeof matcher === 'boolean') {
@@ -1528,13 +1504,14 @@ function SelectSingleProvider(props) {
1528
1504
  }
1529
1505
  function SelectSingleProviderInternal(_a) {
1530
1506
  var initialProps = _a.initialProps, children = _a.children;
1531
- var onDayClick = function (day, dayModifiers, e) {
1532
- var _a, _b;
1533
- if (dayModifiers.selected && !initialProps.required) {
1534
- (_a = initialProps.onSelect) === null || _a === void 0 ? void 0 : _a.call(initialProps, undefined, day, dayModifiers, e);
1507
+ var onDayClick = function (day, activeModifiers, e) {
1508
+ var _a, _b, _c;
1509
+ (_a = initialProps.onDayClick) === null || _a === void 0 ? void 0 : _a.call(initialProps, day, activeModifiers, e);
1510
+ if (activeModifiers.selected && !initialProps.required) {
1511
+ (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, undefined, day, activeModifiers, e);
1535
1512
  return;
1536
1513
  }
1537
- (_b = initialProps.onSelect) === null || _b === void 0 ? void 0 : _b.call(initialProps, day, day, dayModifiers, e);
1514
+ (_c = initialProps.onSelect) === null || _c === void 0 ? void 0 : _c.call(initialProps, day, day, activeModifiers, e);
1538
1515
  };
1539
1516
  var contextValue = {
1540
1517
  selected: initialProps.selected,
@@ -1824,14 +1801,14 @@ function Day(props) {
1824
1801
  function WeekNumber(props) {
1825
1802
  var weekNumber = props.number, dates = props.dates;
1826
1803
  var _a = useDayPicker(), onWeekNumberClick = _a.onWeekNumberClick, styles = _a.styles, classNames = _a.classNames, locale = _a.locale, labelWeekNumber = _a.labels.labelWeekNumber, formatWeekNumber = _a.formatters.formatWeekNumber;
1827
- var handleClick = function (e) {
1828
- onWeekNumberClick === null || onWeekNumberClick === void 0 ? void 0 : onWeekNumberClick(weekNumber, dates, e);
1829
- };
1830
1804
  var content = formatWeekNumber(Number(weekNumber), { locale: locale });
1831
1805
  if (!onWeekNumberClick) {
1832
1806
  return (React.createElement("span", { className: classNames.weeknumber, style: styles.weeknumber }, content));
1833
1807
  }
1834
1808
  var label = labelWeekNumber(Number(weekNumber), { locale: locale });
1809
+ var handleClick = function (e) {
1810
+ onWeekNumberClick(weekNumber, dates, e);
1811
+ };
1835
1812
  return (React.createElement(Button, { "aria-label": label, className: classNames.weeknumber, style: styles.weeknumber, onClick: handleClick }, content));
1836
1813
  }
1837
1814
 
@@ -1852,77 +1829,61 @@ function Row(props) {
1852
1829
  React.createElement(DayComponent, { displayMonth: props.displayMonth, date: date }))); })));
1853
1830
  }
1854
1831
 
1855
- function getOutsideEndDays(month, options) {
1856
- var days = [];
1857
- var lastDayOfWeek = endOfWeek(month, options);
1858
- var endDiff = differenceInCalendarDays(lastDayOfWeek, month);
1859
- for (var i = 1; i <= endDiff; i++) {
1860
- var dayDate = addDays(month, i);
1861
- days.push(dayDate);
1862
- }
1863
- return days;
1864
- }
1865
-
1866
- function getOutsideStartDays(month, options) {
1832
+ /** Return the weeks between two dates. */
1833
+ function daysToMonthWeeks(fromDate, toDate, options) {
1834
+ var toWeek = endOfWeek(toDate, options);
1835
+ var fromWeek = startOfWeek(fromDate, options);
1836
+ var nOfDays = differenceInCalendarDays(toWeek, fromWeek);
1867
1837
  var days = [];
1868
- var firstDayOfWeek = startOfWeek(month, options);
1869
- var startDiff = differenceInCalendarDays(month, firstDayOfWeek);
1870
- for (var i = 0; i < startDiff; i++) {
1871
- var newDay = addDays(firstDayOfWeek, i);
1872
- days.push(newDay);
1873
- }
1874
- return days;
1838
+ for (var i = 0; i <= nOfDays; i++) {
1839
+ days.push(addDays(fromWeek, i));
1840
+ }
1841
+ var weeksInMonth = days.reduce(function (result, date) {
1842
+ var weekNumber = getWeek(date, options);
1843
+ var existingWeek = result.find(function (value) { return value.weekNumber === weekNumber; });
1844
+ if (existingWeek) {
1845
+ existingWeek.dates.push(date);
1846
+ return result;
1847
+ }
1848
+ result.push({
1849
+ weekNumber: weekNumber,
1850
+ dates: [date]
1851
+ });
1852
+ return result;
1853
+ }, []);
1854
+ return weeksInMonth;
1875
1855
  }
1876
1856
 
1877
1857
  /**
1878
- * Return the weeks belonging to the given month.
1858
+ * Return the weeks belonging to the given month, adding the "outside days" to
1859
+ * the first and last week.
1879
1860
  */
1880
- function getWeeks(month, _a) {
1881
- var locale = _a.locale, fixedWeeks = _a.fixedWeeks;
1882
- var monthStart = startOfMonth(month);
1883
- var monthEnd = endOfMonth(month);
1884
- var diff = differenceInCalendarDays(monthEnd, monthStart);
1885
- var weeks = [];
1886
- var lastWeek = { weekNumber: 0, dates: [] };
1887
- for (var i = 0; i <= diff; i++) {
1888
- var date = addDays(monthStart, i);
1889
- var week = getWeek(date, { locale: locale });
1890
- if (lastWeek.weekNumber !== week) {
1891
- // Create a new week by adding outside start days
1892
- var startDays = getOutsideStartDays(date, { locale: locale });
1893
- lastWeek = { weekNumber: week, dates: startDays };
1894
- weeks.push(lastWeek);
1895
- }
1896
- lastWeek.dates.push(date);
1897
- }
1898
- var lastDay = lastWeek.dates[lastWeek.dates.length - 1];
1899
- var endDays = getOutsideEndDays(lastDay, { locale: locale });
1900
- lastWeek.dates = lastWeek.dates.concat(endDays);
1861
+ function getMonthWeeks(
1862
+ /** The month to get the weeks from */
1863
+ month, options) {
1864
+ var weeksInMonth = daysToMonthWeeks(startOfMonth(month), endOfMonth(month), options);
1901
1865
  // Add extra weeks to the month, up to 6 weeks
1902
- if (fixedWeeks) {
1903
- var lastWeekDate = lastWeek.dates[lastWeek.dates.length - 1];
1904
- var weeksInMonth = getWeeksInMonth(month, { locale: locale });
1905
- if (weeksInMonth < 6) {
1906
- var diffDays = differenceInCalendarDays(addWeeks(lastWeekDate, 6 - weeksInMonth), lastWeekDate);
1907
- for (var i = 0; i < diffDays; i++) {
1908
- var date = addDays(lastWeekDate, i + 1);
1909
- var week = getWeek(date, { locale: locale });
1910
- if (lastWeek.weekNumber !== week) {
1911
- lastWeek = { weekNumber: week, dates: [] };
1912
- weeks.push(lastWeek);
1913
- }
1914
- lastWeek.dates.push(date);
1915
- }
1866
+ if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) {
1867
+ var nrOfMonthWeeks = getWeeksInMonth(month, options);
1868
+ if (nrOfMonthWeeks < 6) {
1869
+ var lastWeek = weeksInMonth[weeksInMonth.length - 1];
1870
+ var lastDate = lastWeek.dates[lastWeek.dates.length - 1];
1871
+ var toDate = addWeeks(lastDate, 6 - nrOfMonthWeeks);
1872
+ var extraWeeks = daysToMonthWeeks(addWeeks(lastDate, 1), toDate, options);
1873
+ weeksInMonth.push.apply(weeksInMonth, extraWeeks);
1916
1874
  }
1917
1875
  }
1918
- return weeks;
1876
+ return weeksInMonth;
1919
1877
  }
1920
1878
 
1921
1879
  /** Render the table with the calendar. */
1922
1880
  function Table(props) {
1923
1881
  var _a, _b, _c;
1924
1882
  var _d = useDayPicker(), locale = _d.locale, classNames = _d.classNames, styles = _d.styles, hideHead = _d.hideHead, fixedWeeks = _d.fixedWeeks, components = _d.components;
1925
- var weeks = getWeeks(props.displayMonth, { locale: locale, fixedWeeks: fixedWeeks });
1883
+ var weeks = getMonthWeeks(props.displayMonth, {
1884
+ useFixedWeeks: Boolean(fixedWeeks),
1885
+ locale: locale
1886
+ });
1926
1887
  var HeadComponent = (_a = components === null || components === void 0 ? void 0 : components.Head) !== null && _a !== void 0 ? _a : Head;
1927
1888
  var RowComponent = (_b = components === null || components === void 0 ? void 0 : components.Row) !== null && _b !== void 0 ? _b : Row;
1928
1889
  var FooterComponent = (_c = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c !== void 0 ? _c : Footer;
@@ -2209,5 +2170,5 @@ function isDayPickerCustom(props) {
2209
2170
  return props.mode === 'custom';
2210
2171
  }
2211
2172
 
2212
- export { Button, Caption, CaptionLabel, Day, DayContent, DayPicker, DayPickerContext, DayPickerProvider, Dropdown, FocusContext, FocusProvider, Footer, Head, IconDropdown, IconLeft, IconRight, InternalModifier, NavigationContext, NavigationProvider, RootProvider, Row, SelectMultipleContext, SelectMultipleProvider, SelectMultipleProviderInternal, SelectRangeContext, SelectRangeProvider, SelectRangeProviderInternal, SelectSingleContext, SelectSingleProvider, SelectSingleProviderInternal, WeekNumber, isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDayOfWeekType, isDayPickerCustom, isDayPickerMultiple, isDayPickerRange, isDayPickerSingle, useActiveModifiers, useDayPicker, useDayRender, useFocusContext, useInput, useNavigation, useSelectMultiple, useSelectRange, useSelectSingle };
2173
+ export { Button, Caption, CaptionLabel, Day, DayContent, DayPicker, DayPickerContext, DayPickerProvider, Dropdown, FocusContext, FocusProvider, Footer, Head, IconDropdown, IconLeft, IconRight, InternalModifier, NavigationContext, NavigationProvider, RootProvider, Row, SelectMultipleContext, SelectMultipleProvider, SelectMultipleProviderInternal, SelectRangeContext, SelectRangeProvider, SelectRangeProviderInternal, SelectSingleContext, SelectSingleProvider, SelectSingleProviderInternal, WeekNumber, isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDayOfWeekType, isDayPickerCustom, isDayPickerMultiple, isDayPickerRange, isDayPickerSingle, isMatch, useActiveModifiers, useDayPicker, useDayRender, useFocusContext, useInput, useNavigation, useSelectMultiple, useSelectRange, useSelectSingle };
2213
2174
  //# sourceMappingURL=index.esm.js.map