@transferwise/components 0.0.0-experimental-1a3a746 → 0.0.0-experimental-65c6e3a

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 (83) hide show
  1. package/build/index.js +239 -107
  2. package/build/index.js.map +1 -1
  3. package/build/index.mjs +239 -107
  4. package/build/index.mjs.map +1 -1
  5. package/build/types/common/dateUtils/isWithinRange/isWithinRange.d.ts +1 -1
  6. package/build/types/common/dateUtils/isWithinRange/isWithinRange.d.ts.map +1 -1
  7. package/build/types/common/dateUtils/moveToWithinRange/moveToWithinRange.d.ts +1 -1
  8. package/build/types/common/dateUtils/moveToWithinRange/moveToWithinRange.d.ts.map +1 -1
  9. package/build/types/dateLookup/DateLookup.d.ts +28 -80
  10. package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
  11. package/build/types/dateLookup/DateLookup.messages.d.ts +63 -42
  12. package/build/types/dateLookup/DateLookup.messages.d.ts.map +1 -1
  13. package/build/types/dateLookup/dateHeader/DateHeader.d.ts +22 -9
  14. package/build/types/dateLookup/dateHeader/DateHeader.d.ts.map +1 -1
  15. package/build/types/dateLookup/dateHeader/index.d.ts +1 -1
  16. package/build/types/dateLookup/dateHeader/index.d.ts.map +1 -1
  17. package/build/types/dateLookup/dateTrigger/DateTrigger.d.ts +31 -13
  18. package/build/types/dateLookup/dateTrigger/DateTrigger.d.ts.map +1 -1
  19. package/build/types/dateLookup/dateTrigger/index.d.ts +1 -1
  20. package/build/types/dateLookup/dateTrigger/index.d.ts.map +1 -1
  21. package/build/types/dateLookup/dayCalendar/DayCalendar.d.ts +2 -19
  22. package/build/types/dateLookup/dayCalendar/DayCalendar.d.ts.map +1 -1
  23. package/build/types/dateLookup/dayCalendar/index.d.ts +1 -1
  24. package/build/types/dateLookup/dayCalendar/index.d.ts.map +1 -1
  25. package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts +2 -12
  26. package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts.map +1 -1
  27. package/build/types/dateLookup/dayCalendar/table/index.d.ts +1 -1
  28. package/build/types/dateLookup/dayCalendar/table/index.d.ts.map +1 -1
  29. package/build/types/dateLookup/getStartOfDay/getStartOfDay.d.ts +1 -1
  30. package/build/types/dateLookup/getStartOfDay/getStartOfDay.d.ts.map +1 -1
  31. package/build/types/dateLookup/getStartOfDay/index.d.ts +1 -1
  32. package/build/types/dateLookup/getStartOfDay/index.d.ts.map +1 -1
  33. package/build/types/dateLookup/index.d.ts +1 -2
  34. package/build/types/dateLookup/index.d.ts.map +1 -1
  35. package/build/types/dateLookup/monthCalendar/MonthCalendar.d.ts +2 -17
  36. package/build/types/dateLookup/monthCalendar/MonthCalendar.d.ts.map +1 -1
  37. package/build/types/dateLookup/monthCalendar/index.d.ts +1 -1
  38. package/build/types/dateLookup/monthCalendar/index.d.ts.map +1 -1
  39. package/build/types/dateLookup/monthCalendar/table/MonthCalendarTable.d.ts +26 -10
  40. package/build/types/dateLookup/monthCalendar/table/MonthCalendarTable.d.ts.map +1 -1
  41. package/build/types/dateLookup/monthCalendar/table/index.d.ts +1 -1
  42. package/build/types/dateLookup/monthCalendar/table/index.d.ts.map +1 -1
  43. package/build/types/dateLookup/yearCalendar/YearCalendar.d.ts +2 -15
  44. package/build/types/dateLookup/yearCalendar/YearCalendar.d.ts.map +1 -1
  45. package/build/types/dateLookup/yearCalendar/index.d.ts +1 -1
  46. package/build/types/dateLookup/yearCalendar/index.d.ts.map +1 -1
  47. package/build/types/dateLookup/yearCalendar/table/YearCalendarTable.d.ts +26 -10
  48. package/build/types/dateLookup/yearCalendar/table/YearCalendarTable.d.ts.map +1 -1
  49. package/build/types/dateLookup/yearCalendar/table/index.d.ts +1 -1
  50. package/build/types/dateLookup/yearCalendar/table/index.d.ts.map +1 -1
  51. package/build/types/index.d.ts +0 -1
  52. package/build/types/index.d.ts.map +1 -1
  53. package/package.json +3 -3
  54. package/src/common/dateUtils/isWithinRange/isWithinRange.spec.ts +0 -21
  55. package/src/common/dateUtils/isWithinRange/isWithinRange.ts +2 -2
  56. package/src/common/dateUtils/moveToWithinRange/moveToWithinRange.ts +2 -11
  57. package/src/dateLookup/{DateLookup.tsx → DateLookup.js} +69 -114
  58. package/src/dateLookup/DateLookup.state.spec.js +0 -7
  59. package/src/dateLookup/{DateLookup.story.tsx → DateLookup.story.js} +14 -13
  60. package/src/dateLookup/dateHeader/{DateHeader.tsx → DateHeader.js} +15 -15
  61. package/src/dateLookup/dateTrigger/{DateTrigger.tsx → DateTrigger.js} +32 -15
  62. package/src/dateLookup/dateTrigger/DateTrigger.spec.js +22 -0
  63. package/src/dateLookup/dayCalendar/{DayCalendar.tsx → DayCalendar.js} +21 -14
  64. package/src/dateLookup/dayCalendar/table/{DayCalendarTable.tsx → DayCalendarTable.js} +37 -26
  65. package/src/dateLookup/getStartOfDay/{getStartOfDay.tsx → getStartOfDay.js} +1 -1
  66. package/src/dateLookup/index.js +1 -0
  67. package/src/dateLookup/monthCalendar/{MonthCalendar.tsx → MonthCalendar.js} +22 -19
  68. package/src/dateLookup/monthCalendar/table/{MonthCalendarTable.tsx → MonthCalendarTable.js} +30 -31
  69. package/src/dateLookup/yearCalendar/{YearCalendar.tsx → YearCalendar.js} +21 -18
  70. package/src/dateLookup/yearCalendar/table/{YearCalendarTable.tsx → YearCalendarTable.js} +28 -26
  71. package/src/index.ts +0 -1
  72. package/src/dateLookup/DateLookup.tests.story.tsx +0 -71
  73. package/src/dateLookup/index.ts +0 -2
  74. /package/src/dateLookup/{DateLookup.messages.ts → DateLookup.messages.js} +0 -0
  75. /package/src/dateLookup/dateHeader/{index.ts → index.js} +0 -0
  76. /package/src/dateLookup/dateTrigger/{index.ts → index.js} +0 -0
  77. /package/src/dateLookup/dayCalendar/{index.ts → index.js} +0 -0
  78. /package/src/dateLookup/dayCalendar/table/{index.ts → index.js} +0 -0
  79. /package/src/dateLookup/getStartOfDay/{index.ts → index.js} +0 -0
  80. /package/src/dateLookup/monthCalendar/{index.ts → index.js} +0 -0
  81. /package/src/dateLookup/monthCalendar/table/{index.ts → index.js} +0 -0
  82. /package/src/dateLookup/yearCalendar/{index.ts → index.js} +0 -0
  83. /package/src/dateLookup/yearCalendar/table/{index.ts → index.js} +0 -0
