@stenajs-webui/calendar 15.0.0-alpha.4 → 15.0.0-alpha.8

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 (37) hide show
  1. package/dist/components/calendar/CalendarMonth.d.ts +3 -3
  2. package/dist/components/calendar/CalendarWeek.d.ts +3 -3
  3. package/dist/components/calendar/DisabledDayWrapper.d.ts +7 -0
  4. package/dist/components/calendar-types/date-range-calendar/DateRangeCalendar.d.ts +4 -12
  5. package/dist/components/calendar-types/date-range-calendar/DateRangeCalendar.stories.d.ts +1 -0
  6. package/dist/components/calendar-types/date-range-calendar/hooks/UseDateRangeSelection.d.ts +1 -1
  7. package/dist/components/calendar-types/date-range-exclusion-calendar/DateRangeExclusionCalendar.d.ts +2 -3
  8. package/dist/components/calendar-types/date-range-exclusion-calendar/UseDateRangeExclusionSelection.d.ts +1 -1
  9. package/dist/components/input-types/date-input/DateInput.d.ts +2 -1
  10. package/dist/components/input-types/date-input/DateInput.stories.d.ts +2 -0
  11. package/dist/components/input-types/date-range-dual-text-input/DateRangeDualTextInput.d.ts +4 -3
  12. package/dist/components/input-types/date-range-dual-text-input/DateRangeDualTextInput.stories.d.ts +2 -1
  13. package/dist/components/input-types/date-range-input/DateRangeInput.d.ts +6 -7
  14. package/dist/components/input-types/date-range-input/DateRangeInput.stories.d.ts +2 -1
  15. package/dist/components/input-types/date-range-input/hooks/UseDateRangeInput.d.ts +3 -2
  16. package/dist/components/input-types/date-text-input/DateTextInput.d.ts +2 -1
  17. package/dist/components/input-types/date-time-input/DateTimeInput.d.ts +2 -1
  18. package/dist/components/input-types/date-time-input/DateTimeInput.stories.d.ts +1 -0
  19. package/dist/config/DefaultMaxDate.d.ts +1 -0
  20. package/dist/features/date-range/hooks/UseDateRangeOnClickDayHandler.d.ts +2 -5
  21. package/dist/features/dual-text-input/DualTextInput.d.ts +4 -0
  22. package/dist/index.d.ts +3 -1
  23. package/dist/index.es.js +148 -153
  24. package/dist/index.es.js.map +1 -1
  25. package/dist/index.js +152 -154
  26. package/dist/index.js.map +1 -1
  27. package/dist/types/CalendarTypes.d.ts +21 -1
  28. package/dist/types/DateRange.d.ts +16 -0
  29. package/dist/util/calendar/StateModifier.d.ts +1 -0
  30. package/dist/util/date/DateMinMaxValidator.d.ts +1 -0
  31. package/dist/util/date/__tests__/DateMinMaxValidator.test.d.ts +1 -0
  32. package/dist/util/date-range/DateRangeTransformer.d.ts +3 -0
  33. package/dist/util/date-range/DateRangeValidator.d.ts +4 -0
  34. package/dist/util/date-range/__tests__/DateRangeValidator.test.d.ts +1 -0
  35. package/package.json +7 -7
  36. package/dist/components/calendar-types/date-range-calendar/util/IntervalSwitcher.d.ts +0 -4
  37. package/dist/util/calendar/CalendarIntervalValidator.d.ts +0 -11
package/dist/index.es.js CHANGED
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { useMemo, useCallback, useState, useEffect, useRef } from 'react';
3
3
  import { FlatButton, PrimaryButton, Icon, stenaArrowRight } from '@stenajs-webui/elements';
4
4
  import { Box, Text, Clickable, Row, Space, Spacing, Indent, Column, SeparatorLine, parseIntElseUndefined, useBoolean, useDelayedFalse } from '@stenajs-webui/core';
5
- import { isAfter, eachDayOfInterval, isSameDay, endOfMonth, startOfMonth, min, addDays, max, subDays, format, getISOWeek, getDate, startOfISOWeek, addWeeks, getMonth, getYear, getISODay, addHours, addMonths, addYears, subMonths, subYears, parse, isValid } from 'date-fns';
5
+ import { isAfter, eachDayOfInterval, isSameDay, endOfMonth, startOfMonth, min, addDays, max, subDays, format, getISOWeek, getDate, startOfISOWeek, addWeeks, getMonth, getYear, getISODay, addHours, isBefore, parse, addMonths, addYears, subMonths, subYears, isValid } from 'date-fns';
6
6
  import { last, chunk, range, debounce } from 'lodash';
7
7
  import styled from '@emotion/styled';
8
8
  import { faAngleLeft } from '@fortawesome/free-solid-svg-icons/faAngleLeft';
