@activecollab/components 2.0.212 → 2.0.213

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 (113) hide show
  1. package/dist/cjs/components/DatePicker/DatePicker.js +678 -301
  2. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  3. package/dist/cjs/components/DatePicker/Styles.js +91 -37
  4. package/dist/cjs/components/DatePicker/Styles.js.map +1 -1
  5. package/dist/cjs/components/DatePicker/index.js +0 -11
  6. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  7. package/dist/cjs/components/SelectDate/SelectDate.js +126 -280
  8. package/dist/cjs/components/SelectDate/SelectDate.js.map +1 -1
  9. package/dist/cjs/components/SelectDate/index.js +0 -11
  10. package/dist/cjs/components/SelectDate/index.js.map +1 -1
  11. package/dist/cjs/components/Steppers/DateStepper/DateStepper.js +94 -100
  12. package/dist/cjs/components/Steppers/DateStepper/DateStepper.js.map +1 -1
  13. package/dist/cjs/components/Steppers/DateStepper/index.js +0 -11
  14. package/dist/cjs/components/Steppers/DateStepper/index.js.map +1 -1
  15. package/dist/cjs/components/index.js +0 -11
  16. package/dist/cjs/components/index.js.map +1 -1
  17. package/dist/esm/components/DatePicker/DatePicker.d.ts +64 -26
  18. package/dist/esm/components/DatePicker/DatePicker.d.ts.map +1 -1
  19. package/dist/esm/components/DatePicker/DatePicker.js +619 -278
  20. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  21. package/dist/esm/components/DatePicker/Styles.d.ts +21 -9
  22. package/dist/esm/components/DatePicker/Styles.d.ts.map +1 -1
  23. package/dist/esm/components/DatePicker/Styles.js +89 -30
  24. package/dist/esm/components/DatePicker/Styles.js.map +1 -1
  25. package/dist/esm/components/DatePicker/index.d.ts +0 -1
  26. package/dist/esm/components/DatePicker/index.d.ts.map +1 -1
  27. package/dist/esm/components/DatePicker/index.js +0 -1
  28. package/dist/esm/components/DatePicker/index.js.map +1 -1
  29. package/dist/esm/components/SelectDate/SelectDate.d.ts +20 -19
  30. package/dist/esm/components/SelectDate/SelectDate.d.ts.map +1 -1
  31. package/dist/esm/components/SelectDate/SelectDate.js +124 -246
  32. package/dist/esm/components/SelectDate/SelectDate.js.map +1 -1
  33. package/dist/esm/components/SelectDate/index.d.ts +0 -1
  34. package/dist/esm/components/SelectDate/index.d.ts.map +1 -1
  35. package/dist/esm/components/SelectDate/index.js +0 -1
  36. package/dist/esm/components/SelectDate/index.js.map +1 -1
  37. package/dist/esm/components/Steppers/DateStepper/DateStepper.d.ts +10 -7
  38. package/dist/esm/components/Steppers/DateStepper/DateStepper.d.ts.map +1 -1
  39. package/dist/esm/components/Steppers/DateStepper/DateStepper.js +88 -97
  40. package/dist/esm/components/Steppers/DateStepper/DateStepper.js.map +1 -1
  41. package/dist/esm/components/Steppers/DateStepper/index.d.ts +0 -1
  42. package/dist/esm/components/Steppers/DateStepper/index.d.ts.map +1 -1
  43. package/dist/esm/components/Steppers/DateStepper/index.js +0 -1
  44. package/dist/esm/components/Steppers/DateStepper/index.js.map +1 -1
  45. package/dist/esm/components/index.d.ts +0 -1
  46. package/dist/esm/components/index.d.ts.map +1 -1
  47. package/dist/esm/components/index.js +0 -1
  48. package/dist/esm/components/index.js.map +1 -1
  49. package/dist/index.js +214 -1563
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.min.js +1 -1
  52. package/dist/index.min.js.map +1 -1
  53. package/package.json +1 -3
  54. package/dist/cjs/components/DatePicker/CustomNavBarElement.js +0 -41
  55. package/dist/cjs/components/DatePicker/CustomNavBarElement.js.map +0 -1
  56. package/dist/cjs/components/DatePicker/DatePickerV2.js +0 -734
  57. package/dist/cjs/components/DatePicker/DatePickerV2.js.map +0 -1
  58. package/dist/cjs/components/DatePicker/StylesV2.js +0 -100
  59. package/dist/cjs/components/DatePicker/StylesV2.js.map +0 -1
  60. package/dist/cjs/components/Pickers/NavBarElement.js +0 -52
  61. package/dist/cjs/components/Pickers/NavBarElement.js.map +0 -1
  62. package/dist/cjs/components/Pickers/Styles.js +0 -76
  63. package/dist/cjs/components/Pickers/Styles.js.map +0 -1
  64. package/dist/cjs/components/Pickers/YearMonthPicker.js +0 -80
  65. package/dist/cjs/components/Pickers/YearMonthPicker.js.map +0 -1
  66. package/dist/cjs/components/Pickers/index.js +0 -28
  67. package/dist/cjs/components/Pickers/index.js.map +0 -1
  68. package/dist/cjs/components/SelectDate/DatePickerForm.js +0 -94
  69. package/dist/cjs/components/SelectDate/DatePickerForm.js.map +0 -1
  70. package/dist/cjs/components/SelectDate/SelectDateV2.js +0 -263
  71. package/dist/cjs/components/SelectDate/SelectDateV2.js.map +0 -1
  72. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js +0 -276
  73. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js.map +0 -1
  74. package/dist/esm/components/DatePicker/CustomNavBarElement.d.ts +0 -12
  75. package/dist/esm/components/DatePicker/CustomNavBarElement.d.ts.map +0 -1
  76. package/dist/esm/components/DatePicker/CustomNavBarElement.js +0 -34
  77. package/dist/esm/components/DatePicker/CustomNavBarElement.js.map +0 -1
  78. package/dist/esm/components/DatePicker/DatePickerV2.d.ts +0 -68
  79. package/dist/esm/components/DatePicker/DatePickerV2.d.ts.map +0 -1
  80. package/dist/esm/components/DatePicker/DatePickerV2.js +0 -649
  81. package/dist/esm/components/DatePicker/DatePickerV2.js.map +0 -1
  82. package/dist/esm/components/DatePicker/StylesV2.d.ts +0 -22
  83. package/dist/esm/components/DatePicker/StylesV2.d.ts.map +0 -1
  84. package/dist/esm/components/DatePicker/StylesV2.js +0 -93
  85. package/dist/esm/components/DatePicker/StylesV2.js.map +0 -1
  86. package/dist/esm/components/Pickers/NavBarElement.d.ts +0 -9
  87. package/dist/esm/components/Pickers/NavBarElement.d.ts.map +0 -1
  88. package/dist/esm/components/Pickers/NavBarElement.js +0 -45
  89. package/dist/esm/components/Pickers/NavBarElement.js.map +0 -1
  90. package/dist/esm/components/Pickers/Styles.d.ts +0 -18
  91. package/dist/esm/components/Pickers/Styles.d.ts.map +0 -1
  92. package/dist/esm/components/Pickers/Styles.js +0 -56
  93. package/dist/esm/components/Pickers/Styles.js.map +0 -1
  94. package/dist/esm/components/Pickers/YearMonthPicker.d.ts +0 -17
  95. package/dist/esm/components/Pickers/YearMonthPicker.d.ts.map +0 -1
  96. package/dist/esm/components/Pickers/YearMonthPicker.js +0 -59
  97. package/dist/esm/components/Pickers/YearMonthPicker.js.map +0 -1
  98. package/dist/esm/components/Pickers/index.d.ts +0 -3
  99. package/dist/esm/components/Pickers/index.d.ts.map +0 -1
  100. package/dist/esm/components/Pickers/index.js +0 -3
  101. package/dist/esm/components/Pickers/index.js.map +0 -1
  102. package/dist/esm/components/SelectDate/DatePickerForm.d.ts +0 -39
  103. package/dist/esm/components/SelectDate/DatePickerForm.d.ts.map +0 -1
  104. package/dist/esm/components/SelectDate/DatePickerForm.js +0 -80
  105. package/dist/esm/components/SelectDate/DatePickerForm.js.map +0 -1
  106. package/dist/esm/components/SelectDate/SelectDateV2.d.ts +0 -102
  107. package/dist/esm/components/SelectDate/SelectDateV2.d.ts.map +0 -1
  108. package/dist/esm/components/SelectDate/SelectDateV2.js +0 -223
  109. package/dist/esm/components/SelectDate/SelectDateV2.js.map +0 -1
  110. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts +0 -45
  111. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts.map +0 -1
  112. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js +0 -241
  113. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js.map +0 -1