package/build/index.js CHANGED
@@ -16,10 +16,10 @@ var react = require('@floating-ui/react');
16
16
  var focus = require('@react-aria/focus');
17
17
  var overlays = require('@react-aria/overlays');
18
18
  var reactTransitionGroup = require('react-transition-group');
19
- var neptuneValidation = require('@transferwise/neptune-validation');
20
- var reactDom = require('react-dom');
21
19
  var reactPopper = require('react-popper');
22
20
  var throttle = require('lodash.throttle');
21
+ var reactDom = require('react-dom');
22
+ var neptuneValidation = require('@transferwise/neptune-validation');
23
23
  var commonmark = require('commonmark');
24
24
  var art = require('@wise/art');
25
25
  var clamp$2 = require('lodash.clamp');
@@ -2697,20 +2697,11 @@ function getDayNames(locale, format = 'short') {
2697
2697
 
2698
2698
  // Makes sure that date is between min and max dates, returns a cloned min or max
2699
2699
  function moveToWithinRange(date, min, max) {
2700
- if (isWithinRange(date, min, max)) {
2701
- return date;
2702
- }
2703
- if (min && date < min) {
2704
- return new Date(min);
2705
- }
2706
- if (max && date > max) {
2707
- return new Date(max);
2708
- }
2709
- return null;
2700
+ return isWithinRange(date, min, max) ? date : new Date(min && date < min ? +min : +max);
2710
2701
  }
2711
2702
 
2712
2703
  function isWithinRange(date, min, max) {
2713
- return (!min || date >= min) && (!max || date <= max);
2704
+ return !date || (!min || date >= min) && (!max || date <= max);
2714
2705
  }
2715
2706
 
2716
2707
  const getMonthNames = (locale, format = 'long') => {
@@ -3234,7 +3225,7 @@ var dateTriggerMessages = reactIntl.defineMessages({
3234
3225
 
3235
3226
  const DateTrigger = ({
3236
3227
  selectedDate,
3237
- size = exports.Size.MEDIUM,
3228
+ size,
3238
3229
  placeholder,
3239
3230
  label,
3240
3231
  monthFormat,
@@ -3246,6 +3237,19 @@ const DateTrigger = ({
3246
3237
  locale,
3247
3238
  formatMessage
3248
3239
  } = reactIntl.useIntl();
3240
+ const handleKeyDown = event => {
3241
+ if (neptuneValidation.isKey({
3242
+ keyType: 'Space',
3243
+ event: event
3244
+ }) || neptuneValidation.isKey({
3245
+ keyType: 'Enter',
3246
+ event: event
3247
+ })) {
3248
+ event.stopPropagation();
3249
+ event.preventDefault();
3250
+ onClear();
3251
+ }
3252
+ };
3249
3253
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
3250
3254
  children: [/*#__PURE__*/jsxRuntime.jsxs("button", {
3251
3255
  className: `btn btn-${size} btn-input np-date-trigger`,
@@ -3282,12 +3286,29 @@ const DateTrigger = ({
3282
3286
  event.stopPropagation();
3283
3287
  event.preventDefault();
3284
3288
  onClear();
3285
- }
3289
+ },
3290
+ onKeyPress: handleKeyDown
3286
3291
  })
3287
3292
  })]
3288
3293
  }) : null]
3289
3294
  });