@@ -11,14 +11,14 @@ import { faAngleDoubleLeft } from '@fortawesome/free-solid-svg-icons/faAngleDoub
11
11
  import { faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons/faAngleDoubleRight';
12
12
  import { faCaretLeft } from '@fortawesome/free-solid-svg-icons/faCaretLeft';
13
13
  import { faCaretRight } from '@fortawesome/free-solid-svg-icons/faCaretRight';
14
- import { faCalendarAlt } from '@fortawesome/free-solid-svg-icons/faCalendarAlt';
14
+ import { faCalendarAlt } from '@fortawesome/free-regular-svg-icons/faCalendarAlt';
15
15
  import { TextInput, TextInputBox } from '@stenajs-webui/forms';
16
16
  import { useTippyInstance, Popover } from '@stenajs-webui/tooltip';
17
+ import { faCalendarAlt as faCalendarAlt$1 } from '@fortawesome/free-solid-svg-icons/faCalendarAlt';
17
18
  import { cssColor } from '@stenajs-webui/theme';
18
19
  import { faLongArrowAltRight } from '@fortawesome/free-solid-svg-icons/faLongArrowAltRight';
19
20
  import { faClock } from '@fortawesome/free-solid-svg-icons/faClock';
20
21
  import { faClock as faClock$1 } from '@fortawesome/free-regular-svg-icons/faClock';
21
- import { faCalendarAlt as faCalendarAlt$1 } from '@fortawesome/free-regular-svg-icons/faCalendarAlt';
22
22
  import { faAngleDown } from '@fortawesome/free-solid-svg-icons/faAngleDown';
23
23
 
24
24
  /*! *****************************************************************************
@@ -150,11 +150,13 @@ var addDayStateHighlights = function (calendarState, date, highlights) {
150
150
  calendarState[monthString] &&
151
151
  calendarState[monthString][weekNumber] &&
152
152
  calendarState[monthString][weekNumber][dayInMonth];
153
- var newHighlights = dayState && dayState.highlights
154
- ? __spreadArray(__spreadArray([], dayState.highlights, true), highlights, true) : highlights;
155
153
  return __assign(__assign({}, calendarState), (_a = {}, _a[monthString] = __assign(__assign({}, (calendarState && calendarState[monthString])), (_b = {}, _b[weekNumber] = __assign(__assign({}, (calendarState &&
156
154
  calendarState[monthString] &&
157
- calendarState[monthString][weekNumber])), (_c = {}, _c[dayInMonth] = __assign(__assign({}, dayState), { highlights: newHighlights }), _c)), _b)), _a));
155
+ calendarState[monthString][weekNumber])), (_c = {}, _c[dayInMonth] = addDayStateHighlightsOnSingleDay(dayState, highlights), _c)), _b)), _a));
156
+ };
157
+ var addDayStateHighlightsOnSingleDay = function (dayState, highlights) {
158
+ var _a;
159
+ return __assign(__assign({}, dayState), { highlights: __spreadArray(__spreadArray([], ((_a = dayState === null || dayState === void 0 ? void 0 : dayState.highlights) !== null && _a !== void 0 ? _a : []), true), highlights, true) });
158
160
  };
159
161
  var addWeekStateHighlights = function (calendarState, week, highlights) {
160
162
  var _a, _b;
@@ -402,6 +404,26 @@ var defaultCalendarTheme = {
402
404
  };
403
405
  var extranetCalendarTheme = __assign(__assign({}, defaultCalendarTheme), { width: "37px", height: "37px" });
404
406
 
407
+ var isDateInMinMaxRange = function (date, min, max) {
408
+ if (min && isBefore(date, min)) {
409
+ return isSameDay(date, min);
410
+ }
411
+ if (max && isAfter(date, max)) {
412
+ return isSameDay(date, max);
413
+ }
414
+ return true;
415
+ };
416
+
417
+ var DisabledDayWrapper = function DisabledDayWrapper(_a) {
418
+ var DayComponent = _a.dayComponent, minDate = _a.minDate, maxDate = _a.maxDate, dayState = _a.dayState, day = _a.day, props = __rest(_a, ["dayComponent", "minDate", "maxDate", "dayState", "day"]);
419
+ var activeDayState = useMemo(function () {
420
+ return !isDateInMinMaxRange(day.date, minDate, maxDate)
421
+ ? addDayStateHighlightsOnSingleDay(dayState, ["disabled"])
422
+ : dayState;
423
+ }, [day.date, dayState, maxDate, minDate]);
424
+ return React.createElement(DayComponent, __assign({ day: day }, props, { dayState: activeDayState }));
425
+ };
426
+
405
427
  var WeekNumberCell = function (_a) {
406
428
  var onClickWeek = _a.onClickWeek, theme = _a.theme, week = _a.week, background = _a.background, backgroundColor = _a.backgroundColor, prefix = _a.prefix;
407
429
  var content = (React.createElement(Box, { width: theme.width, height: theme.height, justifyContent: "center", alignItems: "center" },
@@ -416,10 +438,10 @@ var WeekNumberCell = function (_a) {
416
438
  };
417
439
 
418
440
  function CalendarWeek(_a) {
419
- var week = _a.week, month = _a.month, DayComponent = _a.dayComponent, statePerWeekDay = _a.statePerWeekDay, userDataPerWeekDay = _a.userDataPerWeekDay, onClickWeek = _a.onClickWeek, onClickDay = _a.onClickDay, theme = _a.theme, renderWeekNumber = _a.renderWeekNumber, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights;
441
+ var week = _a.week, month = _a.month, dayComponent = _a.dayComponent, statePerWeekDay = _a.statePerWeekDay, userDataPerWeekDay = _a.userDataPerWeekDay, minDate = _a.minDate, maxDate = _a.maxDate, onClickWeek = _a.onClickWeek, onClickDay = _a.onClickDay, theme = _a.theme, renderWeekNumber = _a.renderWeekNumber, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights;
420
442
  return (React.createElement("tr", { key: week.weekNumber },
421
443
  theme.WeekNumber.show && (React.createElement("td", null, renderWeekNumber ? (renderWeekNumber(week, theme, onClickWeek)) : (React.createElement(WeekNumberCell, { week: week, onClickWeek: onClickWeek, theme: theme })))),
422
- week.days.map(function (day) { return (React.createElement(DayComponent, { key: day.dateString, day: day, week: week, month: month, dayState: statePerWeekDay && statePerWeekDay[day.dayOfMonth], userData: userDataPerWeekDay && userDataPerWeekDay[day.dayOfMonth], onClickDay: onClickDay, theme: theme, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights })); })));
444
+ week.days.map(function (day) { return (React.createElement(DisabledDayWrapper, { dayComponent: dayComponent, key: day.dateString, day: day, week: week, month: month, dayState: statePerWeekDay && statePerWeekDay[day.dayOfMonth], userData: userDataPerWeekDay && userDataPerWeekDay[day.dayOfMonth], onClickDay: onClickDay, theme: theme, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights, minDate: minDate, maxDate: maxDate })); })));
423
445
  }
424
446
 
425
447
  var WeekDayCell = function (_a) {
@@ -434,7 +456,7 @@ var WeekDayCell = function (_a) {
434
456
  return content;
435
457
  };
436
458
 
437
- var CalendarDay = function (_a) {
459
+ var CalendarDay = function CalendarDay(_a) {
438
460
  var day = _a.day, week = _a.week, month = _a.month, dayState = _a.dayState, userData = _a.userData, onClickDay = _a.onClickDay, theme = _a.theme, ExtraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights;
439
461
  var content = (React.createElement(Box, { width: "100%", height: "100%", justifyContent: "center", alignItems: "center" },
440
462
  React.createElement(Text, __assign({}, (theme.CalendarDay.textProps &&
@@ -456,7 +478,7 @@ var isClickable = function (defaultHighlights, dayState) {
456
478
  };
457
479
 
458
480
  function CalendarMonth(_a) {
459
- var month = _a.month, _b = _a.dayComponent, dayComponent = _b === void 0 ? CalendarDay : _b, statePerWeek = _a.statePerWeek, userDataPerWeek = _a.userDataPerWeek, onClickDay = _a.onClickDay, onClickWeek = _a.onClickWeek, onClickWeekDay = _a.onClickWeekDay, onClickMonth = _a.onClickMonth, onClickYear = _a.onClickYear, renderWeekNumber = _a.renderWeekNumber, renderWeekDay = _a.renderWeekDay, headerLeftContent = _a.headerLeftContent, headerRightContent = _a.headerRightContent, _c = _a.theme, theme = _c === void 0 ? defaultCalendarTheme : _c, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights;
481
+ var month = _a.month, _b = _a.dayComponent, dayComponent = _b === void 0 ? CalendarDay : _b, statePerWeek = _a.statePerWeek, userDataPerWeek = _a.userDataPerWeek, minDate = _a.minDate, maxDate = _a.maxDate, onClickDay = _a.onClickDay, onClickWeek = _a.onClickWeek, onClickWeekDay = _a.onClickWeekDay, onClickMonth = _a.onClickMonth, onClickYear = _a.onClickYear, renderWeekNumber = _a.renderWeekNumber, renderWeekDay = _a.renderWeekDay, headerLeftContent = _a.headerLeftContent, headerRightContent = _a.headerRightContent, _c = _a.theme, theme = _c === void 0 ? defaultCalendarTheme : _c, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights;
460
482
  var showWeekNumber = theme.WeekNumber.show;
461
483
  return (React.createElement(React.Fragment, null,
462
484
  React.createElement(Box, { alignItems: "stretch" },
@@ -474,7 +496,7 @@ function CalendarMonth(_a) {
474
496
  React.createElement(Box, { width: theme.width, height: theme.height, justifyContent: "center", alignItems: "center" },
475
497
  React.createElement(Text, { size: "small", color: theme.CalendarMonth.headerTextColor }, "W")))),
476
498
  month.weeks[0].days.map(function (day) { return (React.createElement("td", { key: day.name }, renderWeekDay ? (renderWeekDay(day.name, theme, onClickWeekDay)) : (React.createElement(WeekDayCell, { day: day, onClickWeekDay: onClickWeekDay, theme: theme })))); })),
477
- month.weeks.map(function (week) { return (React.createElement(CalendarWeek, { key: week.weekNumber, month: month, week: week, dayComponent: dayComponent, statePerWeekDay: statePerWeek && statePerWeek[week.weekNumber], userDataPerWeekDay: userDataPerWeek && userDataPerWeek[week.weekNumber], onClickDay: onClickDay, onClickWeek: onClickWeek, theme: theme, renderWeekNumber: renderWeekNumber, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights })); }))))));
499
+ month.weeks.map(function (week) { return (React.createElement(CalendarWeek, { key: week.weekNumber, month: month, week: week, dayComponent: dayComponent, statePerWeekDay: statePerWeek && statePerWeek[week.weekNumber], userDataPerWeekDay: userDataPerWeek && userDataPerWeek[week.weekNumber], onClickDay: onClickDay, onClickWeek: onClickWeek, theme: theme, renderWeekNumber: renderWeekNumber, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights, minDate: minDate, maxDate: maxDate })); }))))));
478
500
  }
479
501
 
480
502
  function styleInject(css, ref) {
@@ -509,11 +531,13 @@ var styles$1 = {"calendar":"Calendar-module_calendar__Ztvgm"};
509
531
  styleInject(css_248z$1);
510
532
 
511
533
  function CalendarPanel(_a) {
512
- var monthRows = _a.monthRows, _b = _a.dayComponent, dayComponent = _b === void 0 ? CalendarDay : _b, userDataPerMonth = _a.userDataPerMonth, statePerMonth = _a.statePerMonth, onClickDay = _a.onClickDay, onClickWeekDay = _a.onClickWeekDay, onClickWeek = _a.onClickWeek, onClickMonth = _a.onClickMonth, onClickYear = _a.onClickYear, renderWeekDay = _a.renderWeekDay, renderWeekNumber = _a.renderWeekNumber, headerLeftContent = _a.headerLeftContent, headerRightContent = _a.headerRightContent, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights, _c = _a.theme, theme = _c === void 0 ? defaultCalendarTheme : _c;
534
+ var monthRows = _a.monthRows, _b = _a.dayComponent, dayComponent = _b === void 0 ? CalendarDay : _b, userDataPerMonth = _a.userDataPerMonth, statePerMonth = _a.statePerMonth, minDate = _a.minDate, maxDate = _a.maxDate, onClickDay = _a.onClickDay, onClickWeekDay = _a.onClickWeekDay, onClickWeek = _a.onClickWeek, onClickMonth = _a.onClickMonth, onClickYear = _a.onClickYear, renderWeekDay = _a.renderWeekDay, renderWeekNumber = _a.renderWeekNumber, headerLeftContent = _a.headerLeftContent, headerRightContent = _a.headerRightContent, extraDayContent = _a.extraDayContent, defaultHighlights = _a.defaultHighlights, _c = _a.theme, theme = _c === void 0 ? defaultCalendarTheme : _c;
535
+ var minDateObj = useMemo(function () { return (minDate ? parse(minDate, "yyyy-MM-dd", new Date()) : undefined); }, [minDate]);
536
+ var maxDateObj = useMemo(function () { return (maxDate ? parse(maxDate, "yyyy-MM-dd", new Date()) : undefined); }, [maxDate]);
513
537
  return (React.createElement("div", { className: styles$1.calendar }, monthRows.map(function (monthRow, rowIndex) { return (React.createElement(Spacing, { key: rowIndex },
514
538
  React.createElement(Row, null, monthRow.map(function (month, index) { return (React.createElement(React.Fragment, { key: month.name },
515
539
  index > 0 && React.createElement(Space, null),
516
- React.createElement(CalendarMonth, { month: month, dayComponent: dayComponent, userDataPerWeek: userDataPerMonth && userDataPerMonth[month.monthString], statePerWeek: statePerMonth && statePerMonth[month.monthString], onClickDay: onClickDay, onClickWeekDay: onClickWeekDay, onClickWeek: onClickWeek, onClickMonth: onClickMonth, onClickYear: onClickYear, theme: theme, renderWeekNumber: renderWeekNumber, renderWeekDay: renderWeekDay, headerLeftContent: headerLeftContent, headerRightContent: headerRightContent, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights }))); })))); })));
540
+ React.createElement(CalendarMonth, { month: month, dayComponent: dayComponent, userDataPerWeek: userDataPerMonth && userDataPerMonth[month.monthString], statePerWeek: statePerMonth && statePerMonth[month.monthString], onClickDay: onClickDay, onClickWeekDay: onClickWeekDay, onClickWeek: onClickWeek, onClickMonth: onClickMonth, onClickYear: onClickYear, theme: theme, renderWeekNumber: renderWeekNumber, renderWeekDay: renderWeekDay, headerLeftContent: headerLeftContent, headerRightContent: headerRightContent, extraDayContent: extraDayContent, defaultHighlights: defaultHighlights, minDate: minDateObj, maxDate: maxDateObj }))); })))); })));
517
541
  }
518
542
  function Calendar(props) {
519
543
  var initialDate = getInitialDate(props.year, props.month, props.date);
@@ -770,97 +794,65 @@ var fallbackIfNoPlacement = function (monthSwitcherPlacement, numMonths) {
770
794
  return monthSwitcherPlacement || (numMonths || 1) > 1 ? "below" : "header";
771
795
  };
772
796
 
773
- var transformDateIntervalToDateStringInterval = function (interval) { return ({
774
- startDate: interval.startDate && format(interval.startDate, DateFormats.fullDate),
775
- endDate: interval.endDate && format(interval.endDate, DateFormats.fullDate),
797
+ var dateRangeToStrings = function (dateRange) { return ({
798
+ startDate: dateRange.startDate
799
+ ? format(dateRange.startDate, "yyyy-MM-dd")
800
+ : undefined,
801
+ endDate: dateRange.endDate
802
+ ? format(dateRange.endDate, "yyyy-MM-dd")
803
+ : undefined,
776
804
  }); };
777
- var transformDateStringIntervalToDateInterval = function (interval) {
805
+ var stringsToDateRange = function (_a) {
806
+ var startDate = _a.startDate, endDate = _a.endDate;
778
807
  var now = new Date();
779
808
  return {
780
- startDate: (interval.startDate &&
781
- parse(interval.startDate, DateFormats.fullDate, now)) ||
782
- undefined,
783
- endDate: (interval.endDate &&
784
- parse(interval.endDate, DateFormats.fullDate, now)) ||
785
- undefined,
809
+ startDate: startDate ? parse(startDate, "yyyy-MM-dd", now) : undefined,
810
+ endDate: endDate ? parse(endDate, "yyyy-MM-dd", now) : undefined,
786
811
  };
812
+ };
813
+
814
+ var isDateRangeInvalid = function (_a) {
815
+ var startDate = _a.startDate, endDate = _a.endDate;
816
+ return Boolean(startDate &&
817
+ endDate &&
818
+ !isSameDay(startDate, endDate) &&
819
+ isAfter(startDate, endDate));
787
820
  };
788
- var ensureStartIsFirst = function (interval) {
789
- if (interval.startDate &&
790
- interval.endDate &&
791
- isAfter(interval.startDate, interval.endDate)) {
821
+ var toggleDatesIfEndIsEarlierThanStart = function (dateRange) {
822
+ if (isDateRangeInvalid(dateRange)) {
792
823
  return {
793
- startDate: interval.endDate,
794
- endDate: interval.startDate,
824
+ startDate: dateRange.endDate,
825
+ endDate: dateRange.startDate,
795
826
  };
796
827
  }
797
- return interval;
828
+ return dateRange;
829
+ };
830
+ var toggleDateStringsIfEndIsEarlierThanStart = function (dateRange) {
831
+ if (dateRange.startDate && dateRange.endDate) {
832
+ return dateRangeToStrings(toggleDatesIfEndIsEarlierThanStart(stringsToDateRange(dateRange)));
833
+ }
834
+ return dateRange;
798
835
  };
799
836
 
800
- var useDateRangeOnClickDayHandler = function (startDate, setStartDate, endDate, setEndDate, focusedInput, setFocusedInput, onChange) {
837
+ var useDateRangeOnClickDayHandler = function (value, onValueChange, focusedInput, setFocusedInput) {
801
838
  return useCallback(function (day) {
802
- if (focusedInput === "startDate") {
803
- if (endDate && isAfter(day.date, endDate)) {
804
- setStartDate(endDate);
805
- setEndDate(day.date);
806
- if (onChange) {
807
- onChange({ startDate: endDate, endDate: day.date });
808
- }
809
- }
810
- else {
811
- setStartDate(day.date);
812
- setFocusedInput("endDate");
813
- if (onChange) {
814
- onChange(ensureStartIsFirst({
815
- startDate: day.date,
816
- endDate: endDate,
817
- }));
818
- }
819
- }
820
- }
821
- else if (focusedInput === "endDate") {
822
- if (startDate && isAfter(startDate, day.date)) {
823
- setStartDate(day.date);
824
- setEndDate(startDate);
825
- if (onChange) {
826
- onChange({ startDate: day.date, endDate: startDate });
827
- }
828
- }
829
- else {
830
- setEndDate(day.date);
831
- setFocusedInput("startDate");
832
- if (onChange) {
833
- onChange(ensureStartIsFirst({
834
- startDate: startDate,
835
- endDate: day.date,
836
- }));
837
- }
838
- }
839
+ var dateRange = {
840
+ startDate: focusedInput === "startDate" ? day.date : value === null || value === void 0 ? void 0 : value.startDate,
841
+ endDate: focusedInput === "endDate" ? day.date : value === null || value === void 0 ? void 0 : value.endDate,
842
+ };
843
+ if (!isDateRangeInvalid(dateRange)) {
844
+ setFocusedInput(focusedInput === "startDate" ? "endDate" : "startDate");
839
845
  }
846
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(toggleDatesIfEndIsEarlierThanStart(dateRange));
840
847
  }, [
841
848
  focusedInput,
842
- endDate,
843
- startDate,
844
- setStartDate,
845
- setEndDate,
846
- onChange,
849
+ onValueChange,
847
850
  setFocusedInput,
851
+ value === null || value === void 0 ? void 0 : value.endDate,
852
+ value === null || value === void 0 ? void 0 : value.startDate,
848
853
  ]);
849
854
  };
850
855
 
851
- var toggleDatesIfEndIsEarlierThanStart = function (startDate, endDate) {
852
- if (startDate && endDate && isAfter(startDate, endDate)) {
853
- return {
854
- startDate: endDate,
855
- endDate: startDate,
856
- };
857
- }
858
- return {
859
- startDate: startDate,
860
- endDate: endDate,
861
- };
862
- };
863
-
864
856
  var useInternalPanelState = function (onChangePanel) {
865
857
  var _a = useState("calendar"), currentPanel = _a[0], _setCurrentPanel = _a[1];
866
858
  var setCurrentPanel = useCallback(function (currentPanel) {
@@ -874,14 +866,13 @@ var useInternalPanelState = function (onChangePanel) {
874
866
  };
875
867
 
876
868
  var useDateRangeSelection = function (_a) {
877
- var focusedInput = _a.focusedInput, endDate = _a.endDate, startDate = _a.startDate, setStartDate = _a.setStartDate, setEndDate = _a.setEndDate, onChange = _a.onChange, setFocusedInput = _a.setFocusedInput, statePerMonth = _a.statePerMonth, onChangePanel = _a.onChangePanel;
869
+ var focusedInput = _a.focusedInput, value = _a.value, onValueChange = _a.onValueChange, setFocusedInput = _a.setFocusedInput, statePerMonth = _a.statePerMonth, onChangePanel = _a.onChangePanel;
878
870
  var _b = useInternalPanelState(onChangePanel), currentPanel = _b.currentPanel, setCurrentPanel = _b.setCurrentPanel;
879
871
  var _c = useState(function () { return new Date(); }), dateInFocus = _c[0], setDateInFocus = _c[1];
880
- var onClickDay = useDateRangeOnClickDayHandler(startDate, setStartDate, endDate, setEndDate, focusedInput, setFocusedInput, onChange);
881
- var dates = useMemo(function () { return toggleDatesIfEndIsEarlierThanStart(startDate, endDate); }, [startDate, endDate]);
872
+ var onClickDay = useDateRangeOnClickDayHandler(value, onValueChange, focusedInput, setFocusedInput);
882
873
  var statePerMonthWithSelection = useMemo(function () {
883
- return buildDayStateForDateRange(statePerMonth, dates.startDate, dates.endDate);
884
- }, [statePerMonth, dates]);
874
+ return buildDayStateForDateRange(statePerMonth, value === null || value === void 0 ? void 0 : value.startDate, value === null || value === void 0 ? void 0 : value.endDate);
875
+ }, [statePerMonth, value === null || value === void 0 ? void 0 : value.endDate, value === null || value === void 0 ? void 0 : value.startDate]);
885
876
  return {
886
877
  onClickDay: onClickDay,
887
878
  statePerMonth: statePerMonthWithSelection,
@@ -1054,46 +1045,46 @@ var listContainsDate = function (list, date) {
1054
1045
  };
1055
1046
 
1056
1047
  var useDateRangeExclusionSelection = function (_a) {
1057
- var onChange = _a.onChange, value = _a.value, statePerMonth = _a.statePerMonth, onChangePanel = _a.onChangePanel;
1058
- var _b = useState(), startDate = _b[0], setStartDate = _b[1];
1059
- var _c = useState(), endDate = _c[0], setEndDate = _c[1];
1060
- var _d = useState("startDate"), focusedInput = _d[0], setFocusedInput = _d[1];
1061
- var _e = useInternalPanelState(onChangePanel), currentPanel = _e.currentPanel, setCurrentPanel = _e.setCurrentPanel;
1062
- var _f = useState(function () { var _a; return (_a = (focusedInput && (value === null || value === void 0 ? void 0 : value[focusedInput]))) !== null && _a !== void 0 ? _a : new Date(); }), dateInFocus = _f[0], setDateInFocus = _f[1];
1048
+ var value = _a.value, onValueChange = _a.onValueChange, statePerMonth = _a.statePerMonth, onChangePanel = _a.onChangePanel;
1049
+ var _b = useState(), dateRange = _b[0], setDateRange = _b[1];
1050
+ var _c = useState("startDate"), focusedInput = _c[0], setFocusedInput = _c[1];
1051
+ var _d = useInternalPanelState(onChangePanel), currentPanel = _d.currentPanel, setCurrentPanel = _d.setCurrentPanel;
1052
+ var _e = useState(function () { var _a; return (_a = (focusedInput && (value === null || value === void 0 ? void 0 : value[focusedInput]))) !== null && _a !== void 0 ? _a : new Date(); }), dateInFocus = _e[0], setDateInFocus = _e[1];
1063
1053
  var onChangeHandler = useCallback(function (value) {
1054
+ setDateRange(value);
1064
1055
  var startDate = value.startDate, endDate = value.endDate;
1065
- if (onChange) {
1056
+ if (onValueChange) {
1066
1057
  if (startDate && endDate) {
1067
1058
  var dates = eachDayOfInterval({ start: startDate, end: endDate });
1068
- onChange(dates);
1059
+ onValueChange(dates);
1069
1060
  }
1070
1061
  else if (startDate) {
1071
- onChange([startDate]);
1062
+ onValueChange([startDate]);
1072
1063
  }
1073
1064
  else if (endDate) {
1074
- onChange([endDate]);
1065
+ onValueChange([endDate]);
1075
1066
  }
1076
1067
  }
1077
- }, [onChange]);
1078
- var onClickDayRange = useDateRangeOnClickDayHandler(startDate, setStartDate, endDate, setEndDate, focusedInput, setFocusedInput, onChangeHandler);
1068
+ }, [onValueChange]);
1069
+ var onClickDayRange = useDateRangeOnClickDayHandler(dateRange, onChangeHandler, focusedInput, setFocusedInput);
1079
1070
  var onClickDay = useCallback(function (day, userData, ev) {
1080
- if (onChange) {
1071
+ if (onValueChange) {
1081
1072
  if (ev.ctrlKey || ev.metaKey) {
1082
1073
  if (!value) {
1083
- onChange([day.date]);
1074
+ onValueChange([day.date]);
1084
1075
  }
1085
1076
  else if (listContainsDate(value, day.date)) {
1086
- onChange(removeDateIfExist(value, day.date));
1077
+ onValueChange(removeDateIfExist(value, day.date));
1087
1078
  }
1088
1079
  else {
1089
- onChange(__spreadArray(__spreadArray([], value, true), [day.date], false));
1080
+ onValueChange(__spreadArray(__spreadArray([], value, true), [day.date], false));
1090
1081
  }
1091
1082
  }
1092
1083
  else {
1093
1084
  onClickDayRange(day, userData, ev);
1094
1085
  }
1095
1086
  }
1096
- }, [onChange, onClickDayRange, value]);
1087
+ }, [onValueChange, onClickDayRange, value]);
1097
1088
  var statePerMonthWithSelectedDate = useMemo(function () {
1098
1089
  return addHighlighting(statePerMonth, value);
1099
1090
  }, [statePerMonth, value]);
@@ -1160,16 +1151,18 @@ var useDateInput = function (onChange, onClose, openOnMount) {
1160
1151
  };
1161
1152
  };
1162
1153
 
1154
+ var defaultMaxDate = "2999-12-31";
1155
+
1163
1156
  var DateInput = function (_a) {
1164
- var _b = _a.displayFormat, displayFormat = _b === void 0 ? DateFormats.fullDate : _b, _c = _a.placeholder, placeholder = _c === void 0 ? "Enter date" : _c, value = _a.value, _d = _a.zIndex, zIndex = _d === void 0 ? 100 : _d, _e = _a.calendarTheme, calendarTheme = _e === void 0 ? defaultCalendarTheme : _e, calendarProps = _a.calendarProps, openOnMount = _a.openOnMount, onClose = _a.onClose, onChange = _a.onChange, portalTarget = _a.portalTarget, variant = _a.variant, width = _a.width;
1165
- var _f = useDateInput(onChange, onClose, openOnMount), hideCalendar = _f.hideCalendar, showingCalendar = _f.showingCalendar, onSelectDate = _f.onSelectDate, showCalendar = _f.showCalendar;
1166
- var _g = useCalendarPopoverUpdater(), tippyRef = _g.tippyRef, onChangePanel = _g.onChangePanel;
1157
+ var _b = _a.displayFormat, displayFormat = _b === void 0 ? DateFormats.fullDate : _b, _c = _a.placeholder, placeholder = _c === void 0 ? "Enter date" : _c, value = _a.value, _d = _a.zIndex, zIndex = _d === void 0 ? 100 : _d, _e = _a.calendarTheme, calendarTheme = _e === void 0 ? defaultCalendarTheme : _e, calendarProps = _a.calendarProps, openOnMount = _a.openOnMount, onClose = _a.onClose, onChange = _a.onChange, portalTarget = _a.portalTarget, variant = _a.variant, width = _a.width, minDate = _a.minDate, _f = _a.maxDate, maxDate = _f === void 0 ? defaultMaxDate : _f;
1158
+ var _g = useDateInput(onChange, onClose, openOnMount), hideCalendar = _g.hideCalendar, showingCalendar = _g.showingCalendar, onSelectDate = _g.onSelectDate, showCalendar = _g.showCalendar;
1159
+ var _h = useCalendarPopoverUpdater(), tippyRef = _h.tippyRef, onChangePanel = _h.onChangePanel;
1167
1160
  return (React.createElement(Box, { width: width },
1168
- React.createElement(Popover, { arrow: false, lazy: true, visible: showingCalendar, onClickOutside: hideCalendar, placement: defaultPopoverPlacement, zIndex: zIndex, appendTo: portalTarget !== null && portalTarget !== void 0 ? portalTarget : "parent", tippyRef: tippyRef, content: React.createElement(SingleDateCalendar, __assign({}, calendarProps, { onChange: onSelectDate, value: value, theme: calendarTheme, onChangePanel: onChangePanel })) },
1169
- React.createElement(TextInput, { iconLeft: faCalendarAlt, onFocus: showCalendar, onClickLeft: showCalendar, value: value ? format(value, displayFormat) : "", placeholder: placeholder, size: 9, autoFocus: openOnMount, variant: variant }))));
1161
+ React.createElement(Popover, { arrow: false, lazy: true, visible: showingCalendar, onClickOutside: hideCalendar, placement: defaultPopoverPlacement, zIndex: zIndex, appendTo: portalTarget !== null && portalTarget !== void 0 ? portalTarget : "parent", tippyRef: tippyRef, content: React.createElement(SingleDateCalendar, __assign({}, calendarProps, { onChange: onSelectDate, value: value, theme: calendarTheme, onChangePanel: onChangePanel, minDate: minDate, maxDate: maxDate })) },
1162
+ React.createElement(TextInput, { type: "date", iconRight: faCalendarAlt, onFocus: showCalendar, onClickRight: showCalendar, value: value ? format(value, displayFormat) : "", placeholder: placeholder, size: 9, autoFocus: openOnMount, variant: variant, min: minDate, max: maxDate }))));
1170
1163
  };
1171
1164
 
1172
- var useDateRangeInput = function (value, onChange) {
1165
+ var useDateRangeInput = function (value, onValueChange) {
1173
1166
  var startDateInputRef = useRef(null);
1174
1167
  var endDateInputRef = useRef(null);
1175
1168
  var _a = useState(false), showingCalendar = _a[0], setShowingCalendar = _a[1];
@@ -1189,11 +1182,11 @@ var useDateRangeInput = function (value, onChange) {
1189
1182
  }, [setShowingCalendar]);
1190
1183
  var onClickDay = useCallback(function (day) {
1191
1184
  if (focusedInput === "startDate") {
1192
- onChange({
1185
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange({
1193
1186
  startDate: day.date,
1194
- endDate: value.endDate,
1187
+ endDate: value === null || value === void 0 ? void 0 : value.endDate,
1195
1188
  });
1196
- if (!value.endDate) {
1189
+ if (!(value === null || value === void 0 ? void 0 : value.endDate)) {
1197
1190
  setFocusedInput("endDate");
1198
1191
  endDateInputRef.current && endDateInputRef.current.focus();
1199
1192
  }
@@ -1202,11 +1195,11 @@ var useDateRangeInput = function (value, onChange) {
1202
1195
  }
1203
1196
  }
1204
1197
  else if (focusedInput === "endDate") {
1205
- onChange({
1206
- startDate: value.startDate,
1198
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange({
1199
+ startDate: value === null || value === void 0 ? void 0 : value.startDate,
1207
1200
  endDate: day.date,
1208
1201
  });
1209
- if (!value.startDate) {
1202
+ if (!(value === null || value === void 0 ? void 0 : value.startDate)) {
1210
1203
  setFocusedInput("startDate");
1211
1204
  startDateInputRef.current && startDateInputRef.current.focus();
1212
1205
  }
@@ -1214,12 +1207,12 @@ var useDateRangeInput = function (value, onChange) {
1214
1207
  setTimeout(hideCalendar, 150);
1215
1208
  }
1216
1209
  }
1217
- }, [focusedInput, onChange, setFocusedInput, hideCalendar, value]);
1210
+ }, [focusedInput, onValueChange, setFocusedInput, hideCalendar, value]);
1218
1211
  var startDateIsAfterEnd = useMemo(function () {
1219
- return value.startDate &&
1220
- value.endDate &&
1212
+ return (value === null || value === void 0 ? void 0 : value.startDate) &&
1213
+ (value === null || value === void 0 ? void 0 : value.endDate) &&
1221
1214
  isAfter(value.startDate, value.endDate);
1222
- }, [value.startDate, value.endDate]);
1215
+ }, [value === null || value === void 0 ? void 0 : value.startDate, value === null || value === void 0 ? void 0 : value.endDate]);
1223
1216
  return {
1224
1217
  showingCalendar: showingCalendar,
1225
1218
  hideCalendar: hideCalendar,
@@ -1238,24 +1231,26 @@ var useDateRangeInput = function (value, onChange) {
1238
1231
  * @deprecated Please use DateRangeDualTextInput instead.
1239
1232
  */
1240
1233
  var DateRangeInput = function (_a) {
1241
- var _b = _a.displayFormat, displayFormat = _b === void 0 ? DateFormats.fullDate : _b, _c = _a.placeholderStartDate, placeholderStartDate = _c === void 0 ? "Start date" : _c, _d = _a.placeholderEndDate, placeholderEndDate = _d === void 0 ? "End date" : _d, portalTarget = _a.portalTarget, value = _a.value, onChange = _a.onChange, _e = _a.zIndex, zIndex = _e === void 0 ? 100 : _e, width = _a.width, _f = _a.calendarTheme, calendarTheme = _f === void 0 ? defaultCalendarTheme : _f, calendarProps = _a.calendarProps;
1242
- var _g = useState(function () { var _a; return (_a = (focusedInput && value[focusedInput])) !== null && _a !== void 0 ? _a : new Date(); }), dateInFocus = _g[0], setDateInFocus = _g[1];
1243
- var _h = useState("calendar"), currentPanel = _h[0], setCurrentPanel = _h[1];
1244
- var _j = useDateRangeInput(value, onChange), hideCalendar = _j.hideCalendar, showCalendarEndDate = _j.showCalendarEndDate, showCalendarStartDate = _j.showCalendarStartDate, showingCalendar = _j.showingCalendar, focusedInput = _j.focusedInput, startDateInputRef = _j.startDateInputRef, endDateInputRef = _j.endDateInputRef, onClickDay = _j.onClickDay, startDateIsAfterEnd = _j.startDateIsAfterEnd;
1245
- var statePerMonth = useMemo(function () { return buildDayStateForDateRange(undefined, value.startDate, value.endDate); }, [value]);
1246
- return (React.createElement(Popover, { arrow: false, lazy: true, visible: showingCalendar, zIndex: zIndex, placement: defaultPopoverPlacement, appendTo: portalTarget !== null && portalTarget !== void 0 ? portalTarget : "parent", onClickOutside: hideCalendar, content: React.createElement(CalendarWithMonthSwitcher, __assign({}, calendarProps, { dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, statePerMonth: statePerMonth, theme: calendarTheme, onClickDay: onClickDay, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel })) },
1234
+ var _b = _a.displayFormat, displayFormat = _b === void 0 ? DateFormats.fullDate : _b, _c = _a.placeholderStartDate, placeholderStartDate = _c === void 0 ? "Start date" : _c, _d = _a.placeholderEndDate, placeholderEndDate = _d === void 0 ? "End date" : _d, portalTarget = _a.portalTarget, value = _a.value, onValueChange = _a.onValueChange, _e = _a.zIndex, zIndex = _e === void 0 ? 100 : _e, width = _a.width, _f = _a.calendarTheme, calendarTheme = _f === void 0 ? defaultCalendarTheme : _f, calendarProps = _a.calendarProps, minDate = _a.minDate, _g = _a.maxDate, maxDate = _g === void 0 ? defaultMaxDate : _g;
1235
+ var _h = useState(function () { var _a; return (_a = (focusedInput && (value === null || value === void 0 ? void 0 : value[focusedInput]))) !== null && _a !== void 0 ? _a : new Date(); }), dateInFocus = _h[0], setDateInFocus = _h[1];
1236
+ var _j = useState("calendar"), currentPanel = _j[0], setCurrentPanel = _j[1];
1237
+ var _k = useDateRangeInput(value, onValueChange), hideCalendar = _k.hideCalendar, showCalendarEndDate = _k.showCalendarEndDate, showCalendarStartDate = _k.showCalendarStartDate, showingCalendar = _k.showingCalendar, focusedInput = _k.focusedInput, startDateInputRef = _k.startDateInputRef, endDateInputRef = _k.endDateInputRef, onClickDay = _k.onClickDay, startDateIsAfterEnd = _k.startDateIsAfterEnd;
1238
+ var statePerMonth = useMemo(function () {
1239
+ return buildDayStateForDateRange(undefined, value === null || value === void 0 ? void 0 : value.startDate, value === null || value === void 0 ? void 0 : value.endDate);
1240
+ }, [value]);
1241
+ return (React.createElement(Popover, { arrow: false, lazy: true, visible: showingCalendar, zIndex: zIndex, placement: defaultPopoverPlacement, appendTo: portalTarget !== null && portalTarget !== void 0 ? portalTarget : "parent", onClickOutside: hideCalendar, content: React.createElement(CalendarWithMonthSwitcher, __assign({}, calendarProps, { dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, statePerMonth: statePerMonth, theme: calendarTheme, onClickDay: onClickDay, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel, minDate: minDate, maxDate: maxDate })) },
1247
1242
  React.createElement(Row, { alignItems: "center" },
1248
- React.createElement(TextInput, { iconLeft: faCalendarAlt, onFocus: showCalendarStartDate, value: value.startDate ? format(value.startDate, displayFormat) : "", placeholder: placeholderStartDate, width: width, inputRef: startDateInputRef, size: 9, variant: startDateIsAfterEnd ? "error" : undefined }),
1243
+ React.createElement(TextInput, { iconLeft: faCalendarAlt$1, onFocus: showCalendarStartDate, value: (value === null || value === void 0 ? void 0 : value.startDate) ? format(value.startDate, displayFormat) : "", placeholder: placeholderStartDate, width: width, inputRef: startDateInputRef, size: 9, variant: startDateIsAfterEnd ? "error" : undefined }),
1249
1244
  React.createElement(Space, null),
1250
1245
  React.createElement(Icon, { icon: faLongArrowAltRight, color: cssColor("--lhds-color-ui-500"), size: 14 }),
1251
1246
  React.createElement(Space, null),
1252
- React.createElement(TextInput, { iconLeft: faCalendarAlt, onFocus: showCalendarEndDate, value: value.endDate ? format(value.endDate, displayFormat) : "", placeholder: placeholderEndDate, width: width, inputRef: endDateInputRef, size: 9, variant: startDateIsAfterEnd ? "error" : undefined }))));
1247
+ React.createElement(TextInput, { iconLeft: faCalendarAlt$1, onFocus: showCalendarEndDate, value: (value === null || value === void 0 ? void 0 : value.endDate) ? format(value.endDate, displayFormat) : "", placeholder: placeholderEndDate, width: width, inputRef: endDateInputRef, size: 9, variant: startDateIsAfterEnd ? "error" : undefined }))));
1253
1248
  };
