@activecollab/components 2.0.138 → 2.0.140

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 (72) hide show
  1. package/dist/cjs/components/DatePicker/DatePickerV2.js +661 -0
  2. package/dist/cjs/components/DatePicker/DatePickerV2.js.map +1 -0
  3. package/dist/cjs/components/DatePicker/StylesV2.js +100 -0
  4. package/dist/cjs/components/DatePicker/StylesV2.js.map +1 -0
  5. package/dist/cjs/components/DatePicker/index.js +11 -0
  6. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  7. package/dist/cjs/components/GlobalStyle.js +1 -1
  8. package/dist/cjs/components/GlobalStyle.js.map +1 -1
  9. package/dist/cjs/components/Icons/collection/SortSmall.js +47 -0
  10. package/dist/cjs/components/Icons/collection/SortSmall.js.map +1 -0
  11. package/dist/cjs/components/Icons/collection/index.js +7 -0
  12. package/dist/cjs/components/Icons/collection/index.js.map +1 -1
  13. package/dist/cjs/components/SelectDate/SelectDateV2.js +233 -0
  14. package/dist/cjs/components/SelectDate/SelectDateV2.js.map +1 -0
  15. package/dist/cjs/components/SelectDate/index.js +11 -0
  16. package/dist/cjs/components/SelectDate/index.js.map +1 -1
  17. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js +276 -0
  18. package/dist/cjs/components/Steppers/DateStepper/DateStepperV2.js.map +1 -0
  19. package/dist/cjs/components/Steppers/DateStepper/Styles.js +2 -3
  20. package/dist/cjs/components/Steppers/DateStepper/Styles.js.map +1 -1
  21. package/dist/cjs/components/Steppers/DateStepper/index.js +11 -0
  22. package/dist/cjs/components/Steppers/DateStepper/index.js.map +1 -1
  23. package/dist/cjs/custom.d.js.map +1 -1
  24. package/dist/esm/components/DatePicker/DatePickerV2.d.ts +67 -0
  25. package/dist/esm/components/DatePicker/DatePickerV2.d.ts.map +1 -0
  26. package/dist/esm/components/DatePicker/DatePickerV2.js +574 -0
  27. package/dist/esm/components/DatePicker/DatePickerV2.js.map +1 -0
  28. package/dist/esm/components/DatePicker/StylesV2.d.ts +22 -0
  29. package/dist/esm/components/DatePicker/StylesV2.d.ts.map +1 -0
  30. package/dist/esm/components/DatePicker/StylesV2.js +93 -0
  31. package/dist/esm/components/DatePicker/StylesV2.js.map +1 -0
  32. package/dist/esm/components/DatePicker/index.d.ts +1 -0
  33. package/dist/esm/components/DatePicker/index.d.ts.map +1 -1
  34. package/dist/esm/components/DatePicker/index.js +1 -0
  35. package/dist/esm/components/DatePicker/index.js.map +1 -1
  36. package/dist/esm/components/GlobalStyle.d.ts.map +1 -1
  37. package/dist/esm/components/GlobalStyle.js +1 -1
  38. package/dist/esm/components/GlobalStyle.js.map +1 -1
  39. package/dist/esm/components/Icons/collection/SortSmall.d.ts +23 -0
  40. package/dist/esm/components/Icons/collection/SortSmall.d.ts.map +1 -0
  41. package/dist/esm/components/Icons/collection/SortSmall.js +39 -0
  42. package/dist/esm/components/Icons/collection/SortSmall.js.map +1 -0
  43. package/dist/esm/components/Icons/collection/index.d.ts +1 -0
  44. package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
  45. package/dist/esm/components/Icons/collection/index.js +1 -0
  46. package/dist/esm/components/Icons/collection/index.js.map +1 -1
  47. package/dist/esm/components/SelectDate/SelectDateV2.d.ts +100 -0
  48. package/dist/esm/components/SelectDate/SelectDateV2.d.ts.map +1 -0
  49. package/dist/esm/components/SelectDate/SelectDateV2.js +195 -0
  50. package/dist/esm/components/SelectDate/SelectDateV2.js.map +1 -0
  51. package/dist/esm/components/SelectDate/Styles.d.ts +1 -1
  52. package/dist/esm/components/SelectDate/index.d.ts +1 -0
  53. package/dist/esm/components/SelectDate/index.d.ts.map +1 -1
  54. package/dist/esm/components/SelectDate/index.js +1 -0
  55. package/dist/esm/components/SelectDate/index.js.map +1 -1
  56. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts +45 -0
  57. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.d.ts.map +1 -0
  58. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js +241 -0
  59. package/dist/esm/components/Steppers/DateStepper/DateStepperV2.js.map +1 -0
  60. package/dist/esm/components/Steppers/DateStepper/Styles.d.ts.map +1 -1
  61. package/dist/esm/components/Steppers/DateStepper/Styles.js +2 -3
  62. package/dist/esm/components/Steppers/DateStepper/Styles.js.map +1 -1
  63. package/dist/esm/components/Steppers/DateStepper/index.d.ts +1 -0
  64. package/dist/esm/components/Steppers/DateStepper/index.d.ts.map +1 -1
  65. package/dist/esm/components/Steppers/DateStepper/index.js +1 -0
  66. package/dist/esm/components/Steppers/DateStepper/index.js.map +1 -1
  67. package/dist/esm/custom.d.js.map +1 -1
  68. package/dist/index.js +7078 -5836
  69. package/dist/index.js.map +1 -1
  70. package/dist/index.min.js +1 -1
  71. package/dist/index.min.js.map +1 -1
  72. package/package.json +2 -1
