@clickhouse/click-ui 0.15.0 → 0.15.1-canary.g5f724cbd.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.
- package/README.md +10 -17
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +2 -10
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/components/Grid/copyGridElements.cjs +2 -2
- package/dist/cjs/components/Grid/copyGridElements.cjs.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +2 -10
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/components/Grid/copyGridElements.js +2 -2
- package/dist/esm/components/Grid/copyGridElements.js.map +1 -1
- package/package.json +1 -2
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ You can find the official docs for the Click UI design system and component libr
|
|
|
46
46
|
* [Changesets](#changesets)
|
|
47
47
|
- [Add a new changeset](#add-a-new-changeset)
|
|
48
48
|
- [Checking the changeset status](#checking-the-changeset-status)
|
|
49
|
-
- [
|
|
49
|
+
- [Consuming changesets](#consuming-changesets)
|
|
50
50
|
* [Release](#release)
|
|
51
51
|
* [Contributing](#contributing)
|
|
52
52
|
- [Component RFC](#component-rfc)
|
|
@@ -88,7 +88,7 @@ Install the package via npm or your favorite package manager:
|
|
|
88
88
|
npm i @clickhouse/click-ui@latest
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
Every merge to `main` is also published as a prerelease, for trying changes before a release: `npm i @clickhouse/click-ui@canary
|
|
91
|
+
Every merge to `main` is also published as a prerelease, for trying changes before a release: `npm i @clickhouse/click-ui@canary`, see [Canary releases](./docs/publish.md#canary-releases).
|
|
92
92
|
|
|
93
93
|
Click UI has three peer dependencies. Your app must provide them:
|
|
94
94
|
|
|
@@ -125,7 +125,7 @@ function App() {
|
|
|
125
125
|
}
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
For more examples, including theme switching and configuration, see the [
|
|
128
|
+
For more examples, including theme switching and configuration, see the [Use Click UI](#use-click-ui) section, or explore our design system at [clickhouse.design/click-ui](https://clickhouse.design/click-ui).
|
|
129
129
|
|
|
130
130
|
## Development
|
|
131
131
|
|
|
@@ -330,7 +330,7 @@ The latest static version's built and deployed automatically when contributing t
|
|
|
330
330
|
|
|
331
331
|
Once deployed it's available publicly at [clickhouse.design/click-ui](https://clickhouse.design/click-ui).
|
|
332
332
|
|
|
333
|
-
##
|
|
333
|
+
## Changesets
|
|
334
334
|
|
|
335
335
|
Learn to manage the versioning of changelog entries.
|
|
336
336
|
|
|
@@ -355,6 +355,8 @@ yarn changeset:add
|
|
|
355
355
|
|
|
356
356
|
The changesets tool keeps track of all declared changes in the `.changeset` directory.
|
|
357
357
|
|
|
358
|
+
Start the text with **Breaking:** when consumers have to change their code. The release notes list those entries under "⚠️ Upgrade notes"; all other entries go under "Good to know".
|
|
359
|
+
|
|
358
360
|
Once completed, you must commit the changeset!
|
|
359
361
|
|
|
360
362
|
### Checking the changeset status
|
|
@@ -365,16 +367,9 @@ To check if your branch contains a changeset:
|
|
|
365
367
|
yarn changeset:status
|
|
366
368
|
```
|
|
367
369
|
|
|
368
|
-
###
|
|
369
|
-
|
|
370
|
-
To consume all changesets, and update to the most appropriate semver version and write a friendly changelog based on those changesets, the following command is available:
|
|
370
|
+
### Consuming changesets
|
|
371
371
|
|
|
372
|
-
|
|
373
|
-
> Consuming changesets is done automatically in the CI/CD environment. For this reason, you don't have to execute the command, as a contributor your single concern should be adding changesets to any relevant changes.
|
|
374
|
-
|
|
375
|
-
```sh
|
|
376
|
-
yarn changeset:version
|
|
377
|
-
```
|
|
372
|
+
Consuming changesets is done automatically when a release is published, see [Changelog and release notes](./docs/publish.md#changelog-and-release-notes). As a contributor, your single concern is adding a changeset to any relevant change. Do not run `changeset version` yourself.
|
|
378
373
|
|
|
379
374
|
## Distribution
|
|
380
375
|
|
|
@@ -651,11 +646,9 @@ For more detailed instructions, see [converting SVG to React Components](./docs/
|
|
|
651
646
|
|
|
652
647
|
## Release
|
|
653
648
|
|
|
654
|
-
Releases are
|
|
655
|
-
|
|
656
|
-
Use the [Create a new release Pull Request](./docs/package-release.md#create-a-new-release-pull-request) for a quick automated process.
|
|
649
|
+
Releases are manual GitHub releases. Publishing the tag to npm, the `CHANGELOG.md` section, the deletion of the consumed changesets and the release notes are automated. See [Publish](./docs/publish.md).
|
|
657
650
|
|
|
658
|
-
|
|
651
|
+
## Contributing
|
|
659
652
|
|
|
660
653
|
### Component RFC
|
|
661
654
|
|
|
@@ -463,18 +463,10 @@ const TimeInput = ({ date, setDate, shouldShowSeconds, timezone }) => {
|
|
|
463
463
|
const handleKeyDown = react.useCallback(
|
|
464
464
|
(event) => {
|
|
465
465
|
if (event.key === "Enter") {
|
|
466
|
-
|
|
467
|
-
if (!isValid) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
if (!parsedDate) {
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
const newDate = shouldShowSeconds ? dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).second(parsedDate.second()).toDate() : dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).toDate();
|
|
474
|
-
setDate(newDate);
|
|
466
|
+
handleTimeChange(timeString);
|
|
475
467
|
}
|
|
476
468
|
},
|
|
477
|
-
[
|
|
469
|
+
[handleTimeChange, timeString]
|
|
478
470
|
);
|
|
479
471
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
480
472
|
TimeInputContainer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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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"}
|
|
1
|
+
{"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 handleTimeChange(timeString);\n }\n },\n [handleTimeChange, 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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"}
|
|
@@ -63,13 +63,13 @@ const copyGridElements = async ({
|
|
|
63
63
|
case "columns":
|
|
64
64
|
Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(
|
|
65
65
|
(rowIndex) => {
|
|
66
|
-
const columnList = [...selection.columns].sort();
|
|
66
|
+
const columnList = [...selection.columns].sort((a, b) => a - b);
|
|
67
67
|
columnListLoop(tbody, columnList, cell, rowIndex);
|
|
68
68
|
}
|
|
69
69
|
);
|
|
70
70
|
break;
|
|
71
71
|
case "rows":
|
|
72
|
-
[...selection.rows].sort().forEach((rowIndex) => {
|
|
72
|
+
[...selection.rows].sort((a, b) => a - b).forEach((rowIndex) => {
|
|
73
73
|
const columnList = Array.from(
|
|
74
74
|
{ length: columnCount },
|
|
75
75
|
(_, index) => pageStart + index
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyGridElements.cjs","sources":["../../../../src/components/Grid/copyGridElements.ts"],"sourcesContent":["import { CellProps, SelectedRegion, SelectionFocus } from './types';\nimport { RefObject, createElement } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\ninterface CopyGridElementsProps {\n cell: CellProps;\n selection: SelectedRegion;\n rowCount: number;\n columnCount: number;\n pageStart?: number;\n focus: SelectionFocus;\n outerRef: RefObject<HTMLDivElement>;\n}\n\nconst addCellToRow = (\n row: HTMLTableRowElement,\n cell: CellProps,\n rowIndex: number,\n columnIndex: number\n) => {\n const td = document.createElement('td');\n const container = document.createElement('div');\n const root = createRoot(container);\n\n flushSync(() => {\n root.render(\n createElement(cell, { rowIndex, columnIndex, width: 1000, type: 'row-cell' })\n );\n });\n\n td.innerHTML = container.innerHTML;\n root.unmount();\n\n row.appendChild(td);\n};\n\nconst columnListLoop = (\n tbody: HTMLTableSectionElement,\n columnList: number[],\n cell: CellProps,\n rowIndex: number\n) => {\n const row = document.createElement('tr');\n columnList.forEach(columnIndex => {\n addCellToRow(row, cell, rowIndex, columnIndex);\n });\n tbody.appendChild(row);\n};\n\nconst copyGridElements = async ({\n cell,\n selection,\n rowCount,\n columnCount,\n pageStart = 0,\n focus,\n outerRef,\n}: CopyGridElementsProps): Promise<void> => {\n if (!outerRef.current) {\n throw 'Could not fetch selection';\n }\n const table = document.createElement('table');\n table.style.position = 'absolute';\n table.style.top = '-200px';\n table.style.left = '-200px';\n table.style.width = '0px';\n table.style.height = '0px';\n table.style.overflow = 'hidden';\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n\n switch (selection.type) {\n case 'rectangle':\n Array.from(\n { length: selection.bounds.bottom + 1 - selection.bounds.top },\n (_, index) => selection.bounds.top + index\n ).forEach(rowIndex => {\n const columnList = Array.from(\n { length: selection.bounds.right + 1 - selection.bounds.left },\n (_, index) => selection.bounds.left + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'columns':\n Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(\n rowIndex => {\n const columnList = [...selection.columns].sort();\n columnListLoop(tbody, columnList, cell, rowIndex);\n }\n );\n break;\n case 'rows':\n [...selection.rows].sort().forEach(rowIndex => {\n
|
|
1
|
+
{"version":3,"file":"copyGridElements.cjs","sources":["../../../../src/components/Grid/copyGridElements.ts"],"sourcesContent":["import { CellProps, SelectedRegion, SelectionFocus } from './types';\nimport { RefObject, createElement } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\ninterface CopyGridElementsProps {\n cell: CellProps;\n selection: SelectedRegion;\n rowCount: number;\n columnCount: number;\n pageStart?: number;\n focus: SelectionFocus;\n outerRef: RefObject<HTMLDivElement>;\n}\n\nconst addCellToRow = (\n row: HTMLTableRowElement,\n cell: CellProps,\n rowIndex: number,\n columnIndex: number\n) => {\n const td = document.createElement('td');\n const container = document.createElement('div');\n const root = createRoot(container);\n\n flushSync(() => {\n root.render(\n createElement(cell, { rowIndex, columnIndex, width: 1000, type: 'row-cell' })\n );\n });\n\n td.innerHTML = container.innerHTML;\n root.unmount();\n\n row.appendChild(td);\n};\n\nconst columnListLoop = (\n tbody: HTMLTableSectionElement,\n columnList: number[],\n cell: CellProps,\n rowIndex: number\n) => {\n const row = document.createElement('tr');\n columnList.forEach(columnIndex => {\n addCellToRow(row, cell, rowIndex, columnIndex);\n });\n tbody.appendChild(row);\n};\n\nconst copyGridElements = async ({\n cell,\n selection,\n rowCount,\n columnCount,\n pageStart = 0,\n focus,\n outerRef,\n}: CopyGridElementsProps): Promise<void> => {\n if (!outerRef.current) {\n throw 'Could not fetch selection';\n }\n const table = document.createElement('table');\n table.style.position = 'absolute';\n table.style.top = '-200px';\n table.style.left = '-200px';\n table.style.width = '0px';\n table.style.height = '0px';\n table.style.overflow = 'hidden';\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n\n switch (selection.type) {\n case 'rectangle':\n Array.from(\n { length: selection.bounds.bottom + 1 - selection.bounds.top },\n (_, index) => selection.bounds.top + index\n ).forEach(rowIndex => {\n const columnList = Array.from(\n { length: selection.bounds.right + 1 - selection.bounds.left },\n (_, index) => selection.bounds.left + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'columns':\n Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(\n rowIndex => {\n const columnList = [...selection.columns].sort((a, b) => a - b);\n columnListLoop(tbody, columnList, cell, rowIndex);\n }\n );\n break;\n case 'rows':\n [...selection.rows]\n .sort((a, b) => a - b)\n .forEach(rowIndex => {\n const columnList = Array.from(\n { length: columnCount },\n (_, index) => pageStart + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'empty':\n columnListLoop(tbody, [focus.column], cell, focus.row);\n break;\n default:\n throw new Error('incorrect selection provided');\n }\n\n table.appendChild(thead);\n table.appendChild(tbody);\n\n outerRef.current.appendChild(table);\n\n const windowSelection = window.getSelection();\n if (windowSelection) {\n const range = document.createRange();\n range.selectNodeContents(table);\n windowSelection.removeAllRanges();\n windowSelection.addRange(range);\n await navigator.clipboard.writeText(table.innerText);\n windowSelection.removeAllRanges();\n\n outerRef.current.removeChild(table);\n } else {\n throw 'Could not fetch selection';\n }\n};\n\nexport default copyGridElements;\n"],"names":["createRoot","flushSync","createElement"],"mappings":";;;;;;;;AAeA,MAAM,YAAA,GAAe,CACnB,GAAA,EACA,IAAA,EACA,UACA,WAAA,KACG;AACH,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACtC,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC9C,EAAA,MAAM,IAAA,GAAOA,kBAAW,SAAS,CAAA;AAEjC,EAAAC,kBAAA,CAAU,MAAM;AACd,IAAA,IAAA,CAAK,MAAA;AAAA,MACHC,mBAAA,CAAc,MAAM,EAAE,QAAA,EAAU,aAAa,KAAA,EAAO,GAAA,EAAM,IAAA,EAAM,UAAA,EAAY;AAAA,KAC9E;AAAA,EACF,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,YAAY,SAAA,CAAU,SAAA;AACzB,EAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,EAAA,GAAA,CAAI,YAAY,EAAE,CAAA;AACpB,CAAA;AAEA,MAAM,cAAA,GAAiB,CACrB,KAAA,EACA,UAAA,EACA,MACA,QAAA,KACG;AACH,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACvC,EAAA,UAAA,CAAW,QAAQ,CAAA,WAAA,KAAe;AAChC,IAAA,YAAA,CAAa,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU,WAAW,CAAA;AAAA,EAC/C,CAAC,CAAA;AACD,EAAA,KAAA,CAAM,YAAY,GAAG,CAAA;AACvB,CAAA;AAEA,MAAM,mBAAmB,OAAO;AAAA,EAC9B,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,CAAA;AAAA,EACZ,KAAA;AAAA,EACA;AACF,CAAA,KAA4C;AAC1C,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,IAAA,MAAM,2BAAA;AAAA,EACR;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,UAAA;AACvB,EAAA,KAAA,CAAM,MAAM,GAAA,GAAM,QAAA;AAClB,EAAA,KAAA,CAAM,MAAM,IAAA,GAAO,QAAA;AACnB,EAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,KAAA;AACpB,EAAA,KAAA,CAAM,MAAM,MAAA,GAAS,KAAA;AACrB,EAAA,KAAA,CAAM,MAAM,QAAA,GAAW,QAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAE5C,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,WAAA;AACH,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,EAAE,QAAQ,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,GAAI,SAAA,CAAU,OAAO,GAAA,EAAI;AAAA,QAC7D,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,CAAU,OAAO,GAAA,GAAM;AAAA,OACvC,CAAE,QAAQ,CAAA,QAAA,KAAY;AACpB,QAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,UACvB,EAAE,QAAQ,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,GAAI,SAAA,CAAU,OAAO,IAAA,EAAK;AAAA,UAC7D,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,CAAU,OAAO,IAAA,GAAO;AAAA,SACxC;AACA,QAAA,cAAA,CAAe,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA;AAAA,MAClD,CAAC,CAAA;AACD,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAG,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,GAAY,KAAK,CAAA,CAAE,OAAA;AAAA,QAChE,CAAA,QAAA,KAAY;AACV,UAAA,MAAM,UAAA,GAAa,CAAC,GAAG,SAAA,CAAU,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC9D,UAAA,cAAA,CAAe,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA;AAAA,QAClD;AAAA,OACF;AACA,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,CAAC,GAAG,SAAA,CAAU,IAAI,CAAA,CACf,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,CACpB,OAAA,CAAQ,CAAA,QAAA,KAAY;AACnB,QAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,UACvB,EAAE,QAAQ,WAAA,EAAY;AAAA,UACtB,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,GAAY;AAAA,SAC5B;AACA,QAAA,cAAA,CAAe,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA;AAAA,MAClD,CAAC,CAAA;AACH,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,cAAA,CAAe,OAAO,CAAC,KAAA,CAAM,MAAM,CAAA,EAAG,IAAA,EAAM,MAAM,GAAG,CAAA;AACrD,MAAA;AAAA,IACF;AACE,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA;AAGlD,EAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AACvB,EAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAEvB,EAAA,QAAA,CAAS,OAAA,CAAQ,YAAY,KAAK,CAAA;AAElC,EAAA,MAAM,eAAA,GAAkB,OAAO,YAAA,EAAa;AAC5C,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,IAAA,KAAA,CAAM,mBAAmB,KAAK,CAAA;AAC9B,IAAA,eAAA,CAAgB,eAAA,EAAgB;AAChC,IAAA,eAAA,CAAgB,SAAS,KAAK,CAAA;AAC9B,IAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AACnD,IAAA,eAAA,CAAgB,eAAA,EAAgB;AAEhC,IAAA,QAAA,CAAS,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,EACpC,CAAA,MAAO;AACL,IAAA,MAAM,2BAAA;AAAA,EACR;AACF;;"}
|
|
@@ -455,18 +455,10 @@ const TimeInput = ({ date, setDate, shouldShowSeconds, timezone }) => {
|
|
|
455
455
|
const handleKeyDown = useCallback(
|
|
456
456
|
(event) => {
|
|
457
457
|
if (event.key === "Enter") {
|
|
458
|
-
|
|
459
|
-
if (!isValid) {
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
if (!parsedDate) {
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
const newDate = shouldShowSeconds ? dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).second(parsedDate.second()).toDate() : dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).toDate();
|
|
466
|
-
setDate(newDate);
|
|
458
|
+
handleTimeChange(timeString);
|
|
467
459
|
}
|
|
468
460
|
},
|
|
469
|
-
[
|
|
461
|
+
[handleTimeChange, timeString]
|
|
470
462
|
);
|
|
471
463
|
return /* @__PURE__ */ jsxs(
|
|
472
464
|
TimeInputContainer,
|
|
@@ -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 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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"}
|
|
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 handleTimeChange(timeString);\n }\n },\n [handleTimeChange, 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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"}
|
|
@@ -59,13 +59,13 @@ const copyGridElements = async ({
|
|
|
59
59
|
case "columns":
|
|
60
60
|
Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(
|
|
61
61
|
(rowIndex) => {
|
|
62
|
-
const columnList = [...selection.columns].sort();
|
|
62
|
+
const columnList = [...selection.columns].sort((a, b) => a - b);
|
|
63
63
|
columnListLoop(tbody, columnList, cell, rowIndex);
|
|
64
64
|
}
|
|
65
65
|
);
|
|
66
66
|
break;
|
|
67
67
|
case "rows":
|
|
68
|
-
[...selection.rows].sort().forEach((rowIndex) => {
|
|
68
|
+
[...selection.rows].sort((a, b) => a - b).forEach((rowIndex) => {
|
|
69
69
|
const columnList = Array.from(
|
|
70
70
|
{ length: columnCount },
|
|
71
71
|
(_, index) => pageStart + index
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyGridElements.js","sources":["../../../../src/components/Grid/copyGridElements.ts"],"sourcesContent":["import { CellProps, SelectedRegion, SelectionFocus } from './types';\nimport { RefObject, createElement } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\ninterface CopyGridElementsProps {\n cell: CellProps;\n selection: SelectedRegion;\n rowCount: number;\n columnCount: number;\n pageStart?: number;\n focus: SelectionFocus;\n outerRef: RefObject<HTMLDivElement>;\n}\n\nconst addCellToRow = (\n row: HTMLTableRowElement,\n cell: CellProps,\n rowIndex: number,\n columnIndex: number\n) => {\n const td = document.createElement('td');\n const container = document.createElement('div');\n const root = createRoot(container);\n\n flushSync(() => {\n root.render(\n createElement(cell, { rowIndex, columnIndex, width: 1000, type: 'row-cell' })\n );\n });\n\n td.innerHTML = container.innerHTML;\n root.unmount();\n\n row.appendChild(td);\n};\n\nconst columnListLoop = (\n tbody: HTMLTableSectionElement,\n columnList: number[],\n cell: CellProps,\n rowIndex: number\n) => {\n const row = document.createElement('tr');\n columnList.forEach(columnIndex => {\n addCellToRow(row, cell, rowIndex, columnIndex);\n });\n tbody.appendChild(row);\n};\n\nconst copyGridElements = async ({\n cell,\n selection,\n rowCount,\n columnCount,\n pageStart = 0,\n focus,\n outerRef,\n}: CopyGridElementsProps): Promise<void> => {\n if (!outerRef.current) {\n throw 'Could not fetch selection';\n }\n const table = document.createElement('table');\n table.style.position = 'absolute';\n table.style.top = '-200px';\n table.style.left = '-200px';\n table.style.width = '0px';\n table.style.height = '0px';\n table.style.overflow = 'hidden';\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n\n switch (selection.type) {\n case 'rectangle':\n Array.from(\n { length: selection.bounds.bottom + 1 - selection.bounds.top },\n (_, index) => selection.bounds.top + index\n ).forEach(rowIndex => {\n const columnList = Array.from(\n { length: selection.bounds.right + 1 - selection.bounds.left },\n (_, index) => selection.bounds.left + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'columns':\n Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(\n rowIndex => {\n const columnList = [...selection.columns].sort();\n columnListLoop(tbody, columnList, cell, rowIndex);\n }\n );\n break;\n case 'rows':\n [...selection.rows].sort().forEach(rowIndex => {\n
|
|
1
|
+
{"version":3,"file":"copyGridElements.js","sources":["../../../../src/components/Grid/copyGridElements.ts"],"sourcesContent":["import { CellProps, SelectedRegion, SelectionFocus } from './types';\nimport { RefObject, createElement } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\ninterface CopyGridElementsProps {\n cell: CellProps;\n selection: SelectedRegion;\n rowCount: number;\n columnCount: number;\n pageStart?: number;\n focus: SelectionFocus;\n outerRef: RefObject<HTMLDivElement>;\n}\n\nconst addCellToRow = (\n row: HTMLTableRowElement,\n cell: CellProps,\n rowIndex: number,\n columnIndex: number\n) => {\n const td = document.createElement('td');\n const container = document.createElement('div');\n const root = createRoot(container);\n\n flushSync(() => {\n root.render(\n createElement(cell, { rowIndex, columnIndex, width: 1000, type: 'row-cell' })\n );\n });\n\n td.innerHTML = container.innerHTML;\n root.unmount();\n\n row.appendChild(td);\n};\n\nconst columnListLoop = (\n tbody: HTMLTableSectionElement,\n columnList: number[],\n cell: CellProps,\n rowIndex: number\n) => {\n const row = document.createElement('tr');\n columnList.forEach(columnIndex => {\n addCellToRow(row, cell, rowIndex, columnIndex);\n });\n tbody.appendChild(row);\n};\n\nconst copyGridElements = async ({\n cell,\n selection,\n rowCount,\n columnCount,\n pageStart = 0,\n focus,\n outerRef,\n}: CopyGridElementsProps): Promise<void> => {\n if (!outerRef.current) {\n throw 'Could not fetch selection';\n }\n const table = document.createElement('table');\n table.style.position = 'absolute';\n table.style.top = '-200px';\n table.style.left = '-200px';\n table.style.width = '0px';\n table.style.height = '0px';\n table.style.overflow = 'hidden';\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n\n switch (selection.type) {\n case 'rectangle':\n Array.from(\n { length: selection.bounds.bottom + 1 - selection.bounds.top },\n (_, index) => selection.bounds.top + index\n ).forEach(rowIndex => {\n const columnList = Array.from(\n { length: selection.bounds.right + 1 - selection.bounds.left },\n (_, index) => selection.bounds.left + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'columns':\n Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(\n rowIndex => {\n const columnList = [...selection.columns].sort((a, b) => a - b);\n columnListLoop(tbody, columnList, cell, rowIndex);\n }\n );\n break;\n case 'rows':\n [...selection.rows]\n .sort((a, b) => a - b)\n .forEach(rowIndex => {\n const columnList = Array.from(\n { length: columnCount },\n (_, index) => pageStart + index\n );\n columnListLoop(tbody, columnList, cell, rowIndex);\n });\n break;\n case 'empty':\n columnListLoop(tbody, [focus.column], cell, focus.row);\n break;\n default:\n throw new Error('incorrect selection provided');\n }\n\n table.appendChild(thead);\n table.appendChild(tbody);\n\n outerRef.current.appendChild(table);\n\n const windowSelection = window.getSelection();\n if (windowSelection) {\n const range = document.createRange();\n range.selectNodeContents(table);\n windowSelection.removeAllRanges();\n windowSelection.addRange(range);\n await navigator.clipboard.writeText(table.innerText);\n windowSelection.removeAllRanges();\n\n outerRef.current.removeChild(table);\n } else {\n throw 'Could not fetch selection';\n }\n};\n\nexport default copyGridElements;\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clickhouse/click-ui",
|
|
3
|
-
"version": "0.15.0",
|
|
3
|
+
"version": "0.15.1-canary.g5f724cbd.0",
|
|
4
4
|
"description": "Official ClickHouse design system react library",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -371,7 +371,6 @@
|
|
|
371
371
|
"changeset:status": "yarn changeset status",
|
|
372
372
|
"changeset:verify": ".scripts/bash/changeset-verification",
|
|
373
373
|
"circular-dependency:check": ".scripts/bash/circular-dependency-check",
|
|
374
|
-
"changeset:version": "yarn changeset version",
|
|
375
374
|
"convert:logo": ".scripts/js/convert-svg-to-react-component --type=logos",
|
|
376
375
|
"convert:icon": ".scripts/js/convert-svg-to-react-component --type=icons",
|
|
377
376
|
"convert:flag": ".scripts/js/convert-svg-to-react-component --type=flags",
|