1254
1249
 
1255
1250
  var DateTextInput = function (_a) {
1256
- var calendarProps = _a.calendarProps, _b = _a.closeOnCalendarSelectDate, closeOnCalendarSelectDate = _b === void 0 ? true : _b, _c = _a.dateFormat, dateFormat = _c === void 0 ? DateFormats.fullDate : _c; _a.disableCalender; var onValueChange = _a.onValueChange, _e = _a.placeholder, placeholder = _e === void 0 ? "yyyy-mm-dd" : _e, portalTarget = _a.portalTarget, value = _a.value, _f = _a.width, width = _f === void 0 ? "130px" : _f, _g = _a.zIndex, zIndex = _g === void 0 ? 100 : _g, _h = _a.calendarTheme, calendarTheme = _h === void 0 ? defaultCalendarTheme : _h, _j = _a.hideCalenderIcon, hideCalenderIcon = _j === void 0 ? false : _j, props = __rest(_a, ["calendarProps", "closeOnCalendarSelectDate", "dateFormat", "disableCalender", "onValueChange", "placeholder", "portalTarget", "value", "width", "zIndex", "calendarTheme", "hideCalenderIcon"]);
1257
- var _k = useState(false), open = _k[0], setOpen = _k[1];
1258
- var _l = useCalendarPopoverUpdater(), tippyRef = _l.tippyRef, onChangePanel = _l.onChangePanel;
1251
+ var calendarProps = _a.calendarProps, _b = _a.closeOnCalendarSelectDate, closeOnCalendarSelectDate = _b === void 0 ? true : _b, _c = _a.dateFormat, dateFormat = _c === void 0 ? DateFormats.fullDate : _c; _a.disableCalender; var onValueChange = _a.onValueChange, _e = _a.placeholder, placeholder = _e === void 0 ? "yyyy-mm-dd" : _e, portalTarget = _a.portalTarget, value = _a.value, _f = _a.width, width = _f === void 0 ? "130px" : _f, _g = _a.zIndex, zIndex = _g === void 0 ? 100 : _g, _h = _a.calendarTheme, calendarTheme = _h === void 0 ? defaultCalendarTheme : _h, _j = _a.hideCalenderIcon, hideCalenderIcon = _j === void 0 ? false : _j, minDate = _a.minDate, _k = _a.maxDate, maxDate = _k === void 0 ? defaultMaxDate : _k, props = __rest(_a, ["calendarProps", "closeOnCalendarSelectDate", "dateFormat", "disableCalender", "onValueChange", "placeholder", "portalTarget", "value", "width", "zIndex", "calendarTheme", "hideCalenderIcon", "minDate", "maxDate"]);
1252
+ var _l = useState(false), open = _l[0], setOpen = _l[1];
1253
+ var _m = useCalendarPopoverUpdater(), tippyRef = _m.tippyRef, onChangePanel = _m.onChangePanel;
1259
1254
  var toggleCalendar = useCallback(function () {
1260
1255
  setOpen(!open);
1261
1256
  }, [setOpen, open]);
@@ -1282,9 +1277,9 @@ var DateTextInput = function (_a) {
1282
1277
  return (React.createElement(Box, { width: width },
1283
1278
  React.createElement(Popover, { arrow: false, lazy: true, visible: open, zIndex: zIndex, appendTo: portalTarget !== null && portalTarget !== void 0 ? portalTarget : "parent", placement: defaultPopoverPlacement, onClickOutside: hideCalendar, tippyRef: tippyRef, content: React.createElement(SingleDateCalendar, __assign({}, calendarProps, { onChange: onCalendarSelectDate, onChangePanel: onChangePanel, value: value && dateIsValid
1284
1279
  ? parse(value, dateFormat, new Date())
1285
- : undefined, theme: calendarTheme })) },
1280
+ : undefined, minDate: minDate, maxDate: maxDate, theme: calendarTheme })) },
1286
1281
  React.createElement(TextInput, __assign({}, props, { variant: invalid ? "error" : "standard", disableContentPaddingRight: true, contentRight: !hideCalenderIcon ? (React.createElement(Row, { alignItems: "center", indent: 0.5 },
1287
- React.createElement(FlatButton, { size: "small", leftIcon: faCalendarAlt, onClick: toggleCalendar }))) : undefined, onValueChange: onValueChangeHandler, placeholder: placeholder, value: value || "", size: 10 })))));
1282
+ React.createElement(FlatButton, { size: "small", leftIcon: faCalendarAlt$1, onClick: toggleCalendar }))) : undefined, onValueChange: onValueChangeHandler, placeholder: placeholder, value: value || "", min: minDate, max: maxDate, size: 10 })))));
1288
1283
  };