3290
3295
  };
3296
+ DateTrigger.propTypes = {
3297
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3298
+ size: PropTypes__default.default.oneOf(['sm', 'md', 'lg']),
3299
+ placeholder: PropTypes__default.default.string.isRequired,
3300
+ label: PropTypes__default.default.string.isRequired,
3301
+ monthFormat: PropTypes__default.default.oneOf(['short', 'long']).isRequired,
3302
+ disabled: PropTypes__default.default.bool.isRequired,
3303
+ onClick: PropTypes__default.default.func,
3304
+ onClear: PropTypes__default.default.func
3305
+ };
3306
+ DateTrigger.defaultProps = {
3307
+ selectedDate: null,
3308
+ size: exports.Size.MEDIUM,
3309
+ onClear: undefined
3310
+ };
3311
+ var DateTrigger$1 = DateTrigger;
3291
3312
 
3292
3313
  var messages$8 = reactIntl.defineMessages({
3293
3314
  next: {
@@ -3369,6 +3390,18 @@ const DateHeader = ({
3369
3390
  })]
3370
3391
  });
3371
3392
  };
3393
+ DateHeader.propTypes = {
3394
+ label: PropTypes__default.default.string,
3395
+ onLabelClick: PropTypes__default.default.func,
3396
+ onPreviousClick: PropTypes__default.default.func.isRequired,
3397
+ onNextClick: PropTypes__default.default.func.isRequired,
3398
+ dateMode: PropTypes__default.default.string
3399
+ };
3400
+ DateHeader.defaultProps = {
3401
+ label: null,
3402
+ onLabelClick: () => {}
3403
+ };
3404
+ var DateHeader$1 = DateHeader;
3372
3405
 