@@ -3,374 +3,751 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DatePicker = void 0;
6
+ exports.toMoment = exports.DatePicker = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _reactTransitionGroup = require("react-transition-group");
9
- var _dateFns = require("date-fns");
10
- var _moment = _interopRequireDefault(require("moment"));
11
- var _ClassNames = require("./ClassNames");
12
- var _CustomNavBarElement = require("./CustomNavBarElement");
8
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
13
9
  var _Styles = require("./Styles");
14
- var _YearMonthPicker = require("../Pickers/YearMonthPicker");
15
- var _excluded = ["className", "onChange", "onDayClick", "selectedDays", "disabledDays", "selectionMode", "month", "onMonthChange", "dateRequired", "firstDayOfWeek", "fixedWeeks", "modifiers", "renderDay"];
10
+ var _Button = require("../Button");
11
+ var _IconButton = require("../IconButton");
12
+ var _Icons = require("../Icons");
13
+ var _Menu = require("../Menu");
14
+ var _Tooltip = require("../Tooltip");
16
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
18
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
24
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
25
18
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
26
19
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
20
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
28
21
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
29
22
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
30
23
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
31
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
32
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
33
- var formatWeekdayName = function formatWeekdayName(str) {
34
- return (0, _moment.default)(str).format("ddd").charAt(0);
24
+ var toMoment = exports.toMoment = function toMoment(date) {
25
+ if (_momentTimezone.default.isMoment(date)) {
26
+ return date;
27
+ } else if (typeof date === "number") {
28
+ return _momentTimezone.default.utc(date * 1000);
29
+ } else if (typeof date === "string") {
30
+ return _momentTimezone.default.utc(date);
31
+ }
32
+ return null;
35
33
  };
36
34
  var DatePicker = exports.DatePicker = function DatePicker(_ref) {
37
- var className = _ref.className,
35
+ var defaultSelected = _ref.selected,
38
36
  onChange = _ref.onChange,
39
- onDayClick = _ref.onDayClick,
40
- selectedDays = _ref.selectedDays,
41
- disabledDays = _ref.disabledDays,
42
- _ref$selectionMode = _ref.selectionMode,
43
- selectionMode = _ref$selectionMode === void 0 ? "daily" : _ref$selectionMode,
44
- _ref$month = _ref.month,
45
- month = _ref$month === void 0 ? new Date() : _ref$month,
46
- _ref$onMonthChange = _ref.onMonthChange,
47
- onMonthChange = _ref$onMonthChange === void 0 ? function () {
48
- return null;
49
- } : _ref$onMonthChange,
50
- _ref$dateRequired = _ref.dateRequired,
51
- dateRequired = _ref$dateRequired === void 0 ? false : _ref$dateRequired,
37
+ onSave = _ref.onSave,
38
+ onClear = _ref.onClear,
39
+ onClose = _ref.onClose,
40
+ _ref$instant = _ref.instant,
41
+ instant = _ref$instant === void 0 ? true : _ref$instant,
42
+ target = _ref.target,
43
+ _ref$mode = _ref.mode,
44
+ mode = _ref$mode === void 0 ? "daily" : _ref$mode,
45
+ _ref$saveLabel = _ref.saveLabel,
46
+ saveLabel = _ref$saveLabel === void 0 ? "Save" : _ref$saveLabel,
47
+ _ref$cancelLabel = _ref.cancelLabel,
48
+ cancelLabel = _ref$cancelLabel === void 0 ? "Cancel" : _ref$cancelLabel,
49
+ _ref$clearLabel = _ref.clearLabel,
50
+ clearLabel = _ref$clearLabel === void 0 ? "Clear" : _ref$clearLabel,
51
+ disabledDaysBefore = _ref.disabledDaysBefore,
52
+ disabledDaysAfter = _ref.disabledDaysAfter,
53
+ _ref$disabled = _ref.disabled,
54
+ disabledDays = _ref$disabled === void 0 ? [] : _ref$disabled,
55
+ modifiers = _ref.modifiers,
56
+ disableAnimations = _ref.disableAnimations,
52
57
  _ref$firstDayOfWeek = _ref.firstDayOfWeek,
53
58
  firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 0 : _ref$firstDayOfWeek,
54
- _ref$fixedWeeks = _ref.fixedWeeks,
55
- fixedWeeks = _ref$fixedWeeks === void 0 ? true : _ref$fixedWeeks,
56
- defaultModifiers = _ref.modifiers,
57
- renderDay = _ref.renderDay,
58
- rest = _objectWithoutProperties(_ref, _excluded);
59
- var _useState = (0, _react.useState)(),
59
+ forceClose = _ref.forceClose,
60
+ required = _ref.required,
61
+ month = _ref.month,
62
+ disableYearPicker = _ref.disableYearPicker,
63
+ _ref$position = _ref.position,
64
+ position = _ref$position === void 0 ? "bottom-start" : _ref$position,
65
+ menuClassName = _ref.menuClassName,
66
+ popperClassName = _ref.popperClassName,
67
+ _ref$enableConfirmMod = _ref.enableConfirmModal,
68
+ enableConfirmModal = _ref$enableConfirmMod === void 0 ? false : _ref$enableConfirmMod,
69
+ _ref$modalHeaderText = _ref.modalHeaderText,
70
+ modalHeaderText = _ref$modalHeaderText === void 0 ? "Discard changes?" : _ref$modalHeaderText,
71
+ _ref$modalDiscardMess = _ref.modalDiscardMessage,
72
+ modalDiscardMessage = _ref$modalDiscardMess === void 0 ? "All unsaved changes will be lost." : _ref$modalDiscardMess,
73
+ _ref$modalDiscardBtnT = _ref.modalDiscardBtnText,
74
+ modalDiscardBtnText = _ref$modalDiscardBtnT === void 0 ? "OK" : _ref$modalDiscardBtnT,
75
+ _ref$modalCancelBtnTe = _ref.modalCancelBtnText,
76
+ modalCancelBtnText = _ref$modalCancelBtnTe === void 0 ? "Cancel" : _ref$modalCancelBtnTe,
77
+ backgroundElementClass = _ref.backgroundElementClass,
78
+ popperTooltipClassName = _ref.popperTooltipClassName,
79
+ popperTooltipStyle = _ref.popperTooltipStyle,
80
+ open = _ref.open,
81
+ onCalendarToggle = _ref.onCalendarToggle,
82
+ onDayClick = _ref.onDayClick,
83
+ showControls = _ref.showControls;
84
+ var _useState = (0, _react.useState)(open),
60
85
  _useState2 = _slicedToArray(_useState, 2),
61
- enteredTo = _useState2[0],
62
- setEnteredTo = _useState2[1];
63
- var _useState3 = (0, _react.useState)(),
86
+ isOpen = _useState2[0],
87
+ setIsOpen = _useState2[1];
88
+ var _useState3 = (0, _react.useState)(false),
64
89
  _useState4 = _slicedToArray(_useState3, 2),
65
- enteredFrom = _useState4[0],
66
- setEnteredFrom = _useState4[1];
67
- var _useState5 = (0, _react.useState)(),
90
+ isYearSelectOpen = _useState4[0],
91
+ setIsYearSelectOpen = _useState4[1];
92
+ var _useState5 = (0, _react.useState)(false),
68
93
  _useState6 = _slicedToArray(_useState5, 2),
69
- stopScroll = _useState6[0],
70
- setStopScroll = _useState6[1];
71
- var _useState7 = (0, _react.useState)(true),
94
+ showDiscardModal = _useState6[0],
95
+ setShowDiscardModal = _useState6[1];
96
+ var _useState7 = (0, _react.useState)(mode === "monthly" || mode === "quarterly"),
72
97
  _useState8 = _slicedToArray(_useState7, 2),
73
- direction = _useState8[0],
74
- setDirection = _useState8[1];
75
- var _useState9 = (0, _react.useState)(function () {
76
- return (selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.from) instanceof Date && (selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.to) instanceof Date;
77
- }),
98
+ isMonthSelectOpen = _useState8[0],
99
+ setIsMonthSelectOpen = _useState8[1];
100
+ var _useState9 = (0, _react.useState)(null),
78
101
  _useState10 = _slicedToArray(_useState9, 2),
79
- isPreselected = _useState10[0],
80
- setIsPreselected = _useState10[1];
81
- var _useState11 = (0, _react.useState)(selectionMode === "quarterly" || selectionMode === "monthly"),
102
+ monthTransitionDirection = _useState10[0],
103
+ setMonthTransitionDirection = _useState10[1];
104
+ var _useState11 = (0, _react.useState)(function () {
105
+ if (defaultSelected && defaultSelected.from) {
106
+ return toMoment(defaultSelected.from);
107
+ }
108
+ if (month) {
109
+ return toMoment(month);
110
+ }
111
+ return _momentTimezone.default.utc();
112
+ }),
82
113
  _useState12 = _slicedToArray(_useState11, 2),
83
- showMonthPicker = _useState12[0],
84
- setShowMonthPicker = _useState12[1];
85
- var _useState13 = (0, _react.useState)(defaultModifiers),
114
+ currentDate = _useState12[0],
115
+ setCurrentDate = _useState12[1];
116
+ var _useState13 = (0, _react.useState)(function () {
117
+ if (defaultSelected && defaultSelected.from) {
118
+ return toMoment(defaultSelected.from);
119
+ } else if (month) {
120
+ return toMoment(month);
121
+ }
122
+ return _momentTimezone.default.utc();
123
+ }),
86
124
  _useState14 = _slicedToArray(_useState13, 2),
87
- modifiers = _useState14[0],
88
- setModifiers = _useState14[1];
89
- var week = firstDayOfWeek === 0 ? "week" : "isoWeek";
90
- (0, _react.useEffect)(function () {
91
- if (enteredFrom instanceof Date && enteredTo instanceof Date) {
92
- setModifiers(function (prev) {
93
- return _objectSpread(_objectSpread({}, prev), {}, {
94
- hovered: {
95
- from: enteredFrom,
96
- to: enteredTo
97
- }
125
+ targetDate = _useState14[0],
126
+ setTargetDate = _useState14[1];
127
+ var _useState15 = (0, _react.useState)(function () {
128
+ if (!defaultSelected) {
129
+ return null;
130
+ }
131
+ if (!defaultSelected.from) {
132
+ return null;
133
+ }
134
+ return {
135
+ from: toMoment(defaultSelected.from),
136
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
137
+ };
138
+ }),
139
+ _useState16 = _slicedToArray(_useState15, 2),
140
+ selected = _useState16[0],
141
+ setSelected = _useState16[1];
142
+ var _useState17 = (0, _react.useState)(null),
143
+ _useState18 = _slicedToArray(_useState17, 2),
144
+ hoveredDate = _useState18[0],
145
+ setHoveredDate = _useState18[1];
146
+ var timezone = _momentTimezone.default.defaultZone ? _momentTimezone.default.defaultZone.name : _momentTimezone.default.tz.guess();
147
+ var currentDateInTimezone = (0, _momentTimezone.default)().tz(timezone).format("YYYY-MM-DD");
148
+ var today = _momentTimezone.default.utc(currentDateInTimezone);
149
+ var selectedYearRef = (0, _react.useRef)(null);
150
+ var datePickerRef = (0, _react.useRef)(null);
151
+ var handleSelection = (0, _react.useCallback)(function (range) {
152
+ if (!range) {
153
+ setSelected(null);
154
+ if (onChange) onChange(undefined);
155
+ if (instant && onSave) {
156
+ onSave(undefined);
157
+ }
158
+ } else {
159
+ setSelected(range);
160
+ if (onChange) onChange({
161
+ from: range.from.utc().unix(),
162
+ to: range !== null && range !== void 0 && range.to ? (0, _momentTimezone.default)(range.to).utc().unix() : null
163
+ });
164
+ if (instant && onSave) {
165
+ onSave({
166
+ from: range.from.utc().unix(),
167
+ to: range !== null && range !== void 0 && range.to ? (0, _momentTimezone.default)(range.to).utc().unix() : null
98
168
  });
169
+ }
170
+ }
171
+ }, [onChange, onSave, instant]);
172
+ var toggleCalendar = (0, _react.useCallback)(function () {
173
+ if (target) {
174
+ setIsOpen(!isOpen);
175
+ if (onCalendarToggle) onCalendarToggle(!isOpen);
176
+ }
177
+ }, [isOpen, onCalendarToggle, target]);
178
+ var toggleYearSelect = (0, _react.useCallback)(function () {
179
+ setIsYearSelectOpen(!isYearSelectOpen);
180
+ setIsMonthSelectOpen(true);
181
+ }, [isYearSelectOpen]);
182
+ var toggleMonthSelect = (0, _react.useCallback)(function () {
183
+ if (mode !== "monthly" && mode !== "quarterly") {
184
+ setIsMonthSelectOpen(!isMonthSelectOpen);
185
+ }
186
+ }, [isMonthSelectOpen, mode]);
187
+ (0, _react.useEffect)(function () {
188
+ if (defaultSelected && defaultSelected.from) {
189
+ setSelected({
190
+ from: toMoment(defaultSelected.from),
191
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
99
192
  });
193
+ setCurrentDate(toMoment(defaultSelected.from) || _momentTimezone.default.utc());
194
+ setTargetDate(toMoment(defaultSelected.from) || _momentTimezone.default.utc());
100
195
  } else {
101
- setModifiers(defaultModifiers);
196
+ setSelected(null);
102
197
  }
103
- }, [enteredTo, enteredFrom, defaultModifiers]);
104
- var handleDayClick = (0, _react.useCallback)(function (day, modifiers) {
105
- if (onDayClick) {
106
- onDayClick(day, modifiers);
107
- }
108
- if (!onChange) {
109
- return;
198
+ }, [defaultSelected, month]);
199
+ var handleDateSelect = function handleDateSelect(date) {
200
+ var isSameMonth = date.isSame(currentDate, "month");
201
+ if (isSameMonth || disableAnimations) {
202
+ setCurrentDate(date);
203
+ setTargetDate(date);
204
+ } else {
205
+ var direction = date.isBefore(currentDate, "month") ? "prev" : "next";
206
+ setTargetDate(date);
207
+ setMonthTransitionDirection(direction);
110
208
  }
111
- if (month.getMonth() !== day.getMonth()) {
112
- onMonthChange(day);
209
+ switch (mode) {
210
+ case "daily":
211
+ handleDailySelection(date);
212
+ break;
213
+ case "weekly":
214
+ handleWeeklySelection(date);
215
+ break;
216
+ case "custom":
217
+ handleCustomSelection(date);
218
+ break;
219
+ default:
220
+ console.warn("Unhandled mode: ".concat(mode));
113
221
  }
114
- if (modifiers["day_disabled"] || selectionMode === "none") {
115
- return;
222
+ if (instant && mode !== "custom" && forceClose) toggleCalendar();
223
+ };
224
+ var handleDailySelection = function handleDailySelection(date) {
225
+ if (!date.isSame(selected === null || selected === void 0 ? void 0 : selected.from)) {
226
+ handleSelection({
227
+ from: date,
228
+ to: date
229
+ });
230
+ } else if (!required) {
231
+ handleSelection(undefined);
116
232
  }
117
- // reset the selectedDays if the user clicks on the same day
118
- if (!dateRequired && (selectedDays !== null && selectedDays !== void 0 && selectedDays.from && (0, _moment.default)(day).isSame((0, _moment.default)(selectedDays.from), "day") || selectedDays !== null && selectedDays !== void 0 && selectedDays.to && (0, _moment.default)(day).isSame((0, _moment.default)(selectedDays.to), "day"))) {
119
- setEnteredTo(undefined);
120
- setEnteredFrom(undefined);
121
- return onChange(undefined);
233
+ };
234
+ var handleWeeklySelection = function handleWeeklySelection(date) {
235
+ var _selected$from;
236
+ var currentDayOfWeek = date.day();
237
+ var daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
238
+ var startOfWeek = date.clone().subtract(daysToSubtract, "days").startOf("day");
239
+ var endOfWeek = startOfWeek.clone().add(6, "days");
240
+ if (!startOfWeek.isSame(selected === null || selected === void 0 || (_selected$from = selected.from) === null || _selected$from === void 0 ? void 0 : _selected$from.startOf("day"))) {
241
+ handleSelection({
242
+ from: startOfWeek,
243
+ to: endOfWeek
244
+ });
245
+ } else if (!required) {
246
+ handleSelection(undefined);
122
247
  }
123
- if (selectionMode === "daily") {
124
- return onChange({
125
- from: day,
126
- to: day
248
+ };
249
+ var handleCustomSelection = function handleCustomSelection(date) {
250
+ if (!selected || (selected === null || selected === void 0 ? void 0 : selected.from) === _momentTimezone.default.utc(Number(defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from) * 1000)) {
251
+ setSelected({
252
+ from: date.utc(),
253
+ to: null
254
+ });
255
+ handleSelection({
256
+ from: date,
257
+ to: null
127
258
  });
259
+ return;
128
260
  }
129
- if (selectionMode === "weekly") {
130
- if (!dateRequired && selectedDays !== null && selectedDays !== void 0 && selectedDays.from && (0, _moment.default)(day).isSame((0, _moment.default)(selectedDays.from), week)) {
131
- return onChange(undefined);
132
- }
133
- return onChange({
134
- from: (0, _moment.default)(day).startOf(week).toDate(),
135
- to: (0, _moment.default)(day).endOf(week).toDate()
261
+ if (_momentTimezone.default.isMoment(selected === null || selected === void 0 ? void 0 : selected.from) && !(selected !== null && selected !== void 0 && selected.to) && !(selected !== null && selected !== void 0 && selected.from.isSame(date.utc(), "day"))) {
262
+ var newSelection = selected !== null && selected !== void 0 && selected.from.isBefore(date) ? {
263
+ from: selected.from,
264
+ to: date.utc()
265
+ } : {
266
+ from: date.utc(),
267
+ to: selected.from
268
+ };
269
+ setSelected(newSelection);
270
+ handleSelection({
271
+ from: newSelection.from,
272
+ to: newSelection.to
273
+ });
274
+ } else if (_momentTimezone.default.isMoment(selected === null || selected === void 0 ? void 0 : selected.from) && _momentTimezone.default.isMoment(selected === null || selected === void 0 ? void 0 : selected.to)) {
275
+ setSelected({
276
+ from: date,
277
+ to: null
278
+ });
279
+ handleSelection({
280
+ from: date,
281
+ to: null
282
+ });
283
+ } else if (_momentTimezone.default.isMoment(selected === null || selected === void 0 ? void 0 : selected.from) && selected !== null && selected !== void 0 && selected.from.isSame(date.utc(), "day") && !required) {
284
+ setSelected(null);
285
+ handleSelection(undefined);
286
+ } else if (selected.from === null && selected.to === null) {
287
+ setSelected({
288
+ from: date.utc(),
289
+ to: null
290
+ });
291
+ handleSelection({
292
+ from: date,
293
+ to: date
136
294
  });
137
295
  }
138
- if (selectionMode === "custom") {
139
- if (isPreselected) {
140
- setIsPreselected(false);
141
- return onChange({
142
- from: day,
143
- to: day
296
+ };
297
+ var handleSave = function handleSave() {
298
+ if (onSave) {
299
+ toggleCalendar();
300
+ if (mode === "custom" && !(selected !== null && selected !== void 0 && selected.to)) {
301
+ setSelected({
302
+ from: _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from),
303
+ to: _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from)
144
304
  });
145
305
  }
146
- if (!selectedDays || selectedDays !== null && selectedDays !== void 0 && selectedDays.from && selectedDays !== null && selectedDays !== void 0 && selectedDays.to && !(0, _moment.default)(selectedDays.from).isSame((0, _moment.default)(selectedDays.to))) {
147
- if (!dateRequired && selectedDays !== null && selectedDays !== void 0 && selectedDays.from && selectedDays !== null && selectedDays !== void 0 && selectedDays.to && (0, _moment.default)(day).isBetween((0, _moment.default)(selectedDays.from), (0, _moment.default)(selectedDays.to))) {
148
- setEnteredTo(day);
149
- setEnteredFrom(day);
150
- return onChange(undefined);
151
- }
152
- setEnteredFrom(day);
153
- return onChange({
154
- from: day,
155
- to: day
306
+ if (selected) {
307
+ onSave({
308
+ from: _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from).unix(),
309
+ to: selected !== null && selected !== void 0 && selected.to ? _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.to).unix() : _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from).unix()
156
310
  });
311
+ } else {
312
+ if (!required) {
313
+ onSave(undefined);
314
+ setCurrentDate(_momentTimezone.default.utc());
315
+ setTargetDate(_momentTimezone.default.utc());
316
+ }
157
317
  }
158
- if (selectedDays !== null && selectedDays !== void 0 && selectedDays.from && (0, _dateFns.isAfter)(day, selectedDays.from)) {
159
- setEnteredTo(undefined);
160
- setEnteredFrom(undefined);
161
- return onChange({
162
- from: selectedDays.from,
163
- to: day
318
+ }
319
+ };
320
+ var handleMonthChange = (0, _react.useCallback)(function (direction) {
321
+ setMonthTransitionDirection(direction);
322
+ if (isMonthSelectOpen) {
323
+ setTargetDate(function (prevDate) {
324
+ if (prevDate) {
325
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
326
+ }
327
+ return prevDate;
328
+ });
329
+ if (disableAnimations) {
330
+ setCurrentDate(function (prevDate) {
331
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
164
332
  });
165
333
  }
166
- if (selectedDays !== null && selectedDays !== void 0 && selectedDays.to) {
167
- setEnteredTo(undefined);
168
- setEnteredFrom(undefined);
169
- return onChange({
170
- from: day,
171
- to: selectedDays.to
334
+ } else {
335
+ setTargetDate(function (prevDate) {
336
+ if (prevDate) {
337
+ return direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month");
338
+ }
339
+ return prevDate;
340
+ });
341
+ if (disableAnimations) {
342
+ setCurrentDate(function (prevDate) {
343
+ return direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month");
172
344
  });
173
345
  }
174
- return onChange({
175
- from: day,
176
- to: day
346
+ }
347
+ }, [disableAnimations, isMonthSelectOpen]);
348
+ var handleYearChange = (0, _react.useCallback)(function (direction) {
349
+ if (isMonthSelectOpen && !disableAnimations) {
350
+ setMonthTransitionDirection(direction);
351
+ } else {
352
+ setCurrentDate(function (prevDate) {
353
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
177
354
  });
178
355
  }
179
- }, [onDayClick, onChange, month, selectionMode, dateRequired, selectedDays, onMonthChange, week, isPreselected]);
180
- var isSelectedFirstDay = (0, _react.useCallback)(function () {
181
- if (selectionMode !== "custom") {
182
- return false;
356
+ setTargetDate(function (prevDate) {
357
+ if (prevDate) {
358
+ return direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year");
359
+ }
360
+ return prevDate;
361
+ });
362
+ }, [disableAnimations, isMonthSelectOpen]);
363
+ var onAnimationEnd = function onAnimationEnd() {
364
+ if (targetDate) {
365
+ setCurrentDate(targetDate);
366
+ setMonthTransitionDirection(null);
183
367
  }
184
- if (selectedDays !== null && selectedDays !== void 0 && selectedDays.from && selectedDays !== null && selectedDays !== void 0 && selectedDays.to) {
185
- return (0, _moment.default)(selectedDays.from).isSame(selectedDays.to);
368
+ };
369
+ var handleYearSelect = function handleYearSelect(year) {
370
+ setCurrentDate(currentDate.clone().year(year));
371
+ setTargetDate(currentDate.clone().year(year));
372
+ setIsYearSelectOpen(false);
373
+ setIsMonthSelectOpen(true);
374
+ };
375
+ var handleMonthSelect = function handleMonthSelect(month) {
376
+ var newDate = currentDate.clone().utc().month(month);
377
+ setCurrentDate(newDate);
378
+ setTargetDate(newDate);
379
+ if (mode === "monthly") {
380
+ var _selected$to;
381
+ var _range = {
382
+ from: newDate.clone().startOf("month"),
383
+ to: newDate.clone().endOf("month").startOf("day")
384
+ };
385
+ var isSameMonth = (selected === null || selected === void 0 ? void 0 : selected.from.isSame(_range.from, "month")) && (selected === null || selected === void 0 || (_selected$to = selected.to) === null || _selected$to === void 0 ? void 0 : _selected$to.isSame(_range.to, "month"));
386
+ if (isSameMonth) {
387
+ if (!required) {
388
+ handleSelection(undefined);
389
+ if (instant && onSave) {
390
+ setCurrentDate(_momentTimezone.default.utc());
391
+ setTargetDate(_momentTimezone.default.utc());
392
+ }
393
+ }
394
+ } else {
395
+ handleSelection(_range);
396
+ }
186
397
  }
187
- }, [selectionMode, selectedDays]);
188
- var handleDayMouseEnter = (0, _react.useCallback)(function (day) {
189
- if (isPreselected && selectionMode !== "weekly") {
190
- setEnteredTo(day);
191
- setEnteredFrom(day);
192
- return;
398
+ if (mode === "quarterly") {
399
+ var _selected$to2;
400
+ var quarterRange = {
401
+ from: newDate.clone().startOf("quarter"),
402
+ to: newDate.clone().endOf("quarter").startOf("day")
403
+ };
404
+ var isSameQuarter = (selected === null || selected === void 0 ? void 0 : selected.from.isSame(quarterRange.from, "quarter")) && (selected === null || selected === void 0 || (_selected$to2 = selected.to) === null || _selected$to2 === void 0 ? void 0 : _selected$to2.isSame(quarterRange.to, "quarter"));
405
+ if (isSameQuarter) {
406
+ if (!required) {
407
+ handleSelection(undefined);
408
+ if (instant && onSave) {
409
+ setCurrentDate(_momentTimezone.default.utc());
410
+ setTargetDate(_momentTimezone.default.utc());
411
+ }
412
+ }
413
+ } else {
414
+ handleSelection(quarterRange);
415
+ }
193
416
  }
194
- if (selectionMode === "daily") {
195
- setEnteredTo(day);
196
- setEnteredFrom(day);
417
+ if (mode !== "monthly" && mode !== "quarterly") {
418
+ setIsMonthSelectOpen(false);
197
419
  }
198
- if (selectionMode === "weekly") {
199
- setEnteredFrom((0, _moment.default)(day).startOf(week).toDate());
200
- setEnteredTo((0, _moment.default)(day).endOf(week).toDate());
420
+ if (instant && (mode === "monthly" || mode === "quarterly") && forceClose) toggleCalendar();
421
+ };
422
+ (0, _react.useEffect)(function () {
423
+ if (isYearSelectOpen && selectedYearRef.current) {
424
+ var _selectedYearRef$curr;
425
+ selectedYearRef === null || selectedYearRef === void 0 || (_selectedYearRef$curr = selectedYearRef.current) === null || _selectedYearRef$curr === void 0 || _selectedYearRef$curr.scrollIntoView({
426
+ behavior: "smooth",
427
+ block: "center"
428
+ });
201
429
  }
202
- if (selectionMode !== "weekly" && (!selectedDays || selectedDays !== null && selectedDays !== void 0 && selectedDays.from && selectedDays !== null && selectedDays !== void 0 && selectedDays.to && !(0, _moment.default)(selectedDays.from).isSame((0, _moment.default)(selectedDays.to)))) {
203
- setEnteredTo(day);
204
- setEnteredFrom(day);
430
+ }, [isYearSelectOpen]);
431
+ var renderDaysOfWeek = function renderDaysOfWeek() {
432
+ var daysOfWeek = _momentTimezone.default.weekdaysShort();
433
+ var orderedDays = [...daysOfWeek.slice(firstDayOfWeek), ...daysOfWeek.slice(0, firstDayOfWeek)];
434
+ return orderedDays.map(function (day) {
435
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledDayName, {
436
+ key: day
437
+ }, day[0]);
438
+ });
439
+ };
440
+ var animationClass = (0, _react.useMemo)(function () {
441
+ return monthTransitionDirection && !disableAnimations ? monthTransitionDirection === "next" ? "slide-down" : "slide-up" : "";
442
+ }, [disableAnimations, monthTransitionDirection]);
443
+ var handleDayClick = function handleDayClick(day, modifiers) {
444
+ if (modifiers.some(function (mod) {
445
+ return mod === "day_disabled";
446
+ })) {
447
+ return;
205
448
  }
206
- if (isSelectedFirstDay() && selectedDays !== null && selectedDays !== void 0 && selectedDays.from) {
207
- setEnteredFrom(selectedDays.from);
208
- setEnteredTo(day);
449
+ if (onDayClick) onDayClick(day, modifiers);
450
+ handleDateSelect(day);
451
+ };
452
+ var getHoverRange = function getHoverRange() {
453
+ if (!hoveredDate) return null;
454
+ if (mode === "quarterly") {
455
+ var startMonth = hoveredDate.clone().startOf("quarter");
456
+ var endMonth = hoveredDate.clone().endOf("quarter");
457
+ return {
458
+ from: startMonth,
459
+ to: endMonth
460
+ };
209
461
  }
210
- }, [selectionMode, isSelectedFirstDay, selectedDays, week, isPreselected]);
211
- var onDayMouseLeave = (0, _react.useCallback)(function () {
212
- if (selectionMode === "weekly" || selectionMode === "daily" || selectionMode === "custom") {
213
- setEnteredFrom(undefined);
214
- setEnteredTo(undefined);
462
+ if (mode === "weekly") {
463
+ var currentDayOfWeek = hoveredDate.day();
464
+ var daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
465
+ var startOfWeek = hoveredDate.clone().subtract(daysToSubtract, "days").startOf("day");
466
+ var endOfWeek = startOfWeek.clone().add(6, "days");
467
+ return {
468
+ from: startOfWeek,
469
+ to: endOfWeek
470
+ };
215
471
  }
216
- }, [setEnteredFrom, setEnteredTo, selectionMode]);
217
- var onWheel = (0, _react.useCallback)(function (e) {
218
- if (stopScroll && (new Date().getTime() - stopScroll.getTime()) / 1000 < 0.9) {
219
- return;
472
+ if (mode === "custom" && selected !== null && selected !== void 0 && selected.from && !(selected !== null && selected !== void 0 && selected.to)) {
473
+ var from = selected.from.isBefore(hoveredDate) ? selected.from : hoveredDate;
474
+ var to = selected.from.isAfter(hoveredDate) ? selected.from : hoveredDate;
475
+ return {
476
+ from,
477
+ to
478
+ };
220
479
  }
221
- var nextMonth = showMonthPicker ? (0, _dateFns.addMonths)(month, 12) : (0, _dateFns.addMonths)(month, 1);
222
- var previousMonth = showMonthPicker ? (0, _dateFns.addMonths)(month, -12) : (0, _dateFns.addMonths)(month, -1);
223
- if (e.deltaY > 0.9) {
224
- setDirection(true);
225
- onMonthChange(nextMonth);
226
- setStopScroll(new Date());
227
- }
228
- if (e.deltaY < -0.9) {
229
- setDirection(false);
230
- onMonthChange(previousMonth);
231
- setStopScroll(new Date());
232
- }
233
- }, [stopScroll, showMonthPicker, month, onMonthChange]);
234
- var togglePicker = (0, _react.useCallback)(function () {
235
- if (selectionMode !== "monthly" && selectionMode !== "quarterly") {
236
- return setShowMonthPicker(!showMonthPicker);
237
- }
238
- setShowMonthPicker(true);
239
- }, [showMonthPicker, selectionMode]);
240
- var handleYearMonthChange = (0, _react.useCallback)(function (m) {
241
- if (onChange) {
242
- if (selectionMode === "monthly") {
243
- if (!dateRequired && selectedDays !== null && selectedDays !== void 0 && selectedDays.from && (0, _moment.default)(m).isSame((0, _moment.default)(selectedDays.from), "month")) {
244
- return onChange(undefined);
480
+ return null;
481
+ };
482
+ var renderCalendarDates = function renderCalendarDates() {
483
+ var startOfMonth = currentDate.clone().startOf("month");
484
+ var startDate = startOfMonth.clone().isoWeekday(firstDayOfWeek);
485
+ var endDate = startDate.clone().add(6, "weeks");
486
+ var date = startDate.clone();
487
+ var dates = [];
488
+ var hoverRange = getHoverRange();
489
+ var _loop = function _loop() {
490
+ var clonedDate = date.clone();
491
+ var isToday = clonedDate.isSame(today, "day");
492
+ var isSelected = selected && (clonedDate.isBetween(selected.from, selected.to, "day", "[]") || clonedDate.isSame(selected.from, "day") || clonedDate.isSame(selected.to, "day"));
493
+ var isHovered = hoverRange && (mode === "weekly" || mode === "custom") && clonedDate.isBetween(hoverRange.from, hoverRange.to, "day", "[]");
494
+ var isDisabled = disabledDaysBefore && clonedDate.isBefore(disabledDaysBefore, "day") || disabledDaysAfter && clonedDate.isAfter(disabledDaysAfter, "day") || disabledDays.includes(clonedDate.day());
495
+ var modifierClasses = [];
496
+ var modifierTitles = [];
497
+ var titles;
498
+ if (modifiers) Object.keys(modifiers || {}).forEach(function (modifier) {
499
+ var _modifiers$modifier = modifiers[modifier](clonedDate),
500
+ matched = _modifiers$modifier.matched,
501
+ title = _modifiers$modifier.title;
502
+ if (matched) {
503
+ modifierClasses.push(modifier);
504
+ if (title) modifierTitles.push(title);
245
505
  }
246
- onChange({
247
- from: (0, _moment.default)(m).startOf("month").toDate(),
248
- to: (0, _moment.default)(m).endOf("month").toDate()
249
- });
506
+ });
507
+ if (modifierTitles.length) {
508
+ titles = /*#__PURE__*/_react.default.createElement("div", {
509
+ key: "title-wrapper-".concat(clonedDate.toString())
510
+ }, modifierTitles.map(function (title, index) {
511
+ return /*#__PURE__*/_react.default.createElement("div", {
512
+ key: "title-text-".concat(index)
513
+ }, title);
514
+ }));
250
515
  }
251
- if (selectionMode === "quarterly") {
252
- if (!dateRequired && selectedDays !== null && selectedDays !== void 0 && selectedDays.from && (0, _moment.default)(m).isSame((0, _moment.default)(selectedDays.from).startOf("quarter"), "quarter")) {
253
- return onChange(undefined);
516
+ var isOutside = !clonedDate.isSame(currentDate, "month");
517
+ dates.push( /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
518
+ title: titles,
519
+ disable: !modifierTitles.length,
520
+ key: clonedDate.toString(),
521
+ popperTooltipClassName: popperTooltipClassName,
522
+ popperTooltipStyle: popperTooltipStyle
523
+ }, /*#__PURE__*/_react.default.createElement(_Styles.StyledCalendarDate, {
524
+ className: "".concat(isSelected ? "selected" : "", " ").concat(isToday ? "today-day" : "", "\n ").concat(isDisabled ? "disabled" : "", " ").concat(isHovered ? "hovered" : "", " ").concat(modifierClasses.join(" "), "\n ").concat(isOutside ? "outside" : ""),
525
+ onClick: function onClick() {
526
+ return handleDayClick(clonedDate, modifierClasses);
527
+ },
528
+ onMouseEnter: mode === "weekly" || mode === "custom" ? function () {
529
+ return setHoveredDate(clonedDate);
530
+ } : undefined,
531
+ onMouseLeave: mode === "weekly" || mode === "custom" ? function () {
532
+ return setHoveredDate(null);
533
+ } : undefined
534
+ }, clonedDate.date())));
535
+ date.add(1, "day");
536
+ };
537
+ while (date.isBefore(endDate)) {
538
+ _loop();
539
+ }
540
+ return dates;
541
+ };
542
+ var renderYearSelect = function renderYearSelect() {
543
+ var years = Array.from({
544
+ length: 200
545
+ }, function (_, i) {
546
+ return 1900 + i;
547
+ });
548
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledYearSelect, null, years.map(function (year) {
549
+ var isSelected = selected && ((selected === null || selected === void 0 ? void 0 : selected.to) && year >= selected.from.year() && year <= selected.to.year() || year === selected.from.year() || (selected === null || selected === void 0 ? void 0 : selected.to) && year === selected.to.year());
550
+ var isDisabledYear = disabledDaysBefore && year < disabledDaysBefore.year() || disabledDaysAfter && year > disabledDaysAfter.year();
551
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledYearOption, {
552
+ key: year,
553
+ ref: year === currentDate.year() ? selectedYearRef : null,
554
+ className: "".concat(isSelected ? "selected" : "", " ").concat(year === today.year() ? "today-year" : "", " ").concat(isDisabledYear ? "disabled" : ""),
555
+ onClick: function onClick() {
556
+ return handleYearSelect(year);
254
557
  }
255
- onChange({
256
- from: (0, _moment.default)(m).startOf("quarter").toDate(),
257
- to: (0, _moment.default)(m).endOf("quarter").toDate()
258
- });
259
- }
558
+ }, year);
559
+ }));
560
+ };
561
+ var renderMonthSelect = function renderMonthSelect() {
562
+ var months = _momentTimezone.default.months();
563
+ var hoverRange = getHoverRange();
564
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledMonthSelect, null, months.map(function (month, index) {
565
+ var monthDate = currentDate.clone().month(index);
566
+ var isSelected = selected && (monthDate.isBetween(selected.from, selected.to, "month", "[]") || monthDate.isSame(selected.from, "month") || monthDate.isSame(selected.to, "month"));
567
+ var isDisabledMonth = disabledDaysBefore && monthDate.isBefore(disabledDaysBefore, "month") || disabledDaysAfter && monthDate.isAfter(disabledDaysAfter, "month");
568
+ var isHoveredQuarter = hoverRange && mode === "quarterly" && monthDate.isBetween(hoverRange.from, hoverRange.to, "month", "[]");
569
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledMonthOption, {
570
+ key: month,
571
+ className: "".concat(isSelected ? "selected" : "", " ").concat(index === today.month() && currentDate.year() === today.year() ? "today-month" : "", " ").concat(isDisabledMonth ? "disabled" : "", " ").concat(isHoveredQuarter ? "hovered" : ""),
572
+ onClick: function onClick() {
573
+ return handleMonthSelect(index);
574
+ },
575
+ onMouseEnter: mode === "quarterly" ? function () {
576
+ return setHoveredDate(monthDate);
577
+ } : undefined,
578
+ onMouseLeave: mode === "quarterly" ? function () {
579
+ return setHoveredDate(null);
580
+ } : undefined
581
+ }, month.substring(0, 3));
582
+ }));
583
+ };
584
+ var captionText = (0, _react.useMemo)(function () {
585
+ var isCurrentYear = currentDate.isSame(today, "year");
586
+ return !isMonthSelectOpen && !isYearSelectOpen ? "".concat(currentDate.format("MMMM")).concat(isCurrentYear ? "" : " ".concat(currentDate.format("YYYY"))) : currentDate.format("YYYY");
587
+ }, [currentDate, isMonthSelectOpen, isYearSelectOpen, today]);
588
+ var handleClear = (0, _react.useCallback)(function () {
589
+ if (typeof onClear === "function") onClear();
590
+ handleSelection(undefined);
591
+ }, [handleSelection, onClear]);
592
+ var handleClose = (0, _react.useCallback)(function () {
593
+ var _selected$to3;
594
+ if (mode === "custom" && instant && selected) {
595
+ setSelected({
596
+ from: _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from),
597
+ to: selected !== null && selected !== void 0 && selected.to ? _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.to) : _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from)
598
+ });
260
599
  }
261
- onMonthChange(m);
262
- }, [onMonthChange, onChange, selectedDays, selectionMode, dateRequired]);
263
- var text = (0, _react.useMemo)(function () {
264
- if (showMonthPicker) {
265
- return "".concat(month.getFullYear());
266
- }
267
- return "".concat((0, _moment.default)(month).format("MMMM"), " ").concat((0, _moment.default)(month).isSame((0, _moment.default)(), "year") ? "" : month.getFullYear());
268
- }, [showMonthPicker, month]);
269
- var customNavBarElement = (0, _react.useCallback)(function (props) {
270
- return /*#__PURE__*/_react.default.createElement("div", {
271
- className: "c-DayPicker-wrapper"
272
- }, /*#__PURE__*/_react.default.createElement(_CustomNavBarElement.CustomNavBarElement, _extends({}, props, {
273
- showMonthPicker: showMonthPicker,
274
- month: month,
275
- onChangeDirection: setDirection,
276
- onMonthChange: onMonthChange,
277
- onClick: togglePicker
278
- })), /*#__PURE__*/_react.default.createElement(_YearMonthPicker.YearMonthPicker, _extends({}, props, {
279
- text: text,
280
- onClick: togglePicker,
281
- month: month,
282
- selectedDays: selectedDays,
283
- onChange: handleYearMonthChange,
284
- isShown: showMonthPicker,
285
- selectionMode: selectionMode
286
- })));
287
- }, [showMonthPicker, month, onMonthChange, togglePicker, text, selectedDays, handleYearMonthChange, selectionMode]);
288
- var onKeyDownCallback = (0, _react.useCallback)(function (e) {
289
- // Right Arrow
290
- if (e.key === "ArrowRight") {
291
- setDirection(true);
292
- if (showMonthPicker) {
293
- onMonthChange(new Date(month.getFullYear() + 1, month.getMonth()));
294
- } else {
295
- onMonthChange(new Date(month.getFullYear(), month.getMonth() + 1));
296
- }
600
+ if (instant && onSave && mode === "custom" && selected && (!(selected !== null && selected !== void 0 && selected.from.isSame(_momentTimezone.default.utc(Number(defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from) * 1000))) || !(selected !== null && selected !== void 0 && (_selected$to3 = selected.to) !== null && _selected$to3 !== void 0 && _selected$to3.isSame(_momentTimezone.default.utc(Number(defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.to) * 1000))))) {
601
+ onSave({
602
+ from: _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from).unix(),
603
+ to: selected !== null && selected !== void 0 && selected.to ? _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.to).unix() : _momentTimezone.default.utc(selected === null || selected === void 0 ? void 0 : selected.from).unix()
604
+ });
297
605
  }
298
- // Left Arrow
299
- if (e.key === "ArrowLeft") {
300
- setDirection(false);
301
- if (showMonthPicker) {
302
- onMonthChange(new Date(month.getFullYear() - 1, month.getMonth()));
303
- } else {
304
- onMonthChange(new Date(month.getFullYear(), month.getMonth() - 1));
305
- }
606
+ if (mode === "custom" && instant && !selected && onSave) {
607
+ onSave(undefined);
306
608
  }
307
- // Up Arrow
308
- if (e.key === "ArrowUp") {
309
- setDirection(true);
310
- onMonthChange(new Date(month.getFullYear() + 1, month.getMonth()));
609
+ setCurrentDate(defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : _momentTimezone.default.utc());
610
+ setTargetDate(defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.from ? toMoment(defaultSelected.from) : month ? toMoment(month) : _momentTimezone.default.utc());
611
+ setSelected(defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.from ? {
612
+ from: toMoment(defaultSelected.from),
613
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
614
+ } : null);
615
+ toggleCalendar();
616
+ setIsYearSelectOpen(false);
617
+ setIsMonthSelectOpen(mode === "monthly" || mode === "quarterly");
618
+ setMonthTransitionDirection(null);
619
+ if (typeof onClose === "function") onClose();
620
+ }, [defaultSelected, instant, mode, month, onClose, onSave, selected, toggleCalendar]);
621
+ var handleBeforeClose = (0, _react.useCallback)(function () {
622
+ var shouldClose = true;
623
+ if (!target || !enableConfirmModal || instant || required) {
624
+ shouldClose = true;
311
625
  }
312
- // Down Arrow
313
- if (e.key === "ArrowDown") {
314
- setDirection(false);
315
- onMonthChange(new Date(month.getFullYear() - 1, month.getMonth()));
626
+ if (target && enableConfirmModal && !instant && !required && (selected && !defaultSelected || !selected && defaultSelected || selected !== null && selected !== void 0 && selected.from && defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.from && !selected.from.isSame(toMoment(defaultSelected.from)) || selected !== null && selected !== void 0 && selected.to && defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.to && !selected.to.isSame(toMoment(defaultSelected.to)))) {
627
+ shouldClose = false;
628
+ setShowDiscardModal(true);
316
629
  }
317
- }, [showMonthPicker, onMonthChange, month]);
630
+ if (shouldClose) handleClose();
631
+ return shouldClose;
632
+ }, [defaultSelected, enableConfirmModal, handleClose, instant, required, selected, target]);
633
+ var Wrapper = target ? _Menu.Menu : "div";
634
+ var handleCaptionClick = (0, _react.useCallback)(function () {
635
+ isMonthSelectOpen && !disableYearPicker ? toggleYearSelect() : toggleMonthSelect();
636
+ }, [disableYearPicker, isMonthSelectOpen, toggleMonthSelect, toggleYearSelect]);
637
+ var handleCloseDiscardModal = (0, _react.useCallback)(function () {
638
+ setShowDiscardModal(false);
639
+ }, []);
640
+ var handleSaveDiscardModal = (0, _react.useCallback)(function () {
641
+ setSelected(defaultSelected !== null && defaultSelected !== void 0 && defaultSelected.from ? {
642
+ from: toMoment(defaultSelected.from),
643
+ to: defaultSelected.to ? toMoment(defaultSelected.to) : null
644
+ } : null);
645
+ setShowDiscardModal(false);
646
+ handleClose();
647
+ }, [defaultSelected, handleClose]);
648
+ var wrapperProps = target ? {
649
+ className: "c-date-picker--calendar",
650
+ target,
651
+ onBeforeClose: handleBeforeClose,
652
+ onClose: handleClose,
653
+ open: isOpen,
654
+ active: isOpen,
655
+ onOpen: toggleCalendar,
656
+ position,
657
+ menuClassName,
658
+ popperClassName,
659
+ backgroundElementClass
660
+ } : {
661
+ className: "c-date-picker--calendar"
662
+ };
318
663
  (0, _react.useEffect)(function () {
319
- document.addEventListener("keydown", onKeyDownCallback);
664
+ var handleKeyDown = function handleKeyDown(event) {
665
+ if (event.key === "ArrowRight") {
666
+ handleMonthChange("next");
667
+ } else if (event.key === "ArrowLeft") {
668
+ handleMonthChange("prev");
669
+ } else if (event.key === "ArrowUp") {
670
+ handleYearChange("next");
671
+ } else if (event.key === "ArrowDown") {
672
+ handleYearChange("prev");
673
+ }
674
+ };
675
+ if (isOpen) {
676
+ window.addEventListener("keydown", handleKeyDown);
677
+ } else {
678
+ window.removeEventListener("keydown", handleKeyDown);
679
+ }
320
680
  return function () {
321
- document.removeEventListener("keydown", onKeyDownCallback);
681
+ window.removeEventListener("keydown", handleKeyDown);
322
682
  };
323
- }, [month, onMonthChange, showMonthPicker, onKeyDownCallback]);
324
- var selected = (0, _react.useMemo)(function () {
325
- var dates = [];
326
- if (!(selectedDays !== null && selectedDays !== void 0 && selectedDays.from)) return [];
327
-
328
- // If from and to dates are the same, return an array with one item
329
- if ((0, _moment.default)(selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.from).isSame(selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.to, "day")) {
330
- dates.push(selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.from);
331
- return dates;
683
+ }, [isOpen, handleMonthChange, handleYearChange]);
684
+ var saveIsDisabled = function saveIsDisabled() {
685
+ if (!target) return false;
686
+ if (!defaultSelected && !selected) {
687
+ return true;
332
688
  }
333
- var currentDate = (0, _moment.default)(selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.from);
334
- while (currentDate.isSameOrBefore(selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.to, "day")) {
335
- dates.push(currentDate.toDate());
336
- currentDate = currentDate.add(1, "days");
689
+ if (defaultSelected && selected && defaultSelected.from && selected.from.isSame(toMoment(defaultSelected.from)) && defaultSelected.to && selected.to && selected.to.isSame(toMoment(defaultSelected.to))) {
690
+ return true;
337
691
  }
338
- return dates;
339
- }, [selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.from, selectedDays === null || selectedDays === void 0 ? void 0 : selectedDays.to]);
340
- return /*#__PURE__*/_react.default.createElement(_Styles.StyledDatePicker, {
341
- className: "c-date-picker-wrapper",
342
- onWheel: onWheel
343
- }, /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.SwitchTransition, {
344
- mode: "out-in"
345
- }, /*#__PURE__*/_react.default.createElement(_Styles.StyledDatePickerCSSTransition, {
346
- key: showMonthPicker ? month.getFullYear() : month.getMonth(),
347
- timeout: 300,
348
- classNames: "c-date-picker__animation",
349
- $direction: direction
350
- }, /*#__PURE__*/_react.default.createElement(_Styles.StyledDayPicker, _extends({}, rest, {
351
- mode: "multiple",
352
- showOutsideDays: true,
353
- disabled: disabledDays,
354
- selected: selected,
355
- onDayClick: handleDayClick,
356
- modifiers: modifiers,
357
- onDayMouseEnter: handleDayMouseEnter,
358
- onDayMouseLeave: onDayMouseLeave,
359
- className: className,
360
- $isYearlyView: showMonthPicker,
361
- month: month,
362
- components: {
363
- Caption: customNavBarElement,
364
- DayContent: renderDay
692
+ return false;
693
+ };
694
+ return /*#__PURE__*/_react.default.createElement(_Styles.StyledDatePickerWrapper, {
695
+ ref: datePickerRef
696
+ }, /*#__PURE__*/_react.default.createElement(Wrapper, wrapperProps, /*#__PURE__*/_react.default.createElement(_Styles.StyledDatePickerContainerInner, null, /*#__PURE__*/_react.default.createElement(_Styles.StyledCalendarHeader, null, isYearSelectOpen ? null : /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
697
+ onClick: function onClick() {
698
+ return handleMonthChange("prev");
365
699
  },
366
- classNames: _ClassNames.customClassNames,
367
- modifiersClassNames: _ClassNames.modifiersClassNames,
368
- fixedWeeks: fixedWeeks,
369
- weekStartsOn: firstDayOfWeek,
370
- formatters: {
371
- formatWeekdayName: formatWeekdayName
372
- }
373
- })))));
700
+ variant: "text gray",
701
+ size: "small"
702
+ }, /*#__PURE__*/_react.default.createElement(_Icons.ArrowLeftIcon, null)), /*#__PURE__*/_react.default.createElement(_Styles.StyledCaption, {
703
+ className: "".concat(animationClass, " ").concat(isYearSelectOpen ? "year-caption" : ""),
704
+ key: isMonthSelectOpen ? currentDate.year() : currentDate.month(),
705
+ onClick: handleCaptionClick,
706
+ onAnimationEnd: onAnimationEnd
707
+ }, captionText), isYearSelectOpen ? null : /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
708
+ onClick: function onClick() {
709
+ return handleMonthChange("next");
710
+ },
711
+ variant: "text gray",
712
+ size: "small"
713
+ }, /*#__PURE__*/_react.default.createElement(_Icons.ArrowRightIcon, null))), /*#__PURE__*/_react.default.createElement(_Styles.StyledCalendarSelector, null, isYearSelectOpen ? renderYearSelect() : isMonthSelectOpen ? /*#__PURE__*/_react.default.createElement(_Styles.StyledMonthSelector, {
714
+ className: animationClass,
715
+ key: currentDate.year(),
716
+ onAnimationEnd: onAnimationEnd
717
+ }, renderMonthSelect()) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Styles.StyledDaysOfWeek, null, renderDaysOfWeek()), /*#__PURE__*/_react.default.createElement(_Styles.StyledCalendarDates, {
718
+ className: animationClass,
719
+ key: currentDate.month()
720
+ }, renderCalendarDates()))), (target || showControls) && (!instant ? /*#__PURE__*/_react.default.createElement(_Styles.StyledControls, null, /*#__PURE__*/_react.default.createElement(_Styles.StyledControlsLeft, null, /*#__PURE__*/_react.default.createElement(_Button.Button, {
721
+ size: "small",
722
+ variant: "primary",
723
+ onClick: handleSave,
724
+ disabled: saveIsDisabled()
725
+ }, saveLabel), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
726
+ title: cancelLabel,
727
+ popperTooltipStyle: {
728
+ zIndex: 1301
729
+ }
730
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
731
+ size: "small",
732
+ variant: "text gray",
733
+ onClick: handleBeforeClose
734
+ }, /*#__PURE__*/_react.default.createElement(_Icons.CancelCrossIcon, null)))), !required ? /*#__PURE__*/_react.default.createElement(_Button.Button, {
735
+ size: "small",
736
+ onClick: handleClear,
737
+ variant: "text gray"
738
+ }, clearLabel) : null) : !required ? /*#__PURE__*/_react.default.createElement(_Styles.StyledControls, null, /*#__PURE__*/_react.default.createElement(_Styles.StyledClearInstantButton, {
739
+ size: "small",
740
+ onClick: handleClear,
741
+ variant: "text gray"
742
+ }, clearLabel)) : null))), !instant && target && !required && enableConfirmModal ? /*#__PURE__*/_react.default.createElement(_Styles.StyledConfirmDialog, {
743
+ className: "modal-select-date",
744
+ open: showDiscardModal,
745
+ onCancel: handleCloseDiscardModal,
746
+ onConfirm: handleSaveDiscardModal,
747
+ dialogTitle: modalHeaderText,
748
+ dialogContent: modalDiscardMessage,
749
+ cancelBtnText: modalCancelBtnText,
750
+ confirmBtnText: modalDiscardBtnText
751
+ }) : null);
374
752
  };
375
- DatePicker.displayName = "DatePicker";
376
753
  //# sourceMappingURL=DatePicker.js.map