1289
1284
 
1290
1285
  var formatHours = function (hours) {
@@ -1422,7 +1417,7 @@ var TimeTextInput = function (_a) {
1422
1417
  };
1423
1418
 
1424
1419
  var DualTextInput = function (_a) {
1425
- var autoFocusLeft = _a.autoFocusLeft, autoFocusRight = _a.autoFocusRight, onEsc = _a.onEsc, onEnter = _a.onEnter, onValueChangeLeft = _a.onValueChangeLeft, onValueChangeRight = _a.onValueChangeRight, separatorIcon = _a.separatorIcon, placeholderLeft = _a.placeholderLeft, placeholderRight = _a.placeholderRight, typeLeft = _a.typeLeft, typeRight = _a.typeRight, onChangeLeft = _a.onChangeLeft, onChangeRight = _a.onChangeRight, valueLeft = _a.valueLeft, valueRight = _a.valueRight, onClickLeft = _a.onClickLeft, onClickRight = _a.onClickRight, onClickCalendar = _a.onClickCalendar, onClickArrowDown = _a.onClickArrowDown, onBlurLeft = _a.onBlurLeft, onBlurRight = _a.onBlurRight, onFocusLeft = _a.onFocusLeft, onFocusRight = _a.onFocusRight, inputRefLeft = _a.inputRefLeft, inputRefRight = _a.inputRefRight, variant = _a.variant, variantLeft = _a.variantLeft, variantRight = _a.variantRight, onBlur = _a.onBlur, showPresets = _a.showPresets, widthLeft = _a.widthLeft, widthRight = _a.widthRight;
1420
+ var autoFocusLeft = _a.autoFocusLeft, autoFocusRight = _a.autoFocusRight, onEsc = _a.onEsc, onEnter = _a.onEnter, onValueChangeLeft = _a.onValueChangeLeft, onValueChangeRight = _a.onValueChangeRight, separatorIcon = _a.separatorIcon, placeholderLeft = _a.placeholderLeft, placeholderRight = _a.placeholderRight, typeLeft = _a.typeLeft, typeRight = _a.typeRight, onChangeLeft = _a.onChangeLeft, onChangeRight = _a.onChangeRight, valueLeft = _a.valueLeft, valueRight = _a.valueRight, minLeft = _a.minLeft, maxLeft = _a.maxLeft, minRight = _a.minRight, maxRight = _a.maxRight, onClickLeft = _a.onClickLeft, onClickRight = _a.onClickRight, onClickCalendar = _a.onClickCalendar, onClickArrowDown = _a.onClickArrowDown, onBlurLeft = _a.onBlurLeft, onBlurRight = _a.onBlurRight, onFocusLeft = _a.onFocusLeft, onFocusRight = _a.onFocusRight, inputRefLeft = _a.inputRefLeft, inputRefRight = _a.inputRefRight, variant = _a.variant, variantLeft = _a.variantLeft, variantRight = _a.variantRight, onBlur = _a.onBlur, showPresets = _a.showPresets, widthLeft = _a.widthLeft, widthRight = _a.widthRight;
1426
1421
  var focusCounter = useRef(0);
1427
1422
  var tryTriggerOnBlur = useMemo(function () {
1428
1423
  return debounce(function (focusCounter) {
@@ -1462,18 +1457,18 @@ var DualTextInput = function (_a) {
1462
1457
  return (React.createElement(Box, null,
1463
1458
  React.createElement(TextInputBox, { disableContentPaddingRight: true, variant: variant, contentRight: React.createElement(Row, { alignItems: "center" },
1464
1459
  React.createElement(Indent, { num: 0.5 },
1465
- React.createElement(FlatButton, { leftIcon: faCalendarAlt$1, onClick: onClickCalendar, size: "small" })),
1460
+ React.createElement(FlatButton, { leftIcon: faCalendarAlt, onClick: onClickCalendar, size: "small" })),
1466
1461
  showPresets ? (React.createElement(React.Fragment, null,
1467
1462
  React.createElement(Row, { height: "22px" },
1468
1463
  React.createElement(SeparatorLine, { vertical: true })),
1469
1464
  React.createElement(Indent, { num: 0.5 },
1470
1465
  React.createElement(FlatButton, { leftIcon: faAngleDown, onClick: onClickArrowDown, size: "small" })))) : null) },
1471
1466
  React.createElement(Box, { width: widthLeft },
1472
- React.createElement(TextInput, { onEsc: onEsc, onEnter: onEnter, onClick: onClickLeft, hideBorder: true, placeholder: placeholderLeft, value: valueLeft, onValueChange: onValueChangeLeft, onChange: onChangeLeft, onBlur: blurLeftHandler, onFocus: focusLeftHandler, inputRef: inputRefLeft, variant: variantLeft, type: typeLeft, autoFocus: autoFocusLeft })),
1467
+ React.createElement(TextInput, { onEsc: onEsc, onEnter: onEnter, onClick: onClickLeft, hideBorder: true, placeholder: placeholderLeft, value: valueLeft, onValueChange: onValueChangeLeft, onChange: onChangeLeft, onBlur: blurLeftHandler, onFocus: focusLeftHandler, inputRef: inputRefLeft, variant: variantLeft, type: typeLeft, autoFocus: autoFocusLeft, min: minLeft, max: maxLeft })),
1473
1468
  React.createElement(Row, { indent: 0.5, alignItems: "center", justifyContent: "center" },
1474
1469
  React.createElement(Icon, { icon: separatorIcon, size: 12, color: cssColor("--lhds-color-ui-500") })),
1475
1470
  React.createElement(Box, { width: widthRight },
1476
- React.createElement(TextInput, { onEsc: onEsc, onEnter: onEnter, onClick: onClickRight, hideBorder: true, placeholder: placeholderRight, value: valueRight, onValueChange: onValueChangeRight, onChange: onChangeRight, onBlur: blurRightHandler, onFocus: focusRightHandler, inputRef: inputRefRight, variant: variantRight, type: typeRight, autoFocus: autoFocusRight })))));
1471
+ React.createElement(TextInput, { onEsc: onEsc, onEnter: onEnter, onClick: onClickRight, hideBorder: true, placeholder: placeholderRight, value: valueRight, onValueChange: onValueChangeRight, onChange: onChangeRight, onBlur: blurRightHandler, onFocus: focusRightHandler, inputRef: inputRefRight, variant: variantRight, type: typeRight, autoFocus: autoFocusRight, min: minRight, max: maxRight })))));
1477
1472
  };
