@clickhouse/click-ui 0.1.0-rc.79 → 0.1.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/dist/cjs/components/DateDetails/index.cjs +6 -98
- package/dist/cjs/components/DateDetails/index.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +2 -4
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/utils/date.cjs +107 -2
- package/dist/cjs/utils/date.cjs.map +1 -1
- package/dist/esm/components/DateDetails/index.js +6 -91
- package/dist/esm/components/DateDetails/index.js.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +2 -3
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/utils/date.js +92 -2
- package/dist/esm/utils/date.js.map +1 -1
- package/dist/types/utils/date.d.ts +3 -2
- package/package.json +1 -1
|
@@ -3,14 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
const dayjs = require('dayjs');
|
|
7
|
-
const advancedFormat = require('dayjs/plugin/advancedFormat.js');
|
|
8
|
-
const duration = require('dayjs/plugin/duration.js');
|
|
9
|
-
const localizedFormat = require('dayjs/plugin/localizedFormat.js');
|
|
10
|
-
const relativeTime = require('dayjs/plugin/relativeTime.js');
|
|
11
|
-
const timezone = require('dayjs/plugin/timezone.js');
|
|
12
|
-
const updateLocale = require('dayjs/plugin/updateLocale.js');
|
|
13
|
-
const utc = require('dayjs/plugin/utc.js');
|
|
14
6
|
const styledComponents = require('styled-components');
|
|
15
7
|
const common = require('../Link/common.cjs');
|
|
16
8
|
const date = require('../../utils/date.cjs');
|
|
@@ -18,112 +10,28 @@ const Popover = require('../Popover/index.cjs');
|
|
|
18
10
|
const Text = require('../Text/index.cjs');
|
|
19
11
|
const GridContainer = require('../GridContainer/index.cjs');
|
|
20
12
|
const Container = require('../Container/index.cjs');
|
|
13
|
+
const dayjs = require('dayjs');
|
|
21
14
|
|
|
22
15
|
const _interopDefault = e => e && e.__esModule ? e : { default: e };
|
|
23
16
|
|
|
24
17
|
const dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
|
|
25
|
-
const advancedFormat__default = /*#__PURE__*/_interopDefault(advancedFormat);
|
|
26
|
-
const duration__default = /*#__PURE__*/_interopDefault(duration);
|
|
27
|
-
const localizedFormat__default = /*#__PURE__*/_interopDefault(localizedFormat);
|
|
28
|
-
const relativeTime__default = /*#__PURE__*/_interopDefault(relativeTime);
|
|
29
|
-
const timezone__default = /*#__PURE__*/_interopDefault(timezone);
|
|
30
|
-
const updateLocale__default = /*#__PURE__*/_interopDefault(updateLocale);
|
|
31
|
-
const utc__default = /*#__PURE__*/_interopDefault(utc);
|
|
32
18
|
|
|
33
|
-
dayjs__default.default.extend(advancedFormat__default.default);
|
|
34
|
-
dayjs__default.default.extend(duration__default.default);
|
|
35
|
-
dayjs__default.default.extend(localizedFormat__default.default);
|
|
36
|
-
dayjs__default.default.extend(timezone__default.default);
|
|
37
|
-
dayjs__default.default.extend(updateLocale__default.default);
|
|
38
|
-
dayjs__default.default.extend(utc__default.default);
|
|
39
|
-
const thresholds = [{
|
|
40
|
-
l: "s",
|
|
41
|
-
r: 1,
|
|
42
|
-
d: "second"
|
|
43
|
-
}, {
|
|
44
|
-
l: "ss",
|
|
45
|
-
r: 56,
|
|
46
|
-
d: "second"
|
|
47
|
-
}, {
|
|
48
|
-
l: "m",
|
|
49
|
-
r: 90,
|
|
50
|
-
d: "second"
|
|
51
|
-
}, {
|
|
52
|
-
l: "mm",
|
|
53
|
-
r: 55,
|
|
54
|
-
d: "minute"
|
|
55
|
-
}, {
|
|
56
|
-
l: "h",
|
|
57
|
-
r: 90,
|
|
58
|
-
d: "minute"
|
|
59
|
-
}, {
|
|
60
|
-
l: "hh",
|
|
61
|
-
r: 22,
|
|
62
|
-
d: "hour"
|
|
63
|
-
}, {
|
|
64
|
-
l: "d",
|
|
65
|
-
r: 40,
|
|
66
|
-
d: "hour"
|
|
67
|
-
}, {
|
|
68
|
-
l: "dd",
|
|
69
|
-
r: 31,
|
|
70
|
-
d: "day"
|
|
71
|
-
}, {
|
|
72
|
-
l: "M",
|
|
73
|
-
r: 45,
|
|
74
|
-
d: "day"
|
|
75
|
-
}, {
|
|
76
|
-
l: "MM",
|
|
77
|
-
r: 11,
|
|
78
|
-
d: "month"
|
|
79
|
-
}, {
|
|
80
|
-
l: "y",
|
|
81
|
-
r: 17,
|
|
82
|
-
d: "month"
|
|
83
|
-
}, {
|
|
84
|
-
l: "yy",
|
|
85
|
-
r: 2,
|
|
86
|
-
d: "year"
|
|
87
|
-
}];
|
|
88
|
-
dayjs__default.default.extend(relativeTime__default.default, {
|
|
89
|
-
thresholds
|
|
90
|
-
});
|
|
91
|
-
dayjs__default.default.updateLocale("en", {
|
|
92
|
-
relativeTime: {
|
|
93
|
-
future: "In %s",
|
|
94
|
-
past: "%s ago",
|
|
95
|
-
s: "a few seconds",
|
|
96
|
-
ss: "%d seconds",
|
|
97
|
-
m: "1 minute",
|
|
98
|
-
mm: "%d minutes",
|
|
99
|
-
h: "1 hour",
|
|
100
|
-
hh: "%d hours",
|
|
101
|
-
d: "1 day",
|
|
102
|
-
dd: "%d days",
|
|
103
|
-
w: "1 week",
|
|
104
|
-
ww: "%d weeks",
|
|
105
|
-
M: "1 month",
|
|
106
|
-
MM: "%d months",
|
|
107
|
-
y: "1 year",
|
|
108
|
-
yy: "%d years"
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
19
|
const UnderlinedTrigger = styledComponents.styled(Popover.Popover.Trigger).withConfig({
|
|
112
20
|
componentId: "sc-17qquw8-0"
|
|
113
21
|
})(["", ""], common.linkStyles);
|
|
114
|
-
const formatDateDetails = (date,
|
|
22
|
+
const formatDateDetails = (date, timezone) => {
|
|
115
23
|
const isCurrentYear = dayjs__default.default().year() === date.year();
|
|
116
24
|
const formatForCurrentYear = "MMM D, h:mm a";
|
|
117
25
|
const formatForPastYear = "MMM D, YYYY, h:mm a";
|
|
118
26
|
if (isCurrentYear) {
|
|
119
|
-
if (
|
|
120
|
-
const dateWithTimezone = date.tz(
|
|
27
|
+
if (timezone) {
|
|
28
|
+
const dateWithTimezone = date.tz(timezone);
|
|
121
29
|
return dateWithTimezone.format(formatForCurrentYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
122
30
|
}
|
|
123
31
|
return date.format(formatForCurrentYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
124
32
|
}
|
|
125
|
-
if (
|
|
126
|
-
const dateWithTimezone = date.tz(
|
|
33
|
+
if (timezone) {
|
|
34
|
+
const dateWithTimezone = date.tz(timezone);
|
|
127
35
|
return dateWithTimezone.format(formatForPastYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
128
36
|
}
|
|
129
37
|
return date.format(formatForPastYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/DateDetails/DateDetails.tsx"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\nimport advancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport duration from 'dayjs/plugin/duration.js';\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport timezone from 'dayjs/plugin/timezone.js';\nimport updateLocale from 'dayjs/plugin/updateLocale.js';\nimport utc from 'dayjs/plugin/utc.js';\n\nimport { styled } from 'styled-components';\n\nimport { Popover } from '@/components/Popover';\nimport { Text } from '@/components/Text';\nimport { linkStyles, StyledLinkProps } from '@/components/Link/common';\nimport { GridContainer } from '@/components/GridContainer';\nimport { Container } from '@/components/Container';\n\nimport { formatTimezone } from '@/utils/date';\n\ndayjs.extend(advancedFormat);\ndayjs.extend(duration);\ndayjs.extend(localizedFormat);\ndayjs.extend(timezone);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\n\nconst thresholds = [\n { l: 's', r: 1, d: 'second' },\n { l: 'ss', r: 56, d: 'second' },\n { l: 'm', r: 90, d: 'second' },\n { l: 'mm', r: 55, d: 'minute' },\n { l: 'h', r: 90, d: 'minute' },\n { l: 'hh', r: 22, d: 'hour' },\n { l: 'd', r: 40, d: 'hour' },\n { l: 'dd', r: 31, d: 'day' },\n { l: 'M', r: 45, d: 'day' },\n { l: 'MM', r: 11, d: 'month' },\n { l: 'y', r: 17, d: 'month' },\n { l: 'yy', r: 2, d: 'year' },\n];\n\ndayjs.extend(relativeTime, { thresholds });\n\ndayjs.updateLocale('en', {\n relativeTime: {\n future: 'In %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: '1 minute',\n mm: '%d minutes',\n h: '1 hour',\n hh: '%d hours',\n d: '1 day',\n dd: '%d days',\n w: '1 week',\n ww: '%d weeks',\n M: '1 month',\n MM: '%d months',\n y: '1 year',\n yy: '%d years',\n },\n});\n\nconst UnderlinedTrigger = styled(Popover.Trigger)<StyledLinkProps>`\n ${linkStyles}\n`;\n\nconst formatDateDetails = (date: Dayjs, timezone?: string): string => {\n const isCurrentYear = dayjs().year() === date.year();\n const formatForCurrentYear = 'MMM D, h:mm a';\n const formatForPastYear = 'MMM D, YYYY, h:mm a';\n\n if (isCurrentYear) {\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForCurrentYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n\n return date.format(formatForCurrentYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n }\n\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForPastYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n return date.format(formatForPastYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n};\n\nimport { DateDetailsProps } from './DateDetails.types';\n\nexport const DateDetails = ({\n date,\n side = 'top',\n size = 'sm',\n systemTimeZone,\n weight = 'normal',\n}: DateDetailsProps) => {\n const dayjsDate = dayjs(date);\n\n let systemTime;\n if (systemTimeZone) {\n try {\n systemTime = dayjsDate.tz(systemTimeZone);\n } catch {\n systemTime = dayjsDate.tz('America/New_York');\n }\n }\n\n return (\n <Popover>\n <UnderlinedTrigger\n $size=\"sm\"\n $weight=\"medium\"\n >\n <Text\n size={size}\n weight={weight}\n >\n {dayjs.utc(date).fromNow()}\n </Text>\n </UnderlinedTrigger>\n <Popover.Content\n side={side}\n showArrow\n >\n <GridContainer\n columnGap=\"xl\"\n gridTemplateColumns=\"repeat(2, auto)\"\n gap=\"sm\"\n >\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Local\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(dayjsDate)} (\n {formatTimezone({\n date: dayjsDate,\n timezone: dayjs.tz.guess(),\n })}\n )\n </Text>\n </Container>\n\n {systemTime && (\n <>\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n System\n </Text>\n\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(systemTime, systemTimeZone)} (\n {formatTimezone({\n date: systemTime,\n timezone: systemTimeZone,\n })}\n )\n </Text>\n </Container>\n </>\n )}\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n UTC\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{formatDateDetails(dayjsDate.utc(), 'UTC')}</Text>\n </Container>\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Unix\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{Math.round(dayjsDate.valueOf() / 1000)}</Text>\n </Container>\n </GridContainer>\n </Popover.Content>\n </Popover>\n );\n};\n"],"names":["dayjs","extend","advancedFormat","duration","localizedFormat","timezone","updateLocale","utc","thresholds","l","r","d","relativeTime","future","past","s","ss","m","mm","h","hh","dd","w","ww","M","MM","y","yy","UnderlinedTrigger","styled","Popover","Trigger","withConfig","componentId","linkStyles","formatDateDetails","date","isCurrentYear","year","formatForCurrentYear","formatForPastYear","dateWithTimezone","tz","format","replace","DateDetails","side","size","systemTimeZone","weight","dayjsDate","systemTime","jsx","Text","fromNow","jsxs","GridContainer","Container","formatTimezone","guess","Fragment","Math","round","valueOf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/DateDetails/DateDetails.tsx"],"sourcesContent":["import { styled } from 'styled-components';\n\nimport { Popover } from '@/components/Popover';\nimport { Text } from '@/components/Text';\nimport { linkStyles, StyledLinkProps } from '@/components/Link/common';\nimport { GridContainer } from '@/components/GridContainer';\nimport { Container } from '@/components/Container';\n\nimport { dayjs, Dayjs, formatTimezone } from '@/utils/date';\n\nconst UnderlinedTrigger = styled(Popover.Trigger)<StyledLinkProps>`\n ${linkStyles}\n`;\n\nconst formatDateDetails = (date: Dayjs, timezone?: string): string => {\n const isCurrentYear = dayjs().year() === date.year();\n const formatForCurrentYear = 'MMM D, h:mm a';\n const formatForPastYear = 'MMM D, YYYY, h:mm a';\n\n if (isCurrentYear) {\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForCurrentYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n\n return date.format(formatForCurrentYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n }\n\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForPastYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n return date.format(formatForPastYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n};\n\nimport { DateDetailsProps } from './DateDetails.types';\n\nexport const DateDetails = ({\n date,\n side = 'top',\n size = 'sm',\n systemTimeZone,\n weight = 'normal',\n}: DateDetailsProps) => {\n const dayjsDate = dayjs(date);\n\n let systemTime;\n if (systemTimeZone) {\n try {\n systemTime = dayjsDate.tz(systemTimeZone);\n } catch {\n systemTime = dayjsDate.tz('America/New_York');\n }\n }\n\n return (\n <Popover>\n <UnderlinedTrigger\n $size=\"sm\"\n $weight=\"medium\"\n >\n <Text\n size={size}\n weight={weight}\n >\n {dayjs.utc(date).fromNow()}\n </Text>\n </UnderlinedTrigger>\n <Popover.Content\n side={side}\n showArrow\n >\n <GridContainer\n columnGap=\"xl\"\n gridTemplateColumns=\"repeat(2, auto)\"\n gap=\"sm\"\n >\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Local\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(dayjsDate)} (\n {formatTimezone({\n date: dayjsDate,\n timezone: dayjs.tz.guess(),\n })}\n )\n </Text>\n </Container>\n\n {systemTime && (\n <>\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n System\n </Text>\n\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(systemTime, systemTimeZone)} (\n {formatTimezone({\n date: systemTime,\n timezone: systemTimeZone,\n })}\n )\n </Text>\n </Container>\n </>\n )}\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n UTC\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{formatDateDetails(dayjsDate.utc(), 'UTC')}</Text>\n </Container>\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Unix\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{Math.round(dayjsDate.valueOf() / 1000)}</Text>\n </Container>\n </GridContainer>\n </Popover.Content>\n </Popover>\n );\n};\n"],"names":["UnderlinedTrigger","styled","Popover","Trigger","withConfig","componentId","linkStyles","formatDateDetails","date","timezone","isCurrentYear","dayjs","year","formatForCurrentYear","formatForPastYear","dateWithTimezone","tz","format","replace","DateDetails","side","size","systemTimeZone","weight","dayjsDate","systemTime","jsx","Text","utc","fromNow","jsxs","GridContainer","Container","formatTimezone","guess","Fragment","Math","round","valueOf"],"mappings":"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"}
|
|
@@ -12,19 +12,17 @@ const Container = require('../Container/index.cjs');
|
|
|
12
12
|
const Panel = require('../Panel/index.cjs');
|
|
13
13
|
const Icon = require('../Icon/index.cjs');
|
|
14
14
|
const utils = require('./utils.cjs');
|
|
15
|
-
|
|
15
|
+
require('../../utils/date.cjs');
|
|
16
16
|
const Tabs = require('../Tabs/index.cjs');
|
|
17
17
|
const ButtonGroup = require('../ButtonGroup/index.cjs');
|
|
18
|
-
const customParseFormat = require('dayjs/plugin/customParseFormat');
|
|
19
18
|
const Label = require('../Label/index.cjs');
|
|
20
19
|
const TextField = require('../TextField/index.cjs');
|
|
20
|
+
const dayjs = require('dayjs');
|
|
21
21
|
|
|
22
22
|
const _interopDefault = e => e && e.__esModule ? e : { default: e };
|
|
23
23
|
|
|
24
24
|
const dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
|
|
25
|
-
const customParseFormat__default = /*#__PURE__*/_interopDefault(customParseFormat);
|
|
26
25
|
|
|
27
|
-
dayjs__default.default.extend(customParseFormat__default.default);
|
|
28
26
|
const calendarFullWidth = "258px";
|
|
29
27
|
const PredefinedCalendarContainer = styledComponents.styled(Panel.Panel).withConfig({
|
|
30
28
|
componentId: "sc-vcr4us-0"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '../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 { DateRangeListItem, datesAreWithinMaxRange, Meridiem } from './utils';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Tabs } from '../Tabs/Tabs';\nimport { TextField } from '@/components/TextField';\nimport { ButtonGroup } from '../ButtonGroup/ButtonGroup';\n\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { Label } from '../Label/Label';\n\ndayjs.extend(customParseFormat);\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedTimesContainer = styled(Container)`\n width: ${calendarFullWidth};\n`;\n\ntype OpenDirection = 'left' | 'right';\n\n// left value of 259px is the width of the PredefinedTimesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 259px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedTimesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\nconst StyledTriggerList = styled(Tabs.TriggersList)`\n justify-content: space-around;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst TimeInputContainer = styled(Container)`\n background: ${({ theme }) =>\n theme.click.datePicker.dateOption.color.background.default};\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\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 closeDatePicker?: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n\n const today = new Date();\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, 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 startDate &&\n startDate > fullDate &&\n !isSameDate(startDate, 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 !startDate &&\n endDate &&\n fullDate > endDate\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !startDate &&\n Boolean(\n endDate && hoveredDate && fullDate < endDate && 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 // 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 fullDate.setHours(startDate.getHours());\n fullDate.setMinutes(startDate.getMinutes());\n fullDate.setSeconds(startDate.getSeconds());\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 fullDate.setHours(endDate.getHours());\n fullDate.setMinutes(endDate.getMinutes());\n fullDate.setSeconds(endDate.getSeconds());\n }\n\n setSelectedDate(fullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={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: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange: { startDate, endDate }, label }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n selectedEndDate === endDate &&\n selectedStartDate &&\n selectedStartDate === startDate;\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 Since a specific date and time <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 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}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds }: TimeInputProps) => {\n let dayjsDate = dayjs(date);\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 >\n <Container maxWidth=\"10%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n gap=\"md\"\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\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\ntype Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n closeDatePicker: () => void;\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}\n\nconst TabbedCalendar = ({\n closeDatePicker,\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>('startDate');\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 return (\n <Tabs\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 calendarOptions={startDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer calendarOptions={endDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n </Tabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n}\n\nexport const DateTimeRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n shouldShowSeconds,\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 if (startDate.getHours() === 0) {\n startDate.setHours(12);\n }\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n if (endDate.getHours() === 0) {\n endDate.setHours(12);\n }\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\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 if (\n selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0\n ) {\n selectedDate.setHours(12); // set the time to 12 noon if time hasn't been set yet\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n onSelectDateRange(selectedDate, selectedEndDate);\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n onSelectDateRange(selectedStartDate, selectedDate);\n }\n }\n },\n [onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const 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 />\n </Dropdown.Trigger>\n <Dropdown.Content align=\"start\">\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </>\n )}\n </Container>\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["dayjs","extend","customParseFormat","calendarFullWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedTimesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","StyledTriggerList","Tabs","TriggersList","ScrollableContainer","TimeInputContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","calendarType","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","jsx","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","today","Date","isCurrentDate","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","startDateSelectedAndIsSelectingEndDate","endDateSelectedAndIsSelectingStartDate","shouldShowRangeIndicator","handleMouseEnter","handleClick","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","PredefinedTimes","onSelectDateRange","predefinedTimesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","dateRange","label","handleItemClick","rangeIsSelected","StyledDropdownItem","getTime","jsxs","Icon","toISOString","parseTimeString","timeString","validTimeRegex","test","isValid","hours","minutes","seconds","split","hoursAsNumber","parseInt","Number","isNaN","parsedDate","minutesAsNumber","secondsAsNumber","TimeInput","setDate","shouldShowSeconds","dayjsDate","hour","minute","formattedDate","format","setTimeString","dateIsValid","setDateIsValid","meridiem","setMeridiem","isEnabled","useEffect","handleTimeChange","useCallback","newTimeString","trimmedTime","trim","newDate","second","toDate","handleMeridiemChange","newMeridiem","handleKeyDown","Label","TextField","ButtonGroup","TabbedCalendar","closeDatePicker","activeTab","setActiveTab","handleTabChange","newTab","handleSetStartDate","handleSetEndDate","startDateCalendarOptions","endDateCalendarOptions","defaultDate","body","DateTimeRangePicker","disabled","openDirection","placeholder","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","useLayoutEffect","current","rect","getBoundingClientRect","right","window","innerWidth","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedTimes","length","Dropdown","DateTimeRangePickerInput","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateTimeRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '../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 { DateRangeListItem, datesAreWithinMaxRange, Meridiem } 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';\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedTimesContainer = styled(Container)`\n width: ${calendarFullWidth};\n`;\n\ntype OpenDirection = 'left' | 'right';\n\n// left value of 259px is the width of the PredefinedTimesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 259px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedTimesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\nconst StyledTriggerList = styled(Tabs.TriggersList)`\n justify-content: space-around;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst TimeInputContainer = styled(Container)`\n background: ${({ theme }) =>\n theme.click.datePicker.dateOption.color.background.default};\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\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 closeDatePicker?: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n\n const today = new Date();\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, 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 startDate &&\n startDate > fullDate &&\n !isSameDate(startDate, 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 !startDate &&\n endDate &&\n fullDate > endDate\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !startDate &&\n Boolean(\n endDate && hoveredDate && fullDate < endDate && 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 // 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 fullDate.setHours(startDate.getHours());\n fullDate.setMinutes(startDate.getMinutes());\n fullDate.setSeconds(startDate.getSeconds());\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 fullDate.setHours(endDate.getHours());\n fullDate.setMinutes(endDate.getMinutes());\n fullDate.setSeconds(endDate.getSeconds());\n }\n\n setSelectedDate(fullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={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: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange: { startDate, endDate }, label }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n selectedEndDate === endDate &&\n selectedStartDate &&\n selectedStartDate === startDate;\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 Since a specific date and time <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 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}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds }: TimeInputProps) => {\n let dayjsDate = dayjs(date);\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 >\n <Container maxWidth=\"10%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n gap=\"md\"\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\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\ntype Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n closeDatePicker: () => void;\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}\n\nconst TabbedCalendar = ({\n closeDatePicker,\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>('startDate');\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 return (\n <Tabs\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 calendarOptions={startDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer calendarOptions={endDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n </Tabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n}\n\nexport const DateTimeRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n shouldShowSeconds,\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 if (startDate.getHours() === 0) {\n startDate.setHours(12);\n }\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n if (endDate.getHours() === 0) {\n endDate.setHours(12);\n }\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\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 if (\n selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0\n ) {\n selectedDate.setHours(12); // set the time to 12 noon if time hasn't been set yet\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n onSelectDateRange(selectedDate, selectedEndDate);\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n onSelectDateRange(selectedStartDate, selectedDate);\n }\n }\n },\n [onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const 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 />\n </Dropdown.Trigger>\n <Dropdown.Content align=\"start\">\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </>\n )}\n </Container>\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarFullWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedTimesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","StyledTriggerList","Tabs","TriggersList","ScrollableContainer","TimeInputContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","calendarType","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","jsx","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","today","Date","isCurrentDate","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","startDateSelectedAndIsSelectingEndDate","endDateSelectedAndIsSelectingStartDate","shouldShowRangeIndicator","handleMouseEnter","handleClick","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","PredefinedTimes","onSelectDateRange","predefinedTimesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","dateRange","label","handleItemClick","rangeIsSelected","StyledDropdownItem","getTime","jsxs","Icon","toISOString","parseTimeString","timeString","validTimeRegex","test","isValid","hours","minutes","seconds","split","hoursAsNumber","parseInt","Number","isNaN","parsedDate","dayjs","minutesAsNumber","secondsAsNumber","TimeInput","setDate","shouldShowSeconds","dayjsDate","hour","minute","formattedDate","format","setTimeString","dateIsValid","setDateIsValid","meridiem","setMeridiem","isEnabled","useEffect","handleTimeChange","useCallback","newTimeString","trimmedTime","trim","newDate","second","toDate","handleMeridiemChange","newMeridiem","handleKeyDown","Label","TextField","ButtonGroup","TabbedCalendar","closeDatePicker","activeTab","setActiveTab","handleTabChange","newTab","handleSetStartDate","handleSetEndDate","startDateCalendarOptions","endDateCalendarOptions","defaultDate","body","DateTimeRangePicker","disabled","openDirection","placeholder","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","useLayoutEffect","current","rect","getBoundingClientRect","right","window","innerWidth","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedTimes","length","Dropdown","DateTimeRangePickerInput","Fragment"],"mappings":"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"}
|
package/dist/cjs/utils/date.cjs
CHANGED
|
@@ -2,13 +2,114 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
+
const dayjs = require('dayjs');
|
|
6
|
+
const advancedFormat = require('dayjs/plugin/advancedFormat.js');
|
|
7
|
+
const customParseFormat = require('dayjs/plugin/customParseFormat.js');
|
|
8
|
+
const duration = require('dayjs/plugin/duration.js');
|
|
9
|
+
const localizedFormat = require('dayjs/plugin/localizedFormat.js');
|
|
10
|
+
const relativeTime = require('dayjs/plugin/relativeTime.js');
|
|
11
|
+
const timezone = require('dayjs/plugin/timezone.js');
|
|
12
|
+
const updateLocale = require('dayjs/plugin/updateLocale.js');
|
|
13
|
+
const utc = require('dayjs/plugin/utc.js');
|
|
14
|
+
|
|
15
|
+
const _interopDefault = e => e && e.__esModule ? e : { default: e };
|
|
16
|
+
|
|
17
|
+
const dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
|
|
18
|
+
const advancedFormat__default = /*#__PURE__*/_interopDefault(advancedFormat);
|
|
19
|
+
const customParseFormat__default = /*#__PURE__*/_interopDefault(customParseFormat);
|
|
20
|
+
const duration__default = /*#__PURE__*/_interopDefault(duration);
|
|
21
|
+
const localizedFormat__default = /*#__PURE__*/_interopDefault(localizedFormat);
|
|
22
|
+
const relativeTime__default = /*#__PURE__*/_interopDefault(relativeTime);
|
|
23
|
+
const timezone__default = /*#__PURE__*/_interopDefault(timezone);
|
|
24
|
+
const updateLocale__default = /*#__PURE__*/_interopDefault(updateLocale);
|
|
25
|
+
const utc__default = /*#__PURE__*/_interopDefault(utc);
|
|
26
|
+
|
|
27
|
+
const thresholds = [{
|
|
28
|
+
l: "s",
|
|
29
|
+
r: 1,
|
|
30
|
+
d: "second"
|
|
31
|
+
}, {
|
|
32
|
+
l: "ss",
|
|
33
|
+
r: 56,
|
|
34
|
+
d: "second"
|
|
35
|
+
}, {
|
|
36
|
+
l: "m",
|
|
37
|
+
r: 90,
|
|
38
|
+
d: "second"
|
|
39
|
+
}, {
|
|
40
|
+
l: "mm",
|
|
41
|
+
r: 55,
|
|
42
|
+
d: "minute"
|
|
43
|
+
}, {
|
|
44
|
+
l: "h",
|
|
45
|
+
r: 90,
|
|
46
|
+
d: "minute"
|
|
47
|
+
}, {
|
|
48
|
+
l: "hh",
|
|
49
|
+
r: 22,
|
|
50
|
+
d: "hour"
|
|
51
|
+
}, {
|
|
52
|
+
l: "d",
|
|
53
|
+
r: 40,
|
|
54
|
+
d: "hour"
|
|
55
|
+
}, {
|
|
56
|
+
l: "dd",
|
|
57
|
+
r: 31,
|
|
58
|
+
d: "day"
|
|
59
|
+
}, {
|
|
60
|
+
l: "M",
|
|
61
|
+
r: 45,
|
|
62
|
+
d: "day"
|
|
63
|
+
}, {
|
|
64
|
+
l: "MM",
|
|
65
|
+
r: 11,
|
|
66
|
+
d: "month"
|
|
67
|
+
}, {
|
|
68
|
+
l: "y",
|
|
69
|
+
r: 17,
|
|
70
|
+
d: "month"
|
|
71
|
+
}, {
|
|
72
|
+
l: "yy",
|
|
73
|
+
r: 2,
|
|
74
|
+
d: "year"
|
|
75
|
+
}];
|
|
76
|
+
dayjs__default.default.extend(advancedFormat__default.default);
|
|
77
|
+
dayjs__default.default.extend(customParseFormat__default.default);
|
|
78
|
+
dayjs__default.default.extend(duration__default.default);
|
|
79
|
+
dayjs__default.default.extend(localizedFormat__default.default);
|
|
80
|
+
dayjs__default.default.extend(timezone__default.default);
|
|
81
|
+
dayjs__default.default.extend(updateLocale__default.default);
|
|
82
|
+
dayjs__default.default.extend(utc__default.default);
|
|
83
|
+
dayjs__default.default.extend(relativeTime__default.default, {
|
|
84
|
+
thresholds
|
|
85
|
+
});
|
|
86
|
+
dayjs__default.default.updateLocale("en", {
|
|
87
|
+
relativeTime: {
|
|
88
|
+
future: "In %s",
|
|
89
|
+
past: "%s ago",
|
|
90
|
+
s: "a few seconds",
|
|
91
|
+
ss: "%d seconds",
|
|
92
|
+
m: "1 minute",
|
|
93
|
+
mm: "%d minutes",
|
|
94
|
+
h: "1 hour",
|
|
95
|
+
hh: "%d hours",
|
|
96
|
+
d: "1 day",
|
|
97
|
+
dd: "%d days",
|
|
98
|
+
w: "1 week",
|
|
99
|
+
ww: "%d weeks",
|
|
100
|
+
M: "1 month",
|
|
101
|
+
MM: "%d months",
|
|
102
|
+
y: "1 year",
|
|
103
|
+
yy: "%d years"
|
|
104
|
+
}
|
|
105
|
+
});
|
|
5
106
|
const DEFAULT_DATE_LOCALE = "en-US";
|
|
6
107
|
const formatTimezone = ({
|
|
7
108
|
date,
|
|
8
|
-
timezone,
|
|
109
|
+
timezone: timezone2,
|
|
9
110
|
locale = DEFAULT_DATE_LOCALE
|
|
10
111
|
}) => new Intl.DateTimeFormat(locale, {
|
|
11
|
-
timeZone:
|
|
112
|
+
timeZone: timezone2,
|
|
12
113
|
timeZoneName: "short"
|
|
13
114
|
}).formatToParts(date.toDate()).find((part) => part.type === "timeZoneName")?.value ?? date.format("z");
|
|
14
115
|
const DAYS = "days";
|
|
@@ -21,6 +122,10 @@ const getMonthNames = (format = "long") => Array.from({
|
|
|
21
122
|
month: format
|
|
22
123
|
}));
|
|
23
124
|
|
|
125
|
+
Object.defineProperty(exports, "dayjs", {
|
|
126
|
+
enumerable: true,
|
|
127
|
+
get: () => dayjs__default.default
|
|
128
|
+
});
|
|
24
129
|
exports.DAYS = DAYS;
|
|
25
130
|
exports.DAYS_IN_WEEK = DAYS_IN_WEEK;
|
|
26
131
|
exports.MONTHS = MONTHS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.cjs","sources":["../../../src/utils/date.ts"],"sourcesContent":["import { Dayjs } from 'dayjs';\n\nconst DEFAULT_DATE_LOCALE = 'en-US';\n\nexport const formatTimezone = ({\n date,\n timezone,\n locale = DEFAULT_DATE_LOCALE,\n}: {\n date: Dayjs;\n timezone?: string;\n locale?: string;\n}): string =>\n new Intl.DateTimeFormat(locale, {\n timeZone: timezone,\n timeZoneName: 'short',\n })\n .formatToParts(date.toDate())\n .find(part => part.type === 'timeZoneName')?.value ?? date.format('z');\n\nexport const DAYS = 'days';\nexport const MONTHS = 'months';\nexport const YEARS = 'years';\n\nexport const DAYS_IN_WEEK = 7;\n\ntype MonthNamesFormat = 'short' | 'long';\n\nexport const getMonthNames = (format: MonthNamesFormat = 'long') =>\n Array.from({ length: 12 }, (_, i) =>\n new Date(1970, i).toLocaleString(DEFAULT_DATE_LOCALE, { month: format })\n );\n"],"names":["
|
|
1
|
+
{"version":3,"file":"date.cjs","sources":["../../../src/utils/date.ts"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n// NOTE: Explicit `.js` extension in dayjs\n// to ensure strict ESM compatibility for\n// consumers using \"type\": \"module\".\n// E.g. if the package doesn’t define subpaths\n// in exports resolution would fail in ESM environments\n// TODO: Maybe create a vite plugin to detect\n// if a package has missing exports and add extension\nimport advancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport duration from 'dayjs/plugin/duration.js';\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport timezone from 'dayjs/plugin/timezone.js';\nimport updateLocale from 'dayjs/plugin/updateLocale.js';\nimport utc from 'dayjs/plugin/utc.js';\n\nconst thresholds = [\n { l: 's', r: 1, d: 'second' },\n { l: 'ss', r: 56, d: 'second' },\n { l: 'm', r: 90, d: 'second' },\n { l: 'mm', r: 55, d: 'minute' },\n { l: 'h', r: 90, d: 'minute' },\n { l: 'hh', r: 22, d: 'hour' },\n { l: 'd', r: 40, d: 'hour' },\n { l: 'dd', r: 31, d: 'day' },\n { l: 'M', r: 45, d: 'day' },\n { l: 'MM', r: 11, d: 'month' },\n { l: 'y', r: 17, d: 'month' },\n { l: 'yy', r: 2, d: 'year' },\n];\n\ndayjs.extend(advancedFormat);\ndayjs.extend(customParseFormat);\ndayjs.extend(duration);\ndayjs.extend(localizedFormat);\ndayjs.extend(timezone);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(relativeTime, { thresholds });\n\ndayjs.updateLocale('en', {\n relativeTime: {\n future: 'In %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: '1 minute',\n mm: '%d minutes',\n h: '1 hour',\n hh: '%d hours',\n d: '1 day',\n dd: '%d days',\n w: '1 week',\n ww: '%d weeks',\n M: '1 month',\n MM: '%d months',\n y: '1 year',\n yy: '%d years',\n },\n});\n\nexport { dayjs };\nexport type { Dayjs };\n\nconst DEFAULT_DATE_LOCALE = 'en-US';\n\nexport const formatTimezone = ({\n date,\n timezone,\n locale = DEFAULT_DATE_LOCALE,\n}: {\n date: Dayjs;\n timezone?: string;\n locale?: string;\n}): string =>\n new Intl.DateTimeFormat(locale, {\n timeZone: timezone,\n timeZoneName: 'short',\n })\n .formatToParts(date.toDate())\n .find(part => part.type === 'timeZoneName')?.value ?? date.format('z');\n\nexport const DAYS = 'days';\nexport const MONTHS = 'months';\nexport const YEARS = 'years';\n\nexport const DAYS_IN_WEEK = 7;\n\ntype MonthNamesFormat = 'short' | 'long';\n\nexport const getMonthNames = (format: MonthNamesFormat = 'long') =>\n Array.from({ length: 12 }, (_, i) =>\n new Date(1970, i).toLocaleString(DEFAULT_DATE_LOCALE, { month: format })\n );\n"],"names":["thresholds","l","r","d","dayjs","extend","advancedFormat","customParseFormat","duration","localizedFormat","timezone","updateLocale","utc","relativeTime","future","past","s","ss","m","mm","h","hh","dd","w","ww","M","MM","y","yy","DEFAULT_DATE_LOCALE","formatTimezone","date","locale","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","toDate","find","part","type","value","format","DAYS","MONTHS","YEARS","DAYS_IN_WEEK","getMonthNames","Array","from","length","_","i","Date","toLocaleString","month"],"mappings":"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"}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import dayjs from 'dayjs';
|
|
3
|
-
import advancedFormat from 'dayjs/plugin/advancedFormat.js';
|
|
4
|
-
import duration from 'dayjs/plugin/duration.js';
|
|
5
|
-
import localizedFormat from 'dayjs/plugin/localizedFormat.js';
|
|
6
|
-
import relativeTime from 'dayjs/plugin/relativeTime.js';
|
|
7
|
-
import timezone from 'dayjs/plugin/timezone.js';
|
|
8
|
-
import updateLocale from 'dayjs/plugin/updateLocale.js';
|
|
9
|
-
import utc from 'dayjs/plugin/utc.js';
|
|
10
2
|
import { styled } from 'styled-components';
|
|
11
3
|
import { linkStyles } from '../Link/common.js';
|
|
12
4
|
import { formatTimezone } from '../../utils/date.js';
|
|
@@ -14,101 +6,24 @@ import { Popover } from '../Popover/index.js';
|
|
|
14
6
|
import { Text } from '../Text/index.js';
|
|
15
7
|
import { GridContainer } from '../GridContainer/index.js';
|
|
16
8
|
import { Container } from '../Container/index.js';
|
|
9
|
+
import dayjs from 'dayjs';
|
|
17
10
|
|
|
18
|
-
dayjs.extend(advancedFormat);
|
|
19
|
-
dayjs.extend(duration);
|
|
20
|
-
dayjs.extend(localizedFormat);
|
|
21
|
-
dayjs.extend(timezone);
|
|
22
|
-
dayjs.extend(updateLocale);
|
|
23
|
-
dayjs.extend(utc);
|
|
24
|
-
const thresholds = [{
|
|
25
|
-
l: "s",
|
|
26
|
-
r: 1,
|
|
27
|
-
d: "second"
|
|
28
|
-
}, {
|
|
29
|
-
l: "ss",
|
|
30
|
-
r: 56,
|
|
31
|
-
d: "second"
|
|
32
|
-
}, {
|
|
33
|
-
l: "m",
|
|
34
|
-
r: 90,
|
|
35
|
-
d: "second"
|
|
36
|
-
}, {
|
|
37
|
-
l: "mm",
|
|
38
|
-
r: 55,
|
|
39
|
-
d: "minute"
|
|
40
|
-
}, {
|
|
41
|
-
l: "h",
|
|
42
|
-
r: 90,
|
|
43
|
-
d: "minute"
|
|
44
|
-
}, {
|
|
45
|
-
l: "hh",
|
|
46
|
-
r: 22,
|
|
47
|
-
d: "hour"
|
|
48
|
-
}, {
|
|
49
|
-
l: "d",
|
|
50
|
-
r: 40,
|
|
51
|
-
d: "hour"
|
|
52
|
-
}, {
|
|
53
|
-
l: "dd",
|
|
54
|
-
r: 31,
|
|
55
|
-
d: "day"
|
|
56
|
-
}, {
|
|
57
|
-
l: "M",
|
|
58
|
-
r: 45,
|
|
59
|
-
d: "day"
|
|
60
|
-
}, {
|
|
61
|
-
l: "MM",
|
|
62
|
-
r: 11,
|
|
63
|
-
d: "month"
|
|
64
|
-
}, {
|
|
65
|
-
l: "y",
|
|
66
|
-
r: 17,
|
|
67
|
-
d: "month"
|
|
68
|
-
}, {
|
|
69
|
-
l: "yy",
|
|
70
|
-
r: 2,
|
|
71
|
-
d: "year"
|
|
72
|
-
}];
|
|
73
|
-
dayjs.extend(relativeTime, {
|
|
74
|
-
thresholds
|
|
75
|
-
});
|
|
76
|
-
dayjs.updateLocale("en", {
|
|
77
|
-
relativeTime: {
|
|
78
|
-
future: "In %s",
|
|
79
|
-
past: "%s ago",
|
|
80
|
-
s: "a few seconds",
|
|
81
|
-
ss: "%d seconds",
|
|
82
|
-
m: "1 minute",
|
|
83
|
-
mm: "%d minutes",
|
|
84
|
-
h: "1 hour",
|
|
85
|
-
hh: "%d hours",
|
|
86
|
-
d: "1 day",
|
|
87
|
-
dd: "%d days",
|
|
88
|
-
w: "1 week",
|
|
89
|
-
ww: "%d weeks",
|
|
90
|
-
M: "1 month",
|
|
91
|
-
MM: "%d months",
|
|
92
|
-
y: "1 year",
|
|
93
|
-
yy: "%d years"
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
11
|
const UnderlinedTrigger = styled(Popover.Trigger).withConfig({
|
|
97
12
|
componentId: "sc-17qquw8-0"
|
|
98
13
|
})(["", ""], linkStyles);
|
|
99
|
-
const formatDateDetails = (date,
|
|
14
|
+
const formatDateDetails = (date, timezone) => {
|
|
100
15
|
const isCurrentYear = dayjs().year() === date.year();
|
|
101
16
|
const formatForCurrentYear = "MMM D, h:mm a";
|
|
102
17
|
const formatForPastYear = "MMM D, YYYY, h:mm a";
|
|
103
18
|
if (isCurrentYear) {
|
|
104
|
-
if (
|
|
105
|
-
const dateWithTimezone = date.tz(
|
|
19
|
+
if (timezone) {
|
|
20
|
+
const dateWithTimezone = date.tz(timezone);
|
|
106
21
|
return dateWithTimezone.format(formatForCurrentYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
107
22
|
}
|
|
108
23
|
return date.format(formatForCurrentYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
109
24
|
}
|
|
110
|
-
if (
|
|
111
|
-
const dateWithTimezone = date.tz(
|
|
25
|
+
if (timezone) {
|
|
26
|
+
const dateWithTimezone = date.tz(timezone);
|
|
112
27
|
return dateWithTimezone.format(formatForPastYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
113
28
|
}
|
|
114
29
|
return date.format(formatForPastYear).replace("am", "a.m.").replace("pm", "p.m.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/DateDetails/DateDetails.tsx"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\nimport advancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport duration from 'dayjs/plugin/duration.js';\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport timezone from 'dayjs/plugin/timezone.js';\nimport updateLocale from 'dayjs/plugin/updateLocale.js';\nimport utc from 'dayjs/plugin/utc.js';\n\nimport { styled } from 'styled-components';\n\nimport { Popover } from '@/components/Popover';\nimport { Text } from '@/components/Text';\nimport { linkStyles, StyledLinkProps } from '@/components/Link/common';\nimport { GridContainer } from '@/components/GridContainer';\nimport { Container } from '@/components/Container';\n\nimport { formatTimezone } from '@/utils/date';\n\ndayjs.extend(advancedFormat);\ndayjs.extend(duration);\ndayjs.extend(localizedFormat);\ndayjs.extend(timezone);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\n\nconst thresholds = [\n { l: 's', r: 1, d: 'second' },\n { l: 'ss', r: 56, d: 'second' },\n { l: 'm', r: 90, d: 'second' },\n { l: 'mm', r: 55, d: 'minute' },\n { l: 'h', r: 90, d: 'minute' },\n { l: 'hh', r: 22, d: 'hour' },\n { l: 'd', r: 40, d: 'hour' },\n { l: 'dd', r: 31, d: 'day' },\n { l: 'M', r: 45, d: 'day' },\n { l: 'MM', r: 11, d: 'month' },\n { l: 'y', r: 17, d: 'month' },\n { l: 'yy', r: 2, d: 'year' },\n];\n\ndayjs.extend(relativeTime, { thresholds });\n\ndayjs.updateLocale('en', {\n relativeTime: {\n future: 'In %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: '1 minute',\n mm: '%d minutes',\n h: '1 hour',\n hh: '%d hours',\n d: '1 day',\n dd: '%d days',\n w: '1 week',\n ww: '%d weeks',\n M: '1 month',\n MM: '%d months',\n y: '1 year',\n yy: '%d years',\n },\n});\n\nconst UnderlinedTrigger = styled(Popover.Trigger)<StyledLinkProps>`\n ${linkStyles}\n`;\n\nconst formatDateDetails = (date: Dayjs, timezone?: string): string => {\n const isCurrentYear = dayjs().year() === date.year();\n const formatForCurrentYear = 'MMM D, h:mm a';\n const formatForPastYear = 'MMM D, YYYY, h:mm a';\n\n if (isCurrentYear) {\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForCurrentYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n\n return date.format(formatForCurrentYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n }\n\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForPastYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n return date.format(formatForPastYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n};\n\nimport { DateDetailsProps } from './DateDetails.types';\n\nexport const DateDetails = ({\n date,\n side = 'top',\n size = 'sm',\n systemTimeZone,\n weight = 'normal',\n}: DateDetailsProps) => {\n const dayjsDate = dayjs(date);\n\n let systemTime;\n if (systemTimeZone) {\n try {\n systemTime = dayjsDate.tz(systemTimeZone);\n } catch {\n systemTime = dayjsDate.tz('America/New_York');\n }\n }\n\n return (\n <Popover>\n <UnderlinedTrigger\n $size=\"sm\"\n $weight=\"medium\"\n >\n <Text\n size={size}\n weight={weight}\n >\n {dayjs.utc(date).fromNow()}\n </Text>\n </UnderlinedTrigger>\n <Popover.Content\n side={side}\n showArrow\n >\n <GridContainer\n columnGap=\"xl\"\n gridTemplateColumns=\"repeat(2, auto)\"\n gap=\"sm\"\n >\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Local\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(dayjsDate)} (\n {formatTimezone({\n date: dayjsDate,\n timezone: dayjs.tz.guess(),\n })}\n )\n </Text>\n </Container>\n\n {systemTime && (\n <>\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n System\n </Text>\n\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(systemTime, systemTimeZone)} (\n {formatTimezone({\n date: systemTime,\n timezone: systemTimeZone,\n })}\n )\n </Text>\n </Container>\n </>\n )}\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n UTC\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{formatDateDetails(dayjsDate.utc(), 'UTC')}</Text>\n </Container>\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Unix\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{Math.round(dayjsDate.valueOf() / 1000)}</Text>\n </Container>\n </GridContainer>\n </Popover.Content>\n </Popover>\n );\n};\n"],"names":["dayjs","extend","advancedFormat","duration","localizedFormat","timezone","updateLocale","utc","thresholds","l","r","d","relativeTime","future","past","s","ss","m","mm","h","hh","dd","w","ww","M","MM","y","yy","UnderlinedTrigger","styled","Popover","Trigger","withConfig","componentId","linkStyles","formatDateDetails","date","isCurrentYear","year","formatForCurrentYear","formatForPastYear","dateWithTimezone","tz","format","replace","DateDetails","side","size","systemTimeZone","weight","dayjsDate","systemTime","fromNow","formatTimezone","guess","Math","round","valueOf"],"mappings":";;;;;;;;;;;;;;;;;AAmBAA,KAAAA,CAAMC,OAAOC,cAAc,CAAA;AAC3BF,KAAAA,CAAMC,OAAOE,QAAQ,CAAA;AACrBH,KAAAA,CAAMC,OAAOG,eAAe,CAAA;AAC5BJ,KAAAA,CAAMC,OAAOI,QAAQ,CAAA;AACrBL,KAAAA,CAAMC,OAAOK,YAAY,CAAA;AACzBN,KAAAA,CAAMC,OAAOM,GAAG,CAAA;AAEhB,MAAMC,aAAa,CACjB;AAAA,EAAEC,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,CAAA;AAAA,EAAGC,CAAAA,EAAG;AAAS,CAAA,EAC5B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAS,CAAA,EAC9B;AAAA,EAAEF,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAS,CAAA,EAC7B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAS,CAAA,EAC9B;AAAA,EAAEF,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAS,CAAA,EAC7B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAO,CAAA,EAC5B;AAAA,EAAEF,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAO,CAAA,EAC3B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAM,CAAA,EAC3B;AAAA,EAAEF,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAM,CAAA,EAC1B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAQ,CAAA,EAC7B;AAAA,EAAEF,CAAAA,EAAG,GAAA;AAAA,EAAKC,CAAAA,EAAG,EAAA;AAAA,EAAIC,CAAAA,EAAG;AAAQ,CAAA,EAC5B;AAAA,EAAEF,CAAAA,EAAG,IAAA;AAAA,EAAMC,CAAAA,EAAG,CAAA;AAAA,EAAGC,CAAAA,EAAG;AAAO,CAAC,CAAA;AAG9BX,KAAAA,CAAMC,OAAOW,YAAAA,EAAc;AAAA,EAAEJ;AAAW,CAAC,CAAA;AAEzCR,KAAAA,CAAMM,aAAa,IAAA,EAAM;AAAA,EACvBM,YAAAA,EAAc;AAAA,IACZC,MAAAA,EAAQ,OAAA;AAAA,IACRC,IAAAA,EAAM,QAAA;AAAA,IACNC,CAAAA,EAAG,eAAA;AAAA,IACHC,EAAAA,EAAI,YAAA;AAAA,IACJC,CAAAA,EAAG,UAAA;AAAA,IACHC,EAAAA,EAAI,YAAA;AAAA,IACJC,CAAAA,EAAG,QAAA;AAAA,IACHC,EAAAA,EAAI,UAAA;AAAA,IACJT,CAAAA,EAAG,OAAA;AAAA,IACHU,EAAAA,EAAI,SAAA;AAAA,IACJC,CAAAA,EAAG,QAAA;AAAA,IACHC,EAAAA,EAAI,UAAA;AAAA,IACJC,CAAAA,EAAG,SAAA;AAAA,IACHC,EAAAA,EAAI,WAAA;AAAA,IACJC,CAAAA,EAAG,QAAA;AAAA,IACHC,EAAAA,EAAI;AAAA;AAER,CAAC,CAAA;AAED,MAAMC,iBAAAA,GAAoBC,MAAAA,CAAOC,OAAAA,CAAQC,OAAO,EAACC,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,GAC7CC,UAAU,CAAA;AAGd,MAAMC,iBAAAA,GAAoBA,CAACC,IAAAA,EAAa/B,SAAAA,KAA8B;AACpE,EAAA,MAAMgC,gBAAgBrC,KAAAA,EAAM,CAAEsC,IAAAA,EAAK,KAAMF,KAAKE,IAAAA,EAAK;AACnD,EAAA,MAAMC,oBAAAA,GAAuB,eAAA;AAC7B,EAAA,MAAMC,iBAAAA,GAAoB,qBAAA;AAE1B,EAAA,IAAIH,aAAAA,EAAe;AACjB,IAAA,IAAIhC,SAAAA,EAAU;AACZ,MAAA,MAAMoC,gBAAAA,GAAmBL,IAAAA,CAAKM,EAAAA,CAAGrC,SAAQ,CAAA;AACzC,MAAA,OAAOoC,gBAAAA,CACJE,MAAAA,CAAOJ,oBAAoB,CAAA,CAC3BK,OAAAA,CAAQ,MAAM,MAAM,CAAA,CACpBA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,IACzB;AAEA,IAAA,OAAOR,IAAAA,CAAKO,MAAAA,CAAOJ,oBAAoB,CAAA,CAAEK,OAAAA,CAAQ,MAAM,MAAM,CAAA,CAAEA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EACrF;AAEA,EAAA,IAAIvC,SAAAA,EAAU;AACZ,IAAA,MAAMoC,gBAAAA,GAAmBL,IAAAA,CAAKM,EAAAA,CAAGrC,SAAQ,CAAA;AACzC,IAAA,OAAOoC,gBAAAA,CACJE,MAAAA,CAAOH,iBAAiB,CAAA,CACxBI,OAAAA,CAAQ,MAAM,MAAM,CAAA,CACpBA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,OAAOR,IAAAA,CAAKO,MAAAA,CAAOH,iBAAiB,CAAA,CAAEI,OAAAA,CAAQ,MAAM,MAAM,CAAA,CAAEA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAClF,CAAA;AAIO,MAAMC,cAAcA,CAAC;AAAA,EAC1BT,IAAAA;AAAAA,EACAU,IAAAA,GAAO,KAAA;AAAA,EACPC,IAAAA,GAAO,IAAA;AAAA,EACPC,cAAAA;AAAAA,EACAC,MAAAA,GAAS;AACO,CAAA,KAAM;AACtB,EAAA,MAAMC,SAAAA,GAAYlD,MAAMoC,IAAI,CAAA;AAE5B,EAAA,IAAIe,UAAAA;AACJ,EAAA,IAAIH,cAAAA,EAAgB;AAClB,IAAA,IAAI;AACFG,MAAAA,UAAAA,GAAaD,SAAAA,CAAUR,GAAGM,cAAc,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACNG,MAAAA,UAAAA,GAAaD,SAAAA,CAAUR,GAAG,kBAAkB,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAA,EAAA,EACC,KAAA,EAAM,IAAA,EACN,OAAA,EAAQ,UAER,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EACC,IAAA,EACA,MAAA,EAEC1C,gBAAMO,GAAAA,CAAI6B,IAAI,CAAA,CAAEgB,OAAAA,IACnB,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,OAAA,CAAQ,OAAA,EAAR,EACC,MACA,SAAA,EAAS,IAAA,EAET,QAAA,kBAAA,IAAA,CAAC,aAAA,EAAA,EACC,SAAA,EAAU,IAAA,EACV,mBAAA,EAAoB,iBAAA,EACpB,KAAI,IAAA,EAEJ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,OAAA,EAGX,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,cAAA,EAAe,OACxB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,MAAK,IAAA,EACRjB,QAAAA,EAAAA;AAAAA,QAAAA,iBAAAA,CAAkBe,SAAS,CAAA;AAAA,QAAE,IAAA;AAAA,QAC7BG,cAAAA,CAAe;AAAA,UACdjB,IAAAA,EAAMc,SAAAA;AAAAA,UACN7C,QAAAA,EAAUL,KAAAA,CAAM0C,EAAAA,CAAGY,KAAAA;AAAM,SAC1B,CAAA;AAAA,QAAC;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,MAECH,8BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,QAAA,EAGX,CAAA;AAAA,4BAEC,SAAA,EAAA,EAAU,cAAA,EAAe,OACxB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,MAAK,IAAA,EACRhB,QAAAA,EAAAA;AAAAA,UAAAA,iBAAAA,CAAkBgB,YAAYH,cAAc,CAAA;AAAA,UAAE,IAAA;AAAA,UAC9CK,cAAAA,CAAe;AAAA,YACdjB,IAAAA,EAAMe,UAAAA;AAAAA,YACN9C,QAAAA,EAAU2C;AAAAA,WACX,CAAA;AAAA,UAAC;AAAA,SAAA,EAEJ,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,0BAGD,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,KAAA,EAGX,CAAA;AAAA,sBACA,GAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,KAAA,EACxB,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAMb,QAAAA,EAAAA,iBAAAA,CAAkBe,SAAAA,CAAU3C,GAAAA,EAAI,EAAG,KAAK,GAAE,CAAA,EAC7D,CAAA;AAAA,0BAEC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,MAAA,EAGX,CAAA;AAAA,sBACA,GAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,KAAA,EACxB,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAMgD,QAAAA,EAAAA,IAAAA,CAAKC,MAAMN,SAAAA,CAAUO,OAAAA,EAAQ,GAAI,GAAI,GAAE,CAAA,EAC1D;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/DateDetails/DateDetails.tsx"],"sourcesContent":["import { styled } from 'styled-components';\n\nimport { Popover } from '@/components/Popover';\nimport { Text } from '@/components/Text';\nimport { linkStyles, StyledLinkProps } from '@/components/Link/common';\nimport { GridContainer } from '@/components/GridContainer';\nimport { Container } from '@/components/Container';\n\nimport { dayjs, Dayjs, formatTimezone } from '@/utils/date';\n\nconst UnderlinedTrigger = styled(Popover.Trigger)<StyledLinkProps>`\n ${linkStyles}\n`;\n\nconst formatDateDetails = (date: Dayjs, timezone?: string): string => {\n const isCurrentYear = dayjs().year() === date.year();\n const formatForCurrentYear = 'MMM D, h:mm a';\n const formatForPastYear = 'MMM D, YYYY, h:mm a';\n\n if (isCurrentYear) {\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForCurrentYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n\n return date.format(formatForCurrentYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n }\n\n if (timezone) {\n const dateWithTimezone = date.tz(timezone);\n return dateWithTimezone\n .format(formatForPastYear)\n .replace('am', 'a.m.')\n .replace('pm', 'p.m.');\n }\n return date.format(formatForPastYear).replace('am', 'a.m.').replace('pm', 'p.m.');\n};\n\nimport { DateDetailsProps } from './DateDetails.types';\n\nexport const DateDetails = ({\n date,\n side = 'top',\n size = 'sm',\n systemTimeZone,\n weight = 'normal',\n}: DateDetailsProps) => {\n const dayjsDate = dayjs(date);\n\n let systemTime;\n if (systemTimeZone) {\n try {\n systemTime = dayjsDate.tz(systemTimeZone);\n } catch {\n systemTime = dayjsDate.tz('America/New_York');\n }\n }\n\n return (\n <Popover>\n <UnderlinedTrigger\n $size=\"sm\"\n $weight=\"medium\"\n >\n <Text\n size={size}\n weight={weight}\n >\n {dayjs.utc(date).fromNow()}\n </Text>\n </UnderlinedTrigger>\n <Popover.Content\n side={side}\n showArrow\n >\n <GridContainer\n columnGap=\"xl\"\n gridTemplateColumns=\"repeat(2, auto)\"\n gap=\"sm\"\n >\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Local\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(dayjsDate)} (\n {formatTimezone({\n date: dayjsDate,\n timezone: dayjs.tz.guess(),\n })}\n )\n </Text>\n </Container>\n\n {systemTime && (\n <>\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n System\n </Text>\n\n <Container justifyContent=\"end\">\n <Text size=\"sm\">\n {formatDateDetails(systemTime, systemTimeZone)} (\n {formatTimezone({\n date: systemTime,\n timezone: systemTimeZone,\n })}\n )\n </Text>\n </Container>\n </>\n )}\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n UTC\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{formatDateDetails(dayjsDate.utc(), 'UTC')}</Text>\n </Container>\n\n <Text\n color=\"muted\"\n size=\"sm\"\n >\n Unix\n </Text>\n <Container justifyContent=\"end\">\n <Text size=\"sm\">{Math.round(dayjsDate.valueOf() / 1000)}</Text>\n </Container>\n </GridContainer>\n </Popover.Content>\n </Popover>\n );\n};\n"],"names":["UnderlinedTrigger","styled","Popover","Trigger","withConfig","componentId","linkStyles","formatDateDetails","date","timezone","isCurrentYear","dayjs","year","formatForCurrentYear","formatForPastYear","dateWithTimezone","tz","format","replace","DateDetails","side","size","systemTimeZone","weight","dayjsDate","systemTime","utc","fromNow","formatTimezone","guess","Math","round","valueOf"],"mappings":";;;;;;;;;;AAUA,MAAMA,iBAAAA,GAAoBC,MAAAA,CAAOC,OAAAA,CAAQC,OAAO,EAACC,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,GAC7CC,UAAU,CAAA;AAGd,MAAMC,iBAAAA,GAAoBA,CAACC,IAAAA,EAAaC,QAAAA,KAA8B;AACpE,EAAA,MAAMC,gBAAgBC,KAAAA,EAAM,CAAEC,IAAAA,EAAK,KAAMJ,KAAKI,IAAAA,EAAK;AACnD,EAAA,MAAMC,oBAAAA,GAAuB,eAAA;AAC7B,EAAA,MAAMC,iBAAAA,GAAoB,qBAAA;AAE1B,EAAA,IAAIJ,aAAAA,EAAe;AACjB,IAAA,IAAID,QAAAA,EAAU;AACZ,MAAA,MAAMM,gBAAAA,GAAmBP,IAAAA,CAAKQ,EAAAA,CAAGP,QAAQ,CAAA;AACzC,MAAA,OAAOM,gBAAAA,CACJE,MAAAA,CAAOJ,oBAAoB,CAAA,CAC3BK,OAAAA,CAAQ,MAAM,MAAM,CAAA,CACpBA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,IACzB;AAEA,IAAA,OAAOV,IAAAA,CAAKS,MAAAA,CAAOJ,oBAAoB,CAAA,CAAEK,OAAAA,CAAQ,MAAM,MAAM,CAAA,CAAEA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EACrF;AAEA,EAAA,IAAIT,QAAAA,EAAU;AACZ,IAAA,MAAMM,gBAAAA,GAAmBP,IAAAA,CAAKQ,EAAAA,CAAGP,QAAQ,CAAA;AACzC,IAAA,OAAOM,gBAAAA,CACJE,MAAAA,CAAOH,iBAAiB,CAAA,CACxBI,OAAAA,CAAQ,MAAM,MAAM,CAAA,CACpBA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,OAAOV,IAAAA,CAAKS,MAAAA,CAAOH,iBAAiB,CAAA,CAAEI,OAAAA,CAAQ,MAAM,MAAM,CAAA,CAAEA,OAAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAClF,CAAA;AAIO,MAAMC,cAAcA,CAAC;AAAA,EAC1BX,IAAAA;AAAAA,EACAY,IAAAA,GAAO,KAAA;AAAA,EACPC,IAAAA,GAAO,IAAA;AAAA,EACPC,cAAAA;AAAAA,EACAC,MAAAA,GAAS;AACO,CAAA,KAAM;AACtB,EAAA,MAAMC,SAAAA,GAAYb,MAAMH,IAAI,CAAA;AAE5B,EAAA,IAAIiB,UAAAA;AACJ,EAAA,IAAIH,cAAAA,EAAgB;AAClB,IAAA,IAAI;AACFG,MAAAA,UAAAA,GAAaD,SAAAA,CAAUR,GAAGM,cAAc,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACNG,MAAAA,UAAAA,GAAaD,SAAAA,CAAUR,GAAG,kBAAkB,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,iBAAA,EAAA,EACC,KAAA,EAAM,IAAA,EACN,OAAA,EAAQ,UAER,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EACC,IAAA,EACA,MAAA,EAECL,gBAAMe,GAAAA,CAAIlB,IAAI,CAAA,CAAEmB,OAAAA,IACnB,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,OAAA,CAAQ,OAAA,EAAR,EACC,MACA,SAAA,EAAS,IAAA,EAET,QAAA,kBAAA,IAAA,CAAC,aAAA,EAAA,EACC,SAAA,EAAU,IAAA,EACV,mBAAA,EAAoB,iBAAA,EACpB,KAAI,IAAA,EAEJ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,OAAA,EAGX,CAAA;AAAA,0BACC,SAAA,EAAA,EAAU,cAAA,EAAe,OACxB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,MAAK,IAAA,EACRpB,QAAAA,EAAAA;AAAAA,QAAAA,iBAAAA,CAAkBiB,SAAS,CAAA;AAAA,QAAE,IAAA;AAAA,QAC7BI,cAAAA,CAAe;AAAA,UACdpB,IAAAA,EAAMgB,SAAAA;AAAAA,UACNf,QAAAA,EAAUE,KAAAA,CAAMK,EAAAA,CAAGa,KAAAA;AAAM,SAC1B,CAAA;AAAA,QAAC;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,MAECJ,8BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,QAAA,EAGX,CAAA;AAAA,4BAEC,SAAA,EAAA,EAAU,cAAA,EAAe,OACxB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,MAAK,IAAA,EACRlB,QAAAA,EAAAA;AAAAA,UAAAA,iBAAAA,CAAkBkB,YAAYH,cAAc,CAAA;AAAA,UAAE,IAAA;AAAA,UAC9CM,cAAAA,CAAe;AAAA,YACdpB,IAAAA,EAAMiB,UAAAA;AAAAA,YACNhB,QAAAA,EAAUa;AAAAA,WACX,CAAA;AAAA,UAAC;AAAA,SAAA,EAEJ,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,0BAGD,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,KAAA,EAGX,CAAA;AAAA,sBACA,GAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,KAAA,EACxB,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAMf,QAAAA,EAAAA,iBAAAA,CAAkBiB,SAAAA,CAAUE,GAAAA,EAAI,EAAG,KAAK,GAAE,CAAA,EAC7D,CAAA;AAAA,0BAEC,IAAA,EAAA,EACC,KAAA,EAAM,OAAA,EACN,IAAA,EAAK,MAAI,QAAA,EAAA,MAAA,EAGX,CAAA;AAAA,sBACA,GAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,KAAA,EACxB,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAMI,QAAAA,EAAAA,IAAAA,CAAKC,MAAMP,SAAAA,CAAUQ,OAAAA,EAAQ,GAAI,GAAI,GAAE,CAAA,EAC1D;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -8,14 +8,13 @@ import { Container } from '../Container/index.js';
|
|
|
8
8
|
import { Panel } from '../Panel/index.js';
|
|
9
9
|
import { Icon as SvgImage } from '../Icon/index.js';
|
|
10
10
|
import { datesAreWithinMaxRange } from './utils.js';
|
|
11
|
-
import
|
|
11
|
+
import '../../utils/date.js';
|
|
12
12
|
import { Tabs } from '../Tabs/index.js';
|
|
13
13
|
import { ButtonGroup } from '../ButtonGroup/index.js';
|
|
14
|
-
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
15
14
|
import { Label } from '../Label/index.js';
|
|
16
15
|
import { TextField } from '../TextField/index.js';
|
|
16
|
+
import dayjs from 'dayjs';
|
|
17
17
|
|
|
18
|
-
dayjs.extend(customParseFormat);
|
|
19
18
|
const calendarFullWidth = "258px";
|
|
20
19
|
const PredefinedCalendarContainer = styled(Panel).withConfig({
|
|
21
20
|
componentId: "sc-vcr4us-0"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeRangePicker.js","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '../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 { DateRangeListItem, datesAreWithinMaxRange, Meridiem } from './utils';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Tabs } from '../Tabs/Tabs';\nimport { TextField } from '@/components/TextField';\nimport { ButtonGroup } from '../ButtonGroup/ButtonGroup';\n\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { Label } from '../Label/Label';\n\ndayjs.extend(customParseFormat);\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedTimesContainer = styled(Container)`\n width: ${calendarFullWidth};\n`;\n\ntype OpenDirection = 'left' | 'right';\n\n// left value of 259px is the width of the PredefinedTimesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 259px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedTimesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\nconst StyledTriggerList = styled(Tabs.TriggersList)`\n justify-content: space-around;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst TimeInputContainer = styled(Container)`\n background: ${({ theme }) =>\n theme.click.datePicker.dateOption.color.background.default};\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\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 closeDatePicker?: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n\n const today = new Date();\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, 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 startDate &&\n startDate > fullDate &&\n !isSameDate(startDate, 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 !startDate &&\n endDate &&\n fullDate > endDate\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !startDate &&\n Boolean(\n endDate && hoveredDate && fullDate < endDate && 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 // 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 fullDate.setHours(startDate.getHours());\n fullDate.setMinutes(startDate.getMinutes());\n fullDate.setSeconds(startDate.getSeconds());\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 fullDate.setHours(endDate.getHours());\n fullDate.setMinutes(endDate.getMinutes());\n fullDate.setSeconds(endDate.getSeconds());\n }\n\n setSelectedDate(fullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={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: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange: { startDate, endDate }, label }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n selectedEndDate === endDate &&\n selectedStartDate &&\n selectedStartDate === startDate;\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 Since a specific date and time <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 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}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds }: TimeInputProps) => {\n let dayjsDate = dayjs(date);\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 >\n <Container maxWidth=\"10%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n gap=\"md\"\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\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\ntype Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n closeDatePicker: () => void;\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}\n\nconst TabbedCalendar = ({\n closeDatePicker,\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>('startDate');\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 return (\n <Tabs\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 calendarOptions={startDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer calendarOptions={endDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n </Tabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n}\n\nexport const DateTimeRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n shouldShowSeconds,\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 if (startDate.getHours() === 0) {\n startDate.setHours(12);\n }\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n if (endDate.getHours() === 0) {\n endDate.setHours(12);\n }\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\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 if (\n selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0\n ) {\n selectedDate.setHours(12); // set the time to 12 noon if time hasn't been set yet\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n onSelectDateRange(selectedDate, selectedEndDate);\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n onSelectDateRange(selectedStartDate, selectedDate);\n }\n }\n },\n [onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const 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 />\n </Dropdown.Trigger>\n <Dropdown.Content align=\"start\">\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </>\n )}\n </Container>\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["dayjs","extend","customParseFormat","calendarFullWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedTimesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","StyledTriggerList","Tabs","TriggersList","ScrollableContainer","TimeInputContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","calendarType","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","today","Date","isCurrentDate","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","startDateSelectedAndIsSelectingEndDate","endDateSelectedAndIsSelectingStartDate","shouldShowRangeIndicator","handleMouseEnter","handleClick","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","PredefinedTimes","onSelectDateRange","predefinedTimesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","dateRange","label","handleItemClick","rangeIsSelected","getTime","Icon","toISOString","parseTimeString","timeString","validTimeRegex","test","isValid","hours","minutes","seconds","split","hoursAsNumber","parseInt","Number","isNaN","parsedDate","minutesAsNumber","secondsAsNumber","TimeInput","setDate","shouldShowSeconds","dayjsDate","hour","minute","formattedDate","format","setTimeString","dateIsValid","setDateIsValid","meridiem","setMeridiem","isEnabled","useEffect","handleTimeChange","useCallback","newTimeString","trimmedTime","trim","newDate","second","toDate","handleMeridiemChange","newMeridiem","handleKeyDown","TabbedCalendar","closeDatePicker","activeTab","setActiveTab","handleTabChange","newTab","handleSetStartDate","handleSetEndDate","startDateCalendarOptions","endDateCalendarOptions","defaultDate","body","DateTimeRangePicker","disabled","openDirection","placeholder","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","useLayoutEffect","current","rect","getBoundingClientRect","right","window","innerWidth","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedTimes","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateTimeRangePicker.js","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { styled } from 'styled-components';\nimport { Dropdown } from '../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 { DateRangeListItem, datesAreWithinMaxRange, Meridiem } 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';\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = styled(Panel)`\n align-items: start;\n background: ${({ theme }) => theme.click.panel.color.background.muted};\n`;\n\nconst PredefinedTimesContainer = styled(Container)`\n width: ${calendarFullWidth};\n`;\n\ntype OpenDirection = 'left' | 'right';\n\n// left value of 259px is the width of the PredefinedTimesContainer + 1 pixel for border\nconst CalendarRendererContainer = styled.div<{ $openDirection?: OpenDirection }>`\n border: ${({ theme }) =>\n `${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range}`};\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n box-shadow:\n lch(6.77 0 0 / 0.15) 4px 4px 6px -1px,\n lch(6.77 0 0 / 0.15) 2px 2px 4px -1px;\n ${({ $openDirection }) => ($openDirection === 'left' ? 'right: 100%;' : 'left: 259px;')}\n position: absolute;\n top: 0;\n`;\n\n// Height of 221px is height the height the calendar needs to match the PredefinedTimesContainer\nconst StyledCalendarRenderer = styled(CalendarRenderer)`\n border-radius: ${({ theme }) => theme.click.datePicker.dateOption.radii.default};\n min-height: 221px;\n`;\n\nconst StyledTriggerList = styled(Tabs.TriggersList)`\n justify-content: space-around;\n`;\n\n// max-height of 210px allows the scrollable container to be a reasonble height that matches the calendar\nconst ScrollableContainer = styled(Container)`\n max-height: 210px;\n overflow-y: auto;\n`;\n\nconst TimeInputContainer = styled(Container)`\n background: ${({ theme }) =>\n theme.click.datePicker.dateOption.color.background.default};\n`;\n\nconst DateRangeTableCell = styled(DateTableCell)<{\n $shouldShowRangeIndicator?: boolean;\n}>`\n ${({ $shouldShowRangeIndicator, theme }) =>\n $shouldShowRangeIndicator &&\n `\n background: ${theme.click.datePicker.dateOption.color.background.range};\n border: ${theme.click.datePicker.dateOption.stroke} solid ${theme.click.datePicker.dateOption.color.background.range};\n border-radius: 0;\n `}\n`;\n\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 closeDatePicker?: () => void;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (startDate && isSameDate(startDate, fullDate)) ||\n (endDate && isSameDate(endDate, fullDate));\n\n const today = new Date();\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n startDate && endDate && fullDate > startDate && fullDate < endDate\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n startDate &&\n !datesAreWithinMaxRange(startDate, 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 startDate &&\n startDate > fullDate &&\n !isSameDate(startDate, 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 !startDate &&\n endDate &&\n fullDate > endDate\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !endDate &&\n Boolean(\n startDate && hoveredDate && fullDate > startDate && fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !startDate &&\n Boolean(\n endDate && hoveredDate && fullDate < endDate && 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 // 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 fullDate.setHours(startDate.getHours());\n fullDate.setMinutes(startDate.getMinutes());\n fullDate.setSeconds(startDate.getSeconds());\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 fullDate.setHours(endDate.getHours());\n fullDate.setMinutes(endDate.getMinutes());\n fullDate.setSeconds(endDate.getSeconds());\n }\n\n setSelectedDate(fullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n $shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n $isCurrentMonth={isCurrentMonth}\n $isDisabled={isDisabled}\n $isSelected={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: (selectedStartDate: Date, selectedEndDate: Date) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange: { startDate, endDate }, label }) => {\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate);\n };\n\n const rangeIsSelected =\n selectedEndDate &&\n selectedEndDate === endDate &&\n selectedStartDate &&\n selectedStartDate === startDate;\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 Since a specific date and time <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 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}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds }: TimeInputProps) => {\n let dayjsDate = dayjs(date);\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 >\n <Container maxWidth=\"10%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n gap=\"md\"\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\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\ntype Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n closeDatePicker: () => void;\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}\n\nconst TabbedCalendar = ({\n closeDatePicker,\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>('startDate');\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 return (\n <Tabs\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 calendarOptions={startDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer calendarOptions={endDateCalendarOptions}>\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n closeDatePicker={closeDatePicker}\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n />\n </Tabs.Content>\n </Tabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n endDate?: Date;\n disabled?: boolean;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (selectedStartDate: Date, selectedEndDate: Date) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n}\n\nexport const DateTimeRangePicker = ({\n endDate,\n startDate,\n disabled = false,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n shouldShowSeconds,\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 if (startDate.getHours() === 0) {\n startDate.setHours(12);\n }\n setSelectedStartDate(startDate);\n }\n }, [startDate]);\n\n useEffect(() => {\n if (endDate) {\n if (endDate.getHours() === 0) {\n endDate.setHours(12);\n }\n setSelectedEndDate(endDate);\n }\n }, [endDate]);\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 if (\n selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0\n ) {\n selectedDate.setHours(12); // set the time to 12 noon if time hasn't been set yet\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n onSelectDateRange(selectedDate, selectedEndDate);\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n onSelectDateRange(selectedStartDate, selectedDate);\n }\n }\n },\n [onSelectDateRange, selectedEndDate, selectedStartDate]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const 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 />\n </Dropdown.Trigger>\n <Dropdown.Content align=\"start\">\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n $openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n closeDatePicker={closeDatePicker}\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 />\n </>\n )}\n </Container>\n </Dropdown.Content>\n </Dropdown>\n );\n};\n"],"names":["calendarFullWidth","PredefinedCalendarContainer","styled","Panel","withConfig","componentId","theme","click","panel","color","background","muted","PredefinedTimesContainer","Container","CalendarRendererContainer","div","datePicker","dateOption","stroke","range","radii","default","$openDirection","StyledCalendarRenderer","CalendarRenderer","StyledTriggerList","Tabs","TriggersList","ScrollableContainer","TimeInputContainer","DateRangeTableCell","DateTableCell","$shouldShowRangeIndicator","Calendar","calendarBody","calendarType","futureDatesDisabled","futureStartDatesDisabled","maxRangeLength","setSelectedDate","startDate","endDate","hoveredDate","setHoveredDate","useState","handleMouseOut","undefined","value","map","key","weekKey","week","date","isCurrentMonth","dayKey","fullDate","isSelected","isSameDate","today","Date","isCurrentDate","isBetweenStartAndEndDates","Boolean","isDisabled","datesAreWithinMaxRange","startDateSelectedAndIsSelectingEndDate","endDateSelectedAndIsSelectingStartDate","shouldShowRangeIndicator","handleMouseEnter","handleClick","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","PredefinedTimes","onSelectDateRange","predefinedTimesList","selectedEndDate","selectedStartDate","setEndDate","setStartDate","shouldShowCustomRange","showCustomDateRange","handleCustomTimePeriodClick","event","preventDefault","dateRange","label","handleItemClick","rangeIsSelected","getTime","Icon","toISOString","parseTimeString","timeString","validTimeRegex","test","isValid","hours","minutes","seconds","split","hoursAsNumber","parseInt","Number","isNaN","parsedDate","dayjs","minutesAsNumber","secondsAsNumber","TimeInput","setDate","shouldShowSeconds","dayjsDate","hour","minute","formattedDate","format","setTimeString","dateIsValid","setDateIsValid","meridiem","setMeridiem","isEnabled","useEffect","handleTimeChange","useCallback","newTimeString","trimmedTime","trim","newDate","second","toDate","handleMeridiemChange","newMeridiem","handleKeyDown","TabbedCalendar","closeDatePicker","activeTab","setActiveTab","handleTabChange","newTab","handleSetStartDate","handleSetEndDate","startDateCalendarOptions","endDateCalendarOptions","defaultDate","body","DateTimeRangePicker","disabled","openDirection","placeholder","isOpen","setIsOpen","setSelectedStartDate","setSelectedEndDate","setShouldShowCustomRange","calendarOpenDirection","setCalendarOpenDirection","calendarContainerRef","useRef","useLayoutEffect","current","rect","getBoundingClientRect","right","window","innerWidth","handleOpenChange","handleSelectDate","selectedDate","onTriggerKeyDown","e","shouldShowPredefinedTimes","length"],"mappings":";;;;;;;;;;;;;;;;;AA+BA,MAAMA,iBAAAA,GAAoB,OAAA;AAE1B,MAAMC,2BAAAA,GAA8BC,MAAAA,CAAOC,KAAK,CAAA,CAACC,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,+BAAA,EAAA,GAAA,GAEjC,CAAC;AAAA,EAAEC;AAAM,CAAA,KAAMA,KAAAA,CAAMC,KAAAA,CAAMC,KAAAA,CAAMC,KAAAA,CAAMC,WAAWC,KAAK,CAAA;AAGvE,MAAMC,wBAAAA,GAA2BV,MAAAA,CAAOW,SAAS,CAAA,CAACT,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,QAAA,EAAA,GAAA,GACvCL,iBAAiB,CAAA;AAM5B,MAAMc,yBAAAA,GAA4BZ,MAAAA,CAAOa,GAAAA,CAAGX,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,EAAA,CAAA,SAAA,EAAA,mBAAA,0FAAA,EAAA,2BAAA,GAChC,CAAC;AAAA,EAAEC;AAAM,CAAA,KACjB,CAAA,EAAGA,KAAAA,CAAMC,KAAAA,CAAMS,UAAAA,CAAWC,WAAWC,MAAM,CAAA,OAAA,EAAUZ,KAAAA,CAAMC,KAAAA,CAAMS,WAAWC,UAAAA,CAAWR,KAAAA,CAAMC,UAAAA,CAAWS,KAAK,IAC9F,CAAC;AAAA,EAAEb;AAAM,CAAA,KAAMA,MAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWG,KAAAA,CAAMC,SAItE,CAAC;AAAA,EAAEC;AAAe,CAAA,KAAOA,cAAAA,KAAmB,MAAA,GAAS,cAAA,GAAiB,cAAe,CAAA;AAMzF,MAAMC,sBAAAA,GAAyBrB,MAAAA,CAAOsB,gBAAgB,CAAA,CAACpB,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,oBAAA,GACpC,CAAC;AAAA,EAAEC;AAAM,CAAA,KAAMA,KAAAA,CAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWG,MAAMC,OAAO,CAAA;AAIjF,MAAMI,iBAAAA,GAAoBvB,MAAAA,CAAOwB,IAAAA,CAAKC,YAAY,EAACvB,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,+BAAA,CAAA,CAAA;AAKnD,MAAMuB,mBAAAA,GAAsB1B,MAAAA,CAAOW,SAAS,CAAA,CAACT,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,mCAAA,CAAA,CAAA;AAK7C,MAAMwB,kBAAAA,GAAqB3B,MAAAA,CAAOW,SAAS,CAAA,CAACT,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,aAAA,EAAA,GAAA,GAC5B,CAAC;AAAA,EAAEC;AAAM,CAAA,KACrBA,MAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWR,KAAAA,CAAMC,WAAWW,OAAO,CAAA;AAG9D,MAAMS,kBAAAA,GAAqB5B,MAAAA,CAAO6B,aAAa,CAAA,CAAC3B,UAAAA,CAAA;AAAA,EAAAC,WAAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,GAG5C,CAAC;AAAA,EAAE2B,yBAAAA;AAAAA,EAA2B1B;AAAM,CAAA,KACpC0B,yBAAAA,IACA;AAAA,gBAAA,EACc1B,MAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWR,KAAAA,CAAMC,WAAWS,KAAK,CAAA;AAAA,YAAA,EAC5Db,KAAAA,CAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWC,MAAM,CAAA,OAAA,EAAUZ,KAAAA,CAAMC,KAAAA,CAAMS,UAAAA,CAAWC,UAAAA,CAAWR,KAAAA,CAAMC,UAAAA,CAAWS,KAAK,CAAA;AAAA;AAAA,IAAA,CAEnH,CAAA;AAqBL,MAAMc,WAAWA,CAAC;AAAA,EAChBC,YAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,mBAAAA;AAAAA,EACAC,wBAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC;AACa,CAAA,KAAM;AACnB,EAAA,MAAM,CAACC,WAAAA,EAAaC,cAAc,CAAA,GAAIC,QAAAA,EAAe;AAErD,EAAA,MAAMC,iBAAiBA,MAAY;AACjCF,IAAAA,cAAAA,CAAeG,MAAS,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,OAAOZ,YAAAA,CAAaa,KAAAA,CAAMC,GAAAA,CAAI,CAAC;AAAA,IAAEC,GAAAA,EAAKC,OAAAA;AAAAA,IAASH,KAAAA,EAAOI;AAAAA,GAAK,KAAM;AAC/D,IAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EACEA,QAAAA,EAAAA,IAAAA,CAAKH,GAAAA,CAAI,CAAC;AAAA,MAAEI,IAAAA;AAAAA,MAAMC,cAAAA;AAAAA,MAAgBJ,GAAAA,EAAKK,MAAAA;AAAAA,MAAQP,KAAAA,EAAOQ;AAAAA,KAAS,KAAM;AACpE,MAAA,MAAMC,UAAAA,GACHhB,aAAaiB,UAAAA,CAAWjB,SAAAA,EAAWe,QAAQ,CAAA,IAC3Cd,OAAAA,IAAWgB,UAAAA,CAAWhB,OAAAA,EAASc,QAAQ,CAAA;AAE1C,MAAA,MAAMG,KAAAA,uBAAYC,IAAAA,EAAK;AAEvB,MAAA,MAAMC,aAAAA,GAAgBH,UAAAA,CAAWC,KAAAA,EAAOH,QAAQ,CAAA;AAChD,MAAA,MAAMM,4BAA4BC,OAAAA,CAChCtB,SAAAA,IAAaC,WAAWc,QAAAA,GAAWf,SAAAA,IAAae,WAAWd,OAC7D,CAAA;AAEA,MAAA,IAAIsB,UAAAA,GAAa,KAAA;AACjB,MAAA,IAAI3B,mBAAAA,IAAuBmB,WAAWG,KAAAA,EAAO;AAC3CK,QAAAA,UAAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IACE1B,wBAAAA,IACAF,YAAAA,KAAiB,WAAA,IACjBoB,QAAAA,GAAWG,KAAAA,EACX;AACAK,QAAAA,UAAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IACEzB,cAAAA,GAAiB,KACjBE,SAAAA,IACA,CAACwB,uBAAuBxB,SAAAA,EAAWe,QAAAA,EAAUjB,cAAc,CAAA,EAC3D;AACAyB,QAAAA,UAAAA,GAAa,IAAA;AAAA,MACf;AAGA,MAAA,IACE5B,YAAAA,KAAiB,aACjBK,SAAAA,IACAA,SAAAA,GAAYe,YACZ,CAACE,UAAAA,CAAWjB,SAAAA,EAAWe,QAAQ,CAAA,EAC/B;AACAQ,QAAAA,UAAAA,GAAa,IAAA;AAAA,MACf;AAGA,MAAA,IACE5B,iBAAiB,WAAA,IACjB,CAACK,SAAAA,IACDC,OAAAA,IACAc,WAAWd,OAAAA,EACX;AACAsB,QAAAA,UAAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,MAAME,sCAAAA,GACJ9B,YAAAA,KAAiB,SAAA,IACjB,CAACM,OAAAA,IACDqB,OAAAA,CACEtB,SAAAA,IAAaE,WAAAA,IAAea,QAAAA,GAAWf,SAAAA,IAAae,QAAAA,GAAWb,WACjE,CAAA;AAEF,MAAA,MAAMwB,sCAAAA,GACJ/B,YAAAA,KAAiB,WAAA,IACjB,CAACK,SAAAA,IACDsB,OAAAA,CACErB,OAAAA,IAAWC,WAAAA,IAAea,QAAAA,GAAWd,OAAAA,IAAWc,QAAAA,GAAWb,WAC7D,CAAA;AAEF,MAAA,MAAMyB,2BACJF,sCAAAA,IACAC,sCAAAA;AAEF,MAAA,MAAME,mBAAmBA,MAAM;AAC7BzB,QAAAA,cAAAA,CAAeY,QAAQ,CAAA;AAAA,MACzB,CAAA;AAEA,MAAA,MAAMc,cAAcA,MAAM;AACxB,QAAA,IAAIN,UAAAA,EAAY;AACd,UAAA,OAAO,KAAA;AAAA,QACT;AAIA,QAAA,IAAI5B,YAAAA,KAAiB,eAAeK,SAAAA,EAAW;AAC7Ce,UAAAA,QAAAA,CAASe,QAAAA,CAAS9B,SAAAA,CAAU+B,QAAAA,EAAU,CAAA;AACtChB,UAAAA,QAAAA,CAASiB,UAAAA,CAAWhC,SAAAA,CAAUiC,UAAAA,EAAY,CAAA;AAC1ClB,UAAAA,QAAAA,CAASmB,UAAAA,CAAWlC,SAAAA,CAAUmC,UAAAA,EAAY,CAAA;AAAA,QAC5C;AAIA,QAAA,IAAIxC,YAAAA,KAAiB,aAAaM,OAAAA,EAAS;AACzCc,UAAAA,QAAAA,CAASe,QAAAA,CAAS7B,OAAAA,CAAQ8B,QAAAA,EAAU,CAAA;AACpChB,UAAAA,QAAAA,CAASiB,UAAAA,CAAW/B,OAAAA,CAAQgC,UAAAA,EAAY,CAAA;AACxClB,UAAAA,QAAAA,CAASmB,UAAAA,CAAWjC,OAAAA,CAAQkC,UAAAA,EAAY,CAAA;AAAA,QAC1C;AAEApC,QAAAA,eAAAA,CAAgBgB,UAAUpB,YAAY,CAAA;AAAA,MACxC,CAAA;AAEA,MAAA,uBACE,GAAA,CAAC,sBACC,yBAAA,EACEgC,wBAAAA,IAA4BN,2BAE9B,eAAA,EAAiBR,cAAAA,EACjB,aAAaU,UAAAA,EACb,WAAA,EAAaP,YACb,UAAA,EAAYI,aAAAA,EAEZ,SAASS,WAAAA,EACT,YAAA,EAAcD,kBACd,YAAA,EAAcvB,cAAAA,EAEbO,kBALIE,MAMP,CAAA;AAAA,IAEJ,CAAC,KArHMJ,OAsHT,CAAA;AAAA,EAEJ,CAAC,CAAA;AACH,CAAA;AAaA,MAAM0B,kBAAkBA,CAAC;AAAA,EACvBC,iBAAAA;AAAAA,EACAC,mBAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,qBAAAA;AAAAA,EACAC;AACoB,CAAA,KAAM;AAC1B,EAAA,MAAMC,2BAAAA,GAA8BA,CAACC,KAAAA,KAAsB;AACzDA,IAAAA,KAAAA,CAAMC,cAAAA,EAAe;AACrBH,IAAAA,mBAAAA,CAAoB,CAACD,qBAAqB,CAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,4BACG,wBAAA,EAAA,EACC,aAAA,EAAY,yBACZ,YAAA,EAAc,KAAA,EACd,aAAY,UAAA,EAEZ,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,WAAA,EAAY,UAAA,EAC9BL,QAAAA,EAAAA,mBAAAA,CAAoB9B,IAAI,CAAC;AAAA,MAAEwC,SAAAA,EAAW;AAAA,QAAEhD,SAAAA;AAAAA,QAAWC;AAAAA,OAAQ;AAAA,MAAGgD;AAAAA,KAAM,KAAM;AACzE,MAAA,MAAMC,kBAAkBA,MAAM;AAC5BR,QAAAA,YAAAA,CAAa1C,SAAS,CAAA;AACtByC,QAAAA,UAAAA,CAAWxC,OAAO,CAAA;AAClBoC,QAAAA,iBAAAA,CAAkBrC,WAAWC,OAAO,CAAA;AAAA,MACtC,CAAA;AAEA,MAAA,MAAMkD,eAAAA,GACJZ,eAAAA,IACAA,eAAAA,KAAoBtC,OAAAA,IACpBuC,qBACAA,iBAAAA,KAAsBxC,SAAAA;AAExB,MAAA,2BACG,kBAAA,EAAA,EACC,aAAA,EAAa,mBAAmBA,SAAAA,CAAUoD,OAAAA,EAAS,CAAA,CAAA,EAEnD,OAAA,EAASF,iBAET,QAAA,kBAAA,IAAA,CAAC,SAAA,EAAA,EACC,iBAAeC,eAAAA,EACf,aAAA,EAAaF,OACb,cAAA,EAAe,eAAA,EACf,aAAY,YAAA,EAEXA,QAAAA,EAAAA;AAAAA,QAAAA,KAAAA;AAAAA,QACAE,eAAAA,oBAAmB,GAAA,CAACE,QAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAO;AAAA,OAAA,EACxC,CAAA,EAAA,EAXKrD,SAAAA,CAAUsD,WAAAA,EAYjB,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,sBAAmB,OAAA,EAAST,2BAAAA,EAC3B,+BAAC,SAAA,EAAA,EACC,cAAA,EAAe,eAAA,EACf,WAAA,EAAY,YAAA,EAAY,QAAA,EAAA;AAAA,MAAA,iCAAA;AAAA,sBAEO,GAAA,CAACQ,QAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAe;AAAA,KAAA,EAC3D,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,MAAME,eAAAA,GAAkBA,CACtBC,UAAAA,KAC6C;AAC7C,EAAA,IAAI,CAACC,cAAAA,CAAeC,IAAAA,CAAKF,UAAU,CAAA,EAAG;AACpC,IAAA,OAAO;AAAA,MAAEG,OAAAA,EAAS;AAAA,KAAM;AAAA,EAC1B;AAEA,EAAA,MAAM,CAACC,KAAAA,EAAOC,OAAAA,EAASC,OAAO,CAAA,GAAIN,UAAAA,CAAWO,MAAM,GAAG,CAAA;AAEtD,EAAA,MAAMC,aAAAA,GAAgBC,QAAAA,CAASL,KAAAA,EAAO,EAAE,CAAA;AACxC,EAAA,IAAIM,MAAAA,CAAOC,KAAAA,CAAMH,aAAa,CAAA,EAAG;AAC/B,IAAA,OAAO;AAAA,MAAEL,OAAAA,EAAS;AAAA,KAAM;AAAA,EAC1B;AAEA,EAAA,IAAIK,aAAAA,GAAgB,EAAA,IAAMA,aAAAA,GAAgB,CAAA,EAAG;AAC3C,IAAA,OAAO;AAAA,MAAEL,OAAAA,EAAS;AAAA,KAAM;AAAA,EAC1B;AAEA,EAAA,IAAIS,UAAAA;AACJ,EAAA,IAAI,CAACP,OAAAA,EAAS;AACZO,IAAAA,UAAAA,GAAaC,KAAAA,CAAMT,OAAO,GAAG,CAAA;AAAA,EAC/B,CAAA,MAAO;AACL,IAAA,MAAMU,eAAAA,GAAkBL,QAAAA,CAASJ,OAAAA,EAAS,EAAE,CAAA;AAC5C,IAAA,IAAIK,MAAAA,CAAOC,KAAAA,CAAMG,eAAe,CAAA,EAAG;AACjC,MAAA,OAAO;AAAA,QAAEX,OAAAA,EAAS;AAAA,OAAM;AAAA,IAC1B;AAEA,IAAA,IAAIW,eAAAA,GAAkB,EAAA,IAAMA,eAAAA,GAAkB,CAAA,EAAG;AAC/C,MAAA,OAAO;AAAA,QAAEX,OAAAA,EAAS;AAAA,OAAM;AAAA,IAC1B;AAEA,IAAA,IAAI,CAACG,OAAAA,EAAS;AACZM,MAAAA,UAAAA,GAAaC,MAAM,CAAA,EAAGT,KAAK,CAAA,CAAA,EAAIC,OAAO,IAAI,MAAM,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,MAAMU,eAAAA,GAAkBN,QAAAA,CAASH,OAAAA,EAAS,EAAE,CAAA;AAE5C,MAAA,IAAII,MAAAA,CAAOC,KAAAA,CAAMI,eAAe,CAAA,EAAG;AACjC,QAAA,OAAO;AAAA,UAAEZ,OAAAA,EAAS;AAAA,SAAM;AAAA,MAC1B;AAEA,MAAA,IAAIY,eAAAA,GAAkB,EAAA,IAAMA,eAAAA,GAAkB,CAAA,EAAG;AAC/C,QAAA,OAAO;AAAA,UAAEZ,OAAAA,EAAS;AAAA,SAAM;AAAA,MAC1B;AAEAS,MAAAA,UAAAA,GAAaC,KAAAA,CAAM,GAAGT,KAAK,CAAA,CAAA,EAAIC,OAAO,CAAA,CAAA,EAAIC,OAAO,IAAI,SAAS,CAAA;AAAA,IAChE;AAAA,EACF;AAEA,EAAA,IAAI,CAACM,UAAAA,CAAWT,OAAAA,EAAQ,EAAG;AACzB,IAAA,OAAO;AAAA,MAAEA,OAAAA,EAAS;AAAA,KAAM;AAAA,EAC1B;AAEA,EAAA,IAAI,CAACS,UAAAA,CAAWT,OAAAA,EAAQ,EAAG;AACzB,IAAA,OAAO;AAAA,MAAEA,OAAAA,EAAS;AAAA,KAAM;AAAA,EAC1B;AAEA,EAAA,OAAO;AAAA,IAAEA,OAAAA,EAAS,IAAA;AAAA,IAAMS;AAAAA,GAAW;AACrC,CAAA;AAEA,MAAMX,cAAAA,GAAiB,iCAAA;AAQvB,MAAMe,YAAYA,CAAC;AAAA,EAAE5D,IAAAA;AAAAA,EAAM6D,OAAAA;AAAAA,EAASC;AAAkC,CAAA,KAAM;AAC1E,EAAA,IAAIC,SAAAA,GAAYN,MAAMzD,IAAI,CAAA;AAC1B,EAAA,IAAI,CAACA,IAAAA,EAAM;AACT+D,IAAAA,SAAAA,GAAYA,SAAAA,CAAUC,IAAAA,CAAK,EAAE,CAAA,CAAEC,OAAO,CAAC,CAAA;AAAA,EACzC;AAEA,EAAA,MAAMC,aAAAA,GAAgBJ,oBAClBC,SAAAA,CAAUI,MAAAA,CAAO,UAAU,CAAA,GAC3BJ,SAAAA,CAAUI,OAAO,OAAO,CAAA;AAC5B,EAAA,MAAM,CAACvB,UAAAA,EAAYwB,aAAa,CAAA,GAAI5E,SAAiB0E,aAAa,CAAA;AAClE,EAAA,MAAM,CAACG,WAAAA,EAAaC,cAAc,CAAA,GAAI9E,SAAkB,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC+E,QAAAA,EAAUC,WAAW,CAAA,GAAIhF,QAAAA,EAAmB;AACnD,EAAA,MAAMiF,SAAAA,GAAY/D,QAAQV,IAAI,CAAA;AAE9B0E,EAAAA,SAAAA,CAAU,MAAM;AACd,IAAA,IAAI1E,IAAAA,EAAM;AACRwE,MAAAA,WAAAA,CAAYT,SAAAA,CAAUI,MAAAA,CAAO,GAAG,CAAa,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA,EAAG,CAACnE,IAAAA,EAAM+D,SAAS,CAAC,CAAA;AAEpB,EAAA,MAAMY,gBAAAA,GAAmBC,WAAAA,CACvB,CAACC,aAAAA,KAA0B;AACzBT,IAAAA,aAAAA,CAAcS,aAAa,CAAA;AAE3B,IAAA,IAAI,CAAC7E,IAAAA,EAAM;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAM8E,WAAAA,GAAcD,cAAcE,IAAAA,EAAK;AACvC,IAAA,IAAI,CAACD,WAAAA,EAAa;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM;AAAA,MAAE/B,OAAAA;AAAAA,MAASS;AAAAA,KAAW,GAAIb,gBAAgBmC,WAAW,CAAA;AAE3D,IAAA,IAAI,CAAC/B,OAAAA,EAAS;AACZuB,MAAAA,cAAAA,CAAe,KAAK,CAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAACd,UAAAA,EAAY;AACfc,MAAAA,cAAAA,CAAe,KAAK,CAAA;AACpB,MAAA;AAAA,IACF;AAEAA,IAAAA,cAAAA,CAAe,IAAI,CAAA;AAEnB,IAAA,IAAIN,IAAAA,GAAOR,WAAWQ,IAAAA,EAAK;AAK3B,IAAA,IAAIO,QAAAA,KAAa,IAAA,IAAQP,IAAAA,IAAQ,EAAA,EAAI;AACnCQ,MAAAA,WAAAA,CAAY,IAAI,CAAA;AAAA,IAClB;AAGA,IAAA,IAAID,QAAAA,KAAa,IAAA,IAAQP,IAAAA,GAAO,EAAA,EAAI;AAClCA,MAAAA,IAAAA,GAAOR,UAAAA,CAAWQ,MAAK,GAAI,EAAA;AAAA,IAC7B;AAEA,IAAA,MAAMgB,OAAAA,GAAUlB,iBAAAA,GACZC,SAAAA,CACGC,IAAAA,CAAKA,IAAI,CAAA,CACTC,MAAAA,CAAOT,UAAAA,CAAWS,MAAAA,EAAQ,CAAA,CAC1BgB,MAAAA,CAAOzB,UAAAA,CAAWyB,MAAAA,EAAQ,CAAA,CAC1BC,MAAAA,EAAO,GACVnB,SAAAA,CAAUC,IAAAA,CAAKA,IAAI,CAAA,CAAEC,MAAAA,CAAOT,UAAAA,CAAWS,MAAAA,EAAQ,CAAA,CAAEiB,MAAAA,EAAO;AAE5DrB,IAAAA,OAAAA,CAAQmB,OAAO,CAAA;AAAA,EACjB,GACA,CAAChF,IAAAA,EAAM+D,WAAWQ,QAAAA,EAAUV,OAAAA,EAASC,iBAAiB,CACxD,CAAA;AAEA,EAAA,MAAMqB,oBAAAA,GAAuBP,WAAAA,CAC3B,CAACQ,WAAAA,KAAwB;AACvBZ,IAAAA,WAAAA,CAAYY,WAAuB,CAAA;AAEnC,IAAA,IAAIA,WAAAA,KAAgB,IAAA,IAAQrB,SAAAA,CAAUC,IAAAA,KAAS,EAAA,EAAI;AACjD,MAAA,MAAMgB,OAAAA,GAAUjB,UAAUC,IAAAA,CAAKD,SAAAA,CAAUC,MAAK,GAAI,EAAE,EAAEkB,MAAAA,EAAO;AAE7DrB,MAAAA,OAAAA,CAAQmB,OAAO,CAAA;AAEf,MAAA;AAAA,IACF;AAEA,IAAA,IAAII,WAAAA,KAAgB,IAAA,IAAQrB,SAAAA,CAAUC,IAAAA,MAAU,EAAA,EAAI;AAClD,MAAA,MAAMgB,OAAAA,GAAUjB,UAAUC,IAAAA,CAAKD,SAAAA,CAAUC,MAAK,GAAI,EAAE,EAAEkB,MAAAA,EAAO;AAE7DrB,MAAAA,OAAAA,CAAQmB,OAAO,CAAA;AAEf,MAAA;AAAA,IACF;AAAA,EACF,CAAA,EACA,CAACjB,SAAAA,EAAWF,OAAO,CACrB,CAAA;AAEA,EAAA,MAAMwB,aAAAA,GAAgBT,WAAAA,CACpB,CAAC1C,KAAAA,KAA2C;AAC1C,IAAA,IAAIA,KAAAA,CAAMrC,QAAQ,OAAA,EAAS;AACzB,MAAA,MAAM;AAAA,QAAEkD,OAAAA;AAAAA,QAASS;AAAAA,OAAW,GAAIb,gBAAgBC,UAAU,CAAA;AAE1D,MAAA,IAAI,CAACG,OAAAA,EAAS;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAACS,UAAAA,EAAY;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAMwB,OAAAA,GAAUlB,iBAAAA,GACZC,SAAAA,CACGC,IAAAA,CAAKR,UAAAA,CAAWQ,IAAAA,EAAM,CAAA,CACtBC,MAAAA,CAAOT,UAAAA,CAAWS,MAAAA,EAAQ,EAC1BgB,MAAAA,CAAOzB,UAAAA,CAAWyB,MAAAA,EAAQ,CAAA,CAC1BC,MAAAA,EAAO,GACVnB,SAAAA,CAAUC,KAAKR,UAAAA,CAAWQ,IAAAA,EAAM,CAAA,CAAEC,MAAAA,CAAOT,UAAAA,CAAWS,MAAAA,EAAQ,EAAEiB,MAAAA,EAAO;AAEzErB,MAAAA,OAAAA,CAAQmB,OAAO,CAAA;AAAA,IACjB;AAAA,EACF,GACA,CAACjB,SAAAA,EAAWF,OAAAA,EAASC,iBAAAA,EAAmBlB,UAAU,CACpD,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,kBAAA,EAAA,EACC,GAAA,EAAI,IAAA,EACJ,OAAA,EAAQ,IAAA,EACR,QAAA,EAAU,CAAA,EAAGhG,iBAAiB,CAAA,CAAA,EAC9B,WAAA,EAAY,YAAA,EAEZ,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,UAAS,KAAA,EAClB,QAAA,kBAAA,GAAA,CAAC,SAAM,OAAA,EAAQ,6BAAA,EAA8B,kBAAI,CAAA,EACnD,CAAA;AAAA,yBACC,SAAA,EAAA,EACC,GAAA,EAAI,MACJ,cAAA,EAAe,cAAA,EACf,aAAY,YAAA,EAEZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAA,EAAA,EACC,QAAA,EAAS,KAAA,EACT,WAAA,EAAY,YAAA,EAEZ,8BAAC,SAAA,EAAA,EACC,aAAA,EAAY,6BAAA,EACZ,QAAA,EAAU,CAAC6H,SAAAA,EACX,OAAOJ,WAAAA,GAAc,IAAA,GAAO,IAAA,EAC5B,EAAA,EAAG,6BAAA,EACH,QAAA,EAAUM,kBACV,SAAA,EAAWU,aAAAA,EACX,KAAA,EAAOzC,UAAAA,EAAW,CAAA,EAEtB,CAAA;AAAA,sBACA,GAAA,CAAC,aAAU,QAAA,EAAS,KAAA,EAClB,8BAAC,WAAA,EAAA,EACC,OAAA,EAASuC,oBAAAA,EACT,OAAA,EAAS,CACP;AAAA,QACE9C,KAAAA,EAAO,IAAA;AAAA,QACP1C,KAAAA,EAAO;AAAA,OACT,EACA;AAAA,QACE0C,KAAAA,EAAO,IAAA;AAAA,QACP1C,KAAAA,EAAO;AAAA,OACR,CAAA,EAEH,QAAA,EAAU4E,QAAAA,EACV,IAAA,EAAK,WAAS,CAAA,EAElB;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAiBA,MAAMe,iBAAiBA,CAAC;AAAA,EACtBC,eAAAA;AAAAA,EACAlG,OAAAA;AAAAA,EACAL,mBAAAA;AAAAA,EACAC,wBAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACA2C,UAAAA;AAAAA,EACA1C,eAAAA;AAAAA,EACA2C,YAAAA;AAAAA,EACAgC,iBAAAA;AAAAA,EACA1E;AACmB,CAAA,KAAM;AACzB,EAAA,MAAM,CAACoG,SAAAA,EAAWC,YAAY,CAAA,GAAIjG,SAAc,WAAW,CAAA;AAE3D,EAAA,MAAMkG,eAAAA,GAAkBd,WAAAA,CAAY,CAACe,MAAAA,KAAmB;AACtDF,IAAAA,YAAAA,CAAaE,MAAa,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAMC,kBAAAA,GAAqBhB,WAAAA,CACzB,CAACxF,UAAAA,KAAoB;AACnB0C,IAAAA,YAAAA,CAAa1C,UAAS,CAAA;AAEtBD,IAAAA,eAAAA,CAAgBC,YAAW,WAAW,CAAA;AAAA,EACxC,CAAA,EACA,CAACD,eAAAA,EAAiB2C,YAAY,CAChC,CAAA;AAEA,EAAA,MAAM+D,gBAAAA,GAAmBjB,WAAAA,CACvB,CAACvF,QAAAA,KAAkB;AACjBwC,IAAAA,UAAAA,CAAWxC,QAAO,CAAA;AAElBF,IAAAA,eAAAA,CAAgBE,UAAS,SAAS,CAAA;AAAA,EACpC,CAAA,EACA,CAACwC,UAAAA,EAAY1C,eAAe,CAC9B,CAAA;AAEA,EAAA,MAAM2G,2BAA+C,EAAC;AACtD,EAAA,MAAMC,yBAA6C,EAAC;AAGpD,EAAA,IAAI3G,SAAAA,EAAW;AACb0G,IAAAA,wBAAAA,CAAyBE,WAAAA,GAAc5G,SAAAA;AAAAA,EACzC;AAGA,EAAA,IAAIC,OAAAA,EAAS;AACX0G,IAAAA,sBAAAA,CAAuBC,WAAAA,GAAc3G,OAAAA;AAAAA,EACvC;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EACC,aAAA,EAAeqG,eAAAA,EACf,OAAOF,SAAAA,EAEP,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAK,OAAA,EAAL,EACC,OAAM,WAAA,EACN,aAAA,EAAY,iCAA+B,QAAA,EAAA,YAAA,EAG7C,CAAA;AAAA,sBACA,GAAA,CAAC,KAAK,OAAA,EAAL,EACC,OAAM,SAAA,EACN,aAAA,EAAY,+BAA6B,QAAA,EAAA,UAAA,EAG3C;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,IAAA,CAAC,IAAA,CAAK,OAAA,EAAL,EAAa,OAAM,WAAA,EAClB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,0BAAuB,eAAA,EAAiBM,wBAAAA,EACtC,WAACG,IAAAA,qBACA,GAAA,CAAC,YACC,YAAA,EAAcA,IAAAA,EACd,YAAA,EAAa,WAAA,EACb,iBACA,OAAA,EACA,mBAAA,EACA,0BACA,cAAA,EACA,eAAA,EACA,WAAqB,CAAA,EAG3B,CAAA;AAAA,0BACC,SAAA,EAAA,EACC,IAAA,EAAM7G,SAAAA,EACN,OAAA,EAASwG,oBACT,iBAAA,EAAqC;AAAA,KAAA,EAEzC,CAAA;AAAA,oBACA,IAAA,CAAC,IAAA,CAAK,OAAA,EAAL,EAAa,OAAM,SAAA,EAClB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,0BAAuB,eAAA,EAAiBG,sBAAAA,EACtC,WAACE,IAAAA,qBACA,GAAA,CAAC,YACC,YAAA,EAAcA,IAAAA,EACd,YAAA,EAAa,SAAA,EACb,iBACA,OAAA,EACA,mBAAA,EACA,0BACA,cAAA,EACA,eAAA,EACA,WAAqB,CAAA,EAG3B,CAAA;AAAA,0BACC,SAAA,EAAA,EACC,IAAA,EAAM5G,OAAAA,EACN,OAAA,EAASwG,kBACT,iBAAA,EAAqC;AAAA,KAAA,EAEzC;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAgBO,MAAMK,sBAAsBA,CAAC;AAAA,EAClC7G,OAAAA;AAAAA,EACAD,SAAAA;AAAAA,EACA+G,QAAAA,GAAW,KAAA;AAAA,EACXnH,mBAAAA,GAAsB,KAAA;AAAA,EACtBC,wBAAAA,GAA2B,KAAA;AAAA,EAC3BC,cAAAA,GAAiB,EAAA;AAAA,EACjBuC,iBAAAA;AAAAA,EACA2E,aAAAA,GAAgB,OAAA;AAAA,EAChBC,WAAAA,GAAc,uBAAA;AAAA,EACd3E,mBAAAA;AAAAA,EACAoC;AACwB,CAAA,KAAM;AAC9B,EAAA,MAAM,CAACwC,MAAAA,EAAQC,SAAS,CAAA,GAAI/G,SAAkB,KAAK,CAAA;AACnD,EAAA,MAAM,CAACoC,iBAAAA,EAAmB4E,oBAAoB,CAAA,GAAIhH,QAAAA,EAAe;AACjE,EAAA,MAAM,CAACmC,eAAAA,EAAiB8E,kBAAkB,CAAA,GAAIjH,QAAAA,EAAe;AAC7D,EAAA,MAAM,CAACuC,qBAAAA,EAAuB2E,wBAAwB,CAAA,GAAIlH,SAAkB,KAAK,CAAA;AACjF,EAAA,MAAM,CAACmH,qBAAAA,EAAuBC,wBAAwB,CAAA,GACpDpH,SAAwB4G,aAAa,CAAA;AACvC,EAAA,MAAMS,oBAAAA,GAAuBC,OAAuB,IAAI,CAAA;AAExDpC,EAAAA,SAAAA,CAAU,MAAM;AACd,IAAA,IAAItF,SAAAA,EAAW;AACb,MAAA,IAAIA,SAAAA,CAAU+B,QAAAA,EAAS,KAAM,CAAA,EAAG;AAC9B/B,QAAAA,SAAAA,CAAU8B,SAAS,EAAE,CAAA;AAAA,MACvB;AACAsF,MAAAA,oBAAAA,CAAqBpH,SAAS,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAACA,SAAS,CAAC,CAAA;AAEdsF,EAAAA,SAAAA,CAAU,MAAM;AACd,IAAA,IAAIrF,OAAAA,EAAS;AACX,MAAA,IAAIA,OAAAA,CAAQ8B,QAAAA,EAAS,KAAM,CAAA,EAAG;AAC5B9B,QAAAA,OAAAA,CAAQ6B,SAAS,EAAE,CAAA;AAAA,MACrB;AACAuF,MAAAA,kBAAAA,CAAmBpH,OAAO,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAACA,OAAO,CAAC,CAAA;AAEZ0H,EAAAA,eAAAA,CAAgB,MAAM;AACpB,IAAA,IAAIhF,qBAAAA,IAAyB8E,qBAAqBG,OAAAA,EAAS;AACzD,MAAA,MAAMC,IAAAA,GAAOJ,oBAAAA,CAAqBG,OAAAA,CAAQE,qBAAAA,EAAsB;AAEhE,MAAA,IAAID,IAAAA,CAAKE,KAAAA,GAAQC,MAAAA,CAAOC,UAAAA,EAAY;AAClCT,QAAAA,wBAAAA,CAAyB,MAAM,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC7E,qBAAqB,CAAC,CAAA;AAE1B,EAAA,MAAMwD,eAAAA,GAAkBX,YAAY,MAAY;AAC9C2B,IAAAA,SAAAA,CAAU,KAAK,CAAA;AACfG,IAAAA,wBAAAA,CAAyB,KAAK,CAAA;AAC9BE,IAAAA,wBAAAA,CAAyB,OAAO,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAMU,gBAAAA,GAAmB1C,WAAAA,CAAY,CAAC0B,OAAAA,KAA0B;AAC9DC,IAAAA,SAAAA,CAAUD,OAAM,CAAA;AAEhB,IAAA,IAAI,CAACA,OAAAA,EAAQ;AACXI,MAAAA,wBAAAA,CAAyB,KAAK,CAAA;AAC9BE,MAAAA,wBAAAA,CAAyB,OAAO,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAMW,gBAAAA,GAAmB3C,WAAAA,CACvB,CAAC4C,YAAAA,EAAoBzI,YAAAA,KAAqC;AACxD,IAAA,IACEyI,YAAAA,CAAarG,QAAAA,EAAS,KAAM,CAAA,IAC5BqG,YAAAA,CAAanG,UAAAA,EAAW,KAAM,CAAA,IAC9BmG,YAAAA,CAAajG,UAAAA,EAAW,KAAM,CAAA,EAC9B;AACAiG,MAAAA,YAAAA,CAAatG,SAAS,EAAE,CAAA;AAAA,IAC1B;AAEA,IAAA,IAAInC,iBAAiB,WAAA,EAAa;AAChCyH,MAAAA,oBAAAA,CAAqBgB,YAAY,CAAA;AAEjC,MAAA,IAAI7F,eAAAA,EAAiB;AACnBF,QAAAA,iBAAAA,CAAkB+F,cAAc7F,eAAe,CAAA;AAAA,MACjD;AAAA,IACF;AAEA,IAAA,IAAI5C,iBAAiB,SAAA,EAAW;AAC9B0H,MAAAA,kBAAAA,CAAmBe,YAAY,CAAA;AAE/B,MAAA,IAAI5F,iBAAAA,EAAmB;AACrBH,QAAAA,iBAAAA,CAAkBG,mBAAmB4F,YAAY,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF,CAAA,EACA,CAAC/F,iBAAAA,EAAmBE,eAAAA,EAAiBC,iBAAiB,CACxD,CAAA;AAEA,EAAA,MAAM6F,gBAAAA,GAAmB7C,WAAAA,CAAY,CAAC8C,CAAAA,KAAqC;AACzE,IAAA,IAAIA,CAAAA,CAAE7H,GAAAA,KAAQ,OAAA,IAAW6H,CAAAA,CAAE7H,QAAQ,GAAA,EAAK;AACtC6H,MAAAA,CAAAA,CAAEvF,cAAAA,EAAe;AACjBoE,MAAAA,SAAAA,CAAU,IAAI,CAAA;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAMoB,yBAAAA,GACJjG,mBAAAA,KAAwBhC,MAAAA,IAAagC,mBAAAA,CAAoBkG,MAAAA,GAAS,CAAA;AAEpE,EAAA,uBACE,IAAA,CAAC,QAAA,EAAA,EACC,YAAA,EAAcN,gBAAAA,EACd,MAAMhB,MAAAA,EAEN,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAS,OAAA,EAAT,EACC,QAAA,EACA,SAAA,EAAWmB,kBAEX,QAAA,kBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,aAAA,EAAY,4BAAA,EACZ,UACA,QAAA,EAAUnB,MAAAA,EACV,aACA,eAAA,EACA,iBAAA,EACA,mBAAqC,CAAA,EAEzC,CAAA;AAAA,wBACC,QAAA,CAAS,OAAA,EAAT,EAAiB,KAAA,EAAM,OAAA,EACtB,8BAAC,SAAA,EAAA,EAAU,WAAA,EAAY,YAAA,EACpBqB,QAAAA,EAAAA,yBAAAA,wBACE,2BAAA,EAAA,EACC,GAAA,EAAI,QACJ,WAAA,EAAY,YAAA,EACZ,SAAQ,MAAA,EAER,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eAAA,EAAA,EACC,iBAAA,EACA,mBAAA,EACA,eAAA,EACA,iBAAA,EACA,UAAA,EAAYlB,kBAAAA,EACZ,YAAA,EAAcD,oBAAAA,EACd,qBAAA,EACA,mBAAA,EAAqBE,wBAAAA,EAAyB,CAAA;AAAA,MAG/C3E,qBAAAA,oBACC,GAAA,CAAC,yBAAA,EAAA,EACC,cAAA,EAAgB4E,qBAAAA,EAChB,GAAA,EAAKE,oBAAAA,EAEL,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EACC,eAAA,EACA,OAAA,EAASlF,eAAAA,EACT,mBAAA,EACA,wBAAA,EACA,cAAA,EACA,UAAA,EAAY8E,kBAAAA,EACZ,eAAA,EAAiBc,gBAAAA,EACjB,YAAA,EAAcf,oBAAAA,EACd,iBAAA,EAAmB9F,OAAAA,CAAQoD,iBAAiB,CAAA,EAC5C,SAAA,EAAWlC,iBAAAA,EAAkB,CAAA,EAEjC;AAAA,KAAA,EAEJ,CAAA,mBAEA,GAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EACC,eAAA,EACA,SAASD,eAAAA,EACT,mBAAA,EACA,wBAAA,EACA,cAAA,EACA,UAAA,EAAY8E,kBAAAA,EACZ,iBAAiBc,gBAAAA,EACjB,YAAA,EAAcf,oBAAAA,EACd,iBAAA,EAAmB9F,OAAAA,CAAQoD,iBAAiB,GAC5C,SAAA,EAAWlC,iBAAAA,EAAkB,CAAA,EAEjC,CAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
package/dist/esm/utils/date.js
CHANGED
|
@@ -1,10 +1,100 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
export { default as dayjs } from 'dayjs';
|
|
3
|
+
import advancedFormat from 'dayjs/plugin/advancedFormat.js';
|
|
4
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat.js';
|
|
5
|
+
import duration from 'dayjs/plugin/duration.js';
|
|
6
|
+
import localizedFormat from 'dayjs/plugin/localizedFormat.js';
|
|
7
|
+
import relativeTime from 'dayjs/plugin/relativeTime.js';
|
|
8
|
+
import timezone from 'dayjs/plugin/timezone.js';
|
|
9
|
+
import updateLocale from 'dayjs/plugin/updateLocale.js';
|
|
10
|
+
import utc from 'dayjs/plugin/utc.js';
|
|
11
|
+
|
|
12
|
+
const thresholds = [{
|
|
13
|
+
l: "s",
|
|
14
|
+
r: 1,
|
|
15
|
+
d: "second"
|
|
16
|
+
}, {
|
|
17
|
+
l: "ss",
|
|
18
|
+
r: 56,
|
|
19
|
+
d: "second"
|
|
20
|
+
}, {
|
|
21
|
+
l: "m",
|
|
22
|
+
r: 90,
|
|
23
|
+
d: "second"
|
|
24
|
+
}, {
|
|
25
|
+
l: "mm",
|
|
26
|
+
r: 55,
|
|
27
|
+
d: "minute"
|
|
28
|
+
}, {
|
|
29
|
+
l: "h",
|
|
30
|
+
r: 90,
|
|
31
|
+
d: "minute"
|
|
32
|
+
}, {
|
|
33
|
+
l: "hh",
|
|
34
|
+
r: 22,
|
|
35
|
+
d: "hour"
|
|
36
|
+
}, {
|
|
37
|
+
l: "d",
|
|
38
|
+
r: 40,
|
|
39
|
+
d: "hour"
|
|
40
|
+
}, {
|
|
41
|
+
l: "dd",
|
|
42
|
+
r: 31,
|
|
43
|
+
d: "day"
|
|
44
|
+
}, {
|
|
45
|
+
l: "M",
|
|
46
|
+
r: 45,
|
|
47
|
+
d: "day"
|
|
48
|
+
}, {
|
|
49
|
+
l: "MM",
|
|
50
|
+
r: 11,
|
|
51
|
+
d: "month"
|
|
52
|
+
}, {
|
|
53
|
+
l: "y",
|
|
54
|
+
r: 17,
|
|
55
|
+
d: "month"
|
|
56
|
+
}, {
|
|
57
|
+
l: "yy",
|
|
58
|
+
r: 2,
|
|
59
|
+
d: "year"
|
|
60
|
+
}];
|
|
61
|
+
dayjs.extend(advancedFormat);
|
|
62
|
+
dayjs.extend(customParseFormat);
|
|
63
|
+
dayjs.extend(duration);
|
|
64
|
+
dayjs.extend(localizedFormat);
|
|
65
|
+
dayjs.extend(timezone);
|
|
66
|
+
dayjs.extend(updateLocale);
|
|
67
|
+
dayjs.extend(utc);
|
|
68
|
+
dayjs.extend(relativeTime, {
|
|
69
|
+
thresholds
|
|
70
|
+
});
|
|
71
|
+
dayjs.updateLocale("en", {
|
|
72
|
+
relativeTime: {
|
|
73
|
+
future: "In %s",
|
|
74
|
+
past: "%s ago",
|
|
75
|
+
s: "a few seconds",
|
|
76
|
+
ss: "%d seconds",
|
|
77
|
+
m: "1 minute",
|
|
78
|
+
mm: "%d minutes",
|
|
79
|
+
h: "1 hour",
|
|
80
|
+
hh: "%d hours",
|
|
81
|
+
d: "1 day",
|
|
82
|
+
dd: "%d days",
|
|
83
|
+
w: "1 week",
|
|
84
|
+
ww: "%d weeks",
|
|
85
|
+
M: "1 month",
|
|
86
|
+
MM: "%d months",
|
|
87
|
+
y: "1 year",
|
|
88
|
+
yy: "%d years"
|
|
89
|
+
}
|
|
90
|
+
});
|
|
1
91
|
const DEFAULT_DATE_LOCALE = "en-US";
|
|
2
92
|
const formatTimezone = ({
|
|
3
93
|
date,
|
|
4
|
-
timezone,
|
|
94
|
+
timezone: timezone2,
|
|
5
95
|
locale = DEFAULT_DATE_LOCALE
|
|
6
96
|
}) => new Intl.DateTimeFormat(locale, {
|
|
7
|
-
timeZone:
|
|
97
|
+
timeZone: timezone2,
|
|
8
98
|
timeZoneName: "short"
|
|
9
99
|
}).formatToParts(date.toDate()).find((part) => part.type === "timeZoneName")?.value ?? date.format("z");
|
|
10
100
|
const DAYS = "days";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sources":["../../../src/utils/date.ts"],"sourcesContent":["import { Dayjs } from 'dayjs';\n\nconst DEFAULT_DATE_LOCALE = 'en-US';\n\nexport const formatTimezone = ({\n date,\n timezone,\n locale = DEFAULT_DATE_LOCALE,\n}: {\n date: Dayjs;\n timezone?: string;\n locale?: string;\n}): string =>\n new Intl.DateTimeFormat(locale, {\n timeZone: timezone,\n timeZoneName: 'short',\n })\n .formatToParts(date.toDate())\n .find(part => part.type === 'timeZoneName')?.value ?? date.format('z');\n\nexport const DAYS = 'days';\nexport const MONTHS = 'months';\nexport const YEARS = 'years';\n\nexport const DAYS_IN_WEEK = 7;\n\ntype MonthNamesFormat = 'short' | 'long';\n\nexport const getMonthNames = (format: MonthNamesFormat = 'long') =>\n Array.from({ length: 12 }, (_, i) =>\n new Date(1970, i).toLocaleString(DEFAULT_DATE_LOCALE, { month: format })\n );\n"],"names":["
|
|
1
|
+
{"version":3,"file":"date.js","sources":["../../../src/utils/date.ts"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n// NOTE: Explicit `.js` extension in dayjs\n// to ensure strict ESM compatibility for\n// consumers using \"type\": \"module\".\n// E.g. if the package doesn’t define subpaths\n// in exports resolution would fail in ESM environments\n// TODO: Maybe create a vite plugin to detect\n// if a package has missing exports and add extension\nimport advancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport duration from 'dayjs/plugin/duration.js';\nimport localizedFormat from 'dayjs/plugin/localizedFormat.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport timezone from 'dayjs/plugin/timezone.js';\nimport updateLocale from 'dayjs/plugin/updateLocale.js';\nimport utc from 'dayjs/plugin/utc.js';\n\nconst thresholds = [\n { l: 's', r: 1, d: 'second' },\n { l: 'ss', r: 56, d: 'second' },\n { l: 'm', r: 90, d: 'second' },\n { l: 'mm', r: 55, d: 'minute' },\n { l: 'h', r: 90, d: 'minute' },\n { l: 'hh', r: 22, d: 'hour' },\n { l: 'd', r: 40, d: 'hour' },\n { l: 'dd', r: 31, d: 'day' },\n { l: 'M', r: 45, d: 'day' },\n { l: 'MM', r: 11, d: 'month' },\n { l: 'y', r: 17, d: 'month' },\n { l: 'yy', r: 2, d: 'year' },\n];\n\ndayjs.extend(advancedFormat);\ndayjs.extend(customParseFormat);\ndayjs.extend(duration);\ndayjs.extend(localizedFormat);\ndayjs.extend(timezone);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(relativeTime, { thresholds });\n\ndayjs.updateLocale('en', {\n relativeTime: {\n future: 'In %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: '1 minute',\n mm: '%d minutes',\n h: '1 hour',\n hh: '%d hours',\n d: '1 day',\n dd: '%d days',\n w: '1 week',\n ww: '%d weeks',\n M: '1 month',\n MM: '%d months',\n y: '1 year',\n yy: '%d years',\n },\n});\n\nexport { dayjs };\nexport type { Dayjs };\n\nconst DEFAULT_DATE_LOCALE = 'en-US';\n\nexport const formatTimezone = ({\n date,\n timezone,\n locale = DEFAULT_DATE_LOCALE,\n}: {\n date: Dayjs;\n timezone?: string;\n locale?: string;\n}): string =>\n new Intl.DateTimeFormat(locale, {\n timeZone: timezone,\n timeZoneName: 'short',\n })\n .formatToParts(date.toDate())\n .find(part => part.type === 'timeZoneName')?.value ?? date.format('z');\n\nexport const DAYS = 'days';\nexport const MONTHS = 'months';\nexport const YEARS = 'years';\n\nexport const DAYS_IN_WEEK = 7;\n\ntype MonthNamesFormat = 'short' | 'long';\n\nexport const getMonthNames = (format: MonthNamesFormat = 'long') =>\n Array.from({ length: 12 }, (_, i) =>\n new Date(1970, i).toLocaleString(DEFAULT_DATE_LOCALE, { month: format })\n );\n"],"names":["thresholds","l","r","d","dayjs","extend","advancedFormat","customParseFormat","duration","localizedFormat","timezone","updateLocale","utc","relativeTime","future","past","s","ss","m","mm","h","hh","dd","w","ww","M","MM","y","yy","DEFAULT_DATE_LOCALE","formatTimezone","date","locale","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","toDate","find","part","type","value","format","DAYS","MONTHS","YEARS","DAYS_IN_WEEK","getMonthNames","Array","from","length","_","i","Date","toLocaleString","month"],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Dayjs } from 'dayjs';
|
|
1
|
+
import { default as dayjs, Dayjs } from 'dayjs';
|
|
2
|
+
export { dayjs };
|
|
3
|
+
export type { Dayjs };
|
|
2
4
|
export declare const formatTimezone: ({ date, timezone, locale, }: {
|
|
3
5
|
date: Dayjs;
|
|
4
6
|
timezone?: string;
|
|
@@ -10,4 +12,3 @@ export declare const YEARS = "years";
|
|
|
10
12
|
export declare const DAYS_IN_WEEK = 7;
|
|
11
13
|
type MonthNamesFormat = 'short' | 'long';
|
|
12
14
|
export declare const getMonthNames: (format?: MonthNamesFormat) => string[];
|
|
13
|
-
export {};
|