@clickhouse/click-ui 0.2.0-rc.7 → 0.2.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/cjs/components/DatePicker/Common.cjs +79 -48
  2. package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
  3. package/dist/cjs/components/DatePicker/DateRangePicker.cjs +24 -24
  4. package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
  5. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +78 -40
  6. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
  7. package/dist/cjs/components/DatePicker/index.cjs +29 -18
  8. package/dist/cjs/components/DatePicker/index.cjs.map +1 -1
  9. package/dist/cjs/components/DatePicker/utils.cjs +42 -14
  10. package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
  11. package/dist/esm/components/DatePicker/Common.js +80 -49
  12. package/dist/esm/components/DatePicker/Common.js.map +1 -1
  13. package/dist/esm/components/DatePicker/DateRangePicker.js +25 -25
  14. package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
  15. package/dist/esm/components/DatePicker/DateTimeRangePicker.js +79 -41
  16. package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
  17. package/dist/esm/components/DatePicker/index.js +30 -19
  18. package/dist/esm/components/DatePicker/index.js.map +1 -1
  19. package/dist/esm/components/DatePicker/utils.js +36 -10
  20. package/dist/esm/components/DatePicker/utils.js.map +1 -1
  21. package/dist/types/components/DatePicker/Common.d.ts +9 -4
  22. package/dist/types/components/DatePicker/DatePicker.d.ts +11 -2
  23. package/dist/types/components/DatePicker/DateRangePicker.d.ts +3 -2
  24. package/dist/types/components/DatePicker/DateTimeRangePicker.d.ts +3 -2
  25. package/dist/types/components/DatePicker/index.d.ts +2 -1
  26. package/dist/types/components/DatePicker/utils.d.ts +9 -8
  27. package/dist/types/index.d.ts +1 -1
  28. package/package.json +2 -3
  29. package/dist/types/components/DatePicker/DatePicker.types.d.ts +0 -9