1478
1473
 
1479
1474
  var transformTimeStringToNumber = function (time) {
@@ -1778,13 +1773,13 @@ var useUserInputHandlers$1 = function (onChangeDate, dateInputRef, showCalendar,
1778
1773
  };
1779
1774
 
1780
1775
  var DateTimeInput = function (_a) {
1781
- var value = _a.value, onValueChange = _a.onValueChange, onEnter = _a.onEnter, onEsc = _a.onEsc, onBlur = _a.onBlur, autoFocus = _a.autoFocus;
1776
+ var value = _a.value, onValueChange = _a.onValueChange, onEnter = _a.onEnter, onEsc = _a.onEsc, onBlur = _a.onBlur, autoFocus = _a.autoFocus, minDate = _a.minDate, _b = _a.maxDate, maxDate = _b === void 0 ? defaultMaxDate : _b;
1782
1777
  var dateInputRef = useRef(null);
1783
1778
  var timeInputRef = useRef(null);
1784
1779
  var states = useInputStates$1(value);
1785
1780
  var setCurrentPanel = states.setCurrentPanel, currentPanel = states.currentPanel, isCalendarVisible = states.isCalendarVisible, dateInFocus = states.dateInFocus, setDateInFocus = states.setDateInFocus, isTimePickerVisible = states.isTimePickerVisible, hideTimePicker = states.hideTimePicker, localTime = states.localTime, localDate = states.localDate;
1786
- var _b = useDateRangeHandlers$1(value, onValueChange, states, dateInputRef), showCalendar = _b.showCalendar, hideCalendar = _b.hideCalendar, inputLeftChangeHandler = _b.inputLeftChangeHandler, inputRightChangeHandler = _b.inputRightChangeHandler, onChangeTime = _b.onChangeTime, onChangeDate = _b.onChangeDate;
1787
- var _c = useUserInputHandlers$1(onChangeDate, dateInputRef, showCalendar, hideCalendar, states), onKeyDownHandler = _c.onKeyDownHandler, onFocusRight = _c.onFocusRight, onFocusLeft = _c.onFocusLeft, onClickDay = _c.onClickDay, onClickCalendarButton = _c.onClickCalendarButton, onClickArrowButton = _c.onClickArrowButton;
1781
+ var _c = useDateRangeHandlers$1(value, onValueChange, states, dateInputRef), showCalendar = _c.showCalendar, hideCalendar = _c.hideCalendar, inputLeftChangeHandler = _c.inputLeftChangeHandler, inputRightChangeHandler = _c.inputRightChangeHandler, onChangeTime = _c.onChangeTime, onChangeDate = _c.onChangeDate;
1782
+ var _d = useUserInputHandlers$1(onChangeDate, dateInputRef, showCalendar, hideCalendar, states), onKeyDownHandler = _d.onKeyDownHandler, onFocusRight = _d.onFocusRight, onFocusLeft = _d.onFocusLeft, onClickDay = _d.onClickDay, onClickCalendarButton = _d.onClickCalendarButton, onClickArrowButton = _d.onClickArrowButton;
1788
1783
  useDateRangeEffects$1(value, setDateInFocus, dateInputRef);
1789
1784
  var statePerMonth = useMemo(function () {
1790
1785
  var dateToHighlight = value || localDate;
@@ -1804,13 +1799,13 @@ var DateTimeInput = function (_a) {
1804
1799
  var delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);
1805
1800
  var delayedIsTimePickerVisible = useDelayedFalse(isTimePickerVisible, 300);
1806
1801
  return (React.createElement(Box, { onKeyDown: onKeyDownHandler },
1807
- React.createElement(Popover, { arrow: false, lazy: true, placement: defaultPopoverPlacement, visible: isCalendarVisible || isTimePickerVisible, onClickOutside: hideAll, content: (delayedIsCalendarVisible || delayedIsTimePickerVisible) && (React.createElement(Column, null, delayedIsCalendarVisible ? (React.createElement(CalendarWithMonthSwitcher, { statePerMonth: statePerMonth, onClickDay: onClickDay, dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel })) : delayedIsTimePickerVisible ? (React.createElement(Column, null,
1802
+ React.createElement(Popover, { arrow: false, lazy: true, placement: defaultPopoverPlacement, visible: isCalendarVisible || isTimePickerVisible, onClickOutside: hideAll, content: (delayedIsCalendarVisible || delayedIsTimePickerVisible) && (React.createElement(Column, null, delayedIsCalendarVisible ? (React.createElement(CalendarWithMonthSwitcher, { statePerMonth: statePerMonth, onClickDay: onClickDay, dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel, minDate: minDate, maxDate: maxDate })) : delayedIsTimePickerVisible ? (React.createElement(Column, null,
1808
1803
  React.createElement(Column, { overflow: "hidden", height: "250px" },
1809
1804
  React.createElement(TimePicker, { value: timeValue !== null && timeValue !== void 0 ? timeValue : "", onValueChange: onChangeTime })),
1810
1805
  React.createElement(Space, null),
1811
1806
  React.createElement(Row, { justifyContent: "flex-end" },
1812
1807
  React.createElement(PrimaryButton, { label: "Done", onClick: hideTimePicker })))) : null)) },
1813
- React.createElement(DualTextInput, { autoFocusLeft: autoFocus, onEsc: onEsc, onEnter: onEnter, onBlur: onBlur, separatorIcon: faClock$1, typeLeft: "date", typeRight: "time", placeholderLeft: "yyyy-mm-dd", placeholderRight: "hh:mm", onChangeLeft: inputLeftChangeHandler, onChangeRight: inputRightChangeHandler, onClickArrowDown: onClickArrowButton, onClickCalendar: onClickCalendarButton, onFocusLeft: onFocusLeft, onFocusRight: onFocusRight, onClickLeft: onFocusLeft, onClickRight: onFocusRight, inputRefLeft: dateInputRef, inputRefRight: timeInputRef, valueRight: timeValue !== null && timeValue !== void 0 ? timeValue : "", widthLeft: "104px", widthRight: "64px" }))));
1808
+ React.createElement(DualTextInput, { autoFocusLeft: autoFocus, onEsc: onEsc, onEnter: onEnter, onBlur: onBlur, separatorIcon: faClock$1, typeLeft: "date", typeRight: "time", placeholderLeft: "yyyy-mm-dd", placeholderRight: "hh:mm", onChangeLeft: inputLeftChangeHandler, onChangeRight: inputRightChangeHandler, onClickArrowDown: onClickArrowButton, onClickCalendar: onClickCalendarButton, onFocusLeft: onFocusLeft, onFocusRight: onFocusRight, onClickLeft: onFocusLeft, onClickRight: onFocusRight, inputRefLeft: dateInputRef, inputRefRight: timeInputRef, valueRight: timeValue !== null && timeValue !== void 0 ? timeValue : "", widthLeft: "104px", widthRight: "64px", minLeft: minDate, maxLeft: maxDate }))));
1814
1809
  };
1815
1810
 
1816
1811
  var useDateRangeEffects = function (startDate, endDate, setDateInFocus, startDateInputRef, endDateInputRef) {
@@ -2061,14 +2056,14 @@ var useUserInputHandlers = function (startDate, endDate, onValueChange, startDat
2061
2056
  };
2062
2057
 
2063
2058
  var DateRangeDualTextInput = function (_a) {
2064
- var value = _a.value, onValueChange = _a.onValueChange, autoFocus = _a.autoFocus, onBlur = _a.onBlur, onEnter = _a.onEnter, onEsc = _a.onEsc, calendarProps = _a.calendarProps;
2065
- var _b = value || {}, startDate = _b.startDate, endDate = _b.endDate;
2059
+ var value = _a.value, onValueChange = _a.onValueChange, autoFocus = _a.autoFocus, onBlur = _a.onBlur, onEnter = _a.onEnter, onEsc = _a.onEsc, minDate = _a.minDate, _b = _a.maxDate, maxDate = _b === void 0 ? defaultMaxDate : _b, calendarProps = _a.calendarProps;
2060
+ var _c = value || {}, startDate = _c.startDate, endDate = _c.endDate;
2066
2061
  var startDateInputRef = useRef(null);
2067
2062
  var endDateInputRef = useRef(null);
2068
2063
  var states = useInputStates(startDate, endDate);
2069
2064
  var dateInFocus = states.dateInFocus, setDateInFocus = states.setDateInFocus, isCalendarVisible = states.isCalendarVisible, currentPanel = states.currentPanel, setCurrentPanel = states.setCurrentPanel;
2070
- var _c = useDateRangeHandlers(startDate, endDate, onValueChange, states), showCalendar = _c.showCalendar, hideCalendar = _c.hideCalendar, inputLeftChangeHandler = _c.inputLeftChangeHandler, inputRightChangeHandler = _c.inputRightChangeHandler;
2071
- var _d = useUserInputHandlers(startDate, endDate, onValueChange, startDateInputRef, endDateInputRef, showCalendar, hideCalendar, states), onKeyDownHandler = _d.onKeyDownHandler, onFocusRight = _d.onFocusRight, onFocusLeft = _d.onFocusLeft, onClickDay = _d.onClickDay, onClickCalendarButton = _d.onClickCalendarButton, onClickArrowButton = _d.onClickArrowButton;
2065
+ var _d = useDateRangeHandlers(startDate, endDate, onValueChange, states), showCalendar = _d.showCalendar, hideCalendar = _d.hideCalendar, inputLeftChangeHandler = _d.inputLeftChangeHandler, inputRightChangeHandler = _d.inputRightChangeHandler;
2066
+ var _e = useUserInputHandlers(startDate, endDate, onValueChange, startDateInputRef, endDateInputRef, showCalendar, hideCalendar, states), onKeyDownHandler = _e.onKeyDownHandler, onFocusRight = _e.onFocusRight, onFocusLeft = _e.onFocusLeft, onClickDay = _e.onClickDay, onClickCalendarButton = _e.onClickCalendarButton, onClickArrowButton = _e.onClickArrowButton;
2072
2067
  useDateRangeEffects(startDate, endDate, setDateInFocus, startDateInputRef, endDateInputRef);
2073
2068
  var startDateIsAfterEnd = useMemo(function () { return startDate && endDate && isAfter(startDate, endDate); }, [startDate, endDate]);
2074
2069
  var statePerMonth = useMemo(function () {
@@ -2076,9 +2071,9 @@ var DateRangeDualTextInput = function (_a) {
2076
2071
  }, [calendarProps === null || calendarProps === void 0 ? void 0 : calendarProps.statePerMonth, startDate, endDate, dateInFocus]);
2077
2072
  var delayedIsCalendarVisible = useDelayedFalse(isCalendarVisible, 300);
2078
2073
  return (React.createElement(Box, { onKeyDown: onKeyDownHandler },
2079
- React.createElement(Popover, { arrow: false, lazy: true, placement: defaultPopoverPlacement, onClickOutside: hideCalendar, visible: isCalendarVisible, content: delayedIsCalendarVisible && (React.createElement(CalendarWithMonthSwitcher, __assign({ onClickDay: onClickDay, dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel }, calendarProps, { statePerMonth: statePerMonth }))) },
2080
- React.createElement(DualTextInput, { autoFocusLeft: autoFocus, onEsc: onEsc, onEnter: onEnter, onBlur: onBlur, separatorIcon: stenaArrowRight, typeLeft: "date", typeRight: "date", placeholderLeft: "Start date", placeholderRight: "End date", onChangeLeft: inputLeftChangeHandler, onChangeRight: inputRightChangeHandler, onClickArrowDown: onClickArrowButton, onClickCalendar: onClickCalendarButton, onFocusLeft: onFocusLeft, onFocusRight: onFocusRight, onClickLeft: onFocusLeft, onClickRight: onFocusRight, inputRefLeft: startDateInputRef, inputRefRight: endDateInputRef, variant: startDateIsAfterEnd ? "error" : undefined, widthLeft: "104px", widthRight: "104px" }))));
2074
+ React.createElement(Popover, { arrow: false, lazy: true, placement: defaultPopoverPlacement, onClickOutside: hideCalendar, visible: isCalendarVisible, content: delayedIsCalendarVisible && (React.createElement(CalendarWithMonthSwitcher, __assign({ onClickDay: onClickDay, dateInFocus: dateInFocus, setDateInFocus: setDateInFocus, currentPanel: currentPanel, setCurrentPanel: setCurrentPanel, minDate: minDate, maxDate: maxDate }, calendarProps, { statePerMonth: statePerMonth }))) },
2075
+ React.createElement(DualTextInput, { autoFocusLeft: autoFocus, onEsc: onEsc, onEnter: onEnter, onBlur: onBlur, separatorIcon: stenaArrowRight, typeLeft: "date", typeRight: "date", placeholderLeft: "Start date", placeholderRight: "End date", onChangeLeft: inputLeftChangeHandler, onChangeRight: inputRightChangeHandler, onClickArrowDown: onClickArrowButton, onClickCalendar: onClickCalendarButton, onFocusLeft: onFocusLeft, onFocusRight: onFocusRight, onClickLeft: onFocusLeft, onClickRight: onFocusRight, inputRefLeft: startDateInputRef, inputRefRight: endDateInputRef, variant: startDateIsAfterEnd ? "error" : undefined, widthLeft: "104px", widthRight: "104px", minLeft: minDate, maxLeft: maxDate, minRight: minDate, maxRight: maxDate }))));
2081
2076
  };
2082
2077
 
2083
- export { Calendar, CalendarDay, DateInput, DateRangeCalendar, DateRangeDualTextInput, DateRangeExclusionCalendar, DateRangeInput, DateTextInput, DateTimeInput, Month, MonthPicker, MultiDateCalendar, PresetPicker, SingleDateCalendar, SingleWeekCalendar, TimeTextInput, WeekDay, WeekDayCell, WeekNumberCell, YearPicker, addDayStateHighlights, addWeekRangeHighlights, addWeekStateHighlights, buildDayStateForDateRange, buildDayStateForRange, buildDayStateForSingleMonth, calculateOverflowingMonth, createDay, dayHasHighlight, dayHighlightSelect, defaultCalendarTheme, defaultTextPropsProvider, defaultWrapperStyleProvider, ensureStartIsFirst, extranetCalendarTheme, getDaysForWeekForDate, getMonthInYear, getMonthsInYear, getStartDateOfISOWeek, getWeekForDate, getWeeksForMonth, setDayStateValue, setDayStateValueFunction, transformDateIntervalToDateStringInterval, transformDateStringIntervalToDateInterval, useDateRangeCalendarState, useDateRangeExclusionSelection, useDateRangeSelection, useMultiDateSelection, useSingleDateSelection, useSingleWeekSelection };
2078
+ export { Calendar, CalendarDay, DateInput, DateRangeCalendar, DateRangeDualTextInput, DateRangeExclusionCalendar, DateRangeInput, DateTextInput, DateTimeInput, Month, MonthPicker, MultiDateCalendar, PresetPicker, SingleDateCalendar, SingleWeekCalendar, TimeTextInput, WeekDay, WeekDayCell, WeekNumberCell, YearPicker, addDayStateHighlights, addDayStateHighlightsOnSingleDay, addWeekRangeHighlights, addWeekStateHighlights, buildDayStateForDateRange, buildDayStateForRange, buildDayStateForSingleMonth, calculateOverflowingMonth, createDay, dateRangeToStrings, dayHasHighlight, dayHighlightSelect, defaultCalendarTheme, defaultTextPropsProvider, defaultWrapperStyleProvider, extranetCalendarTheme, getDaysForWeekForDate, getMonthInYear, getMonthsInYear, getStartDateOfISOWeek, getWeekForDate, getWeeksForMonth, isDateRangeInvalid, setDayStateValue, setDayStateValueFunction, stringsToDateRange, toggleDateStringsIfEndIsEarlierThanStart, toggleDatesIfEndIsEarlierThanStart, useDateRangeCalendarState, useDateRangeExclusionSelection, useDateRangeSelection, useMultiDateSelection, useSingleDateSelection, useSingleWeekSelection };
2084
2079
  //# sourceMappingURL=index.es.js.map