@@ -0,0 +1,574 @@
1
+ import React, { useState, useRef, useEffect, useCallback, useMemo } from "react";
2
+ import moment from "moment-timezone";
3
+ import { StyledCalendarDate, StyledCalendarDates, StyledCalendarHeader, StyledCalendarSelector, StyledCaption, StyledClearInstantButton, StyledConfirmDialog, StyledControls, StyledControlsLeft, StyledDatePickerContainerInner, StyledDatePickerWrapper, StyledDayName, StyledDaysOfWeek, StyledMonthOption, StyledMonthSelect, StyledMonthSelector, StyledYearOption, StyledYearSelect } from "./StylesV2";
4
+ import { Button } from "../Button";
5
+ import { IconButton } from "../IconButton";
6
+ import { ArrowLeftIcon, ArrowRightIcon, CancelCrossIcon } from "../Icons";
7
+ import { Menu } from "../Menu";
8
+ import { Tooltip } from "../Tooltip";
9
+ export const DatePickerV2 = _ref => {
10
+ var _selected$to4;
11
+ let {
12
+ selected: defaultSelected,
13
+ onChange,
14
+ onSave,
15
+ onClear,
16
+ onClose,
17
+ instant = true,
18
+ target,
19
+ mode = "daily",
20
+ saveLabel = "Save",
21
+ cancelLabel = "Cancel",
22
+ clearLabel = "Clear",
23
+ disabledDaysBefore,
24
+ disabledDaysAfter,
25
+ disabled: disabledDays = [],
26
+ modifiers,
27
+ disableAnimations,
28
+ firstDayOfWeek = 0,
29
+ forceClose,
30
+ required,
31
+ month,
32
+ disableYearPicker,
33
+ position = "bottom-start",
34
+ menuClassName,
35
+ popperClassName,
36
+ enableConfirmModal = false,
37
+ modalHeaderText = "Discard changes?",
38
+ modalDiscardMessage = "All unsaved changes will be lost.",
39
+ modalDiscardBtnText = "OK",
40
+ modalCancelBtnText = "Cancel",
41
+ backgroundElementClass,
42
+ popperTooltipClassName,
43
+ popperTooltipStyle,
44
+ open,
45
+ onCalendarToggle,
46
+ onDayClick,
47
+ showControls
48
+ } = _ref;
49
+ const [isOpen, setIsOpen] = useState(open);
50
+ const [isYearSelectOpen, setIsYearSelectOpen] = useState(false);
51
+ const [showDiscardModal, setShowDiscardModal] = useState(false);
52
+ const [isMonthSelectOpen, setIsMonthSelectOpen] = useState(mode === "monthly" || mode === "quarterly");
53
+ const [monthTransitionDirection, setMonthTransitionDirection] = useState(null);
54
+ const [currentDate, setCurrentDate] = useState(defaultSelected != null && defaultSelected.from ? moment.utc((defaultSelected == null ? void 0 : defaultSelected.from) * 1000) : moment.isMoment(month) ? month : moment.utc(month));
55
+ const [targetDate, setTargetDate] = useState(defaultSelected != null && defaultSelected.from ? moment.utc((defaultSelected == null ? void 0 : defaultSelected.from) * 1000) : moment.isMoment(month) ? month : moment.utc(month));
56
+ const [selected, setSelected] = useState(!defaultSelected ? null : {
57
+ from: moment.utc(defaultSelected.from * 1000),
58
+ to: moment.utc(Number(defaultSelected.to) * 1000)
59
+ });
60
+ const [hoveredDate, setHoveredDate] = useState(null);
61
+ const timezone = moment.defaultZone ? moment.defaultZone.name : moment.tz.guess();
62
+ const currentDateInTimezone = moment().tz(timezone).format("YYYY-MM-DD");
63
+ const today = moment.utc(currentDateInTimezone);
64
+ const selectedYearRef = useRef(null);
65
+ const datePickerRef = useRef(null);
66
+ const handleSelection = useCallback(range => {
67
+ if (!range) {
68
+ setSelected(null);
69
+ if (onChange) onChange(undefined);
70
+ if (instant && onSave) {
71
+ onSave(undefined);
72
+ }
73
+ } else {
74
+ setSelected(range);
75
+ if (onChange) onChange({
76
+ from: range.from.utc().unix(),
77
+ to: moment(range.to).utc().unix()
78
+ });
79
+ if (instant && onSave) {
80
+ onSave({
81
+ from: range.from.utc().unix(),
82
+ to: moment(range.to).utc().unix()
83
+ });
84
+ }
85
+ }
86
+ }, [onChange, onSave, instant]);
87
+ const toggleCalendar = useCallback(() => {
88
+ setIsOpen(!isOpen);
89
+ if (onCalendarToggle) onCalendarToggle(!isOpen);
90
+ }, [isOpen, onCalendarToggle]);
91
+ const toggleYearSelect = useCallback(() => {
92
+ setIsYearSelectOpen(!isYearSelectOpen);
93
+ setIsMonthSelectOpen(true);
94
+ }, [isYearSelectOpen]);
95
+ const toggleMonthSelect = useCallback(() => {
96
+ if (mode !== "monthly" && mode !== "quarterly") {
97
+ setIsMonthSelectOpen(!isMonthSelectOpen);
98
+ }
99
+ }, [isMonthSelectOpen, mode]);
100
+ useEffect(() => {
101
+ if (defaultSelected) {
102
+ setSelected({
103
+ from: moment.utc(defaultSelected.from * 1000),
104
+ to: moment.utc(Number(defaultSelected.to) * 1000)
105
+ });
106
+ setCurrentDate(moment.utc(defaultSelected.from * 1000) || moment.utc());
107
+ setTargetDate(moment.utc(defaultSelected.from * 1000) || moment.utc());
108
+ } else {
109
+ setSelected(null);
110
+ }
111
+ }, [defaultSelected, month]);
112
+ const handleDateSelect = date => {
113
+ const isSameMonth = date.isSame(currentDate, "month");
114
+ if (isSameMonth || disableAnimations) {
115
+ setCurrentDate(date);
116
+ setTargetDate(date);
117
+ } else {
118
+ const direction = date.isBefore(currentDate, "month") ? "prev" : "next";
119
+ setTargetDate(date);
120
+ setMonthTransitionDirection(direction);
121
+ }
122
+ switch (mode) {
123
+ case "daily":
124
+ handleDailySelection(date);
125
+ break;
126
+ case "weekly":
127
+ handleWeeklySelection(date);
128
+ break;
129
+ case "custom":
130
+ handleCustomSelection(date);
131
+ break;
132
+ default:
133
+ console.warn("Unhandled mode: " + mode);
134
+ }
135
+ if (instant && mode !== "custom" && forceClose) toggleCalendar();
136
+ };
137
+ const handleDailySelection = date => {
138
+ if (!date.isSame(selected == null ? void 0 : selected.from)) {
139
+ handleSelection({
140
+ from: date,
141
+ to: date
142
+ });
143
+ } else if (!required) {
144
+ handleSelection(undefined);
145
+ }
146
+ };
147
+ const handleWeeklySelection = date => {
148
+ var _selected$from;
149
+ const currentDayOfWeek = date.day();
150
+ const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
151
+ const startOfWeek = date.clone().subtract(daysToSubtract, "days").startOf("day");
152
+ const endOfWeek = startOfWeek.clone().add(6, "days");
153
+ if (!startOfWeek.isSame(selected == null || (_selected$from = selected.from) == null ? void 0 : _selected$from.startOf("day"))) {
154
+ handleSelection({
155
+ from: startOfWeek,
156
+ to: endOfWeek
157
+ });
158
+ } else if (!required) {
159
+ handleSelection(undefined);
160
+ }
161
+ };
162
+ const handleCustomSelection = date => {
163
+ if (!selected || (selected == null ? void 0 : selected.from) === moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.from) * 1000)) {
164
+ setSelected({
165
+ from: date.utc(),
166
+ to: null
167
+ });
168
+ onChange && onChange({
169
+ from: date.utc().unix(),
170
+ to: date.utc().unix()
171
+ });
172
+ return;
173
+ }
174
+ if (moment.isMoment(selected == null ? void 0 : selected.from) && !(selected != null && selected.to) && !(selected != null && selected.from.isSame(date.utc(), "day"))) {
175
+ const newSelection = selected != null && selected.from.isBefore(date) ? {
176
+ from: selected.from,
177
+ to: date.utc()
178
+ } : {
179
+ from: date.utc(),
180
+ to: selected.from
181
+ };
182
+ setSelected(newSelection);
183
+ onChange && onChange({
184
+ from: newSelection.from.utc().unix(),
185
+ to: newSelection.to.utc().unix()
186
+ });
187
+ } else if (moment.isMoment(selected == null ? void 0 : selected.from) && moment.isMoment(selected == null ? void 0 : selected.to)) {
188
+ setSelected({
189
+ from: date.utc(),
190
+ to: null
191
+ });
192
+ } else if (selected != null && selected.from.isSame(date.utc(), "day") && !required) {
193
+ setSelected(null);
194
+ onChange && onChange(undefined);
195
+ }
196
+ };
197
+ const handleSave = () => {
198
+ if (onSave) {
199
+ toggleCalendar();
200
+ if (mode === "custom" && !(selected != null && selected.to)) {
201
+ setSelected({
202
+ from: moment.utc(selected == null ? void 0 : selected.from),
203
+ to: moment.utc(selected == null ? void 0 : selected.from)
204
+ });
205
+ }
206
+ if (selected) {
207
+ onSave({
208
+ from: moment.utc(selected == null ? void 0 : selected.from).unix(),
209
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to).unix() : moment.utc(selected == null ? void 0 : selected.from).unix()
210
+ });
211
+ } else {
212
+ if (!required) {
213
+ onSave(undefined);
214
+ setCurrentDate(moment.utc());
215
+ setTargetDate(moment.utc());
216
+ }
217
+ }
218
+ }
219
+ };
220
+ const handleMonthChange = useCallback(direction => {
221
+ setMonthTransitionDirection(direction);
222
+ if (isMonthSelectOpen) {
223
+ setTargetDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year"));
224
+ if (disableAnimations) {
225
+ setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "year") : prevDate.clone().add(1, "year"));
226
+ }
227
+ } else {
228
+ setTargetDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month"));
229
+ if (disableAnimations) {
230
+ setCurrentDate(prevDate => direction === "prev" ? prevDate.clone().subtract(1, "month") : prevDate.clone().add(1, "month"));
231
+ }
232
+ }
233
+ }, [disableAnimations, isMonthSelectOpen]);
234
+ const onAnimationEnd = () => {
235
+ if (targetDate) {
236
+ setCurrentDate(targetDate);
237
+ setMonthTransitionDirection(null);
238
+ }
239
+ };
240
+ const handleYearSelect = year => {
241
+ setCurrentDate(currentDate.clone().year(year));
242
+ setTargetDate(currentDate.clone().year(year));
243
+ setIsYearSelectOpen(false);
244
+ setIsMonthSelectOpen(true);
245
+ };
246
+ const handleMonthSelect = month => {
247
+ const newDate = currentDate.clone().utc().month(month);
248
+ setCurrentDate(newDate);
249
+ setTargetDate(newDate);
250
+ if (mode === "monthly") {
251
+ var _selected$to;
252
+ const range = {
253
+ from: newDate.clone().startOf("month"),
254
+ to: newDate.clone().endOf("month").startOf("day")
255
+ };
256
+ const isSameMonth = (selected == null ? void 0 : selected.from.isSame(range.from, "month")) && (selected == null || (_selected$to = selected.to) == null ? void 0 : _selected$to.isSame(range.to, "month"));
257
+ if (isSameMonth) {
258
+ if (!required) {
259
+ handleSelection(undefined);
260
+ if (instant && onSave) {
261
+ setCurrentDate(moment.utc());
262
+ setTargetDate(moment.utc());
263
+ }
264
+ }
265
+ } else {
266
+ handleSelection(range);
267
+ }
268
+ }
269
+ if (mode === "quarterly") {
270
+ var _selected$to2;
271
+ const quarterRange = {
272
+ from: newDate.clone().startOf("quarter"),
273
+ to: newDate.clone().endOf("quarter").startOf("day")
274
+ };
275
+ const isSameQuarter = (selected == null ? void 0 : selected.from.isSame(quarterRange.from, "quarter")) && (selected == null || (_selected$to2 = selected.to) == null ? void 0 : _selected$to2.isSame(quarterRange.to, "quarter"));
276
+ if (isSameQuarter) {
277
+ if (!required) {
278
+ handleSelection(undefined);
279
+ if (instant && onSave) {
280
+ setCurrentDate(moment.utc());
281
+ setTargetDate(moment.utc());
282
+ }
283
+ }
284
+ } else {
285
+ handleSelection(quarterRange);
286
+ }
287
+ }
288
+ if (mode !== "monthly" && mode !== "quarterly") {
289
+ setIsMonthSelectOpen(false);
290
+ }
291
+ if (instant && (mode === "monthly" || mode === "quarterly") && forceClose) toggleCalendar();
292
+ };
293
+ useEffect(() => {
294
+ if (isYearSelectOpen && selectedYearRef.current) {
295
+ var _selectedYearRef$curr;
296
+ selectedYearRef == null || (_selectedYearRef$curr = selectedYearRef.current) == null || _selectedYearRef$curr.scrollIntoView({
297
+ behavior: "smooth",
298
+ block: "center"
299
+ });
300
+ }
301
+ }, [isYearSelectOpen]);
302
+ const renderDaysOfWeek = () => {
303
+ const daysOfWeek = moment.weekdaysShort();
304
+ const orderedDays = [...daysOfWeek.slice(firstDayOfWeek), ...daysOfWeek.slice(0, firstDayOfWeek)];
305
+ return orderedDays.map(day => /*#__PURE__*/React.createElement(StyledDayName, {
306
+ key: day
307
+ }, day[0]));
308
+ };
309
+ const animationClass = useMemo(() => {
310
+ return monthTransitionDirection && !disableAnimations ? monthTransitionDirection === "next" ? "slide-down" : "slide-up" : "";
311
+ }, [disableAnimations, monthTransitionDirection]);
312
+ const handleDayClick = (day, modifiers) => {
313
+ handleDateSelect(day);
314
+ if (onDayClick) onDayClick(day, modifiers);
315
+ };
316
+ const getHoverRange = () => {
317
+ if (!hoveredDate) return null;
318
+ if (mode === "quarterly") {
319
+ const startMonth = hoveredDate.clone().startOf("quarter");
320
+ const endMonth = hoveredDate.clone().endOf("quarter");
321
+ return {
322
+ from: startMonth,
323
+ to: endMonth
324
+ };
325
+ }
326
+ if (mode === "weekly") {
327
+ const currentDayOfWeek = hoveredDate.day();
328
+ const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7;
329
+ const startOfWeek = hoveredDate.clone().subtract(daysToSubtract, "days").startOf("day");
330
+ const endOfWeek = startOfWeek.clone().add(6, "days");
331
+ return {
332
+ from: startOfWeek,
333
+ to: endOfWeek
334
+ };
335
+ }
336
+ if (mode === "custom" && selected != null && selected.from && !(selected != null && selected.to)) {
337
+ const from = selected.from.isBefore(hoveredDate) ? selected.from : hoveredDate;
338
+ const to = selected.from.isAfter(hoveredDate) ? selected.from : hoveredDate;
339
+ return {
340
+ from,
341
+ to
342
+ };
343
+ }
344
+ return null;
345
+ };
346
+ const renderCalendarDates = () => {
347
+ const startOfMonth = currentDate.clone().startOf("month");
348
+ const startDate = startOfMonth.clone().isoWeekday(firstDayOfWeek);
349
+ const endDate = startDate.clone().add(6, "weeks");
350
+ const date = startDate.clone();
351
+ const dates = [];
352
+ const hoverRange = getHoverRange();
353
+ while (date.isBefore(endDate)) {
354
+ const clonedDate = date.clone();
355
+ const isToday = clonedDate.isSame(today, "day");
356
+ const isSelected = selected && (clonedDate.isBetween(selected.from, selected.to, "day", "[]") || clonedDate.isSame(selected.from, "day") || clonedDate.isSame(selected.to, "day"));
357
+ const isHovered = hoverRange && (mode === "weekly" || mode === "custom") && clonedDate.isBetween(hoverRange.from, hoverRange.to, "day", "[]");
358
+ const isDisabled = disabledDaysBefore && clonedDate.isBefore(disabledDaysBefore, "day") || disabledDaysAfter && clonedDate.isAfter(disabledDaysAfter, "day") || disabledDays.includes(clonedDate.day());
359
+ const modifierClasses = [];
360
+ const modifierTitles = [];
361
+ let titles;
362
+ if (modifiers) Object.keys(modifiers || {}).forEach(modifier => {
363
+ const {
364
+ matched,
365
+ title
366
+ } = modifiers[modifier](clonedDate.toDate());
367
+ if (matched) {
368
+ modifierClasses.push(modifier);
369
+ if (title) modifierTitles.push(title);
370
+ }
371
+ });
372
+ if (modifierTitles.length) {
373
+ titles = /*#__PURE__*/React.createElement("div", {
374
+ key: "title-wrapper-" + clonedDate.toString()
375
+ }, modifierTitles.map((title, index) => /*#__PURE__*/React.createElement("div", {
376
+ key: "title-text-" + index
377
+ }, title)));
378
+ }
379
+ const isOutside = !clonedDate.isSame(currentDate, "month");
380
+ dates.push( /*#__PURE__*/React.createElement(Tooltip, {
381
+ title: titles,
382
+ disable: !modifierTitles.length,
383
+ key: clonedDate.toString(),
384
+ popperTooltipClassName: popperTooltipClassName,
385
+ popperTooltipStyle: popperTooltipStyle
386
+ }, /*#__PURE__*/React.createElement(StyledCalendarDate, {
387
+ className: (isSelected ? "selected" : "") + " " + (isToday ? "today-day" : "") + " \n " + (isDisabled ? "disabled" : "") + " " + (isHovered ? "hovered" : "") + " " + modifierClasses.join(" ") + " \n " + (isOutside ? "outside" : ""),
388
+ onClick: () => handleDayClick(clonedDate, modifierClasses),
389
+ onMouseEnter: mode === "weekly" || mode === "custom" ? () => setHoveredDate(clonedDate) : undefined,
390
+ onMouseLeave: mode === "weekly" || mode === "custom" ? () => setHoveredDate(null) : undefined
391
+ }, clonedDate.date())));
392
+ date.add(1, "day");
393
+ }
394
+ return dates;
395
+ };
396
+ const renderYearSelect = () => {
397
+ const years = Array.from({
398
+ length: 200
399
+ }, (_, i) => 1900 + i);
400
+ return /*#__PURE__*/React.createElement(StyledYearSelect, null, years.map(year => {
401
+ const isSelected = selected && ((selected == null ? void 0 : selected.to) && year >= selected.from.year() && year <= selected.to.year() || year === selected.from.year() || (selected == null ? void 0 : selected.to) && year === selected.to.year());
402
+ const isDisabledYear = disabledDaysBefore && year < disabledDaysBefore.year() || disabledDaysAfter && year > disabledDaysAfter.year();
403
+ return /*#__PURE__*/React.createElement(StyledYearOption, {
404
+ key: year,
405
+ ref: year === currentDate.year() ? selectedYearRef : null,
406
+ className: (isSelected ? "selected" : "") + " " + (year === today.year() ? "today-year" : "") + " " + (isDisabledYear ? "disabled" : ""),
407
+ onClick: () => handleYearSelect(year)
408
+ }, year);
409
+ }));
410
+ };
411
+ const renderMonthSelect = () => {
412
+ const months = moment.months();
413
+ const hoverRange = getHoverRange();
414
+ return /*#__PURE__*/React.createElement(StyledMonthSelect, null, months.map((month, index) => {
415
+ const monthDate = currentDate.clone().month(index);
416
+ const isSelected = selected && (monthDate.isBetween(selected.from, selected.to, "month", "[]") || monthDate.isSame(selected.from, "month") || monthDate.isSame(selected.to, "month"));
417
+ const isDisabledMonth = disabledDaysBefore && monthDate.isBefore(disabledDaysBefore, "month") || disabledDaysAfter && monthDate.isAfter(disabledDaysAfter, "month");
418
+ const isHoveredQuarter = hoverRange && mode === "quarterly" && monthDate.isBetween(hoverRange.from, hoverRange.to, "month", "[]");
419
+ return /*#__PURE__*/React.createElement(StyledMonthOption, {
420
+ key: month,
421
+ className: (isSelected ? "selected" : "") + " " + (index === today.month() && currentDate.year() === today.year() ? "today-month" : "") + " " + (isDisabledMonth ? "disabled" : "") + " " + (isHoveredQuarter ? "hovered" : ""),
422
+ onClick: () => handleMonthSelect(index),
423
+ onMouseEnter: mode === "quarterly" ? () => setHoveredDate(monthDate) : undefined,
424
+ onMouseLeave: mode === "quarterly" ? () => setHoveredDate(null) : undefined
425
+ }, month.substring(0, 3));
426
+ }));
427
+ };
428
+ const captionText = useMemo(() => {
429
+ const isCurrentYear = currentDate.isSame(today, "year");
430
+ return !isMonthSelectOpen && !isYearSelectOpen ? "" + currentDate.format("MMMM") + (isCurrentYear ? "" : " " + currentDate.format("YYYY")) : currentDate.format("YYYY");
431
+ }, [currentDate, isMonthSelectOpen, isYearSelectOpen, today]);
432
+ const handleClear = useCallback(() => {
433
+ if (typeof onClear === "function") onClear();
434
+ handleSelection(undefined);
435
+ }, [handleSelection, onClear]);
436
+ const handleClose = useCallback(() => {
437
+ var _selected$to3;
438
+ if (mode === "custom" && instant && selected) {
439
+ setSelected({
440
+ from: moment.utc(selected == null ? void 0 : selected.from),
441
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to) : moment.utc(selected == null ? void 0 : selected.from)
442
+ });
443
+ }
444
+ if (instant && onSave && mode === "custom" && selected && (!(selected != null && selected.from.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.from) * 1000))) || !(selected != null && (_selected$to3 = selected.to) != null && _selected$to3.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.to) * 1000))))) {
445
+ onSave({
446
+ from: moment.utc(selected == null ? void 0 : selected.from).unix(),
447
+ to: selected != null && selected.to ? moment.utc(selected == null ? void 0 : selected.to).unix() : moment.utc(selected == null ? void 0 : selected.from).unix()
448
+ });
449
+ }
450
+ if (mode === "custom" && instant && !selected && onSave) {
451
+ onSave(undefined);
452
+ }
453
+ setCurrentDate(defaultSelected != null && defaultSelected.from ? moment.utc((defaultSelected == null ? void 0 : defaultSelected.from) * 1000) : moment.isMoment(month) ? month : moment.utc());
454
+ setTargetDate(defaultSelected != null && defaultSelected.from ? moment.utc((defaultSelected == null ? void 0 : defaultSelected.from) * 1000) : moment.isMoment(month) ? month : moment.utc());
455
+ setSelected(defaultSelected ? {
456
+ from: moment.utc(defaultSelected.from * 1000),
457
+ to: moment.utc(Number(defaultSelected.to) * 1000)
458
+ } : null);
459
+ toggleCalendar();
460
+ setIsYearSelectOpen(false);
461
+ setIsMonthSelectOpen(mode === "monthly" || mode === "quarterly");
462
+ setMonthTransitionDirection(null);
463
+ if (typeof onClose === "function") onClose();
464
+ }, [defaultSelected, instant, mode, month, onClose, onSave, selected, toggleCalendar]);
465
+ const handleBeforeClose = useCallback(() => {
466
+ let shouldClose = true;
467
+ if (!target || !enableConfirmModal || instant || required) {
468
+ shouldClose = true;
469
+ }
470
+ if (target && enableConfirmModal && !instant && !required && (selected && !defaultSelected || !selected && defaultSelected || selected != null && selected.from && defaultSelected != null && defaultSelected.from && !selected.from.isSame(moment.utc(defaultSelected.from * 1000)) || selected != null && selected.to && defaultSelected != null && defaultSelected.to && !selected.to.isSame(moment.utc(defaultSelected.to * 1000)))) {
471
+ shouldClose = false;
472
+ setShowDiscardModal(true);
473
+ }
474
+ if (shouldClose) handleClose();
475
+ return shouldClose;
476
+ }, [defaultSelected, enableConfirmModal, handleClose, instant, required, selected, target]);
477
+ const Wrapper = target ? Menu : "div";
478
+ const handleCaptionClick = useCallback(() => {
479
+ isMonthSelectOpen && !disableYearPicker ? toggleYearSelect() : toggleMonthSelect();
480
+ }, [disableYearPicker, isMonthSelectOpen, toggleMonthSelect, toggleYearSelect]);
481
+ const handleCloseDiscardModal = useCallback(() => {
482
+ setShowDiscardModal(false);
483
+ }, []);
484
+ const handleSaveDiscardModal = useCallback(() => {
485
+ setSelected(defaultSelected != null && defaultSelected.from ? {
486
+ from: moment.utc(defaultSelected.from * 1000),
487
+ to: moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.to) * 1000)
488
+ } : null);
489
+ setShowDiscardModal(false);
490
+ handleClose();
491
+ }, [defaultSelected, handleClose]);
492
+ const wrapperProps = target ? {
493
+ className: "c-date-picker--calendar",
494
+ target,
495
+ onBeforeClose: handleBeforeClose,
496
+ onClose: handleClose,
497
+ open: isOpen,
498
+ onOpen: toggleCalendar,
499
+ position,
500
+ menuClassName,
501
+ popperClassName,
502
+ backgroundElementClass
503
+ } : {
504
+ className: "c-date-picker--calendar"
505
+ };
506
+ useEffect(() => {
507
+ const handleKeyDown = event => {
508
+ if (event.key === "ArrowRight") {
509
+ handleMonthChange("next");
510
+ } else if (event.key === "ArrowLeft") {
511
+ handleMonthChange("prev");
512
+ }
513
+ };
514
+ window.addEventListener("keydown", handleKeyDown);
515
+ return () => {
516
+ window.removeEventListener("keydown", handleKeyDown);
517
+ };
518
+ }, [handleMonthChange]);
519
+ return /*#__PURE__*/React.createElement(StyledDatePickerWrapper, {
520
+ ref: datePickerRef
521
+ }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, /*#__PURE__*/React.createElement(StyledDatePickerContainerInner, null, /*#__PURE__*/React.createElement(StyledCalendarHeader, null, isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
522
+ onClick: () => handleMonthChange("prev"),
523
+ variant: "text gray",
524
+ size: "small"
525
+ }, /*#__PURE__*/React.createElement(ArrowLeftIcon, null)), /*#__PURE__*/React.createElement(StyledCaption, {
526
+ className: animationClass + " " + (isYearSelectOpen ? "year-caption" : ""),
527
+ key: isMonthSelectOpen ? currentDate.year() : currentDate.month(),
528
+ onClick: handleCaptionClick,
529
+ onAnimationEnd: onAnimationEnd
530
+ }, captionText), isYearSelectOpen ? null : /*#__PURE__*/React.createElement(IconButton, {
531
+ onClick: () => handleMonthChange("next"),
532
+ variant: "text gray",
533
+ size: "small"
534
+ }, /*#__PURE__*/React.createElement(ArrowRightIcon, null))), /*#__PURE__*/React.createElement(StyledCalendarSelector, null, isYearSelectOpen ? renderYearSelect() : isMonthSelectOpen ? /*#__PURE__*/React.createElement(StyledMonthSelector, {
535
+ className: animationClass,
536
+ key: currentDate.year(),
537
+ onAnimationEnd: onAnimationEnd
538
+ }, renderMonthSelect()) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledDaysOfWeek, null, renderDaysOfWeek()), /*#__PURE__*/React.createElement(StyledCalendarDates, {
539
+ className: animationClass,
540
+ key: currentDate.month()
541
+ }, renderCalendarDates()))), (target || showControls) && (!instant ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledControlsLeft, null, /*#__PURE__*/React.createElement(Button, {
542
+ size: "small",
543
+ variant: "primary",
544
+ onClick: handleSave,
545
+ disabled: (selected == null ? void 0 : selected.from.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.from) * 1000))) && (selected == null || (_selected$to4 = selected.to) == null ? void 0 : _selected$to4.isSame(moment.utc(Number(defaultSelected == null ? void 0 : defaultSelected.to) * 1000))) || !defaultSelected && !selected
546
+ }, saveLabel), /*#__PURE__*/React.createElement(Tooltip, {
547
+ title: cancelLabel,
548
+ popperTooltipStyle: {
549
+ zIndex: 1301
550
+ }
551
+ }, /*#__PURE__*/React.createElement(IconButton, {
552
+ size: "small",
553
+ variant: "text gray",
554
+ onClick: handleBeforeClose
555
+ }, /*#__PURE__*/React.createElement(CancelCrossIcon, null)))), !required ? /*#__PURE__*/React.createElement(Button, {
556
+ size: "small",
557
+ onClick: handleClear,
558
+ variant: "text gray"
559
+ }, clearLabel) : null) : !required ? /*#__PURE__*/React.createElement(StyledControls, null, /*#__PURE__*/React.createElement(StyledClearInstantButton, {
560
+ size: "small",
561
+ onClick: handleClear,
562
+ variant: "text gray"
563
+ }, clearLabel)) : null))), !instant && target && !required && enableConfirmModal ? /*#__PURE__*/React.createElement(StyledConfirmDialog, {
564
+ className: "modal-select-date",
565
+ open: showDiscardModal,
566
+ onCancel: handleCloseDiscardModal,
567
+ onConfirm: handleSaveDiscardModal,
568
+ dialogTitle: modalHeaderText,
569
+ dialogContent: modalDiscardMessage,
570
+ cancelBtnText: modalCancelBtnText,
571
+ confirmBtnText: modalDiscardBtnText
572
+ }) : null);
573
+ };
574
+ //# sourceMappingURL=DatePickerV2.js.map