@@ -3,7 +3,7 @@ import { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react
3
3
  import { isSameDate } from '@h6s/calendar';
4
4
  import { styled } from 'styled-components';
5
5
  import { DateRangePickerInput, CalendarRenderer, StyledDropdownItem, DateTableCell } from './Common.js';
6
- import { isDateRangeTheWholeMonth, selectedDateFormatter, datesAreWithinMaxRange } from './utils.js';
6
+ import { isDateRangeTheWholeMonth, formatDateHeader, formatSelectedDate, shiftToTimezone, datesAreWithinMaxRange, shiftFromTimezone } from './utils.js';
7
7
  import { Dropdown } from '../Dropdown/index.js';
8
8
  import { Panel } from '../Panel/index.js';
9
9
  import { Container } from '../Container/index.js';
@@ -53,9 +53,13 @@ const Calendar = ({
53
53
  maxRangeLength,
54
54
  setSelectedDate,
55
55
  startDate,
56
- endDate
56
+ endDate,
57
+ timezone
57
58
  }) => {
58
59
  const [hoveredDate, setHoveredDate] = useState();
60
+ const today = shiftToTimezone(/* @__PURE__ */ new Date(), timezone);
61
+ const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : void 0;
62
+ const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : void 0;
59
63
  const handleMouseOut = () => {
60
64
  setHoveredDate(void 0);
61
65
  };
@@ -69,21 +73,20 @@ const Calendar = ({
69
73
  key: dayKey,
70
74
  value: fullDate
71
75
  }) => {
72
- const today = /* @__PURE__ */ new Date();
73
- const isSelected = startDate && isSameDate(startDate, fullDate) || endDate && isSameDate(endDate, fullDate);
76
+ const isSelected = shiftedStart && isSameDate(shiftedStart, fullDate) || shiftedEnd && isSameDate(shiftedEnd, fullDate);
74
77
  const isPresent = isSameDate(today, fullDate);
75
- const isBetweenStartAndEndDates = Boolean(startDate && endDate && fullDate > startDate && fullDate < endDate);
78
+ const isBetweenStartAndEndDates = Boolean(shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd);
76
79
  let isDisabled = false;
77
80
  if (futureDatesDisabled && fullDate > today) {
78
81
  isDisabled = true;
79
82
  }
80
- if (futureStartDatesDisabled && !startDate && fullDate > today) {
83
+ if (futureStartDatesDisabled && !shiftedStart && fullDate > today) {
81
84
  isDisabled = true;
82
85
  }
83
- if (maxRangeLength > 1 && startDate && !datesAreWithinMaxRange(startDate, fullDate, maxRangeLength)) {
86
+ if (maxRangeLength > 1 && shiftedStart && !datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)) {
84
87
  isDisabled = true;
85
88
  }
86
- const shouldShowRangeIndicator = !endDate && Boolean(startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate);
89
+ const shouldShowRangeIndicator = !shiftedEnd && Boolean(shiftedStart && hoveredDate && fullDate > shiftedStart && fullDate < hoveredDate);
87
90
  const handleMouseEnter = () => {
88
91
  setHoveredDate(fullDate);
89
92
  };
@@ -91,14 +94,14 @@ const Calendar = ({
91
94
  if (isDisabled) {
92
95
  return false;
93
96
  }
94
- setSelectedDate(fullDate);
95
- if (startDate && endDate) {
97
+ setSelectedDate(shiftFromTimezone(fullDate, timezone));
98
+ if (shiftedStart && shiftedEnd) {
96
99
  return;
97
100
  }
98
- if (startDate && fullDate < startDate) {
101
+ if (shiftedStart && fullDate < shiftedStart) {
99
102
  return;
100
103
  }
101
- if (startDate && !isSameDate(fullDate, startDate)) {
104
+ if (shiftedStart && !isSameDate(fullDate, shiftedStart)) {
102
105
  closeDatepicker();
103
106
  return;
104
107
  }
@@ -107,11 +110,6 @@ const Calendar = ({
107
110
  }) }, weekKey);
108
111
  });
109
112
  };
110
- const locale = "en-US";
111
- const monthFormatter = new Intl.DateTimeFormat(locale, {
112
- month: "short",
113
- year: "numeric"
114
- });
115
113
  const PredefinedDates = ({
116
114
  onSelectDateRange,
117
115
  predefinedDatesList,
@@ -120,7 +118,8 @@ const PredefinedDates = ({
120
118
  setEndDate,
121
119
  setStartDate,
122
120
  shouldShowCustomRange,
123
- showCustomDateRange
121
+ showCustomDateRange,
122
+ timezone
124
123
  }) => {
125
124
  const handleCustomTimePeriodClick = (event) => {
126
125
  event.preventDefault();
@@ -140,8 +139,8 @@ const PredefinedDates = ({
140
139
  const isWholeMonth = isDateRangeTheWholeMonth({
141
140
  startDate,
142
141
  endDate
143
- });
144
- const formattedText = isWholeMonth ? monthFormatter.format(startDate) : `${selectedDateFormatter.format(startDate)} – ${selectedDateFormatter.format(endDate)}`.trim();
142
+ }, timezone);
143
+ const formattedText = isWholeMonth ? formatDateHeader(timezone, startDate) : `${formatSelectedDate(timezone, startDate)} – ${formatSelectedDate(timezone, endDate)}`.trim();
145
144
  return /* @__PURE__ */ jsx(StyledDropdownItem, { "data-testid": `predefined-date-${startDate.getTime()}`, onClick: handleItemClick, children: /* @__PURE__ */ jsxs(Container, { "data-selected": rangeIsSelected, "data-testid": formattedText, justifyContent: "space-between", orientation: "horizontal", children: [
146
145
  formattedText,
147
146
  rangeIsSelected && /* @__PURE__ */ jsx(SvgImage, { name: "check" })
@@ -164,7 +163,8 @@ const DateRangePicker = ({
164
163
  openDirection = "right",
165
164
  placeholder = "start date – end date",
166
165
  predefinedDatesList,
167
- responsivePositioning = true
166
+ responsivePositioning = true,
167
+ timezone = "system"
168
168
  }) => {
169
169
  const [isOpen, setIsOpen] = useState(false);
170
170
  const [selectedStartDate, setSelectedStartDate] = useState();
@@ -239,11 +239,11 @@ const DateRangePicker = ({
239
239
  }, []);
240
240
  const shouldShowPredefinedDates = predefinedDatesList !== void 0 && predefinedDatesList.length > 0;
241
241
  return /* @__PURE__ */ jsxs(Dropdown, { onOpenChange: handleOpenChange, open: isOpen, children: [
242
- /* @__PURE__ */ jsx(Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsx(DateRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate }) }),
242
+ /* @__PURE__ */ jsx(Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsx(DateRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, timezone }) }),
243
243
  /* @__PURE__ */ jsx(Dropdown.Content, { align: "start", responsivePositioning, children: shouldShowPredefinedDates ? /* @__PURE__ */ jsxs(PredefinedCalendarContainer, { gap: "none", orientation: "horizontal", padding: "none", children: [
244
- /* @__PURE__ */ jsx(PredefinedDates, { onSelectDateRange, predefinedDatesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange }),
245
- shouldShowCustomRange && /* @__PURE__ */ jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate }) }) })
246
- ] }) : /* @__PURE__ */ jsx(CalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate }) }) })
244
+ /* @__PURE__ */ jsx(PredefinedDates, { onSelectDateRange, predefinedDatesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange, timezone }),
245
+ shouldShowCustomRange && /* @__PURE__ */ jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, timezone, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate, timezone }) }) })
246
+ ] }) : /* @__PURE__ */ jsx(CalendarRenderer, { calendarOptions, allowYearMonthSelection: false, selectedDate: selectedStartDate, timezone, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, closeDatepicker: closeDatePicker, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate: handleSelectDate, startDate: selectedStartDate, endDate: selectedEndDate, timezone }) }) })
247
247
  ] });
