@clickhouse/click-ui 0.15.0 → 0.16.0-canary.g3eee4d78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -17
- package/dist/cjs/click-ui.css +98 -0
- package/dist/cjs/components/CardHorizontal/index.cjs +20 -0
- package/dist/cjs/components/CardHorizontal/index.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +2 -10
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/components/Grid/copyGridElements.cjs +2 -2
- package/dist/cjs/components/Grid/copyGridElements.cjs.map +1 -1
- package/dist/cjs/components/Skeleton/Skeleton.css +91 -0
- package/dist/cjs/components/Skeleton/Skeleton.module.css.cjs +26 -0
- package/dist/cjs/components/Skeleton/Skeleton.module.css.cjs.map +1 -0
- package/dist/cjs/components/Skeleton/index.cjs +62 -0
- package/dist/cjs/components/Skeleton/index.cjs.map +1 -0
- package/dist/cjs/components/Table/Table.css +7 -0
- package/dist/cjs/components/Table/Table.module.css.cjs +4 -1
- package/dist/cjs/components/Table/Table.module.css.cjs.map +1 -1
- package/dist/cjs/components/Table/index.cjs +53 -2
- package/dist/cjs/components/Table/index.cjs.map +1 -1
- package/dist/cjs/components/TextTruncate/index.cjs +11 -2
- package/dist/cjs/components/TextTruncate/index.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/click-ui.css +98 -0
- package/dist/esm/components/CardHorizontal/index.js +20 -0
- package/dist/esm/components/CardHorizontal/index.js.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +2 -10
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/components/Grid/copyGridElements.js +2 -2
- package/dist/esm/components/Grid/copyGridElements.js.map +1 -1
- package/dist/esm/components/Skeleton/Skeleton.css +91 -0
- package/dist/esm/components/Skeleton/Skeleton.module.css.js +16 -0
- package/dist/esm/components/Skeleton/Skeleton.module.css.js.map +1 -0
- package/dist/esm/components/Skeleton/index.js +58 -0
- package/dist/esm/components/Skeleton/index.js.map +1 -0
- package/dist/esm/components/Table/Table.css +7 -0
- package/dist/esm/components/Table/Table.module.css.js +4 -2
- package/dist/esm/components/Table/Table.module.css.js.map +1 -1
- package/dist/esm/components/Table/index.js +53 -2
- package/dist/esm/components/Table/index.js.map +1 -1
- package/dist/esm/components/TextTruncate/index.js +11 -2
- package/dist/esm/components/TextTruncate/index.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/types/components/CardHorizontal/CardHorizontal.d.ts +1 -1
- package/dist/types/components/Skeleton/Skeleton.d.ts +6 -0
- package/dist/types/components/Skeleton/Skeleton.types.d.ts +25 -0
- package/dist/types/components/Skeleton/index.d.ts +2 -0
- package/dist/types/components/Table/Table.d.ts +5 -0
- package/dist/types/components/Table/index.d.ts +1 -1
- package/dist/types/index.d.ts +3 -1
- package/package.json +21 -17
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ You can find the official docs for the Click UI design system and component libr
|
|
|
46
46
|
* [Changesets](#changesets)
|
|
47
47
|
- [Add a new changeset](#add-a-new-changeset)
|
|
48
48
|
- [Checking the changeset status](#checking-the-changeset-status)
|
|
49
|
-
- [
|
|
49
|
+
- [Consuming changesets](#consuming-changesets)
|
|
50
50
|
* [Release](#release)
|
|
51
51
|
* [Contributing](#contributing)
|
|
52
52
|
- [Component RFC](#component-rfc)
|
|
@@ -88,7 +88,7 @@ Install the package via npm or your favorite package manager:
|
|
|
88
88
|
npm i @clickhouse/click-ui@latest
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
Every merge to `main` is also published as a prerelease, for trying changes before a release: `npm i @clickhouse/click-ui@canary
|
|
91
|
+
Every merge to `main` is also published as a prerelease, for trying changes before a release: `npm i @clickhouse/click-ui@canary`, see [Canary releases](./docs/publish.md#canary-releases).
|
|
92
92
|
|
|
93
93
|
Click UI has three peer dependencies. Your app must provide them:
|
|
94
94
|
|
|
@@ -125,7 +125,7 @@ function App() {
|
|
|
125
125
|
}
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
For more examples, including theme switching and configuration, see the [
|
|
128
|
+
For more examples, including theme switching and configuration, see the [Use Click UI](#use-click-ui) section, or explore our design system at [clickhouse.design/click-ui](https://clickhouse.design/click-ui).
|
|
129
129
|
|
|
130
130
|
## Development
|
|
131
131
|
|
|
@@ -330,7 +330,7 @@ The latest static version's built and deployed automatically when contributing t
|
|
|
330
330
|
|
|
331
331
|
Once deployed it's available publicly at [clickhouse.design/click-ui](https://clickhouse.design/click-ui).
|
|
332
332
|
|
|
333
|
-
##
|
|
333
|
+
## Changesets
|
|
334
334
|
|
|
335
335
|
Learn to manage the versioning of changelog entries.
|
|
336
336
|
|
|
@@ -355,6 +355,8 @@ yarn changeset:add
|
|
|
355
355
|
|
|
356
356
|
The changesets tool keeps track of all declared changes in the `.changeset` directory.
|
|
357
357
|
|
|
358
|
+
Start the text with **Breaking:** when consumers have to change their code. The release notes list those entries under "⚠️ Upgrade notes"; all other entries go under "Good to know".
|
|
359
|
+
|
|
358
360
|
Once completed, you must commit the changeset!
|
|
359
361
|
|
|
360
362
|
### Checking the changeset status
|
|
@@ -365,16 +367,9 @@ To check if your branch contains a changeset:
|
|
|
365
367
|
yarn changeset:status
|
|
366
368
|
```
|
|
367
369
|
|
|
368
|
-
###
|
|
369
|
-
|
|
370
|
-
To consume all changesets, and update to the most appropriate semver version and write a friendly changelog based on those changesets, the following command is available:
|
|
370
|
+
### Consuming changesets
|
|
371
371
|
|
|
372
|
-
|
|
373
|
-
> Consuming changesets is done automatically in the CI/CD environment. For this reason, you don't have to execute the command, as a contributor your single concern should be adding changesets to any relevant changes.
|
|
374
|
-
|
|
375
|
-
```sh
|
|
376
|
-
yarn changeset:version
|
|
377
|
-
```
|
|
372
|
+
Consuming changesets is done automatically when a release is published, see [Changelog and release notes](./docs/publish.md#changelog-and-release-notes). As a contributor, your single concern is adding a changeset to any relevant change. Do not run `changeset version` yourself.
|
|
378
373
|
|
|
379
374
|
## Distribution
|
|
380
375
|
|
|
@@ -651,11 +646,9 @@ For more detailed instructions, see [converting SVG to React Components](./docs/
|
|
|
651
646
|
|
|
652
647
|
## Release
|
|
653
648
|
|
|
654
|
-
Releases are
|
|
655
|
-
|
|
656
|
-
Use the [Create a new release Pull Request](./docs/package-release.md#create-a-new-release-pull-request) for a quick automated process.
|
|
649
|
+
Releases are manual GitHub releases. Publishing the tag to npm, the `CHANGELOG.md` section, the deletion of the consumed changesets and the release notes are automated. See [Publish](./docs/publish.md).
|
|
657
650
|
|
|
658
|
-
|
|
651
|
+
## Contributing
|
|
659
652
|
|
|
660
653
|
### Component RFC
|
|
661
654
|
|
package/dist/cjs/click-ui.css
CHANGED
|
@@ -10261,6 +10261,97 @@ body {
|
|
|
10261
10261
|
--title-pad-left: 0;
|
|
10262
10262
|
}
|
|
10263
10263
|
}
|
|
10264
|
+
@layer clickui {.skeleton__CB4uF {
|
|
10265
|
+
--skeleton-width: initial;
|
|
10266
|
+
--skeleton-height: initial;
|
|
10267
|
+
|
|
10268
|
+
width: var(--skeleton-width, 100%);
|
|
10269
|
+
}
|
|
10270
|
+
|
|
10271
|
+
/* Each bar is as tall as the font (1em), and the space around it fills the rest of the line
|
|
10272
|
+
(1lh). So `lines` bars take exactly the height of that many lines of text. */
|
|
10273
|
+
.skeleton_shape_text__xpNYH {
|
|
10274
|
+
display: flex;
|
|
10275
|
+
flex-direction: column;
|
|
10276
|
+
gap: calc(1lh - 1em);
|
|
10277
|
+
padding-block: calc((1lh - 1em) / 2);
|
|
10278
|
+
}
|
|
10279
|
+
|
|
10280
|
+
.skeleton_size_sm__EKT9u {
|
|
10281
|
+
font: var(--typography-styles-product-text-normal-sm);
|
|
10282
|
+
}
|
|
10283
|
+
|
|
10284
|
+
.skeleton_size_md__I0qtc {
|
|
10285
|
+
font: var(--typography-styles-product-text-normal-md);
|
|
10286
|
+
}
|
|
10287
|
+
|
|
10288
|
+
.skeleton__line__P0lhA,
|
|
10289
|
+
.skeleton_shape_rectangle__iBnxb {
|
|
10290
|
+
border-radius: calc(var(--border-radii-1) / 2);
|
|
10291
|
+
background-color: var(--click-global-color-stroke-default);
|
|
10292
|
+
}
|
|
10293
|
+
|
|
10294
|
+
.skeleton__line__P0lhA {
|
|
10295
|
+
height: 1em;
|
|
10296
|
+
}
|
|
10297
|
+
|
|
10298
|
+
.skeleton__line__P0lhA:last-child:not(:first-child) {
|
|
10299
|
+
width: 75%;
|
|
10300
|
+
}
|
|
10301
|
+
|
|
10302
|
+
.skeleton_shape_rectangle__iBnxb {
|
|
10303
|
+
height: var(--skeleton-height, 100%);
|
|
10304
|
+
}
|
|
10305
|
+
|
|
10306
|
+
/* One highlight sweeps across the viewport, and every bar shows the part of it that passes over
|
|
10307
|
+
the bar. Each bar has a viewport-wide fixed layer clipped to the bar, so skeletons on screen
|
|
10308
|
+
together sweep in step whatever their size. The highlight is the page background at 25%, so the
|
|
10309
|
+
fill dips to about 75% opacity as it passes. The layers move with `transform`, which the browser
|
|
10310
|
+
animates without repainting. Without this media query match (reduced motion), the fill stays
|
|
10311
|
+
static. */
|
|
10312
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
10313
|
+
.skeleton__line__P0lhA,
|
|
10314
|
+
.skeleton_shape_rectangle__iBnxb {
|
|
10315
|
+
/* stylelint-disable-next-line plugin/no-unsupported-browser-features -- the partial support
|
|
10316
|
+
is for SVG references and some shapes; a basic inset() works in every target browser */
|
|
10317
|
+
clip-path: inset(0 round calc(var(--border-radii-1) / 2));
|
|
10318
|
+
}
|
|
10319
|
+
|
|
10320
|
+
.skeleton__line__P0lhA::after,
|
|
10321
|
+
.skeleton_shape_rectangle__iBnxb::after {
|
|
10322
|
+
content: '';
|
|
10323
|
+
position: fixed;
|
|
10324
|
+
top: 0;
|
|
10325
|
+
left: 0;
|
|
10326
|
+
width: 200vw;
|
|
10327
|
+
height: 100vh;
|
|
10328
|
+
background-image: linear-gradient(
|
|
10329
|
+
90deg,
|
|
10330
|
+
transparent 40%,
|
|
10331
|
+
color-mix(in srgb, var(--click-global-color-background-default) 25%, transparent) 50%,
|
|
10332
|
+
transparent 60%
|
|
10333
|
+
);
|
|
10334
|
+
pointer-events: none;
|
|
10335
|
+
animation: skeleton-shimmer__rvADK 1.5s ease-in-out infinite;
|
|
10336
|
+
}
|
|
10337
|
+
}
|
|
10338
|
+
|
|
10339
|
+
/* The layer is two viewports wide with the highlight in its middle. It starts with the highlight
|
|
10340
|
+
just left of the viewport and ends just right of it: a 1.25s sweep, then a 0.25s pause. */
|
|
10341
|
+
@keyframes skeleton-shimmer__rvADK {
|
|
10342
|
+
0% {
|
|
10343
|
+
transform: translateX(-120vw);
|
|
10344
|
+
}
|
|
10345
|
+
|
|
10346
|
+
83.333% {
|
|
10347
|
+
transform: translateX(20vw);
|
|
10348
|
+
}
|
|
10349
|
+
|
|
10350
|
+
100% {
|
|
10351
|
+
transform: translateX(20vw);
|
|
10352
|
+
}
|
|
10353
|
+
}
|
|
10354
|
+
}
|
|
10264
10355
|
@layer clickui {/* Kept at zero specificity via :where() so that downstream styled-components
|
|
10265
10356
|
overrides on a styled(BaseButton) (SplitButton's PrimaryButton/SecondaryButton
|
|
10266
10357
|
override padding, border-radius, font, background, color, border, and width)
|
|
@@ -10898,6 +10989,13 @@ body {
|
|
|
10898
10989
|
word-break: break-all;
|
|
10899
10990
|
overflow-wrap: break-word;
|
|
10900
10991
|
}
|
|
10992
|
+
|
|
10993
|
+
/* Lay the skeleton out like the truncated text it stands in for (an inline block aligned to the
|
|
10994
|
+
text bottom, see EllipsisContent), so a placeholder row is as tall as a data row. */
|
|
10995
|
+
.table__data__KkzjS .table__skeleton__iBY1J {
|
|
10996
|
+
display: inline-flex;
|
|
10997
|
+
vertical-align: text-bottom;
|
|
10998
|
+
}
|
|
10901
10999
|
}
|
|
10902
11000
|
@layer clickui {.text-truncate__jt9-P {
|
|
10903
11001
|
--text-truncate-max-width: initial;
|
|
@@ -83,6 +83,7 @@ const CardHorizontal = ({
|
|
|
83
83
|
badgeIcon,
|
|
84
84
|
badgeIconDir,
|
|
85
85
|
onButtonClick,
|
|
86
|
+
onKeyDown,
|
|
86
87
|
className,
|
|
87
88
|
...props
|
|
88
89
|
}) => {
|
|
@@ -102,12 +103,31 @@ const CardHorizontal = ({
|
|
|
102
103
|
e.stopPropagation();
|
|
103
104
|
handleClick(e);
|
|
104
105
|
};
|
|
106
|
+
const isActionable = typeof props.onClick === "function" || typeof onButtonClick === "function" || Boolean(infoUrl);
|
|
107
|
+
const isButton = isActionable && !infoText;
|
|
108
|
+
const handleKeyDown = (e) => {
|
|
109
|
+
if (typeof onKeyDown === "function") {
|
|
110
|
+
onKeyDown(e);
|
|
111
|
+
}
|
|
112
|
+
const shouldSkipActivation = !isButton || e.defaultPrevented || disabled || e.target !== e.currentTarget;
|
|
113
|
+
if (shouldSkipActivation) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
117
|
+
e.preventDefault();
|
|
118
|
+
if (!e.repeat) {
|
|
119
|
+
e.currentTarget.click();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
105
123
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
106
124
|
"div",
|
|
107
125
|
{
|
|
108
126
|
tabIndex: disabled ? -1 : 0,
|
|
109
127
|
"aria-disabled": disabled,
|
|
128
|
+
role: isButton ? "button" : void 0,
|
|
110
129
|
onClick: handleClick,
|
|
130
|
+
onKeyDown: handleKeyDown,
|
|
111
131
|
...props,
|
|
112
132
|
className: cva.cn(
|
|
113
133
|
wrapperVariants({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/CardHorizontal/CardHorizontal.tsx"],"sourcesContent":["import { Badge } from '@/components/Badge';\nimport { Button } from '@/components/Button';\nimport { Container } from '@/components/Container';\nimport { Icon } from '@/components/Icon';\nimport { cn, cva } from '@/lib/cva';\nimport { openInNewTab } from '@/utils/url';\nimport { CardHorizontalProps } from './CardHorizontal.types';\nimport styles from './CardHorizontal.module.css';\n\nconst wrapperVariants = cva(styles.wrapper, {\n variants: {\n color: {\n default: styles['wrapper_color_default'],\n muted: styles['wrapper_color_muted'],\n },\n size: {\n sm: styles['wrapper_size_sm'],\n md: styles['wrapper_size_md'],\n },\n alignment: {\n center: styles['wrapper_alignment_center'],\n top: styles['wrapper_alignment_top'],\n },\n selectable: {\n true: styles['wrapper_selectable'],\n },\n selected: {\n true: styles['wrapper_selected'],\n },\n disabled: {\n true: styles['wrapper_disabled'],\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'md',\n alignment: 'center',\n },\n});\n\nconst contentWrapperVariants = cva(styles.contentwrapper, {\n variants: {\n size: {\n sm: styles['contentwrapper_size_sm'],\n md: styles['contentwrapper_size_md'],\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst iconTextContentWrapperVariants = cva(styles.icontextcontentwrapper, {\n variants: {\n size: {\n sm: styles['icontextcontentwrapper_size_sm'],\n md: styles['icontextcontentwrapper_size_md'],\n },\n alignment: {\n center: styles['icontextcontentwrapper_alignment_center'],\n top: styles['icontextcontentwrapper_alignment_top'],\n },\n },\n defaultVariants: { size: 'md', alignment: 'center' },\n});\n\nexport const CardHorizontal = ({\n title,\n icon,\n description,\n disabled = false,\n infoText,\n infoUrl,\n isSelected,\n isSelectable = infoText ? false : true,\n children,\n color = 'default',\n size = 'md',\n alignment = 'center',\n badgeText,\n badgeState,\n badgeIcon,\n badgeIconDir,\n onButtonClick,\n className,\n ...props\n}: CardHorizontalProps) => {\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (typeof onButtonClick === 'function') {\n onButtonClick(e);\n }\n if (infoUrl) {\n openInNewTab(infoUrl);\n }\n };\n const handleButtonClick = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n handleClick(e);\n };\n return (\n <div\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={handleClick}\n {...props}\n className={cn(\n wrapperVariants({\n color,\n size,\n alignment,\n selectable: isSelectable,\n selected: isSelected,\n disabled,\n }),\n className\n )}\n >\n <div className={cn(contentWrapperVariants({ size }))}>\n <div className={cn(iconTextContentWrapperVariants({ size, alignment }))}>\n {icon && (\n <Icon\n name={icon}\n aria-hidden\n className={styles.cardicon}\n />\n )}\n <Container\n padding=\"none\"\n orientation=\"vertical\"\n >\n {title && (\n <Container\n className={styles.header}\n isResponsive={false}\n gap=\"xs\"\n justifyContent=\"space-between\"\n fillWidth\n >\n <Container\n orientation=\"horizontal\"\n gap=\"xs\"\n isResponsive={false}\n fillWidth={false}\n grow=\"1\"\n >\n {title}\n </Container>\n {badgeText && (\n <Container\n isResponsive={false}\n justifyContent=\"end\"\n fillWidth={false}\n data-testid=\"horizontal-card-badge\"\n >\n <Badge\n text={badgeText}\n size=\"md\"\n state={badgeState}\n icon={badgeIcon}\n iconDir={badgeIconDir}\n />\n </Container>\n )}\n </Container>\n )}\n\n {description && <div className={styles.description}>{description}</div>}\n {children && <div className={styles.description}>{children}</div>}\n </Container>\n </div>\n {infoText && (\n <Container\n justifyContent=\"end\"\n fillWidth={false}\n data-testid=\"horizontal-card-button\"\n >\n <Button\n label={infoText}\n onClick={handleButtonClick}\n disabled={disabled}\n fillWidth\n />\n </Container>\n )}\n </div>\n </div>\n );\n};\n"],"names":["cva","styles","openInNewTab","jsx","cn","jsxs","Icon","Container","Badge","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/CardHorizontal/CardHorizontal.tsx"],"sourcesContent":["import { Badge } from '@/components/Badge';\nimport { Button } from '@/components/Button';\nimport { Container } from '@/components/Container';\nimport { Icon } from '@/components/Icon';\nimport { cn, cva } from '@/lib/cva';\nimport { openInNewTab } from '@/utils/url';\nimport { CardHorizontalProps } from './CardHorizontal.types';\nimport styles from './CardHorizontal.module.css';\n\nconst wrapperVariants = cva(styles.wrapper, {\n variants: {\n color: {\n default: styles['wrapper_color_default'],\n muted: styles['wrapper_color_muted'],\n },\n size: {\n sm: styles['wrapper_size_sm'],\n md: styles['wrapper_size_md'],\n },\n alignment: {\n center: styles['wrapper_alignment_center'],\n top: styles['wrapper_alignment_top'],\n },\n selectable: {\n true: styles['wrapper_selectable'],\n },\n selected: {\n true: styles['wrapper_selected'],\n },\n disabled: {\n true: styles['wrapper_disabled'],\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'md',\n alignment: 'center',\n },\n});\n\nconst contentWrapperVariants = cva(styles.contentwrapper, {\n variants: {\n size: {\n sm: styles['contentwrapper_size_sm'],\n md: styles['contentwrapper_size_md'],\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst iconTextContentWrapperVariants = cva(styles.icontextcontentwrapper, {\n variants: {\n size: {\n sm: styles['icontextcontentwrapper_size_sm'],\n md: styles['icontextcontentwrapper_size_md'],\n },\n alignment: {\n center: styles['icontextcontentwrapper_alignment_center'],\n top: styles['icontextcontentwrapper_alignment_top'],\n },\n },\n defaultVariants: { size: 'md', alignment: 'center' },\n});\n\nexport const CardHorizontal = ({\n title,\n icon,\n description,\n disabled = false,\n infoText,\n infoUrl,\n isSelected,\n isSelectable = infoText ? false : true,\n children,\n color = 'default',\n size = 'md',\n alignment = 'center',\n badgeText,\n badgeState,\n badgeIcon,\n badgeIconDir,\n onButtonClick,\n onKeyDown,\n className,\n ...props\n}: CardHorizontalProps) => {\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n if (typeof onButtonClick === 'function') {\n onButtonClick(e);\n }\n if (infoUrl) {\n openInNewTab(infoUrl);\n }\n };\n const handleButtonClick = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n handleClick(e);\n };\n const isActionable =\n typeof props.onClick === 'function' ||\n typeof onButtonClick === 'function' ||\n Boolean(infoUrl);\n // With an inner info button, that button is the keyboard action, so the card leaves Enter and Space alone.\n const isButton = isActionable && !infoText;\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (typeof onKeyDown === 'function') {\n onKeyDown(e);\n }\n // Keys from nested controls bubble up here and must not activate the card.\n const shouldSkipActivation =\n !isButton || e.defaultPrevented || disabled || e.target !== e.currentTarget;\n if (shouldSkipActivation) {\n return;\n }\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // A held key repeats keydown, so only the first press activates the card.\n if (!e.repeat) {\n // Runs whichever onClick is attached.\n e.currentTarget.click();\n }\n }\n };\n return (\n <div\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n role={isButton ? 'button' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...props}\n className={cn(\n wrapperVariants({\n color,\n size,\n alignment,\n selectable: isSelectable,\n selected: isSelected,\n disabled,\n }),\n className\n )}\n >\n <div className={cn(contentWrapperVariants({ size }))}>\n <div className={cn(iconTextContentWrapperVariants({ size, alignment }))}>\n {icon && (\n <Icon\n name={icon}\n aria-hidden\n className={styles.cardicon}\n />\n )}\n <Container\n padding=\"none\"\n orientation=\"vertical\"\n >\n {title && (\n <Container\n className={styles.header}\n isResponsive={false}\n gap=\"xs\"\n justifyContent=\"space-between\"\n fillWidth\n >\n <Container\n orientation=\"horizontal\"\n gap=\"xs\"\n isResponsive={false}\n fillWidth={false}\n grow=\"1\"\n >\n {title}\n </Container>\n {badgeText && (\n <Container\n isResponsive={false}\n justifyContent=\"end\"\n fillWidth={false}\n data-testid=\"horizontal-card-badge\"\n >\n <Badge\n text={badgeText}\n size=\"md\"\n state={badgeState}\n icon={badgeIcon}\n iconDir={badgeIconDir}\n />\n </Container>\n )}\n </Container>\n )}\n\n {description && <div className={styles.description}>{description}</div>}\n {children && <div className={styles.description}>{children}</div>}\n </Container>\n </div>\n {infoText && (\n <Container\n justifyContent=\"end\"\n fillWidth={false}\n data-testid=\"horizontal-card-button\"\n >\n <Button\n label={infoText}\n onClick={handleButtonClick}\n disabled={disabled}\n fillWidth\n />\n </Container>\n )}\n </div>\n </div>\n );\n};\n"],"names":["cva","styles","openInNewTab","jsx","cn","jsxs","Icon","Container","Badge","Button"],"mappings":"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"}
|
|
@@ -463,18 +463,10 @@ const TimeInput = ({ date, setDate, shouldShowSeconds, timezone }) => {
|
|
|
463
463
|
const handleKeyDown = react.useCallback(
|
|
464
464
|
(event) => {
|
|
465
465
|
if (event.key === "Enter") {
|
|
466
|
-
|
|
467
|
-
if (!isValid) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
if (!parsedDate) {
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
const newDate = shouldShowSeconds ? dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).second(parsedDate.second()).toDate() : dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).toDate();
|
|
474
|
-
setDate(newDate);
|
|
466
|
+
handleTimeChange(timeString);
|
|
475
467
|
}
|
|
476
468
|
},
|
|
477
|
-
[
|
|
469
|
+
[handleTimeChange, timeString]
|
|
478
470
|
);
|
|
479
471
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
480
472
|
TimeInputContainer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n ComponentProps,\n Dispatch,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { Dropdown } from '../Dropdown/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateTimeRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '../Container/Container';\nimport { Panel } from '../Panel/Panel';\nimport { Icon } from '../Icon/Icon';\nimport {\n DateRangeListItem,\n Meridiem,\n Timezone,\n areDatesWithinMaxRange,\n isDateRangeValid,\n isDateRangeWithinRange,\n shiftFromTimezone,\n shiftToTimezone,\n} from './utils';\nimport { dayjs, Dayjs } from '@/utils/date';\nimport { Tabs } from '../Tabs/Tabs';\nimport { TextField } from '@/components/TextField';\nimport { ButtonGroup } from '../ButtonGroup/ButtonGroup';\nimport { Label } from '../Label/Label';\nimport { Text } from '../Text';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './DateTimeRangePicker.module.css';\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = ({\n className,\n children,\n gap,\n orientation,\n padding,\n}: ComponentProps<typeof Panel>) => (\n <Panel\n gap={gap}\n orientation={orientation}\n padding={padding}\n className={cn(styles['predefined-calendar-container'], className)}\n >\n {children}\n </Panel>\n);\n\nconst PredefinedTimesContainer = ({\n className,\n children,\n isResponsive,\n orientation,\n 'data-testid': dataTestId,\n}: ComponentProps<typeof Container> & { 'data-testid'?: string }) => (\n <Container\n isResponsive={isResponsive}\n orientation={orientation}\n data-testid={dataTestId}\n className={cn(styles['predefined-times-container'], className)}\n >\n {children}\n </Container>\n);\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarRendererContainerVariants = cva(styles['calendar-renderer-container'], {\n variants: {\n openDirection: {\n left: styles['calendar-renderer-container_left'],\n right: styles['calendar-renderer-container_right'],\n },\n },\n defaultVariants: { openDirection: 'right' },\n});\n\nconst CalendarRendererContainer = forwardRef<\n HTMLDivElement,\n { openDirection?: OpenDirection; children: ReactNode }\n>(({ openDirection, children }, ref) => (\n <div\n ref={ref}\n className={calendarRendererContainerVariants({ openDirection })}\n >\n {children}\n </div>\n));\nCalendarRendererContainer.displayName = 'CalendarRendererContainer';\n\nconst NoOverflowDropdownContent = ({\n className,\n children,\n align,\n responsivePositioning,\n}: {\n className?: string;\n children?: ReactNode;\n align?: 'start' | 'center' | 'end';\n responsivePositioning?: boolean;\n}) => (\n <Dropdown.Content\n align={align}\n responsivePositioning={responsivePositioning}\n className={cn(styles['no-overflow-dropdown-content'], className)}\n >\n {children}\n </Dropdown.Content>\n);\n\nconst StyledCalendarRenderer = ({\n className,\n children,\n calendarOptions,\n timezone,\n}: ComponentProps<typeof CalendarRenderer>) => (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n timezone={timezone}\n className={cn(styles['styled-calendar-renderer'], className)}\n >\n {children}\n </CalendarRenderer>\n);\n\nconst BottomPaddingTabs = ({\n className,\n children,\n onValueChange,\n value,\n}: ComponentProps<typeof Tabs>) => (\n <Tabs\n onValueChange={onValueChange}\n value={value}\n className={cn(styles['bottom-padding-tabs'], className)}\n >\n {children}\n </Tabs>\n);\n\nconst StyledTriggerList = ({\n className,\n children,\n}: ComponentProps<typeof Tabs.TriggersList>) => (\n <Tabs.TriggersList className={cn(styles['styled-trigger-list'], className)}>\n {children}\n </Tabs.TriggersList>\n);\n\nconst ScrollableContainer = ({\n className,\n children,\n orientation,\n}: ComponentProps<typeof Container>) => (\n <Container\n orientation={orientation}\n className={cn(styles['scrollable-container'], className)}\n >\n {children}\n </Container>\n);\n\nconst TimeInputContainer = ({\n className,\n children,\n gap,\n padding,\n maxWidth,\n orientation,\n justifyContent,\n}: ComponentProps<typeof Container>) => (\n <Container\n gap={gap}\n padding={padding}\n maxWidth={maxWidth}\n orientation={orientation}\n justifyContent={justifyContent}\n className={cn(styles['time-input-container'], className)}\n >\n {children}\n </Container>\n);\n\nconst dateRangeTableCellVariants = cva(undefined, {\n variants: {\n showRangeIndicator: { true: styles['date-range-table-cell_indicator'] },\n },\n});\n\nconst DateRangeTableCell = ({\n shouldShowRangeIndicator,\n className,\n children,\n isCurrentMonth,\n isDisabled,\n isSelected,\n isPresent,\n onClick,\n onMouseEnter,\n onMouseLeave,\n}: ComponentProps<typeof DateTableCell> & {\n shouldShowRangeIndicator?: boolean;\n}) => (\n <DateTableCell\n isCurrentMonth={isCurrentMonth}\n isDisabled={isDisabled}\n isSelected={isSelected}\n isPresent={isPresent}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={cn(\n dateRangeTableCellVariants({ showRangeIndicator: shouldShowRangeIndicator }),\n className\n )}\n >\n {children}\n </DateTableCell>\n);\n\ntype CalendarType = 'startDate' | 'endDate';\n\ntype SetSelectedDate = (selectedDate: Date, calendarType: CalendarType) => void;\n\ntype SetDate = (date: Date) => void;\n\ninterface CalendarProps {\n calendarBody: Body;\n calendarType: CalendarType;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n timezone: Timezone;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n timezone,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const today = shiftToTimezone(new Date(), timezone);\n const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : undefined;\n const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : undefined;\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (shiftedStart && isSameDate(shiftedStart, fullDate)) ||\n (shiftedEnd && isSameDate(shiftedEnd, fullDate));\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n shiftedStart &&\n !areDatesWithinMaxRange(shiftedStart, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n // start date is selected, end date is not; disable anything before start date\n if (\n calendarType === 'endDate' &&\n !shiftedEnd &&\n shiftedStart &&\n shiftedStart > fullDate &&\n !isSameDate(shiftedStart, fullDate)\n ) {\n isDisabled = true;\n }\n\n // start date isn't selected, but end date is; disable anything after end date\n if (\n calendarType === 'startDate' &&\n !shiftedStart &&\n shiftedEnd &&\n fullDate > shiftedEnd\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !shiftedEnd &&\n Boolean(\n shiftedStart &&\n hoveredDate &&\n fullDate > shiftedStart &&\n fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !shiftedStart &&\n Boolean(\n shiftedEnd && hoveredDate && fullDate < shiftedEnd && fullDate > hoveredDate\n );\n\n const shouldShowRangeIndicator =\n startDateSelectedAndIsSelectingEndDate ||\n endDateSelectedAndIsSelectingStartDate;\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n\n const originalFullDate = shiftFromTimezone(fullDate, timezone);\n\n // If the user selects a start date and changes the start date\n // use any hours, minutes, seconds they've already set\n if (calendarType === 'startDate' && startDate) {\n if (timezone === 'UTC') {\n originalFullDate.setUTCHours(startDate.getUTCHours());\n originalFullDate.setUTCMinutes(startDate.getUTCMinutes());\n originalFullDate.setUTCSeconds(startDate.getUTCSeconds());\n } else {\n originalFullDate.setHours(startDate.getHours());\n originalFullDate.setMinutes(startDate.getMinutes());\n originalFullDate.setSeconds(startDate.getSeconds());\n }\n }\n\n // If the user selects an end date and changes the end date\n // use any hours, minutes, seconds they've already set\n if (calendarType === 'endDate' && endDate) {\n if (timezone === 'UTC') {\n originalFullDate.setUTCHours(endDate.getUTCHours());\n originalFullDate.setUTCMinutes(endDate.getUTCMinutes());\n originalFullDate.setUTCSeconds(endDate.getUTCSeconds());\n } else {\n originalFullDate.setHours(endDate.getHours());\n originalFullDate.setMinutes(endDate.getMinutes());\n originalFullDate.setSeconds(endDate.getSeconds());\n }\n }\n\n setSelectedDate(originalFullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n isCurrentMonth={isCurrentMonth}\n isDisabled={isDisabled}\n isSelected={Boolean(isSelected)}\n isPresent={isCurrentDate}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\ninterface PredefinedTimesProps {\n onSelectDateRange: (\n startDate: Date,\n endDate: Date,\n predefinedDateLabel?: string\n ) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n timezone: Timezone;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n timezone,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange, label }) => {\n const { startDate, endDate } = dateRange;\n\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate, label);\n };\n\n const selectedRange =\n selectedStartDate && selectedEndDate\n ? { startDate: selectedStartDate, endDate: selectedEndDate }\n : undefined;\n\n const rangeIsSelected =\n selectedRange !== undefined &&\n isDateRangeWithinRange(selectedRange, dateRange, timezone);\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={label}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {label}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedTimesContainer>\n );\n};\n\nconst parseTimeString = (\n timeString: string\n): { isValid: boolean; parsedDate?: Dayjs } => {\n if (!validTimeRegex.test(timeString)) {\n return { isValid: false };\n }\n\n const [hours, minutes, seconds] = timeString.split(':');\n\n const hoursAsNumber = parseInt(hours, 10);\n if (Number.isNaN(hoursAsNumber)) {\n return { isValid: false };\n }\n\n if (hoursAsNumber > 23 || hoursAsNumber < 0) {\n return { isValid: false };\n }\n\n let parsedDate;\n if (!minutes) {\n parsedDate = dayjs(hours, 'h');\n } else {\n const minutesAsNumber = parseInt(minutes, 10);\n if (Number.isNaN(minutesAsNumber)) {\n return { isValid: false };\n }\n\n if (minutesAsNumber > 59 || minutesAsNumber < 0) {\n return { isValid: false };\n }\n\n if (!seconds) {\n parsedDate = dayjs(`${hours}:${minutes}`, 'h:mm');\n } else {\n const secondsAsNumber = parseInt(seconds, 10);\n\n if (Number.isNaN(secondsAsNumber)) {\n return { isValid: false };\n }\n\n if (secondsAsNumber > 59 || secondsAsNumber < 0) {\n return { isValid: false };\n }\n\n parsedDate = dayjs(`${hours}:${minutes}:${seconds}`, 'h:mm:ss');\n }\n }\n\n if (!parsedDate.isValid()) {\n return { isValid: false };\n }\n\n return { isValid: true, parsedDate };\n};\n\nconst validTimeRegex = /^\\d{1,2}(:\\d{1,2}(:\\d{1,2})?)?$/;\n\ninterface TimeInputProps {\n date: Date | undefined;\n setDate: (date: Date) => void;\n shouldShowSeconds: boolean;\n timezone: Timezone;\n}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds, timezone }: TimeInputProps) => {\n let dayjsDate = timezone === 'UTC' ? dayjs.utc(date) : dayjs(date);\n\n if (!date) {\n dayjsDate = dayjsDate.hour(12).minute(0);\n }\n\n const formattedDate = shouldShowSeconds\n ? dayjsDate.format('hh:mm:ss')\n : dayjsDate.format('hh:mm');\n const [timeString, setTimeString] = useState<string>(formattedDate);\n const [dateIsValid, setDateIsValid] = useState<boolean>(true);\n const [meridiem, setMeridiem] = useState<Meridiem>();\n const isEnabled = Boolean(date);\n\n useEffect(() => {\n if (date) {\n setMeridiem(dayjsDate.format('a') as Meridiem);\n }\n }, [date, dayjsDate]);\n\n const handleTimeChange = useCallback(\n (newTimeString: string) => {\n setTimeString(newTimeString);\n\n if (!date) {\n return;\n }\n\n const trimmedTime = newTimeString.trim();\n if (!trimmedTime) {\n return;\n }\n\n const { isValid, parsedDate } = parseTimeString(trimmedTime);\n\n if (!isValid) {\n setDateIsValid(false);\n return;\n }\n\n if (!parsedDate) {\n setDateIsValid(false);\n return;\n }\n\n setDateIsValid(true);\n\n let hour = parsedDate.hour();\n\n // If the meridiem is set to am and the user enters a time greater than 12,\n // e.g. 18:00, it's a pretty clear indication they mean afternoon, so set the\n // meridiem to pm\n if (meridiem === 'am' && hour >= 12) {\n setMeridiem('pm');\n }\n // It's not as easy to infer that a user intended 8:00 to mean 08:00 when the meridiem\n // is set to pm, so don't change the meridiem in that case\n if (meridiem === 'pm' && hour < 12) {\n hour = parsedDate.hour() + 12;\n }\n\n const newDate = shouldShowSeconds\n ? dayjsDate\n .hour(hour)\n .minute(parsedDate.minute())\n .second(parsedDate.second())\n .toDate()\n : dayjsDate.hour(hour).minute(parsedDate.minute()).toDate();\n\n setDate(newDate);\n },\n [date, dayjsDate, meridiem, setDate, shouldShowSeconds]\n );\n\n const handleMeridiemChange = useCallback(\n (newMeridiem: string) => {\n setMeridiem(newMeridiem as Meridiem);\n\n if (newMeridiem === 'pm' && dayjsDate.hour() < 12) {\n const newDate = dayjsDate.hour(dayjsDate.hour() + 12).toDate();\n\n setDate(newDate);\n\n return;\n }\n\n if (newMeridiem === 'am' && dayjsDate.hour() >= 12) {\n const newDate = dayjsDate.hour(dayjsDate.hour() - 12).toDate();\n\n setDate(newDate);\n\n return;\n }\n },\n [dayjsDate, setDate]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n const { isValid, parsedDate } = parseTimeString(timeString);\n\n if (!isValid) {\n return;\n }\n\n if (!parsedDate) {\n return;\n }\n\n const newDate = shouldShowSeconds\n ? dayjsDate\n .hour(parsedDate.hour())\n .minute(parsedDate.minute())\n .second(parsedDate.second())\n .toDate()\n : dayjsDate.hour(parsedDate.hour()).minute(parsedDate.minute()).toDate();\n\n setDate(newDate);\n }\n },\n [dayjsDate, setDate, shouldShowSeconds, timeString]\n );\n\n return (\n <TimeInputContainer\n gap=\"sm\"\n padding=\"xs\"\n maxWidth={`${calendarFullWidth}`}\n orientation=\"horizontal\"\n justifyContent=\"end\"\n >\n <Container maxWidth=\"8%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\n maxWidth=\"85%\"\n >\n <Container\n maxWidth=\"45%\"\n orientation=\"horizontal\"\n >\n <TextField\n data-testid=\"date-time-picker-time-input\"\n disabled={!isEnabled}\n error={dateIsValid ? null : true}\n id=\"date-time-picker-time-input\"\n onChange={handleTimeChange}\n onKeyDown={handleKeyDown}\n value={timeString}\n />\n </Container>\n <Container maxWidth=\"45%\">\n <ButtonGroup\n onClick={handleMeridiemChange}\n options={[\n {\n label: 'am',\n value: 'am',\n },\n {\n label: 'pm',\n value: 'pm',\n },\n ]}\n selected={meridiem}\n type=\"default\"\n />\n </Container>\n </Container>\n </TimeInputContainer>\n );\n};\n\nexport type Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n defaultActiveTab?: Tab;\n endDate: Date | undefined;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setEndDate: SetDate;\n setSelectedDate: SetSelectedDate;\n setStartDate: SetDate;\n shouldShowSeconds: boolean;\n startDate: Date | undefined;\n timezone: Timezone;\n}\n\nconst TabbedCalendar = ({\n defaultActiveTab = 'startDate',\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n timezone,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>(defaultActiveTab);\n\n useEffect(() => {\n setActiveTab(defaultActiveTab);\n }, [defaultActiveTab]);\n\n const handleTabChange = useCallback((newTab: string) => {\n setActiveTab(newTab as Tab);\n }, []);\n\n const handleSetStartDate = useCallback(\n (startDate: Date) => {\n setStartDate(startDate);\n\n setSelectedDate(startDate, 'startDate');\n },\n [setSelectedDate, setStartDate]\n );\n\n const handleSetEndDate = useCallback(\n (endDate: Date) => {\n setEndDate(endDate);\n\n setSelectedDate(endDate, 'endDate');\n },\n [setEndDate, setSelectedDate]\n );\n\n const startDateCalendarOptions: UseCalendarOptions = {};\n const endDateCalendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (startDate) {\n startDateCalendarOptions.defaultDate = startDate;\n }\n\n // If an end date is selected, open the calendar to that date\n if (endDate) {\n endDateCalendarOptions.defaultDate = endDate;\n }\n\n const startDateIsAfterEndDate =\n startDate && endDate && !isDateRangeValid({ startDate, endDate });\n\n return (\n <BottomPaddingTabs\n onValueChange={handleTabChange}\n value={activeTab}\n >\n <StyledTriggerList>\n <Tabs.Trigger\n value=\"startDate\"\n data-testid=\"tabbed-calendar-trigger-start\"\n >\n Start date\n </Tabs.Trigger>\n <Tabs.Trigger\n value=\"endDate\"\n data-testid=\"tabbed-calendar-trigger-end\"\n >\n End date\n </Tabs.Trigger>\n </StyledTriggerList>\n <Tabs.Content value=\"startDate\">\n <StyledCalendarRenderer\n calendarOptions={startDateCalendarOptions}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer\n calendarOptions={endDateCalendarOptions}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Tabs.Content>\n {startDateIsAfterEndDate && (\n <Text\n align=\"center\"\n color=\"danger\"\n fillWidth\n >\n End date and time must be after start\n </Text>\n )}\n </BottomPaddingTabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n closeOnDateRangeSelected?: boolean;\n defaultActiveTab?: Tab;\n disabled?: boolean;\n endDate?: Date;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (\n startDate: Date,\n endDate: Date,\n predefinedDateLabel?: string\n ) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n responsivePositioning?: boolean;\n shouldFireIfInvalid?: boolean;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n timezone?: Timezone;\n}\n\nexport const DateTimeRangePicker = ({\n closeOnDateRangeSelected = false,\n defaultActiveTab,\n disabled = false,\n endDate,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n responsivePositioning = true,\n shouldFireIfInvalid = true,\n shouldShowSeconds,\n startDate,\n timezone = 'system',\n}: DateTimeRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!startDate) {\n return;\n }\n\n const startDateCopy = new Date(startDate);\n\n const hours =\n timezone === 'UTC' ? startDateCopy.getUTCHours() : startDateCopy.getHours();\n\n if (hours === 0) {\n if (timezone === 'UTC') {\n startDateCopy.setUTCHours(12);\n } else {\n startDateCopy.setHours(12);\n }\n }\n\n setSelectedStartDate(startDateCopy);\n }, [startDate, timezone]);\n\n useEffect(() => {\n if (!endDate) {\n return;\n }\n\n const endDateCopy = new Date(endDate);\n\n const hours = timezone === 'UTC' ? endDateCopy.getUTCHours() : endDateCopy.getHours();\n if (hours === 0) {\n if (timezone === 'UTC') {\n endDateCopy.setUTCHours(12);\n } else {\n endDateCopy.setHours(12);\n }\n }\n\n setSelectedEndDate(endDateCopy);\n }, [endDate, timezone]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n const rect = calendarContainerRef.current.getBoundingClientRect();\n\n if (rect.right > window.innerWidth) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection('right');\n }, []);\n\n const handleOpenChange = useCallback((isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection('right');\n }\n }, []);\n\n const handleSelectDate = useCallback(\n (selectedDate: Date, calendarType: CalendarType): void => {\n const isMidnight =\n timezone === 'UTC'\n ? selectedDate.getUTCHours() === 0 &&\n selectedDate.getUTCMinutes() === 0 &&\n selectedDate.getUTCSeconds() === 0\n : selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0;\n\n if (isMidnight) {\n // set the time to 12 noon if time hasn't been set yet\n\n if (timezone === 'UTC') {\n selectedDate.setUTCHours(12);\n } else {\n selectedDate.setHours(12);\n }\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n if (\n !shouldFireIfInvalid &&\n !isDateRangeValid({ startDate: selectedDate, endDate: selectedEndDate })\n ) {\n return;\n }\n\n onSelectDateRange(selectedDate, selectedEndDate);\n\n if (closeOnDateRangeSelected) {\n closeDatePicker();\n }\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n if (\n !shouldFireIfInvalid &&\n !isDateRangeValid({ startDate: selectedStartDate, endDate: selectedDate })\n ) {\n return;\n }\n\n onSelectDateRange(selectedStartDate, selectedDate);\n\n if (closeOnDateRangeSelected) {\n closeDatePicker();\n }\n }\n }\n },\n [\n closeDatePicker,\n closeOnDateRangeSelected,\n onSelectDateRange,\n selectedEndDate,\n selectedStartDate,\n shouldFireIfInvalid,\n timezone,\n ]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedTimes =\n predefinedTimesList !== undefined && predefinedTimesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateTimeRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Dropdown.Trigger>\n <NoOverflowDropdownContent\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n timezone={timezone}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n defaultActiveTab={defaultActiveTab}\n endDate={selectedEndDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setEndDate={setSelectedEndDate}\n setSelectedDate={handleSelectDate}\n setStartDate={setSelectedStartDate}\n shouldShowSeconds={Boolean(shouldShowSeconds)}\n startDate={selectedStartDate}\n timezone={timezone}\n />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n defaultActiveTab={defaultActiveTab}\n endDate={selectedEndDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setEndDate={setSelectedEndDate}\n setSelectedDate={handleSelectDate}\n setStartDate={setSelectedStartDate}\n shouldShowSeconds={Boolean(shouldShowSeconds)}\n startDate={selectedStartDate}\n timezone={timezone}\n />\n </>\n )}\n </Container>\n </NoOverflowDropdownContent>\n </Dropdown>\n );\n};\n"],"names":["jsx","Panel","cn","styles","Container","cva","forwardRef","Dropdown","CalendarRenderer","Tabs","DateTableCell","useState","shiftToTimezone","isSameDate","areDatesWithinMaxRange","shiftFromTimezone","jsxs","isDateRangeWithinRange","StyledDropdownItem","Icon","dayjs","useEffect","useCallback","Label","TextField","ButtonGroup","startDate","endDate","isDateRangeValid","Text","useRef","useLayoutEffect","isOpen","DateTimeRangePickerInput","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateTimeRangePicker.cjs","sources":["../../../../src/components/DatePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import {\n ComponentProps,\n Dispatch,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n SetStateAction,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { isSameDate, UseCalendarOptions } from '@h6s/calendar';\nimport { Dropdown } from '../Dropdown/Dropdown';\nimport {\n Body,\n CalendarRenderer,\n DateTimeRangePickerInput,\n DateTableCell,\n StyledDropdownItem,\n} from './Common';\nimport { Container } from '../Container/Container';\nimport { Panel } from '../Panel/Panel';\nimport { Icon } from '../Icon/Icon';\nimport {\n DateRangeListItem,\n Meridiem,\n Timezone,\n areDatesWithinMaxRange,\n isDateRangeValid,\n isDateRangeWithinRange,\n shiftFromTimezone,\n shiftToTimezone,\n} from './utils';\nimport { dayjs, Dayjs } from '@/utils/date';\nimport { Tabs } from '../Tabs/Tabs';\nimport { TextField } from '@/components/TextField';\nimport { ButtonGroup } from '../ButtonGroup/ButtonGroup';\nimport { Label } from '../Label/Label';\nimport { Text } from '../Text';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './DateTimeRangePicker.module.css';\n\nconst calendarFullWidth = '258px';\n\nconst PredefinedCalendarContainer = ({\n className,\n children,\n gap,\n orientation,\n padding,\n}: ComponentProps<typeof Panel>) => (\n <Panel\n gap={gap}\n orientation={orientation}\n padding={padding}\n className={cn(styles['predefined-calendar-container'], className)}\n >\n {children}\n </Panel>\n);\n\nconst PredefinedTimesContainer = ({\n className,\n children,\n isResponsive,\n orientation,\n 'data-testid': dataTestId,\n}: ComponentProps<typeof Container> & { 'data-testid'?: string }) => (\n <Container\n isResponsive={isResponsive}\n orientation={orientation}\n data-testid={dataTestId}\n className={cn(styles['predefined-times-container'], className)}\n >\n {children}\n </Container>\n);\n\ntype OpenDirection = 'left' | 'right';\n\nconst calendarRendererContainerVariants = cva(styles['calendar-renderer-container'], {\n variants: {\n openDirection: {\n left: styles['calendar-renderer-container_left'],\n right: styles['calendar-renderer-container_right'],\n },\n },\n defaultVariants: { openDirection: 'right' },\n});\n\nconst CalendarRendererContainer = forwardRef<\n HTMLDivElement,\n { openDirection?: OpenDirection; children: ReactNode }\n>(({ openDirection, children }, ref) => (\n <div\n ref={ref}\n className={calendarRendererContainerVariants({ openDirection })}\n >\n {children}\n </div>\n));\nCalendarRendererContainer.displayName = 'CalendarRendererContainer';\n\nconst NoOverflowDropdownContent = ({\n className,\n children,\n align,\n responsivePositioning,\n}: {\n className?: string;\n children?: ReactNode;\n align?: 'start' | 'center' | 'end';\n responsivePositioning?: boolean;\n}) => (\n <Dropdown.Content\n align={align}\n responsivePositioning={responsivePositioning}\n className={cn(styles['no-overflow-dropdown-content'], className)}\n >\n {children}\n </Dropdown.Content>\n);\n\nconst StyledCalendarRenderer = ({\n className,\n children,\n calendarOptions,\n timezone,\n}: ComponentProps<typeof CalendarRenderer>) => (\n <CalendarRenderer\n calendarOptions={calendarOptions}\n timezone={timezone}\n className={cn(styles['styled-calendar-renderer'], className)}\n >\n {children}\n </CalendarRenderer>\n);\n\nconst BottomPaddingTabs = ({\n className,\n children,\n onValueChange,\n value,\n}: ComponentProps<typeof Tabs>) => (\n <Tabs\n onValueChange={onValueChange}\n value={value}\n className={cn(styles['bottom-padding-tabs'], className)}\n >\n {children}\n </Tabs>\n);\n\nconst StyledTriggerList = ({\n className,\n children,\n}: ComponentProps<typeof Tabs.TriggersList>) => (\n <Tabs.TriggersList className={cn(styles['styled-trigger-list'], className)}>\n {children}\n </Tabs.TriggersList>\n);\n\nconst ScrollableContainer = ({\n className,\n children,\n orientation,\n}: ComponentProps<typeof Container>) => (\n <Container\n orientation={orientation}\n className={cn(styles['scrollable-container'], className)}\n >\n {children}\n </Container>\n);\n\nconst TimeInputContainer = ({\n className,\n children,\n gap,\n padding,\n maxWidth,\n orientation,\n justifyContent,\n}: ComponentProps<typeof Container>) => (\n <Container\n gap={gap}\n padding={padding}\n maxWidth={maxWidth}\n orientation={orientation}\n justifyContent={justifyContent}\n className={cn(styles['time-input-container'], className)}\n >\n {children}\n </Container>\n);\n\nconst dateRangeTableCellVariants = cva(undefined, {\n variants: {\n showRangeIndicator: { true: styles['date-range-table-cell_indicator'] },\n },\n});\n\nconst DateRangeTableCell = ({\n shouldShowRangeIndicator,\n className,\n children,\n isCurrentMonth,\n isDisabled,\n isSelected,\n isPresent,\n onClick,\n onMouseEnter,\n onMouseLeave,\n}: ComponentProps<typeof DateTableCell> & {\n shouldShowRangeIndicator?: boolean;\n}) => (\n <DateTableCell\n isCurrentMonth={isCurrentMonth}\n isDisabled={isDisabled}\n isSelected={isSelected}\n isPresent={isPresent}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={cn(\n dateRangeTableCellVariants({ showRangeIndicator: shouldShowRangeIndicator }),\n className\n )}\n >\n {children}\n </DateTableCell>\n);\n\ntype CalendarType = 'startDate' | 'endDate';\n\ntype SetSelectedDate = (selectedDate: Date, calendarType: CalendarType) => void;\n\ntype SetDate = (date: Date) => void;\n\ninterface CalendarProps {\n calendarBody: Body;\n calendarType: CalendarType;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setSelectedDate: SetSelectedDate;\n startDate?: Date;\n endDate?: Date;\n timezone: Timezone;\n}\n\nconst Calendar = ({\n calendarBody,\n calendarType,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setSelectedDate,\n startDate,\n endDate,\n timezone,\n}: CalendarProps) => {\n const [hoveredDate, setHoveredDate] = useState<Date>();\n\n const today = shiftToTimezone(new Date(), timezone);\n const shiftedStart = startDate ? shiftToTimezone(startDate, timezone) : undefined;\n const shiftedEnd = endDate ? shiftToTimezone(endDate, timezone) : undefined;\n\n const handleMouseOut = (): void => {\n setHoveredDate(undefined);\n };\n\n return calendarBody.value.map(({ key: weekKey, value: week }) => {\n return (\n <tr key={weekKey}>\n {week.map(({ date, isCurrentMonth, key: dayKey, value: fullDate }) => {\n const isSelected =\n (shiftedStart && isSameDate(shiftedStart, fullDate)) ||\n (shiftedEnd && isSameDate(shiftedEnd, fullDate));\n\n const isCurrentDate = isSameDate(today, fullDate);\n const isBetweenStartAndEndDates = Boolean(\n shiftedStart && shiftedEnd && fullDate > shiftedStart && fullDate < shiftedEnd\n );\n\n let isDisabled = false;\n if (futureDatesDisabled && fullDate > today) {\n isDisabled = true;\n }\n\n if (\n futureStartDatesDisabled &&\n calendarType === 'startDate' &&\n fullDate > today\n ) {\n isDisabled = true;\n }\n\n if (\n maxRangeLength > 1 &&\n shiftedStart &&\n !areDatesWithinMaxRange(shiftedStart, fullDate, maxRangeLength)\n ) {\n isDisabled = true;\n }\n\n // start date is selected, end date is not; disable anything before start date\n if (\n calendarType === 'endDate' &&\n !shiftedEnd &&\n shiftedStart &&\n shiftedStart > fullDate &&\n !isSameDate(shiftedStart, fullDate)\n ) {\n isDisabled = true;\n }\n\n // start date isn't selected, but end date is; disable anything after end date\n if (\n calendarType === 'startDate' &&\n !shiftedStart &&\n shiftedEnd &&\n fullDate > shiftedEnd\n ) {\n isDisabled = true;\n }\n\n const startDateSelectedAndIsSelectingEndDate =\n calendarType === 'endDate' &&\n !shiftedEnd &&\n Boolean(\n shiftedStart &&\n hoveredDate &&\n fullDate > shiftedStart &&\n fullDate < hoveredDate\n );\n\n const endDateSelectedAndIsSelectingStartDate =\n calendarType === 'startDate' &&\n !shiftedStart &&\n Boolean(\n shiftedEnd && hoveredDate && fullDate < shiftedEnd && fullDate > hoveredDate\n );\n\n const shouldShowRangeIndicator =\n startDateSelectedAndIsSelectingEndDate ||\n endDateSelectedAndIsSelectingStartDate;\n\n const handleMouseEnter = () => {\n setHoveredDate(fullDate);\n };\n\n const handleClick = () => {\n if (isDisabled) {\n return false;\n }\n\n const originalFullDate = shiftFromTimezone(fullDate, timezone);\n\n // If the user selects a start date and changes the start date\n // use any hours, minutes, seconds they've already set\n if (calendarType === 'startDate' && startDate) {\n if (timezone === 'UTC') {\n originalFullDate.setUTCHours(startDate.getUTCHours());\n originalFullDate.setUTCMinutes(startDate.getUTCMinutes());\n originalFullDate.setUTCSeconds(startDate.getUTCSeconds());\n } else {\n originalFullDate.setHours(startDate.getHours());\n originalFullDate.setMinutes(startDate.getMinutes());\n originalFullDate.setSeconds(startDate.getSeconds());\n }\n }\n\n // If the user selects an end date and changes the end date\n // use any hours, minutes, seconds they've already set\n if (calendarType === 'endDate' && endDate) {\n if (timezone === 'UTC') {\n originalFullDate.setUTCHours(endDate.getUTCHours());\n originalFullDate.setUTCMinutes(endDate.getUTCMinutes());\n originalFullDate.setUTCSeconds(endDate.getUTCSeconds());\n } else {\n originalFullDate.setHours(endDate.getHours());\n originalFullDate.setMinutes(endDate.getMinutes());\n originalFullDate.setSeconds(endDate.getSeconds());\n }\n }\n\n setSelectedDate(originalFullDate, calendarType);\n };\n\n return (\n <DateRangeTableCell\n shouldShowRangeIndicator={\n shouldShowRangeIndicator || isBetweenStartAndEndDates\n }\n isCurrentMonth={isCurrentMonth}\n isDisabled={isDisabled}\n isSelected={Boolean(isSelected)}\n isPresent={isCurrentDate}\n key={dayKey}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseOut}\n >\n {date}\n </DateRangeTableCell>\n );\n })}\n </tr>\n );\n });\n};\n\ninterface PredefinedTimesProps {\n onSelectDateRange: (\n startDate: Date,\n endDate: Date,\n predefinedDateLabel?: string\n ) => void;\n predefinedTimesList: DateRangeListItem[];\n selectedEndDate: Date | undefined;\n selectedStartDate: Date | undefined;\n setEndDate: Dispatch<SetStateAction<Date | undefined>>;\n setStartDate: Dispatch<SetStateAction<Date | undefined>>;\n shouldShowCustomRange: boolean;\n showCustomDateRange: Dispatch<SetStateAction<boolean>>;\n timezone: Timezone;\n}\n\nconst PredefinedTimes = ({\n onSelectDateRange,\n predefinedTimesList,\n selectedEndDate,\n selectedStartDate,\n setEndDate,\n setStartDate,\n shouldShowCustomRange,\n showCustomDateRange,\n timezone,\n}: PredefinedTimesProps) => {\n const handleCustomTimePeriodClick = (event: MouseEvent) => {\n event.preventDefault();\n showCustomDateRange(!shouldShowCustomRange);\n };\n\n return (\n <PredefinedTimesContainer\n data-testid=\"predefined-times-list\"\n isResponsive={false}\n orientation=\"vertical\"\n >\n <ScrollableContainer orientation=\"vertical\">\n {predefinedTimesList.map(({ dateRange, label }) => {\n const { startDate, endDate } = dateRange;\n\n const handleItemClick = () => {\n setStartDate(startDate);\n setEndDate(endDate);\n onSelectDateRange(startDate, endDate, label);\n };\n\n const selectedRange =\n selectedStartDate && selectedEndDate\n ? { startDate: selectedStartDate, endDate: selectedEndDate }\n : undefined;\n\n const rangeIsSelected =\n selectedRange !== undefined &&\n isDateRangeWithinRange(selectedRange, dateRange, timezone);\n\n return (\n <StyledDropdownItem\n data-testid={`predefined-date-${startDate.getTime()}`}\n key={startDate.toISOString()}\n onClick={handleItemClick}\n >\n <Container\n data-selected={rangeIsSelected}\n data-testid={label}\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n {label}\n {rangeIsSelected && <Icon name=\"check\" />}\n </Container>\n </StyledDropdownItem>\n );\n })}\n </ScrollableContainer>\n <StyledDropdownItem onClick={handleCustomTimePeriodClick}>\n <Container\n justifyContent=\"space-between\"\n orientation=\"horizontal\"\n >\n Custom time period <Icon name=\"chevron-right\" />\n </Container>\n </StyledDropdownItem>\n </PredefinedTimesContainer>\n );\n};\n\nconst parseTimeString = (\n timeString: string\n): { isValid: boolean; parsedDate?: Dayjs } => {\n if (!validTimeRegex.test(timeString)) {\n return { isValid: false };\n }\n\n const [hours, minutes, seconds] = timeString.split(':');\n\n const hoursAsNumber = parseInt(hours, 10);\n if (Number.isNaN(hoursAsNumber)) {\n return { isValid: false };\n }\n\n if (hoursAsNumber > 23 || hoursAsNumber < 0) {\n return { isValid: false };\n }\n\n let parsedDate;\n if (!minutes) {\n parsedDate = dayjs(hours, 'h');\n } else {\n const minutesAsNumber = parseInt(minutes, 10);\n if (Number.isNaN(minutesAsNumber)) {\n return { isValid: false };\n }\n\n if (minutesAsNumber > 59 || minutesAsNumber < 0) {\n return { isValid: false };\n }\n\n if (!seconds) {\n parsedDate = dayjs(`${hours}:${minutes}`, 'h:mm');\n } else {\n const secondsAsNumber = parseInt(seconds, 10);\n\n if (Number.isNaN(secondsAsNumber)) {\n return { isValid: false };\n }\n\n if (secondsAsNumber > 59 || secondsAsNumber < 0) {\n return { isValid: false };\n }\n\n parsedDate = dayjs(`${hours}:${minutes}:${seconds}`, 'h:mm:ss');\n }\n }\n\n if (!parsedDate.isValid()) {\n return { isValid: false };\n }\n\n return { isValid: true, parsedDate };\n};\n\nconst validTimeRegex = /^\\d{1,2}(:\\d{1,2}(:\\d{1,2})?)?$/;\n\ninterface TimeInputProps {\n date: Date | undefined;\n setDate: (date: Date) => void;\n shouldShowSeconds: boolean;\n timezone: Timezone;\n}\n\nconst TimeInput = ({ date, setDate, shouldShowSeconds, timezone }: TimeInputProps) => {\n let dayjsDate = timezone === 'UTC' ? dayjs.utc(date) : dayjs(date);\n\n if (!date) {\n dayjsDate = dayjsDate.hour(12).minute(0);\n }\n\n const formattedDate = shouldShowSeconds\n ? dayjsDate.format('hh:mm:ss')\n : dayjsDate.format('hh:mm');\n const [timeString, setTimeString] = useState<string>(formattedDate);\n const [dateIsValid, setDateIsValid] = useState<boolean>(true);\n const [meridiem, setMeridiem] = useState<Meridiem>();\n const isEnabled = Boolean(date);\n\n useEffect(() => {\n if (date) {\n setMeridiem(dayjsDate.format('a') as Meridiem);\n }\n }, [date, dayjsDate]);\n\n const handleTimeChange = useCallback(\n (newTimeString: string) => {\n setTimeString(newTimeString);\n\n if (!date) {\n return;\n }\n\n const trimmedTime = newTimeString.trim();\n if (!trimmedTime) {\n return;\n }\n\n const { isValid, parsedDate } = parseTimeString(trimmedTime);\n\n if (!isValid) {\n setDateIsValid(false);\n return;\n }\n\n if (!parsedDate) {\n setDateIsValid(false);\n return;\n }\n\n setDateIsValid(true);\n\n let hour = parsedDate.hour();\n\n // If the meridiem is set to am and the user enters a time greater than 12,\n // e.g. 18:00, it's a pretty clear indication they mean afternoon, so set the\n // meridiem to pm\n if (meridiem === 'am' && hour >= 12) {\n setMeridiem('pm');\n }\n // It's not as easy to infer that a user intended 8:00 to mean 08:00 when the meridiem\n // is set to pm, so don't change the meridiem in that case\n if (meridiem === 'pm' && hour < 12) {\n hour = parsedDate.hour() + 12;\n }\n\n const newDate = shouldShowSeconds\n ? dayjsDate\n .hour(hour)\n .minute(parsedDate.minute())\n .second(parsedDate.second())\n .toDate()\n : dayjsDate.hour(hour).minute(parsedDate.minute()).toDate();\n\n setDate(newDate);\n },\n [date, dayjsDate, meridiem, setDate, shouldShowSeconds]\n );\n\n const handleMeridiemChange = useCallback(\n (newMeridiem: string) => {\n setMeridiem(newMeridiem as Meridiem);\n\n if (newMeridiem === 'pm' && dayjsDate.hour() < 12) {\n const newDate = dayjsDate.hour(dayjsDate.hour() + 12).toDate();\n\n setDate(newDate);\n\n return;\n }\n\n if (newMeridiem === 'am' && dayjsDate.hour() >= 12) {\n const newDate = dayjsDate.hour(dayjsDate.hour() - 12).toDate();\n\n setDate(newDate);\n\n return;\n }\n },\n [dayjsDate, setDate]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleTimeChange(timeString);\n }\n },\n [handleTimeChange, timeString]\n );\n\n return (\n <TimeInputContainer\n gap=\"sm\"\n padding=\"xs\"\n maxWidth={`${calendarFullWidth}`}\n orientation=\"horizontal\"\n justifyContent=\"end\"\n >\n <Container maxWidth=\"8%\">\n <Label htmlFor=\"date-time-picker-time-input\">Time</Label>\n </Container>\n <Container\n justifyContent=\"space-evenly\"\n orientation=\"horizontal\"\n maxWidth=\"85%\"\n >\n <Container\n maxWidth=\"45%\"\n orientation=\"horizontal\"\n >\n <TextField\n data-testid=\"date-time-picker-time-input\"\n disabled={!isEnabled}\n error={dateIsValid ? null : true}\n id=\"date-time-picker-time-input\"\n onChange={handleTimeChange}\n onKeyDown={handleKeyDown}\n value={timeString}\n />\n </Container>\n <Container maxWidth=\"45%\">\n <ButtonGroup\n onClick={handleMeridiemChange}\n options={[\n {\n label: 'am',\n value: 'am',\n },\n {\n label: 'pm',\n value: 'pm',\n },\n ]}\n selected={meridiem}\n type=\"default\"\n />\n </Container>\n </Container>\n </TimeInputContainer>\n );\n};\n\nexport type Tab = 'startDate' | 'endDate';\n\ninterface TabbedCalendarProps {\n defaultActiveTab?: Tab;\n endDate: Date | undefined;\n futureDatesDisabled: boolean;\n futureStartDatesDisabled: boolean;\n maxRangeLength: number;\n setEndDate: SetDate;\n setSelectedDate: SetSelectedDate;\n setStartDate: SetDate;\n shouldShowSeconds: boolean;\n startDate: Date | undefined;\n timezone: Timezone;\n}\n\nconst TabbedCalendar = ({\n defaultActiveTab = 'startDate',\n endDate,\n futureDatesDisabled,\n futureStartDatesDisabled,\n maxRangeLength,\n setEndDate,\n setSelectedDate,\n setStartDate,\n shouldShowSeconds,\n startDate,\n timezone,\n}: TabbedCalendarProps) => {\n const [activeTab, setActiveTab] = useState<Tab>(defaultActiveTab);\n\n useEffect(() => {\n setActiveTab(defaultActiveTab);\n }, [defaultActiveTab]);\n\n const handleTabChange = useCallback((newTab: string) => {\n setActiveTab(newTab as Tab);\n }, []);\n\n const handleSetStartDate = useCallback(\n (startDate: Date) => {\n setStartDate(startDate);\n\n setSelectedDate(startDate, 'startDate');\n },\n [setSelectedDate, setStartDate]\n );\n\n const handleSetEndDate = useCallback(\n (endDate: Date) => {\n setEndDate(endDate);\n\n setSelectedDate(endDate, 'endDate');\n },\n [setEndDate, setSelectedDate]\n );\n\n const startDateCalendarOptions: UseCalendarOptions = {};\n const endDateCalendarOptions: UseCalendarOptions = {};\n\n // If a start date is selected, open the calendar to that date\n if (startDate) {\n startDateCalendarOptions.defaultDate = startDate;\n }\n\n // If an end date is selected, open the calendar to that date\n if (endDate) {\n endDateCalendarOptions.defaultDate = endDate;\n }\n\n const startDateIsAfterEndDate =\n startDate && endDate && !isDateRangeValid({ startDate, endDate });\n\n return (\n <BottomPaddingTabs\n onValueChange={handleTabChange}\n value={activeTab}\n >\n <StyledTriggerList>\n <Tabs.Trigger\n value=\"startDate\"\n data-testid=\"tabbed-calendar-trigger-start\"\n >\n Start date\n </Tabs.Trigger>\n <Tabs.Trigger\n value=\"endDate\"\n data-testid=\"tabbed-calendar-trigger-end\"\n >\n End date\n </Tabs.Trigger>\n </StyledTriggerList>\n <Tabs.Content value=\"startDate\">\n <StyledCalendarRenderer\n calendarOptions={startDateCalendarOptions}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"startDate\"\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={startDate}\n setDate={handleSetStartDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Tabs.Content>\n <Tabs.Content value=\"endDate\">\n <StyledCalendarRenderer\n calendarOptions={endDateCalendarOptions}\n timezone={timezone}\n >\n {(body: Body) => (\n <Calendar\n calendarBody={body}\n calendarType=\"endDate\"\n endDate={endDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setSelectedDate={setSelectedDate}\n startDate={startDate}\n timezone={timezone}\n />\n )}\n </StyledCalendarRenderer>\n <TimeInput\n date={endDate}\n setDate={handleSetEndDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Tabs.Content>\n {startDateIsAfterEndDate && (\n <Text\n align=\"center\"\n color=\"danger\"\n fillWidth\n >\n End date and time must be after start\n </Text>\n )}\n </BottomPaddingTabs>\n );\n};\n\nexport interface DateTimeRangePickerProps {\n closeOnDateRangeSelected?: boolean;\n defaultActiveTab?: Tab;\n disabled?: boolean;\n endDate?: Date;\n futureDatesDisabled?: boolean;\n futureStartDatesDisabled?: boolean;\n onSelectDateRange: (\n startDate: Date,\n endDate: Date,\n predefinedDateLabel?: string\n ) => void;\n openDirection?: OpenDirection;\n placeholder?: string;\n predefinedTimesList?: DateRangeListItem[];\n maxRangeLength?: number;\n responsivePositioning?: boolean;\n shouldFireIfInvalid?: boolean;\n shouldShowSeconds?: boolean;\n startDate?: Date;\n timezone?: Timezone;\n}\n\nexport const DateTimeRangePicker = ({\n closeOnDateRangeSelected = false,\n defaultActiveTab,\n disabled = false,\n endDate,\n futureDatesDisabled = false,\n futureStartDatesDisabled = false,\n maxRangeLength = -1,\n onSelectDateRange,\n openDirection = 'right',\n placeholder = 'start date – end date',\n predefinedTimesList,\n responsivePositioning = true,\n shouldFireIfInvalid = true,\n shouldShowSeconds,\n startDate,\n timezone = 'system',\n}: DateTimeRangePickerProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedStartDate, setSelectedStartDate] = useState<Date>();\n const [selectedEndDate, setSelectedEndDate] = useState<Date>();\n const [shouldShowCustomRange, setShouldShowCustomRange] = useState<boolean>(false);\n const [calendarOpenDirection, setCalendarOpenDirection] =\n useState<OpenDirection>(openDirection);\n const calendarContainerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!startDate) {\n return;\n }\n\n const startDateCopy = new Date(startDate);\n\n const hours =\n timezone === 'UTC' ? startDateCopy.getUTCHours() : startDateCopy.getHours();\n\n if (hours === 0) {\n if (timezone === 'UTC') {\n startDateCopy.setUTCHours(12);\n } else {\n startDateCopy.setHours(12);\n }\n }\n\n setSelectedStartDate(startDateCopy);\n }, [startDate, timezone]);\n\n useEffect(() => {\n if (!endDate) {\n return;\n }\n\n const endDateCopy = new Date(endDate);\n\n const hours = timezone === 'UTC' ? endDateCopy.getUTCHours() : endDateCopy.getHours();\n if (hours === 0) {\n if (timezone === 'UTC') {\n endDateCopy.setUTCHours(12);\n } else {\n endDateCopy.setHours(12);\n }\n }\n\n setSelectedEndDate(endDateCopy);\n }, [endDate, timezone]);\n\n useLayoutEffect(() => {\n if (shouldShowCustomRange && calendarContainerRef.current) {\n const rect = calendarContainerRef.current.getBoundingClientRect();\n\n if (rect.right > window.innerWidth) {\n setCalendarOpenDirection('left');\n }\n }\n }, [shouldShowCustomRange]);\n\n const closeDatePicker = useCallback((): void => {\n setIsOpen(false);\n setShouldShowCustomRange(false);\n setCalendarOpenDirection('right');\n }, []);\n\n const handleOpenChange = useCallback((isOpen: boolean): void => {\n setIsOpen(isOpen);\n\n if (!isOpen) {\n setShouldShowCustomRange(false);\n setCalendarOpenDirection('right');\n }\n }, []);\n\n const handleSelectDate = useCallback(\n (selectedDate: Date, calendarType: CalendarType): void => {\n const isMidnight =\n timezone === 'UTC'\n ? selectedDate.getUTCHours() === 0 &&\n selectedDate.getUTCMinutes() === 0 &&\n selectedDate.getUTCSeconds() === 0\n : selectedDate.getHours() === 0 &&\n selectedDate.getMinutes() === 0 &&\n selectedDate.getSeconds() === 0;\n\n if (isMidnight) {\n // set the time to 12 noon if time hasn't been set yet\n\n if (timezone === 'UTC') {\n selectedDate.setUTCHours(12);\n } else {\n selectedDate.setHours(12);\n }\n }\n\n if (calendarType === 'startDate') {\n setSelectedStartDate(selectedDate);\n\n if (selectedEndDate) {\n if (\n !shouldFireIfInvalid &&\n !isDateRangeValid({ startDate: selectedDate, endDate: selectedEndDate })\n ) {\n return;\n }\n\n onSelectDateRange(selectedDate, selectedEndDate);\n\n if (closeOnDateRangeSelected) {\n closeDatePicker();\n }\n }\n }\n\n if (calendarType === 'endDate') {\n setSelectedEndDate(selectedDate);\n\n if (selectedStartDate) {\n if (\n !shouldFireIfInvalid &&\n !isDateRangeValid({ startDate: selectedStartDate, endDate: selectedDate })\n ) {\n return;\n }\n\n onSelectDateRange(selectedStartDate, selectedDate);\n\n if (closeOnDateRangeSelected) {\n closeDatePicker();\n }\n }\n }\n },\n [\n closeDatePicker,\n closeOnDateRangeSelected,\n onSelectDateRange,\n selectedEndDate,\n selectedStartDate,\n shouldFireIfInvalid,\n timezone,\n ]\n );\n\n const onTriggerKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n }\n }, []);\n\n const shouldShowPredefinedTimes =\n predefinedTimesList !== undefined && predefinedTimesList.length > 0;\n\n return (\n <Dropdown\n onOpenChange={handleOpenChange}\n open={isOpen}\n >\n <Dropdown.Trigger\n disabled={disabled}\n onKeyDown={onTriggerKeyDown}\n >\n <DateTimeRangePickerInput\n data-testid=\"datepicker-input-container\"\n disabled={disabled}\n isActive={isOpen}\n placeholder={placeholder}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n shouldShowSeconds={shouldShowSeconds}\n timezone={timezone}\n />\n </Dropdown.Trigger>\n <NoOverflowDropdownContent\n align=\"start\"\n responsivePositioning={responsivePositioning}\n >\n <Container orientation=\"horizontal\">\n {shouldShowPredefinedTimes ? (\n <PredefinedCalendarContainer\n gap=\"none\"\n orientation=\"horizontal\"\n padding=\"none\"\n >\n <PredefinedTimes\n onSelectDateRange={onSelectDateRange}\n predefinedTimesList={predefinedTimesList}\n selectedEndDate={selectedEndDate}\n selectedStartDate={selectedStartDate}\n setEndDate={setSelectedEndDate}\n setStartDate={setSelectedStartDate}\n shouldShowCustomRange={shouldShowCustomRange}\n showCustomDateRange={setShouldShowCustomRange}\n timezone={timezone}\n />\n\n {shouldShowCustomRange && (\n <CalendarRendererContainer\n openDirection={calendarOpenDirection}\n ref={calendarContainerRef}\n >\n <TabbedCalendar\n defaultActiveTab={defaultActiveTab}\n endDate={selectedEndDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setEndDate={setSelectedEndDate}\n setSelectedDate={handleSelectDate}\n setStartDate={setSelectedStartDate}\n shouldShowSeconds={Boolean(shouldShowSeconds)}\n startDate={selectedStartDate}\n timezone={timezone}\n />\n </CalendarRendererContainer>\n )}\n </PredefinedCalendarContainer>\n ) : (\n <>\n <TabbedCalendar\n defaultActiveTab={defaultActiveTab}\n endDate={selectedEndDate}\n futureDatesDisabled={futureDatesDisabled}\n futureStartDatesDisabled={futureStartDatesDisabled}\n maxRangeLength={maxRangeLength}\n setEndDate={setSelectedEndDate}\n setSelectedDate={handleSelectDate}\n setStartDate={setSelectedStartDate}\n shouldShowSeconds={Boolean(shouldShowSeconds)}\n startDate={selectedStartDate}\n timezone={timezone}\n />\n </>\n )}\n </Container>\n </NoOverflowDropdownContent>\n </Dropdown>\n );\n};\n"],"names":["jsx","Panel","cn","styles","Container","cva","forwardRef","Dropdown","CalendarRenderer","Tabs","DateTableCell","useState","shiftToTimezone","isSameDate","areDatesWithinMaxRange","shiftFromTimezone","jsxs","isDateRangeWithinRange","StyledDropdownItem","Icon","dayjs","useEffect","useCallback","Label","TextField","ButtonGroup","startDate","endDate","isDateRangeValid","Text","useRef","useLayoutEffect","isOpen","DateTimeRangePickerInput","Fragment"],"mappings":"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"}
|
|
@@ -63,13 +63,13 @@ const copyGridElements = async ({
|
|
|
63
63
|
case "columns":
|
|
64
64
|
Array.from({ length: rowCount }, (_, index) => pageStart + index).forEach(
|
|
65
65
|
(rowIndex) => {
|
|
66
|
-
const columnList = [...selection.columns].sort();
|
|
66
|
+
const columnList = [...selection.columns].sort((a, b) => a - b);
|
|
67
67
|
columnListLoop(tbody, columnList, cell, rowIndex);
|
|
68
68
|
}
|
|
69
69
|
);
|
|
70
70
|
break;
|
|
71
71
|
case "rows":
|
|
72
|
-
[...selection.rows].sort().forEach((rowIndex) => {
|
|
72
|
+
[...selection.rows].sort((a, b) => a - b).forEach((rowIndex) => {
|
|
73
73
|
const columnList = Array.from(
|
|
74
74
|
{ length: columnCount },
|
|
75
75
|
(_, index) => pageStart + index
|