3373
3406
  function getFocusableTime(props) {
3374
3407
  return props.timeSpan.find(time => props.isActive(time)) || props.timeSpan.find(time => props.isNow(time) && !props.isDisabled(time)) || props.timeSpan.find(time => !props.isDisabled(time));
@@ -3454,9 +3487,10 @@ class DayCalendarTable extends React.PureComponent {
3454
3487
  let week = [];
3455
3488
  const weeks = [];
3456
3489
  let i;
3490
+
3457
3491
  // Pad first week
3458
3492
  for (i = 1; i < firstDayOfMonth; i += 1) {
3459
- week.push(-1);
3493
+ week.push(false);
3460
3494
  }
3461
3495
  // Fill in days
3462
3496
  for (i = 1; i <= daysInMonth; i += 1) {
@@ -3469,7 +3503,7 @@ class DayCalendarTable extends React.PureComponent {
3469
3503
  if (week.length > 0) {
3470
3504
  // Pad last week
3471
3505
  for (i = week.length; i < 7; i += 1) {
3472
- week.push(-1);
3506
+ week.push(false);
3473
3507
  }
3474
3508
  weeks.push(week);
3475
3509
  }
@@ -3524,10 +3558,12 @@ class DayCalendarTable extends React.PureComponent {
3524
3558
  const {
3525
3559
  viewMonth,
3526
3560
  viewYear,
3527
- intl
3561
+ intl: {
3562
+ locale
3563
+ }
3528
3564
  } = this.props;
3529
3565
  const weeks = this.getTableStructure();
3530
- const autoFocusDay = this.getAutofocusDay(weeks);
3566
+ let autoFocusDay = this.getAutofocusDay(weeks, viewMonth, viewYear);
3531
3567
  return /*#__PURE__*/jsxRuntime.jsxs("table", {
3532
3568
  className: "table table-condensed table-bordered tw-date-lookup-calendar m-b-0",
3533
3569
  children: [/*#__PURE__*/jsxRuntime.jsx("thead", {
@@ -3553,12 +3589,12 @@ class DayCalendarTable extends React.PureComponent {
3553
3589
  children: weeks.map((week, weekIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
3554
3590
  children: week.map((day, dayIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
3555
3591
  className: dayIndex > 4 ? 'weekend' : '',
3556
- children: day !== -1 && /*#__PURE__*/jsxRuntime.jsx(TableLink, {
3592
+ children: day && /*#__PURE__*/jsxRuntime.jsx(TableLink, {
3557
3593
  item: day,
3558
3594
  type: "day",
3559
- title: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
3595
+ title: formatting.formatDate(new Date(viewYear, viewMonth, day), locale, SHORT_DAY_FORMAT),
3560
3596
  autofocus: day === autoFocusDay,
3561
- longTitle: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale),
3597
+ longTitle: formatting.formatDate(new Date(viewYear, viewMonth, day), locale),
3562
3598
  active: this.isActive(day),
3563
3599
  disabled: this.isDisabled(day),
3564
3600
  today: this.isToday(day),
@@ -3570,6 +3606,19 @@ class DayCalendarTable extends React.PureComponent {
3570
3606
  });
3571
3607
  }
3572
3608
  }
3609
+ DayCalendarTable.propTypes = {
3610
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3611
+ min: PropTypes__default.default.instanceOf(Date),
3612
+ max: PropTypes__default.default.instanceOf(Date),
3613
+ viewMonth: PropTypes__default.default.number.isRequired,
3614
+ viewYear: PropTypes__default.default.number.isRequired,
3615
+ onSelect: PropTypes__default.default.func.isRequired
3616
+ };
3617
+ DayCalendarTable.defaultProps = {
3618
+ selectedDate: null,
3619
+ min: null,
3620
+ max: null
3621
+ };
3573
3622
  var DayCalendarTable$1 = reactIntl.injectIntl(DayCalendarTable);
3574
3623
 
3575
3624
  class DayCalendar extends React.PureComponent {
@@ -3609,7 +3658,7 @@ class DayCalendar extends React.PureComponent {
3609
3658
  onSelect
3610
3659
  } = this.props;
3611
3660
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
3612
- children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader, {
3661
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader$1, {
3613
3662
  label: formatting.formatDate(new Date(viewYear, viewMonth), locale, {
3614
3663
  month: monthFormat,
3615
3664
  year: 'numeric'
@@ -3629,6 +3678,22 @@ class DayCalendar extends React.PureComponent {
3629
3678
  });
3630
3679
  }
3631
3680
  }
3681
+ DayCalendar.propTypes = {
3682
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3683
+ min: PropTypes__default.default.instanceOf(Date),
3684
+ max: PropTypes__default.default.instanceOf(Date),
3685
+ viewMonth: PropTypes__default.default.number.isRequired,
3686
+ viewYear: PropTypes__default.default.number.isRequired,
3687
+ monthFormat: PropTypes__default.default.oneOf([exports.MonthFormat.LONG, exports.MonthFormat.SHORT]).isRequired,
3688
+ onSelect: PropTypes__default.default.func.isRequired,
3689
+ onLabelClick: PropTypes__default.default.func.isRequired,
3690
+ onViewDateUpdate: PropTypes__default.default.func.isRequired
3691
+ };
3692
+ DayCalendar.defaultProps = {
3693
+ selectedDate: null,
3694
+ min: null,
3695
+ max: null
3696
+ };
3632
3697
  var DayCalendar$1 = reactIntl.injectIntl(DayCalendar);
3633
3698
 
3634
3699
  const ROWS$1 = 3;
@@ -3660,7 +3725,7 @@ const MonthCalendarTable = ({
3660
3725
  });
3661
3726
  };
3662
3727
  const isActive = month => {
3663
- return !!(selectedDate && month === selectedDate.getMonth() && viewYear === selectedDate.getFullYear());
3728
+ return selectedDate && month === selectedDate.getMonth() && viewYear === selectedDate.getFullYear();
3664
3729
  };
3665
3730
  const isThisMonth = month => {
3666
3731
  return viewYear === new Date().getFullYear() && month === new Date().getMonth();
@@ -3684,23 +3749,33 @@ const MonthCalendarTable = ({
3684
3749
  className: "sr-only",
3685
3750
  children: /*#__PURE__*/jsxRuntime.jsx("tr", {
3686
3751
  children: /*#__PURE__*/jsxRuntime.jsx("th", {
3687
- colSpan: COLS$1,
3752
+ colSpan: "3",
3688
3753
  children: placeholder
3689
3754
  })
3690
3755
  })
3691
3756
  }), /*#__PURE__*/jsxRuntime.jsx("tbody", {
3692
- children: Array.from({
3693
- length: ROWS$1
3694
- }, (_, rowIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
3695
- children: Array.from({
3696
- length: COLS$1
3697
- }, (_, colIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
3757
+ children: [...new Array(ROWS$1)].map((row, rowIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
3758
+ children: [...new Array(COLS$1)].map((col, colIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
3698
3759
  children: getLink(rowIndex * COLS$1 + colIndex)
3699
3760
  }, colIndex))
3700
3761
  }, rowIndex))
3701
3762
  })]
3702
3763
  });
3703
3764
  };
3765
+ MonthCalendarTable.propTypes = {
3766
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3767
+ min: PropTypes__default.default.instanceOf(Date),
3768
+ max: PropTypes__default.default.instanceOf(Date),
3769
+ viewYear: PropTypes__default.default.number.isRequired,
3770
+ placeholder: PropTypes__default.default.string.isRequired,
3771
+ onSelect: PropTypes__default.default.func.isRequired
3772
+ };
3773
+ MonthCalendarTable.defaultProps = {
3774
+ selectedDate: null,
3775
+ min: null,
3776
+ max: null
3777
+ };
3778
+ var MonthCalendarTable$1 = MonthCalendarTable;
3704
3779
 
3705
3780
  class MonthCalendar extends React.PureComponent {
3706
3781
  onMonthSelect = month => {
@@ -3733,7 +3808,7 @@ class MonthCalendar extends React.PureComponent {
3733
3808
  onLabelClick
3734
3809
  } = this.props;
3735
3810
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
3736
- children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader, {
3811
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader$1, {
3737
3812
  dateMode: formatMessage(messages$8.year),
3738
3813
  label: formatting.formatDate(new Date(viewYear, 0), locale, {
3739
3814
  year: 'numeric'
@@ -3741,17 +3816,32 @@ class MonthCalendar extends React.PureComponent {
3741
3816
  onLabelClick: onLabelClick,
3742
3817
  onPreviousClick: this.selectPreviousYear,
3743
3818
  onNextClick: this.selectNextYear
3744
- }), /*#__PURE__*/jsxRuntime.jsx(MonthCalendarTable, {
3745
- selectedDate: selectedDate,
3746
- min: min,
3747
- max: max,
3748
- viewYear: viewYear,
3749
- placeholder: placeholder,
3819
+ }), /*#__PURE__*/jsxRuntime.jsx(MonthCalendarTable$1, {
3820
+ selectedDate,
3821
+ min,
3822
+ max,
3823
+ viewYear,
3824
+ placeholder,
3750
3825
  onSelect: this.onMonthSelect
3751
3826
  })]
3752
3827
  });
3753
3828
  }
3754
3829
  }
3830
+ MonthCalendar.propTypes = {
3831
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3832
+ min: PropTypes__default.default.instanceOf(Date),
3833
+ max: PropTypes__default.default.instanceOf(Date),
3834
+ viewYear: PropTypes__default.default.number.isRequired,
3835
+ placeholder: PropTypes__default.default.string.isRequired,
3836
+ onSelect: PropTypes__default.default.func.isRequired,
3837
+ onLabelClick: PropTypes__default.default.func.isRequired,
3838
+ onViewDateUpdate: PropTypes__default.default.func.isRequired
3839
+ };
3840
+ MonthCalendar.defaultProps = {
3841
+ selectedDate: null,
3842
+ min: null,
3843
+ max: null
3844
+ };
3755
3845
  var MonthCalendar$1 = reactIntl.injectIntl(MonthCalendar);
3756
3846
 
3757
3847
  const ROWS = 5;
@@ -3807,23 +3897,33 @@ const YearCalendarTable = ({
3807
3897
  className: "sr-only",
3808
3898
  children: /*#__PURE__*/jsxRuntime.jsx("tr", {
3809
3899
  children: /*#__PURE__*/jsxRuntime.jsx("th", {
3810
- colSpan: COLS,
3900
+ colSpan: "4",
3811
3901
  children: placeholder
3812
3902
  })
3813
3903
  })
3814
3904
  }), /*#__PURE__*/jsxRuntime.jsx("tbody", {
3815
- children: Array.from({
3816
- length: ROWS
3817
- }, (_, rowIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
3818
- children: Array.from({
3819
- length: COLS
3820
- }, (_, colIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
3905
+ children: [...new Array(ROWS)].map((row, rowIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
3906
+ children: [...new Array(COLS)].map((col, colIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
3821
3907
  children: getLink(startYear + rowIndex * COLS + colIndex)
3822
3908
  }, colIndex))
3823
3909
  }, rowIndex))
3824
3910
  })]
3825
3911
  });
3826
3912
  };
3913
+ YearCalendarTable.propTypes = {
3914
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3915
+ min: PropTypes__default.default.instanceOf(Date),
3916
+ max: PropTypes__default.default.instanceOf(Date),
3917
+ viewYear: PropTypes__default.default.number.isRequired,
3918
+ placeholder: PropTypes__default.default.string.isRequired,
3919
+ onSelect: PropTypes__default.default.func.isRequired
3920
+ };
3921
+ YearCalendarTable.defaultProps = {
3922
+ selectedDate: null,
3923
+ min: null,
3924
+ max: null
3925
+ };
3926
+ var YearCalendarTable$1 = YearCalendarTable;
3827
3927
 
3828
3928
  class YearCalendar extends React.PureComponent {
3829
3929
  onYearSelect = year => {
@@ -3854,21 +3954,35 @@ class YearCalendar extends React.PureComponent {
3854
3954
  }
3855
3955
  } = this.props;
3856
3956
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
3857
- children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader, {
3957
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader$1, {
3858
3958
  dateMode: formatMessage(messages$8.twentyYears),
3859
3959
  onPreviousClick: this.selectPreviousYears,
3860
3960
  onNextClick: this.selectNextYears
3861
- }), /*#__PURE__*/jsxRuntime.jsx(YearCalendarTable, {
3862
- selectedDate: selectedDate,
3863
- min: min,
3864
- max: max,
3865
- viewYear: viewYear,
3866
- placeholder: placeholder || '',
3961
+ }), /*#__PURE__*/jsxRuntime.jsx(YearCalendarTable$1, {
3962
+ selectedDate,
3963
+ min,
3964
+ max,
3965
+ viewYear,
3966
+ placeholder,
3867
3967
  onSelect: this.onYearSelect
3868
3968
  })]
3869
3969
  });
3870
3970
  }
3871
3971
  }
3972
+ YearCalendar.propTypes = {
3973
+ selectedDate: PropTypes__default.default.instanceOf(Date),
3974
+ min: PropTypes__default.default.instanceOf(Date),
3975
+ max: PropTypes__default.default.instanceOf(Date),
3976
+ viewYear: PropTypes__default.default.number.isRequired,
3977
+ placeholder: PropTypes__default.default.string.isRequired,
3978
+ onSelect: PropTypes__default.default.func.isRequired,
3979
+ onViewDateUpdate: PropTypes__default.default.func.isRequired
3980
+ };
3981
+ YearCalendar.defaultProps = {
3982
+ selectedDate: null,
3983
+ min: null,
3984
+ max: null
3985
+ };
3872
3986
  var YearCalendar$1 = reactIntl.injectIntl(YearCalendar);
3873
3987
 
3874
3988
  const MODE = {
@@ -3877,17 +3991,6 @@ const MODE = {
3877
3991
  YEAR: 'year'
3878
3992
  };
3879
3993
  class DateLookup extends React.PureComponent {
3880
- static defaultProps = {
3881
- value: null,
3882
- min: null,
3883
- max: null,
3884
- size: exports.Size.MEDIUM,
3885
- placeholder: '',
3886
- label: '',
3887
- monthFormat: exports.MonthFormat.LONG,
3888
- disabled: false,
3889
- clearable: false
3890
- };
3891
3994
  element = /*#__PURE__*/React.createRef();
3892
3995
  dropdown = /*#__PURE__*/React.createRef();
3893
3996
  constructor(props) {
@@ -3895,8 +3998,8 @@ class DateLookup extends React.PureComponent {
3895
3998
  this.state = {
3896
3999
  selectedDate: getStartOfDay(props.value),
3897
4000
  originalDate: null,
3898
- min: getStartOfDay(props.min || null),
3899
- max: getStartOfDay(props.max || null),
4001
+ min: getStartOfDay(props.min),
4002
+ max: getStartOfDay(props.max),
3900
4003
  viewMonth: (props.value || new Date()).getMonth(),
3901
4004
  viewYear: (props.value || new Date()).getFullYear(),
3902
4005
  open: false,
@@ -3906,22 +4009,22 @@ class DateLookup extends React.PureComponent {
3906
4009
  }
3907
4010
  static getDerivedStateFromProps(props, state) {
3908
4011
  const propsSelected = getStartOfDay(props.value);
3909
- const propsMin = getStartOfDay(props.min || null);
3910
- const propsMax = getStartOfDay(props.max || null);
3911
- const hasSelectedChanged = state.selectedDate?.getTime() !== propsSelected?.getTime();
3912
- const hasMinChanged = state.min?.getTime() !== propsMin?.getTime();
3913
- const hasMaxChanged = state.max?.getTime() !== propsMax?.getTime();
4012
+ const propsMin = getStartOfDay(props.min);
4013
+ const propsMax = getStartOfDay(props.max);
4014
+ const hasSelectedChanged = +state.selectedDate !== +propsSelected;
4015
+ const hasMinChanged = +state.min !== +propsMin;
4016
+ const hasMaxChanged = +state.max !== +propsMax;
3914
4017
  if (hasSelectedChanged || hasMinChanged || hasMaxChanged) {
3915
4018
  const selectedDate = hasSelectedChanged ? propsSelected : state.selectedDate;
3916
4019
  const min = hasMinChanged ? propsMin : state.min;
3917
4020
  const max = hasMaxChanged ? propsMax : state.max;
3918
- if (selectedDate && !isWithinRange(selectedDate, min, max)) {
4021
+ // make sure that selected date is within allowed range
4022
+ if (!isWithinRange(selectedDate, min, max)) {
3919
4023
  props.onChange(moveToWithinRange(selectedDate, min, max));
3920
4024
  return null;
3921
4025
  }
3922
- const viewDateThatIsWithinRange = selectedDate || (min || max) && moveToWithinRange(new Date(), min, max) || new Date();
3923
- const viewMonth = viewDateThatIsWithinRange.getMonth();
3924
- const viewYear = viewDateThatIsWithinRange.getFullYear();
4026
+ const viewMonth = (selectedDate || new Date()).getMonth();
4027
+ const viewYear = (selectedDate || new Date()).getFullYear();
3925
4028
  return {
3926
4029
  selectedDate,
3927
4030
  min,
@@ -3933,12 +4036,12 @@ class DateLookup extends React.PureComponent {
3933
4036
  return null;
3934
4037
  }
3935
4038
  componentDidUpdate(previousProps) {
3936
- if (this.props.value && previousProps.value && this.props.value.getTime() !== previousProps.value.getTime() && this.state.open) {
4039
+ if (+this.props.value !== +previousProps.value && this.state.open) {
3937
4040
  this.focusOn('.active');
3938
4041
  }
3939
- const mediaQuery = window.matchMedia(`(max-width: ${exports.Breakpoint.SMALL}px)`);
4042
+ this.mediaQuery = window.matchMedia(`(max-width: ${exports.Breakpoint.SMALL}px)`);
3940
4043
  this.setState({
3941
- isMobile: mediaQuery.matches
4044
+ isMobile: this.mediaQuery.matches
3942
4045
  });
3943
4046
  }
3944
4047
  componentWillUnmount() {
@@ -4044,15 +4147,13 @@ class DateLookup extends React.PureComponent {
4044
4147
  } else {
4045
4148
  date = getStartOfDay(new Date());
4046
4149
  }
4047
- if (date) {
4048
- date = moveToWithinRange(date, min, max);
4049
- }
4050
- if (date?.getTime() !== selectedDate?.getTime()) {
4150
+ date = moveToWithinRange(date, min, max);
4151
+ if (+date !== +selectedDate) {
4051
4152
  this.props.onChange(date);
4052
4153
  }
4053
4154
  };
4054
4155
  focusOn = (preferredElement, fallbackElement) => {
4055
- const element = this.element.current?.querySelector(preferredElement);
4156
+ const element = this.element.current.querySelector(preferredElement);
4056
4157
  if (element) {
4057
4158
  element.focus();
4058
4159
  } else if (fallbackElement) {
@@ -4106,30 +4207,30 @@ class DateLookup extends React.PureComponent {
4106
4207
  'p-a-1': !isMobile
4107
4208
  }),
4108
4209
  children: [mode === MODE.DAY && /*#__PURE__*/jsxRuntime.jsx(DayCalendar$1, {
4109
- selectedDate: selectedDate,
4110
- min: min,
4111
- max: max,
4112
- viewMonth: viewMonth,
4113
- viewYear: viewYear,
4114
- monthFormat: monthFormat,
4210
+ selectedDate,
4211
+ min,
4212
+ max,
4213
+ viewMonth,
4214
+ viewYear,
4215
+ monthFormat,
4115
4216
  onSelect: this.handleSelectedDateUpdate,
4116
4217
  onLabelClick: this.switchToYears,
4117
4218
  onViewDateUpdate: this.handleViewDateUpdate
4118
4219
  }), mode === MODE.MONTH && /*#__PURE__*/jsxRuntime.jsx(MonthCalendar$1, {
4119
- selectedDate: selectedDate,
4120
- min: min,
4121
- max: max,
4122
- viewYear: viewYear,
4123
- placeholder: placeholder || '',
4220
+ selectedDate,
4221
+ min,
4222
+ max,
4223
+ viewYear,
4224
+ placeholder,
4124
4225
  onSelect: this.switchToDays,
4125
4226
  onLabelClick: this.switchToYears,
4126
4227
  onViewDateUpdate: this.handleViewDateUpdate
4127
4228
  }), mode === MODE.YEAR && /*#__PURE__*/jsxRuntime.jsx(YearCalendar$1, {
4128
- selectedDate: selectedDate,
4129
- min: min,
4130
- max: max,
4131
- viewYear: viewYear,
4132
- placeholder: placeholder || '',
4229
+ selectedDate,
4230
+ min,
4231
+ max,
4232
+ viewYear,
4233
+ placeholder,
4133
4234
  onSelect: this.switchToMonths,
4134
4235
  onViewDateUpdate: this.handleViewDateUpdate
4135
4236
  })]
@@ -4155,20 +4256,21 @@ class DateLookup extends React.PureComponent {
4155
4256
  value
4156
4257
  } = this.props;
4157
4258
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
4259
+ // eslint-disable-line jsx-a11y/no-static-element-interactions
4158
4260
  ref: this.element,
4159
4261
  id: this.props.id,
4160
4262
  "aria-labelledby": ariaLabelledBy,
4161
4263
  className: "input-group",
4162
4264
  onKeyDown: this.handleKeyDown,
4163
- children: [/*#__PURE__*/jsxRuntime.jsx(DateTrigger, {
4164
- selectedDate: selectedDate,
4165
- size: size,
4166
- placeholder: placeholder || '',
4167
- label: label || '',
4168
- monthFormat: monthFormat,
4169
- disabled: disabled || false,
4265
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateTrigger$1, {
4266
+ selectedDate,
4267
+ size,
4268
+ placeholder,
4269
+ label,
4270
+ monthFormat,
4271
+ disabled,
4170
4272
  onClick: this.open,
4171
- onClear: !disabled && clearable && value ? this.handleClear : undefined
4273
+ onClear: !disabled && clearable && value ? this.handleClear : null
4172
4274
  }), /*#__PURE__*/jsxRuntime.jsx(ResponsivePanel$1, {
4173
4275
  anchorRef: this.element,
4174
4276
  open: open,
@@ -4180,6 +4282,36 @@ class DateLookup extends React.PureComponent {
4180
4282
  });
4181
4283
  }
4182
4284
  }
4285
+ DateLookup.propTypes = {
4286
+ id: PropTypes__default.default.string,
4287
+ value: PropTypes__default.default.instanceOf(Date),
4288
+ min: PropTypes__default.default.instanceOf(Date),
4289
+ max: PropTypes__default.default.instanceOf(Date),
4290
+ size: PropTypes__default.default.oneOf(['sm', 'md', 'lg']),
4291
+ placeholder: PropTypes__default.default.string,
4292
+ label: PropTypes__default.default.string,
4293
+ 'aria-labelledby': PropTypes__default.default.string,
4294
+ monthFormat: PropTypes__default.default.oneOf(['long', 'short']),
4295
+ disabled: PropTypes__default.default.bool,
4296
+ onChange: PropTypes__default.default.func.isRequired,
4297
+ onFocus: PropTypes__default.default.func,
4298
+ onBlur: PropTypes__default.default.func,
4299
+ clearable: PropTypes__default.default.bool
4300
+ };
4301
+ DateLookup.defaultProps = {
4302
+ value: null,
4303
+ min: null,
4304
+ max: null,
4305
+ size: exports.Size.MEDIUM,
4306
+ placeholder: '',
4307
+ label: '',
4308
+ monthFormat: exports.MonthFormat.LONG,
4309
+ disabled: false,
4310
+ onFocus: null,
4311
+ onBlur: null,
4312
+ clearable: false
4313
+ };
4314
+ var DateLookup$1 = DateLookup;
4183
4315
 
4184
4316
  const NavigationOption = /*#__PURE__*/React.forwardRef(({
4185
4317
  as: component = 'button',
@@ -15062,7 +15194,7 @@ exports.CriticalCommsBanner = CriticalCommsBanner;
15062
15194
  exports.DEFAULT_LANG = DEFAULT_LANG;
15063
15195
  exports.DEFAULT_LOCALE = DEFAULT_LOCALE;
15064
15196
  exports.DateInput = DateInput;
15065
- exports.DateLookup = DateLookup;
15197
+ exports.DateLookup = DateLookup$1;
15066
15198
  exports.Decision = Decision;
15067
15199
  exports.DefinitionList = DefinitionList$1;
15068
15200
  exports.Dimmer = Dimmer$1;