248
248
  };
249
249
 
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sources":["../../../../src/components/DatePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '@/components/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '@/components/Container';\nimport { Panel } from '@/components/Panel';\nimport { Icon } from '@/components/Icon';\nimport {\n DateRange,\n datesAreWithinMaxRange,\n isDateRangeTheWholeMonth,\n selectedDateFormatter,\n} from './utils';\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarWidth = 275;\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedDatesContainer = styled(Container)`\n width: ${calendarWidth}px;\n`;\n\n// left value of 276px is the width of the PredefinedDatesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 276px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedDatesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\ninterface CalendarProps {\n calendarBody: Body;\n closeDatepicker: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: (selectedDate: Date) => void;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n closeDatepicker,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const today = new Date();\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n const isPresent = isSameDate(today, fullDate);\n\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (futureStartDatesDisabled && !startDate && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n const shouldShowRangeIndicator =\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n setSelectedDate(fullDate);\n\n // User has a date range selected and clicked a new date.\n // This will cause the selected date to be reset, thus do not close the datepicker.\n if (startDate && endDate) {\n return;\n }\n\n // The user has selected a new start date, don't close\n if (startDate && fullDate < startDate) {\n return;\n }\n\n // Only close the datepicker if the user hasn't clicked the selected start date.\n if (startDate && !isSameDate(fullDate, startDate)) {\n closeDatepicker();\n return;\n }\n };\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n !isSelected && (shouldShowRangeIndicator || isBetweenStartAndEndDates)\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $isPresent={isPresent}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\nconst locale = 'en-US';\nconst monthFormatter = new Intl.DateTimeFormat(locale, {\n month: 'short',\n year: 'numeric',\n});\n\ninterface PredefinedDatesProps {\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedDatesList: DateRange[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedDates = ({\n onSelectDateRange,\n predefinedDatesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedDatesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedDatesContainer\n data-testid=\"predefined-dates-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedDatesList.map(({ startDate, endDate }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n isSameDate(selectedEndDate, endDate) &&\n selectedStartDate &&\n isSameDate(selectedStartDate, startDate);\n\n const isWholeMonth = isDateRangeTheWholeMonth({ startDate, endDate });\n\n const formattedText = isWholeMonth\n ? monthFormatter.format(startDate)\n : `${selectedDateFormatter.format(\n startDate\n )} – ${selectedDateFormatter.format(endDate)}`.trim();\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={formattedText}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {formattedText}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedDatesContainer>\n );\n};\n\nexport interface DateRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedDatesList?: DateRange[];\n maxRangeLength?: number;\n startDate?: Date;\n responsivePositioning?: boolean;\n}\n\nexport const DateRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedDatesList,\n responsivePositioning = true,\n}: DateRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n const calendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (selectedStartDate) {\n calendarOptions.defaultDate = selectedStartDate;\n }\n\n useEffect(() => {\n if (startDate) {\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n if (\n calendarContainerRef.current.getBoundingClientRect().right > window.innerWidth\n ) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }, [openDirection]);\n\n const handleOpenChange = (isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }\n };\n\n const handleSelectDate = useCallback(\n (selectedDate: Date): void => {\n // Start date and end date are selected, user clicks any date.\n // Set start date to the selected date, clear the end date.\n if (selectedStartDate && selectedEndDate) {\n // If futureStartDatesDisabled is true, only set the selected date to the date clicked if it's before today\n if (futureStartDatesDisabled && selectedDate > new Date()) {\n setSelectedEndDate(undefined);\n return;\n }\n setSelectedStartDate(selectedDate);\n setSelectedEndDate(undefined);\n return;\n }\n\n if (selectedStartDate) {\n if (isSameDate(selectedStartDate, selectedDate)) {\n // Start date is selected, user clicks start date.\n // Reset the start date.\n setSelectedStartDate(undefined);\n return;\n }\n\n // Start date is selected, user clicks an earlier date.\n // Set the earlier date to the new start date.\n if (selectedDate < selectedStartDate) {\n setSelectedStartDate(selectedDate);\n return;\n }\n\n // Otherwise, set the end date to the date the user clicked.\n setSelectedEndDate(selectedDate);\n onSelectDateRange(selectedStartDate, selectedDate);\n setShouldShowCustomRange(false);\n return;\n }\n\n setSelectedStartDate(selectedDate);\n },\n [futureStartDatesDisabled, onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedDates =\n predefinedDatesList !== undefined && predefinedDatesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n />\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n {shouldShowPredefinedDates ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedDates\n onSelectDateRange={onSelectDateRange}\n predefinedDatesList={predefinedDatesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <StyledCalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n />\n )}\n </StyledCalendarRenderer>\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n />\n )}\n </CalendarRenderer>\n )}\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedDatesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","ScrollableContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","closeDatepicker","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","date","isCurrentMonth","dayKey","fullDate","today","Date","isSelected","isSameDate","isPresent","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","shouldShowRangeIndicator","handleMouseEnter","handleClick","locale","monthFormatter","Intl","DateTimeFormat","month","year","PredefinedDates","onSelectDateRange","predefinedDatesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","handleItemClick","rangeIsSelected","isWholeMonth","isDateRangeTheWholeMonth","formattedText","format","selectedDateFormatter","trim","getTime","Icon","toISOString","DateRangePicker","disabled","openDirection","placeholder","responsivePositioning","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","calendarOptions","defaultDate","useEffect","useLayoutEffect","current","getBoundingClientRect","right","window","innerWidth","closeDatePicker","useCallback","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedDates","length","body"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.js","sources":["../../../../src/components/DatePicker/DateRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '@/components/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '@/components/Container';\nimport { Panel } from '@/components/Panel';\nimport { Icon } from '@/components/Icon';\nimport {\n DateRange,\n datesAreWithinMaxRange,\n formatDateHeader,\n formatSelectedDate,\n shiftFromTimezone,\n isDateRangeTheWholeMonth,\n Timezone,\n shiftToTimezone,\n} from './utils';\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarWidth = 275;\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedDatesContainer = styled(Container)`\n width: ${calendarWidth}px;\n`;\n\n// left value of 276px is the width of the PredefinedDatesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 276px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedDatesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\ninterface CalendarProps {\n calendarBody: Body;\n closeDatepicker: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: (selectedDate: Date) => void;\n startDate?: Date;\n endDate?: Date;\n timezone: Timezone;\n}\n\nconst Calendar = ({\n calendarBody,\n closeDatepicker,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n timezone,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const today = shiftToTimezone(new Date(), timezone);\n const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : undefined;\n const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : undefined;\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (shiftedStart && isSameDate(shiftedStart, fullDate)) ||\n (shiftedEnd && isSameDate(shiftedEnd, fullDate));\n const isPresent = isSameDate(today, fullDate);\n\n const isBetweenStartAndEndDates = Boolean(\n shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (futureStartDatesDisabled && !shiftedStart && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n shiftedStart &&\n !datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n const shouldShowRangeIndicator =\n !shiftedEnd &&\n Boolean(\n shiftedStart &&\n hoveredDate &&\n fullDate > shiftedStart &&\n fullDate < hoveredDate\n );\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n setSelectedDate(shiftFromTimezone(fullDate, timezone));\n\n // User has a date range selected and clicked a new date.\n // This will cause the selected date to be reset, thus do not close the datepicker.\n if (shiftedStart && shiftedEnd) {\n return;\n }\n\n // The user has selected a new start date, don't close\n if (shiftedStart && fullDate < shiftedStart) {\n return;\n }\n\n // Only close the datepicker if the user hasn't clicked the selected start date.\n if (shiftedStart && !isSameDate(fullDate, shiftedStart)) {\n closeDatepicker();\n return;\n }\n };\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n !isSelected && (shouldShowRangeIndicator || isBetweenStartAndEndDates)\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={isSelected}\n $isPresent={isPresent}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\ninterface PredefinedDatesProps {\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedDatesList: DateRange[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n timezone: Timezone;\n}\n\nconst PredefinedDates = ({\n onSelectDateRange,\n predefinedDatesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n timezone,\n}: PredefinedDatesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedDatesContainer\n data-testid=\"predefined-dates-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedDatesList.map(({ startDate, endDate }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n isSameDate(selectedEndDate, endDate) &&\n selectedStartDate &&\n isSameDate(selectedStartDate, startDate);\n\n const isWholeMonth = isDateRangeTheWholeMonth({ startDate, endDate }, timezone);\n\n const formattedText = isWholeMonth\n ? formatDateHeader(timezone, startDate)\n : `${formatSelectedDate(timezone, startDate)} – ${formatSelectedDate(timezone, endDate)}`.trim();\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={formattedText}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {formattedText}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedDatesContainer>\n );\n};\n\nexport interface DateRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedDatesList?: DateRange[];\n maxRangeLength?: number;\n startDate?: Date;\n responsivePositioning?: boolean;\n timezone?: Timezone;\n}\n\nexport const DateRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedDatesList,\n responsivePositioning = true,\n timezone = 'system',\n}: DateRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n const calendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (selectedStartDate) {\n calendarOptions.defaultDate = selectedStartDate;\n }\n\n useEffect(() => {\n if (startDate) {\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n if (\n calendarContainerRef.current.getBoundingClientRect().right > window.innerWidth\n ) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }, [openDirection]);\n\n const handleOpenChange = (isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection(openDirection);\n }\n };\n\n const handleSelectDate = useCallback(\n (selectedDate: Date): void => {\n // Start date and end date are selected, user clicks any date.\n // Set start date to the selected date, clear the end date.\n if (selectedStartDate && selectedEndDate) {\n // If futureStartDatesDisabled is true, only set the selected date to the date clicked if it's before today\n if (futureStartDatesDisabled && selectedDate > new Date()) {\n setSelectedEndDate(undefined);\n return;\n }\n setSelectedStartDate(selectedDate);\n setSelectedEndDate(undefined);\n return;\n }\n\n if (selectedStartDate) {\n if (isSameDate(selectedStartDate, selectedDate)) {\n // Start date is selected, user clicks start date.\n // Reset the start date.\n setSelectedStartDate(undefined);\n return;\n }\n\n // Start date is selected, user clicks an earlier date.\n // Set the earlier date to the new start date.\n if (selectedDate < selectedStartDate) {\n setSelectedStartDate(selectedDate);\n return;\n }\n\n // Otherwise, set the end date to the date the user clicked.\n setSelectedEndDate(selectedDate);\n onSelectDateRange(selectedStartDate, selectedDate);\n setShouldShowCustomRange(false);\n return;\n }\n\n setSelectedStartDate(selectedDate);\n },\n [futureStartDatesDisabled, onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedDates =\n predefinedDatesList !== undefined && predefinedDatesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n timezone={timezone}\n />\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n {shouldShowPredefinedDates ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedDates\n onSelectDateRange={onSelectDateRange}\n predefinedDatesList={predefinedDatesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n timezone={timezone}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <StyledCalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n allowYearMonthSelection={false}\n selectedDate={selectedStartDate}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n closeDatepicker={closeDatePicker}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={handleSelectDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n timezone={timezone}\n />\n )}\n </CalendarRenderer>\n )}\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedDatesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","ScrollableContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","closeDatepicker","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","timezone","hoveredDate","setHoveredDate","useState","today","shiftToTimezone","Date","shiftedStart","undefined","shiftedEnd","handleMouseOut","value","map","key","weekKey","week","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","isPresent","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","shouldShowRangeIndicator","handleMouseEnter","handleClick","shiftFromTimezone","PredefinedDates","onSelectDateRange","predefinedDatesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","handleItemClick","rangeIsSelected","isWholeMonth","isDateRangeTheWholeMonth","formattedText","formatDateHeader","formatSelectedDate","trim","getTime","Icon","toISOString","DateRangePicker","disabled","openDirection","placeholder","responsivePositioning","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","calendarOptions","defaultDate","useEffect","useLayoutEffect","current","getBoundingClientRect","right","window","innerWidth","closeDatePicker","useCallback","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedDates","length","body"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { DateTimeRangePickerInput, StyledDropdownItem, CalendarRenderer, DateTab
7
7
  import { Container } from '../Container/index.js';
