@clickhouse/click-ui 0.10.0-rc1 → 0.10.0

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 (179) hide show
  1. package/dist/cjs/click-ui.css +6 -0
  2. package/dist/cjs/components/Assets/Flags/Austria.cjs +47 -0
  3. package/dist/cjs/components/Assets/Flags/Austria.cjs.map +1 -0
  4. package/dist/cjs/components/Assets/Flags/Bahrain.cjs +47 -0
  5. package/dist/cjs/components/Assets/Flags/Bahrain.cjs.map +1 -0
  6. package/dist/cjs/components/Assets/Flags/Belgium.cjs +62 -0
  7. package/dist/cjs/components/Assets/Flags/Belgium.cjs.map +1 -0
  8. package/dist/cjs/components/Assets/Flags/Canada.cjs +13 -21
  9. package/dist/cjs/components/Assets/Flags/Canada.cjs.map +1 -1
  10. package/dist/cjs/components/Assets/Flags/Chile.cjs +92 -0
  11. package/dist/cjs/components/Assets/Flags/Chile.cjs.map +1 -0
  12. package/dist/cjs/components/Assets/Flags/China.cjs +47 -0
  13. package/dist/cjs/components/Assets/Flags/China.cjs.map +1 -0
  14. package/dist/cjs/components/Assets/Flags/Denmark.cjs +54 -0
  15. package/dist/cjs/components/Assets/Flags/Denmark.cjs.map +1 -0
  16. package/dist/cjs/components/Assets/Flags/Finland.cjs +54 -0
  17. package/dist/cjs/components/Assets/Flags/Finland.cjs.map +1 -0
  18. package/dist/cjs/components/Assets/Flags/France.cjs +26 -17
  19. package/dist/cjs/components/Assets/Flags/France.cjs.map +1 -1
  20. package/dist/cjs/components/Assets/Flags/Greece.cjs +128 -0
  21. package/dist/cjs/components/Assets/Flags/Greece.cjs.map +1 -0
  22. package/dist/cjs/components/Assets/Flags/Indonesia.cjs +14 -14
  23. package/dist/cjs/components/Assets/Flags/Indonesia.cjs.map +1 -1
  24. package/dist/cjs/components/Assets/Flags/Ireland.cjs +10 -10
  25. package/dist/cjs/components/Assets/Flags/Ireland.cjs.map +1 -1
  26. package/dist/cjs/components/Assets/Flags/Italy.cjs +63 -0
  27. package/dist/cjs/components/Assets/Flags/Italy.cjs.map +1 -0
  28. package/dist/cjs/components/Assets/Flags/Malaysia.cjs +2 -2
  29. package/dist/cjs/components/Assets/Flags/Malaysia.cjs.map +1 -1
  30. package/dist/cjs/components/Assets/Flags/Mexico.cjs +8 -8
  31. package/dist/cjs/components/Assets/Flags/Mexico.cjs.map +1 -1
  32. package/dist/cjs/components/Assets/Flags/New-Zealand.cjs +553 -0
  33. package/dist/cjs/components/Assets/Flags/New-Zealand.cjs.map +1 -0
  34. package/dist/cjs/components/Assets/Flags/Norway.cjs +68 -0
  35. package/dist/cjs/components/Assets/Flags/Norway.cjs.map +1 -0
  36. package/dist/cjs/components/Assets/Flags/Poland.cjs +55 -0
  37. package/dist/cjs/components/Assets/Flags/Poland.cjs.map +1 -0
  38. package/dist/cjs/components/Assets/Flags/Qatar.cjs +47 -0
  39. package/dist/cjs/components/Assets/Flags/Qatar.cjs.map +1 -0
  40. package/dist/cjs/components/Assets/Flags/Saudi-Arabia.cjs +176 -0
  41. package/dist/cjs/components/Assets/Flags/Saudi-Arabia.cjs.map +1 -0
  42. package/dist/cjs/components/Assets/Flags/Singapore.cjs +12 -12
  43. package/dist/cjs/components/Assets/Flags/Singapore.cjs.map +1 -1
  44. package/dist/cjs/components/Assets/Flags/Spain.cjs +4447 -0
  45. package/dist/cjs/components/Assets/Flags/Spain.cjs.map +1 -0
  46. package/dist/cjs/components/Assets/Flags/Sweden.cjs +11 -11
  47. package/dist/cjs/components/Assets/Flags/Sweden.cjs.map +1 -1
  48. package/dist/cjs/components/Assets/Flags/Switzerland.cjs +30 -21
  49. package/dist/cjs/components/Assets/Flags/Switzerland.cjs.map +1 -1
  50. package/dist/cjs/components/Assets/Flags/Taiwan.cjs +5 -5
  51. package/dist/cjs/components/Assets/Flags/Taiwan.cjs.map +1 -1
  52. package/dist/cjs/components/Assets/Flags/Thailand.cjs +62 -0
  53. package/dist/cjs/components/Assets/Flags/Thailand.cjs.map +1 -0
  54. package/dist/cjs/components/Assets/Flags/United-Arab-Emirates.cjs +20 -20
  55. package/dist/cjs/components/Assets/Flags/United-Arab-Emirates.cjs.map +1 -1
  56. package/dist/cjs/components/Assets/Flags/United-States.cjs +2 -2
  57. package/dist/cjs/components/Assets/Flags/United-States.cjs.map +1 -1
  58. package/dist/cjs/components/Assets/Flags/system/FlagsDark.cjs +32 -0
  59. package/dist/cjs/components/Assets/Flags/system/FlagsDark.cjs.map +1 -1
  60. package/dist/cjs/components/Assets/Flags/system/FlagsLight.cjs +32 -0
  61. package/dist/cjs/components/Assets/Flags/system/FlagsLight.cjs.map +1 -1
  62. package/dist/cjs/components/DatePicker/Common.cjs +1 -1
  63. package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
  64. package/dist/cjs/components/DatePicker/DateRangePicker.cjs +1 -1
  65. package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
  66. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +12 -8
  67. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
  68. package/dist/cjs/components/DatePicker/utils.cjs +22 -6
  69. package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
  70. package/dist/cjs/components/GenericMenu/GenericMenu.css +2 -0
  71. package/dist/cjs/components/Select/common/InternalSelect.cjs +147 -193
  72. package/dist/cjs/components/Select/common/InternalSelect.cjs.map +1 -1
  73. package/dist/cjs/components/Select/common/SelectComponents.css +4 -0
  74. package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs +1 -0
  75. package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs.map +1 -1
  76. package/dist/esm/click-ui.css +6 -0
  77. package/dist/esm/components/Assets/Flags/Austria.js +43 -0
  78. package/dist/esm/components/Assets/Flags/Austria.js.map +1 -0
  79. package/dist/esm/components/Assets/Flags/Bahrain.js +43 -0
  80. package/dist/esm/components/Assets/Flags/Bahrain.js.map +1 -0
  81. package/dist/esm/components/Assets/Flags/Belgium.js +58 -0
  82. package/dist/esm/components/Assets/Flags/Belgium.js.map +1 -0
  83. package/dist/esm/components/Assets/Flags/Canada.js +13 -21
  84. package/dist/esm/components/Assets/Flags/Canada.js.map +1 -1
  85. package/dist/esm/components/Assets/Flags/Chile.js +88 -0
  86. package/dist/esm/components/Assets/Flags/Chile.js.map +1 -0
  87. package/dist/esm/components/Assets/Flags/China.js +43 -0
  88. package/dist/esm/components/Assets/Flags/China.js.map +1 -0
  89. package/dist/esm/components/Assets/Flags/Denmark.js +50 -0
  90. package/dist/esm/components/Assets/Flags/Denmark.js.map +1 -0
  91. package/dist/esm/components/Assets/Flags/Finland.js +50 -0
  92. package/dist/esm/components/Assets/Flags/Finland.js.map +1 -0
  93. package/dist/esm/components/Assets/Flags/France.js +26 -17
  94. package/dist/esm/components/Assets/Flags/France.js.map +1 -1
  95. package/dist/esm/components/Assets/Flags/Greece.js +124 -0
  96. package/dist/esm/components/Assets/Flags/Greece.js.map +1 -0
  97. package/dist/esm/components/Assets/Flags/Indonesia.js +14 -14
  98. package/dist/esm/components/Assets/Flags/Indonesia.js.map +1 -1
  99. package/dist/esm/components/Assets/Flags/Ireland.js +10 -10
  100. package/dist/esm/components/Assets/Flags/Ireland.js.map +1 -1
  101. package/dist/esm/components/Assets/Flags/Italy.js +59 -0
  102. package/dist/esm/components/Assets/Flags/Italy.js.map +1 -0
  103. package/dist/esm/components/Assets/Flags/Malaysia.js +2 -2
  104. package/dist/esm/components/Assets/Flags/Malaysia.js.map +1 -1
  105. package/dist/esm/components/Assets/Flags/Mexico.js +8 -8
  106. package/dist/esm/components/Assets/Flags/Mexico.js.map +1 -1
  107. package/dist/esm/components/Assets/Flags/New-Zealand.js +549 -0
  108. package/dist/esm/components/Assets/Flags/New-Zealand.js.map +1 -0
  109. package/dist/esm/components/Assets/Flags/Norway.js +64 -0
  110. package/dist/esm/components/Assets/Flags/Norway.js.map +1 -0
  111. package/dist/esm/components/Assets/Flags/Poland.js +51 -0
  112. package/dist/esm/components/Assets/Flags/Poland.js.map +1 -0
  113. package/dist/esm/components/Assets/Flags/Qatar.js +43 -0
  114. package/dist/esm/components/Assets/Flags/Qatar.js.map +1 -0
  115. package/dist/esm/components/Assets/Flags/Saudi-Arabia.js +172 -0
  116. package/dist/esm/components/Assets/Flags/Saudi-Arabia.js.map +1 -0
  117. package/dist/esm/components/Assets/Flags/Singapore.js +12 -12
  118. package/dist/esm/components/Assets/Flags/Singapore.js.map +1 -1
  119. package/dist/esm/components/Assets/Flags/Spain.js +4443 -0
  120. package/dist/esm/components/Assets/Flags/Spain.js.map +1 -0
  121. package/dist/esm/components/Assets/Flags/Sweden.js +11 -11
  122. package/dist/esm/components/Assets/Flags/Sweden.js.map +1 -1
  123. package/dist/esm/components/Assets/Flags/Switzerland.js +30 -21
  124. package/dist/esm/components/Assets/Flags/Switzerland.js.map +1 -1
  125. package/dist/esm/components/Assets/Flags/Taiwan.js +5 -5
  126. package/dist/esm/components/Assets/Flags/Taiwan.js.map +1 -1
  127. package/dist/esm/components/Assets/Flags/Thailand.js +58 -0
  128. package/dist/esm/components/Assets/Flags/Thailand.js.map +1 -0
  129. package/dist/esm/components/Assets/Flags/United-Arab-Emirates.js +20 -20
  130. package/dist/esm/components/Assets/Flags/United-Arab-Emirates.js.map +1 -1
  131. package/dist/esm/components/Assets/Flags/United-States.js +2 -2
  132. package/dist/esm/components/Assets/Flags/United-States.js.map +1 -1
  133. package/dist/esm/components/Assets/Flags/system/FlagsDark.js +34 -2
  134. package/dist/esm/components/Assets/Flags/system/FlagsDark.js.map +1 -1
  135. package/dist/esm/components/Assets/Flags/system/FlagsLight.js +34 -2
  136. package/dist/esm/components/Assets/Flags/system/FlagsLight.js.map +1 -1
  137. package/dist/esm/components/DatePicker/Common.js +2 -2
  138. package/dist/esm/components/DatePicker/Common.js.map +1 -1
  139. package/dist/esm/components/DatePicker/DateRangePicker.js +2 -2
  140. package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
  141. package/dist/esm/components/DatePicker/DateTimeRangePicker.js +13 -9
  142. package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
  143. package/dist/esm/components/DatePicker/utils.js +20 -5
  144. package/dist/esm/components/DatePicker/utils.js.map +1 -1
  145. package/dist/esm/components/GenericMenu/GenericMenu.css +2 -0
  146. package/dist/esm/components/Select/common/InternalSelect.js +148 -194
  147. package/dist/esm/components/Select/common/InternalSelect.js.map +1 -1
  148. package/dist/esm/components/Select/common/SelectComponents.css +4 -0
  149. package/dist/esm/components/Select/common/SelectComponents.module.css.js +1 -0
  150. package/dist/esm/components/Select/common/SelectComponents.module.css.js.map +1 -1
  151. package/dist/types/components/Assets/Flags/Austria.d.ts +3 -0
  152. package/dist/types/components/Assets/Flags/Bahrain.d.ts +3 -0
  153. package/dist/types/components/Assets/Flags/Belgium.d.ts +3 -0
  154. package/dist/types/components/Assets/Flags/Canada.d.ts +1 -2
  155. package/dist/types/components/Assets/Flags/Chile.d.ts +3 -0
  156. package/dist/types/components/Assets/Flags/China.d.ts +3 -0
  157. package/dist/types/components/Assets/Flags/Denmark.d.ts +3 -0
  158. package/dist/types/components/Assets/Flags/Finland.d.ts +3 -0
  159. package/dist/types/components/Assets/Flags/France.d.ts +1 -2
  160. package/dist/types/components/Assets/Flags/Greece.d.ts +3 -0
  161. package/dist/types/components/Assets/Flags/Indonesia.d.ts +1 -2
  162. package/dist/types/components/Assets/Flags/Ireland.d.ts +1 -2
  163. package/dist/types/components/Assets/Flags/Italy.d.ts +3 -0
  164. package/dist/types/components/Assets/Flags/New-Zealand.d.ts +3 -0
  165. package/dist/types/components/Assets/Flags/Norway.d.ts +3 -0
  166. package/dist/types/components/Assets/Flags/Poland.d.ts +3 -0
  167. package/dist/types/components/Assets/Flags/Qatar.d.ts +3 -0
  168. package/dist/types/components/Assets/Flags/Saudi-Arabia.d.ts +3 -0
  169. package/dist/types/components/Assets/Flags/Singapore.d.ts +1 -2
  170. package/dist/types/components/Assets/Flags/Spain.d.ts +3 -0
  171. package/dist/types/components/Assets/Flags/Sweden.d.ts +1 -2
  172. package/dist/types/components/Assets/Flags/Switzerland.d.ts +1 -2
  173. package/dist/types/components/Assets/Flags/Thailand.d.ts +3 -0
  174. package/dist/types/components/Assets/Flags/United-Arab-Emirates.d.ts +2 -3
  175. package/dist/types/components/Assets/Flags/system/types.d.ts +1 -1
  176. package/dist/types/components/DatePicker/utils.d.ts +3 -2
  177. package/dist/types/components/Select/common/index.d.ts +1 -1
  178. package/dist/types/components/Select/common/types.d.ts +0 -6
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeRangePicker.js","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 datesAreWithinMaxRange,\n shiftFromTimezone,\n Meridiem,\n Timezone,\n shiftToTimezone,\n dateRangeIsValid,\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 !datesAreWithinMaxRange(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}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\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: { startDate, endDate }, label }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate, label);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n selectedEndDate.getTime() === endDate.getTime() &&\n selectedStartDate &&\n selectedStartDate.getTime() === startDate.getTime();\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 && !dateRangeIsValid({ 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 !dateRangeIsValid({ 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 !dateRangeIsValid({ 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 />\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":["Icon","startDate","endDate","isOpen"],"mappings":"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"}
1
+ {"version":3,"file":"DateTimeRangePicker.js","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":["Icon","startDate","endDate","isOpen"],"mappings":"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"}
@@ -75,9 +75,24 @@ const getPredefinedMonthsForDateRangePicker = (numberOfMonths) => {
75
75
  return nextSixMonths;
76
76
  };
77
77
  const isDateNotInAllowList = (allowList, date) => Array.isArray(allowList) && allowList.length > 0 && !allowList.some((allowedDate) => isSameDate(allowedDate, date));
78
- const datesAreWithinMaxRange = (startDate, endDate, maxRangeLength) => {
79
- const daysDifference = Math.abs(dayjs(startDate).diff(dayjs(endDate), "days"));
80
- return daysDifference <= maxRangeLength;
78
+ const areDatesWithinMaxRange = (startDate, endDate, maxRangeLength) => {
79
+ const daysDifference = Math.abs(
80
+ dayjs(startDate).startOf("day").diff(dayjs(endDate).startOf("day"), "days")
81
+ );
82
+ return daysDifference < maxRangeLength;
83
+ };
84
+ const ONE_DAY_MS = 24 * 60 * 60 * 1e3;
85
+ const toleranceMs = 60 * 1e3;
86
+ const isDateRangeWithinRange = (selectedRange, predefinedRange, timezone = "system") => {
87
+ const { startDate, endDate } = predefinedRange;
88
+ if (endDate.getTime() - startDate.getTime() < ONE_DAY_MS) {
89
+ return Math.abs(selectedRange.startDate.getTime() - startDate.getTime()) <= toleranceMs && Math.abs(selectedRange.endDate.getTime() - endDate.getTime()) <= toleranceMs;
90
+ }
91
+ const shiftedSelectedStart = shiftToTimezone(selectedRange.startDate, timezone);
92
+ const shiftedSelectedEnd = shiftToTimezone(selectedRange.endDate, timezone);
93
+ const shiftedStart = shiftToTimezone(startDate, timezone);
94
+ const shiftedEnd = shiftToTimezone(endDate, timezone);
95
+ return isSameDate(shiftedSelectedStart, shiftedStart) && isSameDate(shiftedSelectedEnd, shiftedEnd);
81
96
  };
82
97
  const isDateRangeTheWholeMonth = ({ startDate, endDate }, timezone = "system") => {
83
98
  const start = timezone === "UTC" ? dayjs.utc(startDate) : dayjs(startDate);
@@ -89,7 +104,7 @@ const isDateRangeTheWholeMonth = ({ startDate, endDate }, timezone = "system") =
89
104
  const endDateIsLastDay = end.isSame(end.endOf("month"), "day");
90
105
  return startDateIsFirstDay && endDateIsLastDay;
91
106
  };
92
- const dateRangeIsValid = (dateRange) => {
107
+ const isDateRangeValid = (dateRange) => {
93
108
  if (!dateRange?.startDate || !dateRange?.endDate) {
94
109
  return false;
95
110
  }
@@ -105,5 +120,5 @@ const dateRangeIsValid = (dateRange) => {
105
120
  return true;
106
121
  };
107
122
 
108
- export { dateRangeIsValid, datesAreWithinMaxRange, formatDateHeader, formatSelectedDate, formatSelectedDateTime, formatSelectedDateTimeWithSeconds, formatWeekday, getPredefinedMonthsForDateRangePicker, isDateNotInAllowList, isDateRangeTheWholeMonth, shiftFromTimezone, shiftToTimezone };
123
+ export { areDatesWithinMaxRange, formatDateHeader, formatSelectedDate, formatSelectedDateTime, formatSelectedDateTimeWithSeconds, formatWeekday, getPredefinedMonthsForDateRangePicker, isDateNotInAllowList, isDateRangeTheWholeMonth, isDateRangeValid, isDateRangeWithinRange, shiftFromTimezone, shiftToTimezone };
109
124
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/DatePicker/utils.ts"],"sourcesContent":["import { isSameDate } from '@h6s/calendar';\nimport { dayjs } from '@/utils/date';\n\nexport type Timezone = 'system' | 'UTC';\n\nexport interface DateRange {\n startDate: Date;\n endDate: Date;\n}\n\nconst locale = 'en-US';\n\nexport type Meridiem = 'am' | 'pm';\n\nexport interface Time {\n hour: number;\n minutes: number;\n}\n\nexport interface DateRangeListItem {\n dateRange: DateRange;\n label: string;\n}\n\nconst createFormatter = (options: Intl.DateTimeFormatOptions) => {\n const timezoneFormatters: Partial<Record<Timezone, Intl.DateTimeFormat>> = {};\n\n return (timezone: Timezone, date: Date): string => {\n if (!timezoneFormatters[timezone]) {\n const opts = timezone === 'UTC' ? { ...options, timeZone: 'UTC' } : options;\n timezoneFormatters[timezone] = new Intl.DateTimeFormat(locale, opts);\n }\n return timezoneFormatters[timezone].format(date);\n };\n};\n\nexport const formatSelectedDate = createFormatter({\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n});\n\nexport const formatWeekday = createFormatter({ weekday: 'short' });\n\nexport const formatSelectedDateTime = createFormatter({\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n});\n\nexport const formatSelectedDateTimeWithSeconds = createFormatter({\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n});\n\nexport const formatDateHeader = createFormatter({\n month: 'short',\n year: 'numeric',\n});\n\n// In UTC mode, shift by the host offset so local-time getters return UTC\n// values. shiftFromTimezone reverses it.\n//\n// Caveat: round-tripping across a DST boundary drifts by an hour — each\n// direction reads getTimezoneOffset on its own input. Call sites don't\n// round-trip the same Date, so this hasn't bitten us.\nexport const shiftToTimezone = (date: Date, timezone: Timezone): Date => {\n if (timezone !== 'UTC') {\n return date;\n }\n return new Date(date.getTime() + date.getTimezoneOffset() * 60_000);\n};\n\nexport const shiftFromTimezone = (date: Date, timezone: Timezone): Date => {\n if (timezone !== 'UTC') {\n return date;\n }\n return new Date(date.getTime() - date.getTimezoneOffset() * 60_000);\n};\n\nexport const getPredefinedMonthsForDateRangePicker = (\n numberOfMonths: number\n): DateRange[] => {\n const now = dayjs();\n\n if (numberOfMonths < 0) {\n const lastSixMonths: DateRange[] = [];\n for (let i = 0; i < Math.abs(numberOfMonths); i++) {\n const date = now.subtract(i, 'month');\n if (date.date() === 1 && date.month() === now.month()) {\n continue;\n }\n lastSixMonths.push({\n startDate: date.startOf('month').toDate(),\n endDate: i === 0 ? now.toDate() : date.endOf('month').toDate(),\n });\n }\n\n return lastSixMonths.reverse();\n }\n\n const nextSixMonths: DateRange[] = [];\n for (let i = 0; i < numberOfMonths; i++) {\n const date = now.add(i, 'month');\n nextSixMonths.push({\n startDate: date.startOf('month').toDate(),\n endDate: date.endOf('month').toDate(),\n });\n }\n\n return nextSixMonths;\n};\n\nexport const getPredefinedTimePeriodsForDateTimePicker = (): DateRangeListItem[] => {\n const now = dayjs();\n\n const fifteenMinutesAgo = now.subtract(15, 'minute');\n const thirtyMinutesAgo = now.subtract(30, 'minute');\n const oneHourAgo = now.subtract(1, 'hour');\n const sixHoursAgo = now.subtract(6, 'hour');\n const oneDayAgo = now.subtract(1, 'day');\n const oneMonthAgo = now.subtract(1, 'month');\n\n const dateRangeList: DateRangeListItem[] = [\n {\n dateRange: {\n startDate: fifteenMinutesAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 15 minutes',\n },\n {\n dateRange: {\n startDate: thirtyMinutesAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 30 minutes',\n },\n {\n dateRange: {\n startDate: oneHourAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past hour',\n },\n {\n dateRange: {\n startDate: sixHoursAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 6 hours',\n },\n {\n dateRange: {\n startDate: oneDayAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past day',\n },\n {\n dateRange: {\n startDate: oneMonthAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past month',\n },\n ];\n\n return dateRangeList;\n};\n\nexport const getNextNDatesForDatePickerAllowOnlyList = (numberOfDays: number): Date[] => {\n const now = dayjs();\n\n return Array.from({ length: numberOfDays }, (_, i) =>\n now.add(i, 'day').startOf('day').toDate()\n );\n};\n\nexport const isDateNotInAllowList = (\n allowList: Array<Date> | undefined,\n date: Date\n): boolean =>\n Array.isArray(allowList) &&\n allowList.length > 0 &&\n !allowList.some(allowedDate => isSameDate(allowedDate, date));\n\nexport const datesAreWithinMaxRange = (\n startDate: Date,\n endDate: Date,\n maxRangeLength: number\n): boolean => {\n const daysDifference = Math.abs(dayjs(startDate).diff(dayjs(endDate), 'days'));\n\n return daysDifference <= maxRangeLength;\n};\n\nexport const isDateRangeTheWholeMonth = (\n { startDate, endDate }: DateRange,\n timezone: Timezone = 'system'\n): boolean => {\n const start = timezone === 'UTC' ? dayjs.utc(startDate) : dayjs(startDate);\n const end = timezone === 'UTC' ? dayjs.utc(endDate) : dayjs(endDate);\n\n if (start.month() !== end.month()) {\n return false;\n }\n\n const startDateIsFirstDay = start.isSame(start.startOf('month'), 'day');\n const endDateIsLastDay = end.isSame(end.endOf('month'), 'day');\n\n return startDateIsFirstDay && endDateIsLastDay;\n};\n\nexport const dateRangeIsValid = (dateRange: DateRange): boolean => {\n if (!dateRange?.startDate || !dateRange?.endDate) {\n return false;\n }\n\n if (!(dateRange.startDate instanceof Date) || !dayjs(dateRange.startDate).isValid()) {\n return false;\n }\n\n if (!(dateRange.endDate instanceof Date) || !dayjs(dateRange.endDate).isValid()) {\n return false;\n }\n\n if (dateRange.startDate.getTime() > dateRange.endDate.getTime()) {\n return false;\n }\n\n return true;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/DatePicker/utils.ts"],"sourcesContent":["import { isSameDate } from '@h6s/calendar';\nimport { dayjs } from '@/utils/date';\n\nexport type Timezone = 'system' | 'UTC';\n\nexport interface DateRange {\n startDate: Date;\n endDate: Date;\n}\n\nconst locale = 'en-US';\n\nexport type Meridiem = 'am' | 'pm';\n\nexport interface Time {\n hour: number;\n minutes: number;\n}\n\nexport interface DateRangeListItem {\n dateRange: DateRange;\n label: string;\n}\n\nconst createFormatter = (options: Intl.DateTimeFormatOptions) => {\n const timezoneFormatters: Partial<Record<Timezone, Intl.DateTimeFormat>> = {};\n\n return (timezone: Timezone, date: Date): string => {\n if (!timezoneFormatters[timezone]) {\n const opts = timezone === 'UTC' ? { ...options, timeZone: 'UTC' } : options;\n timezoneFormatters[timezone] = new Intl.DateTimeFormat(locale, opts);\n }\n return timezoneFormatters[timezone].format(date);\n };\n};\n\nexport const formatSelectedDate = createFormatter({\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n});\n\nexport const formatWeekday = createFormatter({ weekday: 'short' });\n\nexport const formatSelectedDateTime = createFormatter({\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n});\n\nexport const formatSelectedDateTimeWithSeconds = createFormatter({\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n});\n\nexport const formatDateHeader = createFormatter({\n month: 'short',\n year: 'numeric',\n});\n\n// In UTC mode, shift by the host offset so local-time getters return UTC\n// values. shiftFromTimezone reverses it.\n//\n// Caveat: round-tripping across a DST boundary drifts by an hour — each\n// direction reads getTimezoneOffset on its own input. Call sites don't\n// round-trip the same Date, so this hasn't bitten us.\nexport const shiftToTimezone = (date: Date, timezone: Timezone): Date => {\n if (timezone !== 'UTC') {\n return date;\n }\n return new Date(date.getTime() + date.getTimezoneOffset() * 60_000);\n};\n\nexport const shiftFromTimezone = (date: Date, timezone: Timezone): Date => {\n if (timezone !== 'UTC') {\n return date;\n }\n return new Date(date.getTime() - date.getTimezoneOffset() * 60_000);\n};\n\nexport const getPredefinedMonthsForDateRangePicker = (\n numberOfMonths: number\n): DateRange[] => {\n const now = dayjs();\n\n if (numberOfMonths < 0) {\n const lastSixMonths: DateRange[] = [];\n for (let i = 0; i < Math.abs(numberOfMonths); i++) {\n const date = now.subtract(i, 'month');\n if (date.date() === 1 && date.month() === now.month()) {\n continue;\n }\n lastSixMonths.push({\n startDate: date.startOf('month').toDate(),\n endDate: i === 0 ? now.toDate() : date.endOf('month').toDate(),\n });\n }\n\n return lastSixMonths.reverse();\n }\n\n const nextSixMonths: DateRange[] = [];\n for (let i = 0; i < numberOfMonths; i++) {\n const date = now.add(i, 'month');\n nextSixMonths.push({\n startDate: date.startOf('month').toDate(),\n endDate: date.endOf('month').toDate(),\n });\n }\n\n return nextSixMonths;\n};\n\nexport const getPredefinedTimePeriodsForDateTimePicker = (): DateRangeListItem[] => {\n const now = dayjs();\n\n const fifteenMinutesAgo = now.subtract(15, 'minute');\n const thirtyMinutesAgo = now.subtract(30, 'minute');\n const oneHourAgo = now.subtract(1, 'hour');\n const sixHoursAgo = now.subtract(6, 'hour');\n const oneDayAgo = now.subtract(1, 'day');\n const oneMonthAgo = now.subtract(1, 'month');\n\n const dateRangeList: DateRangeListItem[] = [\n {\n dateRange: {\n startDate: fifteenMinutesAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 15 minutes',\n },\n {\n dateRange: {\n startDate: thirtyMinutesAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 30 minutes',\n },\n {\n dateRange: {\n startDate: oneHourAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past hour',\n },\n {\n dateRange: {\n startDate: sixHoursAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past 6 hours',\n },\n {\n dateRange: {\n startDate: oneDayAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past day',\n },\n {\n dateRange: {\n startDate: oneMonthAgo.toDate(),\n endDate: now.toDate(),\n },\n label: 'Past month',\n },\n ];\n\n return dateRangeList;\n};\n\nexport const getNextNDatesForDatePickerAllowOnlyList = (numberOfDays: number): Date[] => {\n const now = dayjs();\n\n return Array.from({ length: numberOfDays }, (_, i) =>\n now.add(i, 'day').startOf('day').toDate()\n );\n};\n\nexport const isDateNotInAllowList = (\n allowList: Array<Date> | undefined,\n date: Date\n): boolean =>\n Array.isArray(allowList) &&\n allowList.length > 0 &&\n !allowList.some(allowedDate => isSameDate(allowedDate, date));\n\nexport const areDatesWithinMaxRange = (\n startDate: Date,\n endDate: Date,\n maxRangeLength: number\n): boolean => {\n // Compare calendar days; dayjs would otherwise drop a partial day from the diff.\n const daysDifference = Math.abs(\n dayjs(startDate).startOf('day').diff(dayjs(endDate).startOf('day'), 'days')\n );\n\n return daysDifference < maxRangeLength;\n};\n\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst toleranceMs = 60 * 1000;\n\nexport const isDateRangeWithinRange = (\n selectedRange: DateRange,\n predefinedRange: DateRange,\n timezone: Timezone = 'system'\n): boolean => {\n const { startDate, endDate } = predefinedRange;\n\n if (endDate.getTime() - startDate.getTime() < ONE_DAY_MS) {\n return (\n Math.abs(selectedRange.startDate.getTime() - startDate.getTime()) <= toleranceMs &&\n Math.abs(selectedRange.endDate.getTime() - endDate.getTime()) <= toleranceMs\n );\n }\n\n // Shifted the same way the calendar is, so the check agrees with the days it marks.\n const shiftedSelectedStart = shiftToTimezone(selectedRange.startDate, timezone);\n const shiftedSelectedEnd = shiftToTimezone(selectedRange.endDate, timezone);\n const shiftedStart = shiftToTimezone(startDate, timezone);\n const shiftedEnd = shiftToTimezone(endDate, timezone);\n\n return (\n isSameDate(shiftedSelectedStart, shiftedStart) &&\n isSameDate(shiftedSelectedEnd, shiftedEnd)\n );\n};\n\nexport const isDateRangeTheWholeMonth = (\n { startDate, endDate }: DateRange,\n timezone: Timezone = 'system'\n): boolean => {\n const start = timezone === 'UTC' ? dayjs.utc(startDate) : dayjs(startDate);\n const end = timezone === 'UTC' ? dayjs.utc(endDate) : dayjs(endDate);\n\n if (start.month() !== end.month()) {\n return false;\n }\n\n const startDateIsFirstDay = start.isSame(start.startOf('month'), 'day');\n const endDateIsLastDay = end.isSame(end.endOf('month'), 'day');\n\n return startDateIsFirstDay && endDateIsLastDay;\n};\n\nexport const isDateRangeValid = (dateRange: DateRange): boolean => {\n if (!dateRange?.startDate || !dateRange?.endDate) {\n return false;\n }\n\n if (!(dateRange.startDate instanceof Date) || !dayjs(dateRange.startDate).isValid()) {\n return false;\n }\n\n if (!(dateRange.endDate instanceof Date) || !dayjs(dateRange.endDate).isValid()) {\n return false;\n }\n\n if (dateRange.startDate.getTime() > dateRange.endDate.getTime()) {\n return false;\n }\n\n return true;\n};\n"],"names":[],"mappings":";;;;AAUA,MAAM,MAAA,GAAS,OAAA;AAcf,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAwC;AAC/D,EAAA,MAAM,qBAAqE,EAAC;AAE5E,EAAA,OAAO,CAAC,UAAoB,IAAA,KAAuB;AACjD,IAAA,IAAI,CAAC,kBAAA,CAAmB,QAAQ,CAAA,EAAG;AACjC,MAAA,MAAM,IAAA,GAAO,aAAa,KAAA,GAAQ,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,OAAM,GAAI,OAAA;AACpE,MAAA,kBAAA,CAAmB,QAAQ,CAAA,GAAI,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,IAAI,CAAA;AAAA,IACrE;AACA,IAAA,OAAO,kBAAA,CAAmB,QAAQ,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EACjD,CAAA;AACF,CAAA;AAEO,MAAM,qBAAqB,eAAA,CAAgB;AAAA,EAChD,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAC;AAEM,MAAM,aAAA,GAAgB,eAAA,CAAgB,EAAE,OAAA,EAAS,SAAS;AAE1D,MAAM,yBAAyB,eAAA,CAAgB;AAAA,EACpD,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAC;AAEM,MAAM,oCAAoC,eAAA,CAAgB;AAAA,EAC/D,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAC;AAEM,MAAM,mBAAmB,eAAA,CAAgB;AAAA,EAC9C,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAC;AAQM,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAY,QAAA,KAA6B;AACvE,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,KAAK,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,iBAAA,KAAsB,GAAM,CAAA;AACpE;AAEO,MAAM,iBAAA,GAAoB,CAAC,IAAA,EAAY,QAAA,KAA6B;AACzE,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,KAAK,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,iBAAA,KAAsB,GAAM,CAAA;AACpE;AAEO,MAAM,qCAAA,GAAwC,CACnD,cAAA,KACgB;AAChB,EAAA,MAAM,MAAM,KAAA,EAAM;AAElB,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,MAAM,gBAA6B,EAAC;AACpC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,GAAA,CAAI,cAAc,GAAG,CAAA,EAAA,EAAK;AACjD,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,OAAO,CAAA;AACpC,MAAA,IAAI,IAAA,CAAK,MAAK,KAAM,CAAA,IAAK,KAAK,KAAA,EAAM,KAAM,GAAA,CAAI,KAAA,EAAM,EAAG;AACrD,QAAA;AAAA,MACF;AACA,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,MAAA,EAAO;AAAA,QACxC,OAAA,EAAS,CAAA,KAAM,CAAA,GAAI,GAAA,CAAI,MAAA,KAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAE,MAAA;AAAO,OAC9D,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,cAAc,OAAA,EAAQ;AAAA,EAC/B;AAEA,EAAA,MAAM,gBAA6B,EAAC;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,EAAgB,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAC/B,IAAA,aAAA,CAAc,IAAA,CAAK;AAAA,MACjB,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,MAAA,EAAO;AAAA,MACxC,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,OAAO,EAAE,MAAA;AAAO,KACrC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,aAAA;AACT;AAoEO,MAAM,uBAAuB,CAClC,SAAA,EACA,SAEA,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IACvB,SAAA,CAAU,MAAA,GAAS,CAAA,IACnB,CAAC,SAAA,CAAU,IAAA,CAAK,iBAAe,UAAA,CAAW,WAAA,EAAa,IAAI,CAAC;AAEvD,MAAM,sBAAA,GAAyB,CACpC,SAAA,EACA,OAAA,EACA,cAAA,KACY;AAEZ,EAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA;AAAA,IAC1B,KAAA,CAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,KAAK,GAAG,MAAM;AAAA,GAC5E;AAEA,EAAA,OAAO,cAAA,GAAiB,cAAA;AAC1B;AAEA,MAAM,UAAA,GAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAClC,MAAM,cAAc,EAAA,GAAK,GAAA;AAElB,MAAM,sBAAA,GAAyB,CACpC,aAAA,EACA,eAAA,EACA,WAAqB,QAAA,KACT;AACZ,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,eAAA;AAE/B,EAAA,IAAI,QAAQ,OAAA,EAAQ,GAAI,SAAA,CAAU,OAAA,KAAY,UAAA,EAAY;AACxD,IAAA,OACE,IAAA,CAAK,IAAI,aAAA,CAAc,SAAA,CAAU,SAAQ,GAAI,SAAA,CAAU,SAAS,CAAA,IAAK,eACrE,IAAA,CAAK,GAAA,CAAI,cAAc,OAAA,CAAQ,OAAA,KAAY,OAAA,CAAQ,OAAA,EAAS,CAAA,IAAK,WAAA;AAAA,EAErE;AAGA,EAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAC9E,EAAA,MAAM,kBAAA,GAAqB,eAAA,CAAgB,aAAA,CAAc,OAAA,EAAS,QAAQ,CAAA;AAC1E,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,SAAA,EAAW,QAAQ,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,OAAA,EAAS,QAAQ,CAAA;AAEpD,EAAA,OACE,WAAW,oBAAA,EAAsB,YAAY,CAAA,IAC7C,UAAA,CAAW,oBAAoB,UAAU,CAAA;AAE7C;AAEO,MAAM,2BAA2B,CACtC,EAAE,WAAW,OAAA,EAAQ,EACrB,WAAqB,QAAA,KACT;AACZ,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAA,GAAQ,KAAA,CAAM,IAAI,SAAS,CAAA,GAAI,MAAM,SAAS,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,aAAa,KAAA,GAAQ,KAAA,CAAM,IAAI,OAAO,CAAA,GAAI,MAAM,OAAO,CAAA;AAEnE,EAAA,IAAI,KAAA,CAAM,KAAA,EAAM,KAAM,GAAA,CAAI,OAAM,EAAG;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,sBAAsB,KAAA,CAAM,MAAA,CAAO,MAAM,OAAA,CAAQ,OAAO,GAAG,KAAK,CAAA;AACtE,EAAA,MAAM,mBAAmB,GAAA,CAAI,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,GAAG,KAAK,CAAA;AAE7D,EAAA,OAAO,mBAAA,IAAuB,gBAAA;AAChC;AAEO,MAAM,gBAAA,GAAmB,CAAC,SAAA,KAAkC;AACjE,EAAA,IAAI,CAAC,SAAA,EAAW,SAAA,IAAa,CAAC,WAAW,OAAA,EAAS;AAChD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,EAAE,SAAA,CAAU,SAAA,YAAqB,IAAA,CAAA,IAAS,CAAC,MAAM,SAAA,CAAU,SAAS,CAAA,CAAE,OAAA,EAAQ,EAAG;AACnF,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,EAAE,SAAA,CAAU,OAAA,YAAmB,IAAA,CAAA,IAAS,CAAC,MAAM,SAAA,CAAU,OAAO,CAAA,CAAE,OAAA,EAAQ,EAAG;AAC/E,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,SAAA,CAAU,OAAA,KAAY,SAAA,CAAU,OAAA,CAAQ,SAAQ,EAAG;AAC/D,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -20,6 +20,8 @@
20
20
  .generic-menu-panel_type_dropdown-menu__ezKZT {
21
21
  max-width: var(--radix-dropdown-menu-content-available-width);
22
22
  max-height: var(--radix-dropdown-menu-content-available-height);
23
+ /* Kept in this file (not Dropdown.module.css) so it can't lose to `overflow: hidden` above due to cross-file import order. */
24
+ overflow-y: auto;
23
25
  }
24
26
 
25
27
  .generic-menu-panel_type_context-menu__nu-Kt {