{"version":3,"file":"DateTimeRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n  ComponentProps,\n  Dispatch,\n  forwardRef,\n  KeyboardEvent,\n  MouseEvent,\n  ReactNode,\n  SetStateAction,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { Dropdown } from '../Dropdown/Dropdown';\nimport {\n  Body,\n  CalendarRenderer,\n  DateTimeRangePickerInput,\n  DateTableCell,\n  StyledDropdownItem,\n} from './Common';\nimport { Container } from '../Container/Container';\nimport { Panel } from '../Panel/Panel';\nimport { Icon } from '../Icon/Icon';\nimport {\n  DateRangeListItem,\n  Meridiem,\n  Timezone,\n  areDatesWithinMaxRange,\n  isDateRangeValid,\n  isDateRangeWithinRange,\n  shiftFromTimezone,\n  shiftToTimezone,\n} from './utils';\nimport { dayjs, Dayjs } from '@/utils/date';\nimport { Tabs } from '../Tabs/Tabs';\nimport { TextField } from '@/components/TextField';\nimport { ButtonGroup } from '../ButtonGroup/ButtonGroup';\nimport { Label } from '../Label/Label';\nimport { Text } from '../Text';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './DateTimeRangePicker.module.css';\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = ({\n  className,\n  children,\n  gap,\n  orientation,\n  padding,\n}: ComponentProps<typeof Panel>) => (\n  <Panel\n    gap={gap}\n    orientation={orientation}\n    padding={padding}\n    className={cn(styles['predefined-calendar-container'], className)}\n  >\n    {children}\n  </Panel>\n);\n\nconst PredefinedTimesContainer = ({\n  className,\n  children,\n  isResponsive,\n  orientation,\n  'data-testid': dataTestId,\n}: ComponentProps<typeof Container> & { 'data-testid'?: string }) => (\n  <Container\n    isResponsive={isResponsive}\n    orientation={orientation}\n    data-testid={dataTestId}\n    className={cn(styles['predefined-times-container'], className)}\n  >\n    {children}\n  </Container>\n);\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarRendererContainerVariants = cva(styles['calendar-renderer-container'], {\n  variants: {\n    openDirection: {\n      left: styles['calendar-renderer-container_left'],\n      right: styles['calendar-renderer-container_right'],\n    },\n  },\n  defaultVariants: { openDirection: 'right' },\n});\n\nconst CalendarRendererContainer = forwardRef<\n  HTMLDivElement,\n  { openDirection?: OpenDirection; children: ReactNode }\n>(({ openDirection, children }, ref) => (\n  <div\n    ref={ref}\n    className={calendarRendererContainerVariants({ openDirection })}\n  >\n    {children}\n  </div>\n));\nCalendarRendererContainer.displayName = 'CalendarRendererContainer';\n\nconst NoOverflowDropdownContent = ({\n  className,\n  children,\n  align,\n  responsivePositioning,\n}: {\n  className?: string;\n  children?: ReactNode;\n  align?: 'start' | 'center' | 'end';\n  responsivePositioning?: boolean;\n}) => (\n  <Dropdown.Content\n    align={align}\n    responsivePositioning={responsivePositioning}\n    className={cn(styles['no-overflow-dropdown-content'], className)}\n  >\n    {children}\n  </Dropdown.Content>\n);\n\nconst StyledCalendarRenderer = ({\n  className,\n  children,\n  calendarOptions,\n  timezone,\n}: ComponentProps<typeof CalendarRenderer>) => (\n  <CalendarRenderer\n    calendarOptions={calendarOptions}\n    timezone={timezone}\n    className={cn(styles['styled-calendar-renderer'], className)}\n  >\n    {children}\n  </CalendarRenderer>\n);\n\nconst BottomPaddingTabs = ({\n  className,\n  children,\n  onValueChange,\n  value,\n}: ComponentProps<typeof Tabs>) => (\n  <Tabs\n    onValueChange={onValueChange}\n    value={value}\n    className={cn(styles['bottom-padding-tabs'], className)}\n  >\n    {children}\n  </Tabs>\n);\n\nconst StyledTriggerList = ({\n  className,\n  children,\n}: ComponentProps<typeof Tabs.TriggersList>) => (\n  <Tabs.TriggersList className={cn(styles['styled-trigger-list'], className)}>\n    {children}\n  </Tabs.TriggersList>\n);\n\nconst ScrollableContainer = ({\n  className,\n  children,\n  orientation,\n}: ComponentProps<typeof Container>) => (\n  <Container\n    orientation={orientation}\n    className={cn(styles['scrollable-container'], className)}\n  >\n    {children}\n  </Container>\n);\n\nconst TimeInputContainer = ({\n  className,\n  children,\n  gap,\n  padding,\n  maxWidth,\n  orientation,\n  justifyContent,\n}: ComponentProps<typeof Container>) => (\n  <Container\n    gap={gap}\n    padding={padding}\n    maxWidth={maxWidth}\n    orientation={orientation}\n    justifyContent={justifyContent}\n    className={cn(styles['time-input-container'], className)}\n  >\n    {children}\n  </Container>\n);\n\nconst dateRangeTableCellVariants = cva(undefined, {\n  variants: {\n    showRangeIndicator: { true: styles['date-range-table-cell_indicator'] },\n  },\n});\n\nconst DateRangeTableCell = ({\n  shouldShowRangeIndicator,\n  className,\n  children,\n  isCurrentMonth,\n  isDisabled,\n  isSelected,\n  isPresent,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n}: ComponentProps<typeof DateTableCell> & {\n  shouldShowRangeIndicator?: boolean;\n}) => (\n  <DateTableCell\n    isCurrentMonth={isCurrentMonth}\n    isDisabled={isDisabled}\n    isSelected={isSelected}\n    isPresent={isPresent}\n    onClick={onClick}\n    onMouseEnter={onMouseEnter}\n    onMouseLeave={onMouseLeave}\n    className={cn(\n      dateRangeTableCellVariants({ showRangeIndicator: shouldShowRangeIndicator }),\n      className\n    )}\n  >\n    {children}\n  </DateTableCell>\n);\n\ntype CalendarType = 'startDate' | 'endDate';\n\ntype SetSelectedDate = (selectedDate: Date, calendarType: CalendarType) => void;\n\ntype SetDate = (date: Date) => void;\n\ninterface CalendarProps {\n  calendarBody: Body;\n  calendarType: CalendarType;\n  futureDatesDisabled: boolean;\n  futureStartDatesDisabled: boolean;\n  maxRangeLength: number;\n  setSelectedDate: SetSelectedDate;\n  startDate?: Date;\n  endDate?: Date;\n  timezone: Timezone;\n}\n\nconst Calendar = ({\n  calendarBody,\n  calendarType,\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\n          const isCurrentDate = isSameDate(today, fullDate);\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 (\n            futureStartDatesDisabled &&\n            calendarType === 'startDate' &&\n            fullDate > today\n          ) {\n            isDisabled = true;\n          }\n\n          if (\n            maxRangeLength > 1 &&\n            shiftedStart &&\n            !areDatesWithinMaxRange(shiftedStart, fullDate, maxRangeLength)\n          ) {\n            isDisabled = true;\n          }\n\n          // start date is selected, end date is not; disable anything before start date\n          if (\n            calendarType === 'endDate' &&\n            !shiftedEnd &&\n            shiftedStart &&\n            shiftedStart > fullDate &&\n            !isSameDate(shiftedStart, fullDate)\n          ) {\n            isDisabled = true;\n          }\n\n          // start date isn't selected, but end date is; disable anything after end date\n          if (\n            calendarType === 'startDate' &&\n            !shiftedStart &&\n            shiftedEnd &&\n            fullDate > shiftedEnd\n          ) {\n            isDisabled = true;\n          }\n\n          const startDateSelectedAndIsSelectingEndDate =\n            calendarType === 'endDate' &&\n            !shiftedEnd &&\n            Boolean(\n              shiftedStart &&\n              hoveredDate &&\n              fullDate > shiftedStart &&\n              fullDate < hoveredDate\n            );\n\n          const endDateSelectedAndIsSelectingStartDate =\n            calendarType === 'startDate' &&\n            !shiftedStart &&\n            Boolean(\n              shiftedEnd && hoveredDate && fullDate < shiftedEnd && fullDate > hoveredDate\n            );\n\n          const shouldShowRangeIndicator =\n            startDateSelectedAndIsSelectingEndDate ||\n            endDateSelectedAndIsSelectingStartDate;\n\n          const handleMouseEnter = () => {\n            setHoveredDate(fullDate);\n          };\n\n          const handleClick = () => {\n            if (isDisabled) {\n              return false;\n            }\n\n            const originalFullDate = shiftFromTimezone(fullDate, timezone);\n\n            // If the user selects a start date and changes the start date\n            // use any hours, minutes, seconds they've already set\n            if (calendarType === 'startDate' && startDate) {\n              if (timezone === 'UTC') {\n                originalFullDate.setUTCHours(startDate.getUTCHours());\n                originalFullDate.setUTCMinutes(startDate.getUTCMinutes());\n                originalFullDate.setUTCSeconds(startDate.getUTCSeconds());\n              } else {\n                originalFullDate.setHours(startDate.getHours());\n                originalFullDate.setMinutes(startDate.getMinutes());\n                originalFullDate.setSeconds(startDate.getSeconds());\n              }\n            }\n\n            // If the user selects an end date and changes the end date\n            // use any hours, minutes, seconds they've already set\n            if (calendarType === 'endDate' && endDate) {\n              if (timezone === 'UTC') {\n                originalFullDate.setUTCHours(endDate.getUTCHours());\n                originalFullDate.setUTCMinutes(endDate.getUTCMinutes());\n                originalFullDate.setUTCSeconds(endDate.getUTCSeconds());\n              } else {\n                originalFullDate.setHours(endDate.getHours());\n                originalFullDate.setMinutes(endDate.getMinutes());\n                originalFullDate.setSeconds(endDate.getSeconds());\n              }\n            }\n\n            setSelectedDate(originalFullDate, calendarType);\n          };\n\n          return (\n            <DateRangeTableCell\n              shouldShowRangeIndicator={\n                shouldShowRangeIndicator || isBetweenStartAndEndDates\n              }\n              isCurrentMonth={isCurrentMonth}\n              isDisabled={isDisabled}\n              isSelected={Boolean(isSelected)}\n              isPresent={isCurrentDate}\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 PredefinedTimesProps {\n  onSelectDateRange: (\n    startDate: Date,\n    endDate: Date,\n    predefinedDateLabel?: string\n  ) => void;\n  predefinedTimesList: DateRangeListItem[];\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 PredefinedTimes = ({\n  onSelectDateRange,\n  predefinedTimesList,\n  selectedEndDate,\n  selectedStartDate,\n  setEndDate,\n  setStartDate,\n  shouldShowCustomRange,\n  showCustomDateRange,\n  timezone,\n}: PredefinedTimesProps) => {\n  const handleCustomTimePeriodClick = (event: MouseEvent) => {\n    event.preventDefault();\n    showCustomDateRange(!shouldShowCustomRange);\n  };\n\n  return (\n    <PredefinedTimesContainer\n      data-testid=\"predefined-times-list\"\n      isResponsive={false}\n      orientation=\"vertical\"\n    >\n      <ScrollableContainer orientation=\"vertical\">\n        {predefinedTimesList.map(({ dateRange, label }) => {\n          const { startDate, endDate } = dateRange;\n\n          const handleItemClick = () => {\n            setStartDate(startDate);\n            setEndDate(endDate);\n            onSelectDateRange(startDate, endDate, label);\n          };\n\n          const selectedRange =\n            selectedStartDate && selectedEndDate\n              ? { startDate: selectedStartDate, endDate: selectedEndDate }\n              : undefined;\n\n          const rangeIsSelected =\n            selectedRange !== undefined &&\n            isDateRangeWithinRange(selectedRange, dateRange, timezone);\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={label}\n                justifyContent=\"space-between\"\n                orientation=\"horizontal\"\n              >\n                {label}\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    </PredefinedTimesContainer>\n  );\n};\n\nconst parseTimeString = (\n  timeString: string\n): { isValid: boolean; parsedDate?: Dayjs } => {\n  if (!validTimeRegex.test(timeString)) {\n    return { isValid: false };\n  }\n\n  const [hours, minutes, seconds] = timeString.split(':');\n\n  const hoursAsNumber = parseInt(hours, 10);\n  if (Number.isNaN(hoursAsNumber)) {\n    return { isValid: false };\n  }\n\n  if (hoursAsNumber > 23 || hoursAsNumber < 0) {\n    return { isValid: false };\n  }\n\n  let parsedDate;\n  if (!minutes) {\n    parsedDate = dayjs(hours, 'h');\n  } else {\n    const minutesAsNumber = parseInt(minutes, 10);\n    if (Number.isNaN(minutesAsNumber)) {\n      return { isValid: false };\n    }\n\n    if (minutesAsNumber > 59 || minutesAsNumber < 0) {\n      return { isValid: false };\n    }\n\n    if (!seconds) {\n      parsedDate = dayjs(`${hours}:${minutes}`, 'h:mm');\n    } else {\n      const secondsAsNumber = parseInt(seconds, 10);\n\n      if (Number.isNaN(secondsAsNumber)) {\n        return { isValid: false };\n      }\n\n      if (secondsAsNumber > 59 || secondsAsNumber < 0) {\n        return { isValid: false };\n      }\n\n      parsedDate = dayjs(`${hours}:${minutes}:${seconds}`, 'h:mm:ss');\n    }\n  }\n\n  if (!parsedDate.isValid()) {\n    return { isValid: false };\n  }\n\n  return { isValid: true, parsedDate };\n};\n\nconst validTimeRegex = /^\\d{1,2}(:\\d{1,2}(:\\d{1,2})?)?$/;\n\ninterface TimeInputProps {\n  date: Date | undefined;\n  setDate: (date: Date) => void;\n  shouldShowSeconds: boolean;\n  timezone: Timezone;\n}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds, timezone }: TimeInputProps) => {\n  let dayjsDate = timezone === 'UTC' ? dayjs.utc(date) : dayjs(date);\n\n  if (!date) {\n    dayjsDate = dayjsDate.hour(12).minute(0);\n  }\n\n  const formattedDate = shouldShowSeconds\n    ? dayjsDate.format('hh:mm:ss')\n    : dayjsDate.format('hh:mm');\n  const [timeString, setTimeString] = useState<string>(formattedDate);\n  const [dateIsValid, setDateIsValid] = useState<boolean>(true);\n  const [meridiem, setMeridiem] = useState<Meridiem>();\n  const isEnabled = Boolean(date);\n\n  useEffect(() => {\n    if (date) {\n      setMeridiem(dayjsDate.format('a') as Meridiem);\n    }\n  }, [date, dayjsDate]);\n\n  const handleTimeChange = useCallback(\n    (newTimeString: string) => {\n      setTimeString(newTimeString);\n\n      if (!date) {\n        return;\n      }\n\n      const trimmedTime = newTimeString.trim();\n      if (!trimmedTime) {\n        return;\n      }\n\n      const { isValid, parsedDate } = parseTimeString(trimmedTime);\n\n      if (!isValid) {\n        setDateIsValid(false);\n        return;\n      }\n\n      if (!parsedDate) {\n        setDateIsValid(false);\n        return;\n      }\n\n      setDateIsValid(true);\n\n      let hour = parsedDate.hour();\n\n      // If the meridiem is set to am and the user enters a time greater than 12,\n      // e.g. 18:00, it's a pretty clear indication they mean afternoon, so set the\n      // meridiem to pm\n      if (meridiem === 'am' && hour >= 12) {\n        setMeridiem('pm');\n      }\n      // It's not as easy to infer that a user intended 8:00 to mean 08:00 when the meridiem\n      // is set to pm, so don't change the meridiem in that case\n      if (meridiem === 'pm' && hour < 12) {\n        hour = parsedDate.hour() + 12;\n      }\n\n      const newDate = shouldShowSeconds\n        ? dayjsDate\n            .hour(hour)\n            .minute(parsedDate.minute())\n            .second(parsedDate.second())\n            .toDate()\n        : dayjsDate.hour(hour).minute(parsedDate.minute()).toDate();\n\n      setDate(newDate);\n    },\n    [date, dayjsDate, meridiem, setDate, shouldShowSeconds]\n  );\n\n  const handleMeridiemChange = useCallback(\n    (newMeridiem: string) => {\n      setMeridiem(newMeridiem as Meridiem);\n\n      if (newMeridiem === 'pm' && dayjsDate.hour() < 12) {\n        const newDate = dayjsDate.hour(dayjsDate.hour() + 12).toDate();\n\n        setDate(newDate);\n\n        return;\n      }\n\n      if (newMeridiem === 'am' && dayjsDate.hour() >= 12) {\n        const newDate = dayjsDate.hour(dayjsDate.hour() - 12).toDate();\n\n        setDate(newDate);\n\n        return;\n      }\n    },\n    [dayjsDate, setDate]\n  );\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLInputElement>) => {\n      if (event.key === 'Enter') {\n        const { isValid, parsedDate } = parseTimeString(timeString);\n\n        if (!isValid) {\n          return;\n        }\n\n        if (!parsedDate) {\n          return;\n        }\n\n        const newDate = shouldShowSeconds\n          ? dayjsDate\n              .hour(parsedDate.hour())\n              .minute(parsedDate.minute())\n              .second(parsedDate.second())\n              .toDate()\n          : dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).toDate();\n\n        setDate(newDate);\n      }\n    },\n    [dayjsDate, setDate, shouldShowSeconds, timeString]\n  );\n\n  return (\n    <TimeInputContainer\n      gap=\"sm\"\n      padding=\"xs\"\n      maxWidth={`${calendarFullWidth}`}\n      orientation=\"horizontal\"\n      justifyContent=\"end\"\n    >\n      <Container maxWidth=\"8%\">\n        <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n      </Container>\n      <Container\n        justifyContent=\"space-evenly\"\n        orientation=\"horizontal\"\n        maxWidth=\"85%\"\n      >\n        <Container\n          maxWidth=\"45%\"\n          orientation=\"horizontal\"\n        >\n          <TextField\n            data-testid=\"date-time-picker-time-input\"\n            disabled={!isEnabled}\n            error={dateIsValid ? null : true}\n            id=\"date-time-picker-time-input\"\n            onChange={handleTimeChange}\n            onKeyDown={handleKeyDown}\n            value={timeString}\n          />\n        </Container>\n        <Container maxWidth=\"45%\">\n          <ButtonGroup\n            onClick={handleMeridiemChange}\n            options={[\n              {\n                label: 'am',\n                value: 'am',\n              },\n              {\n                label: 'pm',\n                value: 'pm',\n              },\n            ]}\n            selected={meridiem}\n            type=\"default\"\n          />\n        </Container>\n      </Container>\n    </TimeInputContainer>\n  );\n};\n\nexport type Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n  defaultActiveTab?: Tab;\n  endDate: Date | undefined;\n  futureDatesDisabled: boolean;\n  futureStartDatesDisabled: boolean;\n  maxRangeLength: number;\n  setEndDate: SetDate;\n  setSelectedDate: SetSelectedDate;\n  setStartDate: SetDate;\n  shouldShowSeconds: boolean;\n  startDate: Date | undefined;\n  timezone: Timezone;\n}\n\nconst TabbedCalendar = ({\n  defaultActiveTab = 'startDate',\n  endDate,\n  futureDatesDisabled,\n  futureStartDatesDisabled,\n  maxRangeLength,\n  setEndDate,\n  setSelectedDate,\n  setStartDate,\n  shouldShowSeconds,\n  startDate,\n  timezone,\n}: TabbedCalendarProps) => {\n  const [activeTab, setActiveTab] = useState<Tab>(defaultActiveTab);\n\n  useEffect(() => {\n    setActiveTab(defaultActiveTab);\n  }, [defaultActiveTab]);\n\n  const handleTabChange = useCallback((newTab: string) => {\n    setActiveTab(newTab as Tab);\n  }, []);\n\n  const handleSetStartDate = useCallback(\n    (startDate: Date) => {\n      setStartDate(startDate);\n\n      setSelectedDate(startDate, 'startDate');\n    },\n    [setSelectedDate, setStartDate]\n  );\n\n  const handleSetEndDate = useCallback(\n    (endDate: Date) => {\n      setEndDate(endDate);\n\n      setSelectedDate(endDate, 'endDate');\n    },\n    [setEndDate, setSelectedDate]\n  );\n\n  const startDateCalendarOptions: UseCalendarOptions = {};\n  const endDateCalendarOptions: UseCalendarOptions = {};\n\n  // If a start date is selected, open the calendar to that date\n  if (startDate) {\n    startDateCalendarOptions.defaultDate = startDate;\n  }\n\n  // If an end date is selected, open the calendar to that date\n  if (endDate) {\n    endDateCalendarOptions.defaultDate = endDate;\n  }\n\n  const startDateIsAfterEndDate =\n    startDate && endDate && !isDateRangeValid({ startDate, endDate });\n\n  return (\n    <BottomPaddingTabs\n      onValueChange={handleTabChange}\n      value={activeTab}\n    >\n      <StyledTriggerList>\n        <Tabs.Trigger\n          value=\"startDate\"\n          data-testid=\"tabbed-calendar-trigger-start\"\n        >\n          Start date\n        </Tabs.Trigger>\n        <Tabs.Trigger\n          value=\"endDate\"\n          data-testid=\"tabbed-calendar-trigger-end\"\n        >\n          End date\n        </Tabs.Trigger>\n      </StyledTriggerList>\n      <Tabs.Content value=\"startDate\">\n        <StyledCalendarRenderer\n          calendarOptions={startDateCalendarOptions}\n          timezone={timezone}\n        >\n          {(body: Body) => (\n            <Calendar\n              calendarBody={body}\n              calendarType=\"startDate\"\n              endDate={endDate}\n              futureDatesDisabled={futureDatesDisabled}\n              futureStartDatesDisabled={futureStartDatesDisabled}\n              maxRangeLength={maxRangeLength}\n              setSelectedDate={setSelectedDate}\n              startDate={startDate}\n              timezone={timezone}\n            />\n          )}\n        </StyledCalendarRenderer>\n        <TimeInput\n          date={startDate}\n          setDate={handleSetStartDate}\n          shouldShowSeconds={shouldShowSeconds}\n          timezone={timezone}\n        />\n      </Tabs.Content>\n      <Tabs.Content value=\"endDate\">\n        <StyledCalendarRenderer\n          calendarOptions={endDateCalendarOptions}\n          timezone={timezone}\n        >\n          {(body: Body) => (\n            <Calendar\n              calendarBody={body}\n              calendarType=\"endDate\"\n              endDate={endDate}\n              futureDatesDisabled={futureDatesDisabled}\n              futureStartDatesDisabled={futureStartDatesDisabled}\n              maxRangeLength={maxRangeLength}\n              setSelectedDate={setSelectedDate}\n              startDate={startDate}\n              timezone={timezone}\n            />\n          )}\n        </StyledCalendarRenderer>\n        <TimeInput\n          date={endDate}\n          setDate={handleSetEndDate}\n          shouldShowSeconds={shouldShowSeconds}\n          timezone={timezone}\n        />\n      </Tabs.Content>\n      {startDateIsAfterEndDate && (\n        <Text\n          align=\"center\"\n          color=\"danger\"\n          fillWidth\n        >\n          End date and time must be after start\n        </Text>\n      )}\n    </BottomPaddingTabs>\n  );\n};\n\nexport interface DateTimeRangePickerProps {\n  closeOnDateRangeSelected?: boolean;\n  defaultActiveTab?: Tab;\n  disabled?: boolean;\n  endDate?: Date;\n  futureDatesDisabled?: boolean;\n  futureStartDatesDisabled?: boolean;\n  onSelectDateRange: (\n    startDate: Date,\n    endDate: Date,\n    predefinedDateLabel?: string\n  ) => void;\n  openDirection?: OpenDirection;\n  placeholder?: string;\n  predefinedTimesList?: DateRangeListItem[];\n  maxRangeLength?: number;\n  responsivePositioning?: boolean;\n  shouldFireIfInvalid?: boolean;\n  shouldShowSeconds?: boolean;\n  startDate?: Date;\n  timezone?: Timezone;\n}\n\nexport const DateTimeRangePicker = ({\n  closeOnDateRangeSelected = false,\n  defaultActiveTab,\n  disabled = false,\n  endDate,\n  futureDatesDisabled = false,\n  futureStartDatesDisabled = false,\n  maxRangeLength = -1,\n  onSelectDateRange,\n  openDirection = 'right',\n  placeholder = 'start date – end date',\n  predefinedTimesList,\n  responsivePositioning = true,\n  shouldFireIfInvalid = true,\n  shouldShowSeconds,\n  startDate,\n  timezone = 'system',\n}: DateTimeRangePickerProps) => {\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  useEffect(() => {\n    if (!startDate) {\n      return;\n    }\n\n    const startDateCopy = new Date(startDate);\n\n    const hours =\n      timezone === 'UTC' ? startDateCopy.getUTCHours() : startDateCopy.getHours();\n\n    if (hours === 0) {\n      if (timezone === 'UTC') {\n        startDateCopy.setUTCHours(12);\n      } else {\n        startDateCopy.setHours(12);\n      }\n    }\n\n    setSelectedStartDate(startDateCopy);\n  }, [startDate, timezone]);\n\n  useEffect(() => {\n    if (!endDate) {\n      return;\n    }\n\n    const endDateCopy = new Date(endDate);\n\n    const hours = timezone === 'UTC' ? endDateCopy.getUTCHours() : endDateCopy.getHours();\n    if (hours === 0) {\n      if (timezone === 'UTC') {\n        endDateCopy.setUTCHours(12);\n      } else {\n        endDateCopy.setHours(12);\n      }\n    }\n\n    setSelectedEndDate(endDateCopy);\n  }, [endDate, timezone]);\n\n  useLayoutEffect(() => {\n    if (shouldShowCustomRange && calendarContainerRef.current) {\n      const rect = calendarContainerRef.current.getBoundingClientRect();\n\n      if (rect.right > window.innerWidth) {\n        setCalendarOpenDirection('left');\n      }\n    }\n  }, [shouldShowCustomRange]);\n\n  const closeDatePicker = useCallback((): void => {\n    setIsOpen(false);\n    setShouldShowCustomRange(false);\n    setCalendarOpenDirection('right');\n  }, []);\n\n  const handleOpenChange = useCallback((isOpen: boolean): void => {\n    setIsOpen(isOpen);\n\n    if (!isOpen) {\n      setShouldShowCustomRange(false);\n      setCalendarOpenDirection('right');\n    }\n  }, []);\n\n  const handleSelectDate = useCallback(\n    (selectedDate: Date, calendarType: CalendarType): void => {\n      const isMidnight =\n        timezone === 'UTC'\n          ? selectedDate.getUTCHours() === 0 &&\n            selectedDate.getUTCMinutes() === 0 &&\n            selectedDate.getUTCSeconds() === 0\n          : selectedDate.getHours() === 0 &&\n            selectedDate.getMinutes() === 0 &&\n            selectedDate.getSeconds() === 0;\n\n      if (isMidnight) {\n        // set the time to 12 noon if time hasn't been set yet\n\n        if (timezone === 'UTC') {\n          selectedDate.setUTCHours(12);\n        } else {\n          selectedDate.setHours(12);\n        }\n      }\n\n      if (calendarType === 'startDate') {\n        setSelectedStartDate(selectedDate);\n\n        if (selectedEndDate) {\n          if (\n            !shouldFireIfInvalid &&\n            !isDateRangeValid({ startDate: selectedDate, endDate: selectedEndDate })\n          ) {\n            return;\n          }\n\n          onSelectDateRange(selectedDate, selectedEndDate);\n\n          if (closeOnDateRangeSelected) {\n            closeDatePicker();\n          }\n        }\n      }\n\n      if (calendarType === 'endDate') {\n        setSelectedEndDate(selectedDate);\n\n        if (selectedStartDate) {\n          if (\n            !shouldFireIfInvalid &&\n            !isDateRangeValid({ startDate: selectedStartDate, endDate: selectedDate })\n          ) {\n            return;\n          }\n\n          onSelectDateRange(selectedStartDate, selectedDate);\n\n          if (closeOnDateRangeSelected) {\n            closeDatePicker();\n          }\n        }\n      }\n    },\n    [\n      closeDatePicker,\n      closeOnDateRangeSelected,\n      onSelectDateRange,\n      selectedEndDate,\n      selectedStartDate,\n      shouldFireIfInvalid,\n      timezone,\n    ]\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 shouldShowPredefinedTimes =\n    predefinedTimesList !== undefined && predefinedTimesList.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        <DateTimeRangePickerInput\n          data-testid=\"datepicker-input-container\"\n          disabled={disabled}\n          isActive={isOpen}\n          placeholder={placeholder}\n          selectedEndDate={selectedEndDate}\n          selectedStartDate={selectedStartDate}\n          shouldShowSeconds={shouldShowSeconds}\n          timezone={timezone}\n        />\n      </Dropdown.Trigger>\n      <NoOverflowDropdownContent\n        align=\"start\"\n        responsivePositioning={responsivePositioning}\n      >\n        <Container orientation=\"horizontal\">\n          {shouldShowPredefinedTimes ? (\n            <PredefinedCalendarContainer\n              gap=\"none\"\n              orientation=\"horizontal\"\n              padding=\"none\"\n            >\n              <PredefinedTimes\n                onSelectDateRange={onSelectDateRange}\n                predefinedTimesList={predefinedTimesList}\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                  <TabbedCalendar\n                    defaultActiveTab={defaultActiveTab}\n                    endDate={selectedEndDate}\n                    futureDatesDisabled={futureDatesDisabled}\n                    futureStartDatesDisabled={futureStartDatesDisabled}\n                    maxRangeLength={maxRangeLength}\n                    setEndDate={setSelectedEndDate}\n                    setSelectedDate={handleSelectDate}\n                    setStartDate={setSelectedStartDate}\n                    shouldShowSeconds={Boolean(shouldShowSeconds)}\n                    startDate={selectedStartDate}\n                    timezone={timezone}\n                  />\n                </CalendarRendererContainer>\n              )}\n            </PredefinedCalendarContainer>\n          ) : (\n            <>\n              <TabbedCalendar\n                defaultActiveTab={defaultActiveTab}\n                endDate={selectedEndDate}\n                futureDatesDisabled={futureDatesDisabled}\n                futureStartDatesDisabled={futureStartDatesDisabled}\n                maxRangeLength={maxRangeLength}\n                setEndDate={setSelectedEndDate}\n                setSelectedDate={handleSelectDate}\n                setStartDate={setSelectedStartDate}\n                shouldShowSeconds={Boolean(shouldShowSeconds)}\n                startDate={selectedStartDate}\n                timezone={timezone}\n              />\n            </>\n          )}\n        </Container>\n      </NoOverflowDropdownContent>\n    </Dropdown>\n  );\n};\n"],"names":["jsx","Panel","cn","styles","Container","cva","forwardRef","Dropdown","CalendarRenderer","Tabs","DateTableCell","useState","shiftToTimezone","isSameDate","areDatesWithinMaxRange","shiftFromTimezone","jsxs","isDateRangeWithinRange","StyledDropdownItem","Icon","dayjs","useEffect","useCallback","Label","TextField","ButtonGroup","startDate","endDate","isDateRangeValid","Text","useRef","useLayoutEffect","isOpen","DateTimeRangePickerInput","Fragment"],"mappings":"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"}