8
8
  import { Panel } from '../Panel/index.js';
9
9
  import { Icon as SvgImage } from '../Icon/index.js';
10
- import { datesAreWithinMaxRange } from './utils.js';
10
+ import { shiftToTimezone, datesAreWithinMaxRange, shiftFromTimezone } from './utils.js';
11
11
  import '../../utils/date.js';
12
12
  import { Tabs } from '../Tabs/index.js';
13
13
  import { ButtonGroup } from '../ButtonGroup/index.js';
@@ -69,9 +69,13 @@ const Calendar = ({
69
69
  maxRangeLength,
70
70
  setSelectedDate,
71
71
  startDate,
72
- endDate
72
+ endDate,
73
+ timezone
73
74
  }) => {
74
75
  const [hoveredDate, setHoveredDate] = useState();
76
+ const today = shiftToTimezone(/* @__PURE__ */ new Date(), timezone);
77
+ const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : void 0;
78
+ const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : void 0;
75
79
  const handleMouseOut = () => {
76
80
  setHoveredDate(void 0);
77
81
  };
@@ -85,10 +89,9 @@ const Calendar = ({
85
89
  key: dayKey,
86
90
  value: fullDate
87
91
  }) => {
88
- const isSelected = startDate && isSameDate(startDate, fullDate) || endDate && isSameDate(endDate, fullDate);
89
- const today = /* @__PURE__ */ new Date();
92
+ const isSelected = shiftedStart && isSameDate(shiftedStart, fullDate) || shiftedEnd && isSameDate(shiftedEnd, fullDate);
90
93
  const isCurrentDate = isSameDate(today, fullDate);
91
- const isBetweenStartAndEndDates = Boolean(startDate && endDate && fullDate > startDate && fullDate < endDate);
94
+ const isBetweenStartAndEndDates = Boolean(shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd);
92
95
  let isDisabled = false;
93
96
  if (futureDatesDisabled && fullDate > today) {
94
97
  isDisabled = true;
@@ -96,17 +99,17 @@ const Calendar = ({
96
99
  if (futureStartDatesDisabled && calendarType === "startDate" && fullDate > today) {
97
100
  isDisabled = true;
98
101
  }
99
- if (maxRangeLength > 1 && startDate && !datesAreWithinMaxRange(startDate, fullDate, maxRangeLength)) {
102
+ if (maxRangeLength > 1 && shiftedStart && !datesAreWithinMaxRange(shiftedStart, fullDate, maxRangeLength)) {
100
103
  isDisabled = true;
101
104
  }
102
- if (calendarType === "endDate" && startDate && startDate > fullDate && !isSameDate(startDate, fullDate)) {
105
+ if (calendarType === "endDate" && !shiftedEnd && shiftedStart && shiftedStart > fullDate && !isSameDate(shiftedStart, fullDate)) {
103
106
  isDisabled = true;
104
107
  }
105
- if (calendarType === "startDate" && !startDate && endDate && fullDate > endDate) {
108
+ if (calendarType === "startDate" && !shiftedStart && shiftedEnd && fullDate > shiftedEnd) {
106
109
  isDisabled = true;
107
110
  }
108
- const startDateSelectedAndIsSelectingEndDate = calendarType === "endDate" && !endDate && Boolean(startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate);
109
- const endDateSelectedAndIsSelectingStartDate = calendarType === "startDate" && !startDate && Boolean(endDate && hoveredDate && fullDate < endDate && fullDate > hoveredDate);
111
+ const startDateSelectedAndIsSelectingEndDate = calendarType === "endDate" && !shiftedEnd && Boolean(shiftedStart && hoveredDate && fullDate > shiftedStart && fullDate < hoveredDate);
112
+ const endDateSelectedAndIsSelectingStartDate = calendarType === "startDate" && !shiftedStart && Boolean(shiftedEnd && hoveredDate && fullDate < shiftedEnd && fullDate > hoveredDate);
110
113
  const shouldShowRangeIndicator = startDateSelectedAndIsSelectingEndDate || endDateSelectedAndIsSelectingStartDate;
111
114
  const handleMouseEnter = () => {
112
115
  setHoveredDate(fullDate);
@@ -115,17 +118,30 @@ const Calendar = ({
115
118
  if (isDisabled) {
116
119
  return false;
117
120
  }
121
+ const originalFullDate = shiftFromTimezone(fullDate, timezone);
118
122
  if (calendarType === "startDate" && startDate) {
119
- fullDate.setHours(startDate.getHours());
120
- fullDate.setMinutes(startDate.getMinutes());
121
- fullDate.setSeconds(startDate.getSeconds());
123
+ if (timezone === "UTC") {
124
+ originalFullDate.setUTCHours(startDate.getUTCHours());
125
+ originalFullDate.setUTCMinutes(startDate.getUTCMinutes());
126
+ originalFullDate.setUTCSeconds(startDate.getUTCSeconds());
127
+ } else {
128
+ originalFullDate.setHours(startDate.getHours());
129
+ originalFullDate.setMinutes(startDate.getMinutes());
130
+ originalFullDate.setSeconds(startDate.getSeconds());
131
+ }
122
132
  }
123
133
  if (calendarType === "endDate" && endDate) {
124
- fullDate.setHours(endDate.getHours());
125
- fullDate.setMinutes(endDate.getMinutes());
126
- fullDate.setSeconds(endDate.getSeconds());
134
+ if (timezone === "UTC") {
135
+ originalFullDate.setUTCHours(endDate.getUTCHours());
136
+ originalFullDate.setUTCMinutes(endDate.getUTCMinutes());
137
+ originalFullDate.setUTCSeconds(endDate.getUTCSeconds());
138
+ } else {
139
+ originalFullDate.setHours(endDate.getHours());
140
+ originalFullDate.setMinutes(endDate.getMinutes());
141
+ originalFullDate.setSeconds(endDate.getSeconds());
142
+ }
127
143
  }
128
- setSelectedDate(fullDate, calendarType);
144
+ setSelectedDate(originalFullDate, calendarType);
129
145
  };
130
146
  return /* @__PURE__ */ jsx(DateRangeTableCell, { $shouldShowRangeIndicator: shouldShowRangeIndicator || isBetweenStartAndEndDates, $isCurrentMonth: isCurrentMonth, $isDisabled: isDisabled, $isSelected: isSelected, $isPresent: isCurrentDate, onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseOut, children: date }, dayKey);
131
147
  }) }, weekKey);
@@ -234,9 +250,10 @@ const validTimeRegex = /^\d{1,2}(:\d{1,2}(:\d{1,2})?)?$/;
234
250
  const TimeInput = ({
235
251
  date,
236
252
  setDate,
237
- shouldShowSeconds
253
+ shouldShowSeconds,
254
+ timezone
238
255
  }) => {
239
- let dayjsDate = dayjs(date);
256
+ let dayjsDate = timezone === "UTC" ? dayjs.utc(date) : dayjs(date);
240
257
  if (!date) {
241
258
  dayjsDate = dayjsDate.hour(12).minute(0);
242
259
  }
@@ -335,7 +352,8 @@ const TabbedCalendar = ({
335
352
  setSelectedDate,
336
353
  setStartDate,
337
354
  shouldShowSeconds,
338
- startDate
355
+ startDate,
356
+ timezone
339
357
  }) => {
340
358
  const [activeTab, setActiveTab] = useState(defaultActiveTab);
341
359
  useEffect(() => {
@@ -366,12 +384,12 @@ const TabbedCalendar = ({
366
384
  /* @__PURE__ */ jsx(Tabs.Trigger, { value: "endDate", "data-testid": "tabbed-calendar-trigger-end", children: "End date" })
367
385
  ] }),
368
386
  /* @__PURE__ */ jsxs(Tabs.Content, { value: "startDate", children: [
369
- /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions: startDateCalendarOptions, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, calendarType: "startDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate }) }),
370
- /* @__PURE__ */ jsx(TimeInput, { date: startDate, setDate: handleSetStartDate, shouldShowSeconds })
387
+ /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions: startDateCalendarOptions, timezone, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, calendarType: "startDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate, timezone }) }),
388
+ /* @__PURE__ */ jsx(TimeInput, { date: startDate, setDate: handleSetStartDate, shouldShowSeconds, timezone })
371
389
  ] }),
372
390
  /* @__PURE__ */ jsxs(Tabs.Content, { value: "endDate", children: [
373
- /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions: endDateCalendarOptions, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, calendarType: "endDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate }) }),
374
- /* @__PURE__ */ jsx(TimeInput, { date: endDate, setDate: handleSetEndDate, shouldShowSeconds })
391
+ /* @__PURE__ */ jsx(StyledCalendarRenderer, { calendarOptions: endDateCalendarOptions, timezone, children: (body) => /* @__PURE__ */ jsx(Calendar, { calendarBody: body, calendarType: "endDate", endDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setSelectedDate, startDate, timezone }) }),
392
+ /* @__PURE__ */ jsx(TimeInput, { date: endDate, setDate: handleSetEndDate, shouldShowSeconds, timezone })
375
393
  ] })
376
394
  ] });
377
395
  };
@@ -388,7 +406,8 @@ const DateTimeRangePicker = ({
388
406
  placeholder = "start date – end date",
389
407
  predefinedTimesList,
390
408
  shouldShowSeconds,
391
- startDate
409
+ startDate,
410
+ timezone = "system"
392
411
  }) => {
393
412
  const [isOpen, setIsOpen] = useState(false);
394
413
  const [selectedStartDate, setSelectedStartDate] = useState();
@@ -397,21 +416,35 @@ const DateTimeRangePicker = ({
397
416
  const [calendarOpenDirection, setCalendarOpenDirection] = useState(openDirection);
398
417
  const calendarContainerRef = useRef(null);
399
418
  useEffect(() => {
400
- if (startDate) {
401
- if (startDate.getHours() === 0) {
402
- startDate.setHours(12);
419
+ if (!startDate) {
420
+ return;
421
+ }
422
+ const startDateCopy = new Date(startDate);
423
+ const hours = timezone === "UTC" ? startDateCopy.getUTCHours() : startDateCopy.getHours();
424
+ if (hours === 0) {
425
+ if (timezone === "UTC") {
426
+ startDateCopy.setUTCHours(12);
427
+ } else {
428
+ startDateCopy.setHours(12);
403
429
  }
404
- setSelectedStartDate(startDate);
405
430
  }
406
- }, [startDate]);
431
+ setSelectedStartDate(startDateCopy);
432
+ }, [startDate, timezone]);
407
433
  useEffect(() => {
408
- if (endDate) {
409
- if (endDate.getHours() === 0) {
410
- endDate.setHours(12);
434
+ if (!endDate) {
435
+ return;
436
+ }
437
+ const endDateCopy = new Date(endDate);
438
+ const hours = timezone === "UTC" ? endDateCopy.getUTCHours() : endDateCopy.getHours();
439
+ if (hours === 0) {
440
+ if (timezone === "UTC") {
441
+ endDateCopy.setUTCHours(12);
442
+ } else {
443
+ endDateCopy.setHours(12);
411
444
  }
412
- setSelectedEndDate(endDate);
413
445
  }
414
- }, [endDate]);
446
+ setSelectedEndDate(endDateCopy);
447
+ }, [endDate, timezone]);
415
448
  useLayoutEffect(() => {
416
449
  if (shouldShowCustomRange && calendarContainerRef.current) {
417
450
  const rect = calendarContainerRef.current.getBoundingClientRect();
@@ -433,8 +466,13 @@ const DateTimeRangePicker = ({
433
466
  }
434
467
  }, []);
435
468
  const handleSelectDate = useCallback((selectedDate, calendarType) => {
436
- if (selectedDate.getHours() === 0 && selectedDate.getMinutes() === 0 && selectedDate.getSeconds() === 0) {
437
- selectedDate.setHours(12);
469
+ const isMidnight = timezone === "UTC" ? selectedDate.getUTCHours() === 0 && selectedDate.getUTCMinutes() === 0 && selectedDate.getUTCSeconds() === 0 : selectedDate.getHours() === 0 && selectedDate.getMinutes() === 0 && selectedDate.getSeconds() === 0;
470
+ if (isMidnight) {
471
+ if (timezone === "UTC") {
472
+ selectedDate.setUTCHours(12);
473
+ } else {
474
+ selectedDate.setHours(12);
475
+ }
438
476
  }
439
477
  if (calendarType === "startDate") {
440
478
  setSelectedStartDate(selectedDate);
@@ -454,7 +492,7 @@ const DateTimeRangePicker = ({
454
492
  }
455
493
  }
456
494
  }
457
- }, [onSelectDateRange, selectedEndDate, selectedStartDate]);
495
+ }, [closeDatePicker, closeOnDateRangeSelected, onSelectDateRange, selectedEndDate, selectedStartDate, timezone]);
458
496
  const onTriggerKeyDown = useCallback((e) => {
459
497
  if (e.key === "Enter" || e.key === " ") {
460
498
  e.preventDefault();
@@ -463,11 +501,11 @@ const DateTimeRangePicker = ({
463
501
  }, []);
464
502
  const shouldShowPredefinedTimes = predefinedTimesList !== void 0 && predefinedTimesList.length > 0;
465
503
  return /* @__PURE__ */ jsxs(Dropdown, { onOpenChange: handleOpenChange, open: isOpen, children: [
466
- /* @__PURE__ */ jsx(Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsx(DateTimeRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, shouldShowSeconds }) }),
504
+ /* @__PURE__ */ jsx(Dropdown.Trigger, { disabled, onKeyDown: onTriggerKeyDown, children: /* @__PURE__ */ jsx(DateTimeRangePickerInput, { "data-testid": "datepicker-input-container", disabled, isActive: isOpen, placeholder, selectedEndDate, selectedStartDate, shouldShowSeconds, timezone }) }),
467
505
  /* @__PURE__ */ jsx(Dropdown.Content, { align: "start", children: /* @__PURE__ */ jsx(Container, { orientation: "horizontal", children: shouldShowPredefinedTimes ? /* @__PURE__ */ jsxs(PredefinedCalendarContainer, { gap: "none", orientation: "horizontal", padding: "none", children: [
468
506
  /* @__PURE__ */ jsx(PredefinedTimes, { onSelectDateRange, predefinedTimesList, selectedEndDate, selectedStartDate, setEndDate: setSelectedEndDate, setStartDate: setSelectedStartDate, shouldShowCustomRange, showCustomDateRange: setShouldShowCustomRange }),
469
- shouldShowCustomRange && /* @__PURE__ */ jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate }) })
470
- ] }) : /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate }) }) }) })
507
+ shouldShowCustomRange && /* @__PURE__ */ jsx(CalendarRendererContainer, { $openDirection: calendarOpenDirection, ref: calendarContainerRef, children: /* @__PURE__ */ jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate, timezone }) })
508
+ ] }) : /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(TabbedCalendar, { defaultActiveTab, endDate: selectedEndDate, futureDatesDisabled, futureStartDatesDisabled, maxRangeLength, setEndDate: setSelectedEndDate, setSelectedDate: handleSelectDate, setStartDate: setSelectedStartDate, shouldShowSeconds: Boolean(shouldShowSeconds), startDate: selectedStartDate, timezone }) }) }) })
471
509
  ] });
472
510
  };
473
511