@trackunit/react-date-and-time-components 2.10.16 → 2.11.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/index.cjs.js
CHANGED
|
@@ -682,7 +682,7 @@ const isTemporalDirection = (direction) => {
|
|
|
682
682
|
* ```
|
|
683
683
|
* @param {DayRangeSelectProps} props - The props for the DayRangeSelect component
|
|
684
684
|
*/
|
|
685
|
-
const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false, selectedDateRange, onRangeSelect, allowedDirection = undefined, initialDateRangeOptions, showDateRangeSearch = true, showResetButton = true, showCustomDateRangeOption = true, timezone, maxDaysInRange, disabledDays, size = "medium", fullWidth = false, actionButton, popoverPlacement = "bottom-start", }) => {
|
|
685
|
+
const DayRangeSelect = ({ className, "data-testid": dataTestId, style, ref, disabled = false, selectedDateRange, onRangeSelect, allowedDirection = undefined, initialDateRangeOptions, showDateRangeSearch = true, showResetButton = true, showCustomDateRangeOption = true, timezone, maxDaysInRange, disabledDays, size = "medium", fullWidth = false, actionButton, popoverPlacement = "bottom-start", }) => {
|
|
686
686
|
const [t] = useTranslation();
|
|
687
687
|
const parseTemporalPeriodFromText = useParseTemporalPeriodFromText();
|
|
688
688
|
const filterTemporalPeriodsInRange = useFilterTemporalPeriodsInRange();
|
|
@@ -779,7 +779,7 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
|
|
|
779
779
|
setSelectedRange(_selectedDateRange);
|
|
780
780
|
onRangeSelect(_selectedDateRange);
|
|
781
781
|
}, [onRangeSelect, handleReset]);
|
|
782
|
-
return (jsxRuntime.jsxs(reactComponents.Popover, { onOpenStateChange: state => !state && setIsCustomDateRangeOpen(false), placement: popoverPlacement, children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: !actionButton ? (jsxRuntime.jsx(reactComponents.Button, { className: cvaTriggerButton({ active: !!selectedDateRange, className }), "data-testid": dataTestId, disabled: disabled, fullWidth: fullWidth, prefix: jsxRuntime.jsx(reactComponents.Icon, { ariaLabel: t("input.icon.tooltip.calendar"), color: disabled ? "neutral" : selectedDateRange ? "primary" : undefined, name: "Calendar", size: size === "large" ? "medium" : "small" }), size: size, variant: "secondary", children: popoverTriggerLabel ?? t("trigger.selectDateRange") })) : (jsxRuntime.jsx("div", { children: actionButton })) }), jsxRuntime.jsx(reactComponents.PopoverContent, { "data-testid": dataTestId ? `${dataTestId}-popover-content` : undefined, children: closeMenu => {
|
|
782
|
+
return (jsxRuntime.jsxs(reactComponents.Popover, { onOpenStateChange: state => !state && setIsCustomDateRangeOpen(false), placement: popoverPlacement, children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { ref: ref, children: !actionButton ? (jsxRuntime.jsx(reactComponents.Button, { className: cvaTriggerButton({ active: !!selectedDateRange, className }), "data-testid": dataTestId, disabled: disabled, fullWidth: fullWidth, prefix: jsxRuntime.jsx(reactComponents.Icon, { ariaLabel: t("input.icon.tooltip.calendar"), color: disabled ? "neutral" : selectedDateRange ? "primary" : undefined, name: "Calendar", size: size === "large" ? "medium" : "small" }), size: size, style: style, variant: "secondary", children: popoverTriggerLabel ?? t("trigger.selectDateRange") })) : (jsxRuntime.jsx("div", { className: className, "data-testid": dataTestId, style: style, children: actionButton })) }), jsxRuntime.jsx(reactComponents.PopoverContent, { "data-testid": dataTestId ? `${dataTestId}-popover-content` : undefined, children: closeMenu => {
|
|
783
783
|
return !isCustomDateRangeOpen ? (jsxRuntime.jsxs(reactComponents.MenuContent, { className: "min-w-[280px]", children: [showPopoverHeader ? (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [showDateRangeSearch ? (jsxRuntime.jsx(reactFormComponents.Search, { className: "w-full", "data-testid": dataTestId ? `${dataTestId}-search-input` : undefined, onChange: event => handleDateRangeSearch(event.target.value), onClear: () => handleDateRangeSearch(""), placeholder: allowedDirection === "last"
|
|
784
784
|
? t("input.placeholder.customRange.last")
|
|
785
785
|
: t("input.placeholder.customRange.next"), value: dateRangeSearchValue })) : null, showResetButton ? (jsxRuntime.jsx(reactComponents.Button, { className: "ml-auto", "data-testid": dataTestId ? `${dataTestId}-reset-button` : undefined, disabled: !selectedDateRange, onClick: handleReset, size: "small", variant: "ghost", children: t("layout.actions.reset") })) : null] }), jsxRuntime.jsx("hr", { className: "my-1 border-neutral-200", role: "separator" })] })) : null, jsxRuntime.jsx(DayRangeSelectOptions, { "data-testid": dataTestId ? `${dataTestId}-options` : undefined, onSelect: value => handleOptionsSelect(value, closeMenu), selectedDateRange: currentSelectedRange, temporalPeriods: temporalPeriods }), showCustomDateRangeOption ? (jsxRuntime.jsxs("section", { children: [jsxRuntime.jsx(reactComponents.MenuDivider, {}), jsxRuntime.jsx(reactComponents.MenuItem, { "data-testid": dataTestId ? `${dataTestId}-custom-range` : undefined, label: t("trigger.customRange"), onClick: () => setIsCustomDateRangeOpen(true), selected: isCustomDateRangeSelected, suffix: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isCustomDateRangeSelected ? jsxRuntime.jsx(reactComponents.Icon, { color: "primary", name: "Check", size: "small" }) : null, jsxRuntime.jsx(reactComponents.Icon, { name: "ChevronRight", size: "small" })] }) })] })) : null] })) : (jsxRuntime.jsx(reactComponents.Card, { children: jsxRuntime.jsx(DayRangePicker, { cancelButtonLabel: t("layout.actions.back"), disabledDays: customDateRangeDisabledDays, language: "en", onClose: () => setIsCustomDateRangeOpen(false), onRangeSelect: dateRange => handleCustomDateRangeSelect(dateRange
|
|
@@ -961,7 +961,7 @@ const timeTemporalFormat = { selectFormat: "timeOnly", timeFormat: "short" };
|
|
|
961
961
|
* @param {TimeLineElementProps} props the props
|
|
962
962
|
* @returns {ReactElement} component
|
|
963
963
|
*/
|
|
964
|
-
const TimelineElement = ({ date, children, className, style, "data-testid": dataTestId = "timeline-element", header, onClick, actionButton, selected = false, customDot, lineStyle = "solid", hoverBehavior = false, timestampFormat = "time", }) => {
|
|
964
|
+
const TimelineElement = ({ date, children, className, style, "data-testid": dataTestId = "timeline-element", header, onClick, actionButton, selected = false, customDot, lineStyle = "solid", hoverBehavior = false, timestampFormat = "time", ref, }) => {
|
|
965
965
|
const [isHovered, setIsHovered] = react.useState(false);
|
|
966
966
|
const { formatDate } = reactDateAndTimeHooks.useDateAndTime();
|
|
967
967
|
const locale = reactDateAndTimeHooks.useLocale();
|
|
@@ -987,7 +987,7 @@ const TimelineElement = ({ date, children, className, style, "data-testid": data
|
|
|
987
987
|
setIsHovered(false);
|
|
988
988
|
}
|
|
989
989
|
};
|
|
990
|
-
return (jsxRuntime.jsxs("div", { className: cvaTimelineElement({ className, selected, hoverBehavior }), "data-date": date, "data-testid": dataTestId, onClick: onClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: style, children: [renderDate(formattedDate, locale), jsxRuntime.jsxs("div", { className: cvaDotWrapper(), children: [renderDot(customDot, isHovered, selected), jsxRuntime.jsx("div", { className: cvaLine({ lineStyle }), "data-testid": `${dataTestId}-line` })] }), jsxRuntime.jsxs("div", { className: "pb-2 pt-2", children: [renderHeader(header, dataTestId), renderChildren(children), renderActionButton(actionButton)] })] }));
|
|
990
|
+
return (jsxRuntime.jsxs("div", { className: cvaTimelineElement({ className, selected, hoverBehavior }), "data-date": date, "data-testid": dataTestId, onClick: onClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, ref: ref, style: style, children: [renderDate(formattedDate, locale), jsxRuntime.jsxs("div", { className: cvaDotWrapper(), children: [renderDot(customDot, isHovered, selected), jsxRuntime.jsx("div", { className: cvaLine({ lineStyle }), "data-testid": `${dataTestId}-line` })] }), jsxRuntime.jsxs("div", { className: "pb-2 pt-2", children: [renderHeader(header, dataTestId), renderChildren(children), renderActionButton(actionButton)] })] }));
|
|
991
991
|
};
|
|
992
992
|
const renderDate = (formattedDate, locale) => {
|
|
993
993
|
if (!formattedDate) {
|
package/index.esm.js
CHANGED
|
@@ -680,7 +680,7 @@ const isTemporalDirection = (direction) => {
|
|
|
680
680
|
* ```
|
|
681
681
|
* @param {DayRangeSelectProps} props - The props for the DayRangeSelect component
|
|
682
682
|
*/
|
|
683
|
-
const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false, selectedDateRange, onRangeSelect, allowedDirection = undefined, initialDateRangeOptions, showDateRangeSearch = true, showResetButton = true, showCustomDateRangeOption = true, timezone, maxDaysInRange, disabledDays, size = "medium", fullWidth = false, actionButton, popoverPlacement = "bottom-start", }) => {
|
|
683
|
+
const DayRangeSelect = ({ className, "data-testid": dataTestId, style, ref, disabled = false, selectedDateRange, onRangeSelect, allowedDirection = undefined, initialDateRangeOptions, showDateRangeSearch = true, showResetButton = true, showCustomDateRangeOption = true, timezone, maxDaysInRange, disabledDays, size = "medium", fullWidth = false, actionButton, popoverPlacement = "bottom-start", }) => {
|
|
684
684
|
const [t] = useTranslation();
|
|
685
685
|
const parseTemporalPeriodFromText = useParseTemporalPeriodFromText();
|
|
686
686
|
const filterTemporalPeriodsInRange = useFilterTemporalPeriodsInRange();
|
|
@@ -777,7 +777,7 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
|
|
|
777
777
|
setSelectedRange(_selectedDateRange);
|
|
778
778
|
onRangeSelect(_selectedDateRange);
|
|
779
779
|
}, [onRangeSelect, handleReset]);
|
|
780
|
-
return (jsxs(Popover, { onOpenStateChange: state => !state && setIsCustomDateRangeOpen(false), placement: popoverPlacement, children: [jsx(PopoverTrigger, { children: !actionButton ? (jsx(Button, { className: cvaTriggerButton({ active: !!selectedDateRange, className }), "data-testid": dataTestId, disabled: disabled, fullWidth: fullWidth, prefix: jsx(Icon, { ariaLabel: t("input.icon.tooltip.calendar"), color: disabled ? "neutral" : selectedDateRange ? "primary" : undefined, name: "Calendar", size: size === "large" ? "medium" : "small" }), size: size, variant: "secondary", children: popoverTriggerLabel ?? t("trigger.selectDateRange") })) : (jsx("div", { children: actionButton })) }), jsx(PopoverContent, { "data-testid": dataTestId ? `${dataTestId}-popover-content` : undefined, children: closeMenu => {
|
|
780
|
+
return (jsxs(Popover, { onOpenStateChange: state => !state && setIsCustomDateRangeOpen(false), placement: popoverPlacement, children: [jsx(PopoverTrigger, { ref: ref, children: !actionButton ? (jsx(Button, { className: cvaTriggerButton({ active: !!selectedDateRange, className }), "data-testid": dataTestId, disabled: disabled, fullWidth: fullWidth, prefix: jsx(Icon, { ariaLabel: t("input.icon.tooltip.calendar"), color: disabled ? "neutral" : selectedDateRange ? "primary" : undefined, name: "Calendar", size: size === "large" ? "medium" : "small" }), size: size, style: style, variant: "secondary", children: popoverTriggerLabel ?? t("trigger.selectDateRange") })) : (jsx("div", { className: className, "data-testid": dataTestId, style: style, children: actionButton })) }), jsx(PopoverContent, { "data-testid": dataTestId ? `${dataTestId}-popover-content` : undefined, children: closeMenu => {
|
|
781
781
|
return !isCustomDateRangeOpen ? (jsxs(MenuContent, { className: "min-w-[280px]", children: [showPopoverHeader ? (jsxs("div", { children: [jsxs("div", { className: "flex flex-col gap-1", children: [showDateRangeSearch ? (jsx(Search, { className: "w-full", "data-testid": dataTestId ? `${dataTestId}-search-input` : undefined, onChange: event => handleDateRangeSearch(event.target.value), onClear: () => handleDateRangeSearch(""), placeholder: allowedDirection === "last"
|
|
782
782
|
? t("input.placeholder.customRange.last")
|
|
783
783
|
: t("input.placeholder.customRange.next"), value: dateRangeSearchValue })) : null, showResetButton ? (jsx(Button, { className: "ml-auto", "data-testid": dataTestId ? `${dataTestId}-reset-button` : undefined, disabled: !selectedDateRange, onClick: handleReset, size: "small", variant: "ghost", children: t("layout.actions.reset") })) : null] }), jsx("hr", { className: "my-1 border-neutral-200", role: "separator" })] })) : null, jsx(DayRangeSelectOptions, { "data-testid": dataTestId ? `${dataTestId}-options` : undefined, onSelect: value => handleOptionsSelect(value, closeMenu), selectedDateRange: currentSelectedRange, temporalPeriods: temporalPeriods }), showCustomDateRangeOption ? (jsxs("section", { children: [jsx(MenuDivider, {}), jsx(MenuItem, { "data-testid": dataTestId ? `${dataTestId}-custom-range` : undefined, label: t("trigger.customRange"), onClick: () => setIsCustomDateRangeOpen(true), selected: isCustomDateRangeSelected, suffix: jsxs(Fragment, { children: [isCustomDateRangeSelected ? jsx(Icon, { color: "primary", name: "Check", size: "small" }) : null, jsx(Icon, { name: "ChevronRight", size: "small" })] }) })] })) : null] })) : (jsx(Card, { children: jsx(DayRangePicker, { cancelButtonLabel: t("layout.actions.back"), disabledDays: customDateRangeDisabledDays, language: "en", onClose: () => setIsCustomDateRangeOpen(false), onRangeSelect: dateRange => handleCustomDateRangeSelect(dateRange
|
|
@@ -959,7 +959,7 @@ const timeTemporalFormat = { selectFormat: "timeOnly", timeFormat: "short" };
|
|
|
959
959
|
* @param {TimeLineElementProps} props the props
|
|
960
960
|
* @returns {ReactElement} component
|
|
961
961
|
*/
|
|
962
|
-
const TimelineElement = ({ date, children, className, style, "data-testid": dataTestId = "timeline-element", header, onClick, actionButton, selected = false, customDot, lineStyle = "solid", hoverBehavior = false, timestampFormat = "time", }) => {
|
|
962
|
+
const TimelineElement = ({ date, children, className, style, "data-testid": dataTestId = "timeline-element", header, onClick, actionButton, selected = false, customDot, lineStyle = "solid", hoverBehavior = false, timestampFormat = "time", ref, }) => {
|
|
963
963
|
const [isHovered, setIsHovered] = useState(false);
|
|
964
964
|
const { formatDate } = useDateAndTime();
|
|
965
965
|
const locale = useLocale();
|
|
@@ -985,7 +985,7 @@ const TimelineElement = ({ date, children, className, style, "data-testid": data
|
|
|
985
985
|
setIsHovered(false);
|
|
986
986
|
}
|
|
987
987
|
};
|
|
988
|
-
return (jsxs("div", { className: cvaTimelineElement({ className, selected, hoverBehavior }), "data-date": date, "data-testid": dataTestId, onClick: onClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, style: style, children: [renderDate(formattedDate, locale), jsxs("div", { className: cvaDotWrapper(), children: [renderDot(customDot, isHovered, selected), jsx("div", { className: cvaLine({ lineStyle }), "data-testid": `${dataTestId}-line` })] }), jsxs("div", { className: "pb-2 pt-2", children: [renderHeader(header, dataTestId), renderChildren(children), renderActionButton(actionButton)] })] }));
|
|
988
|
+
return (jsxs("div", { className: cvaTimelineElement({ className, selected, hoverBehavior }), "data-date": date, "data-testid": dataTestId, onClick: onClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, ref: ref, style: style, children: [renderDate(formattedDate, locale), jsxs("div", { className: cvaDotWrapper(), children: [renderDot(customDot, isHovered, selected), jsx("div", { className: cvaLine({ lineStyle }), "data-testid": `${dataTestId}-line` })] }), jsxs("div", { className: "pb-2 pt-2", children: [renderHeader(header, dataTestId), renderChildren(children), renderActionButton(actionButton)] })] }));
|
|
989
989
|
};
|
|
990
990
|
const renderDate = (formattedDate, locale) => {
|
|
991
991
|
if (!formattedDate) {
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/react-date-and-time-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"repository": "https://github.com/Trackunit/manager",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=24.x"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@trackunit/react-components": "3.
|
|
11
|
-
"@trackunit/date-and-time-utils": "1.
|
|
12
|
-
"@trackunit/react-date-and-time-hooks": "2.
|
|
13
|
-
"@trackunit/css-class-variance-utilities": "2.
|
|
14
|
-
"@trackunit/ui-icons": "1.
|
|
15
|
-
"@trackunit/shared-utils": "1.
|
|
16
|
-
"@trackunit/i18n-library-translation": "2.
|
|
17
|
-
"@trackunit/react-form-components": "2.
|
|
10
|
+
"@trackunit/react-components": "3.9.0",
|
|
11
|
+
"@trackunit/date-and-time-utils": "1.18.0",
|
|
12
|
+
"@trackunit/react-date-and-time-hooks": "2.11.0",
|
|
13
|
+
"@trackunit/css-class-variance-utilities": "2.4.0",
|
|
14
|
+
"@trackunit/ui-icons": "1.18.0",
|
|
15
|
+
"@trackunit/shared-utils": "1.20.0",
|
|
16
|
+
"@trackunit/i18n-library-translation": "2.9.0",
|
|
17
|
+
"@trackunit/react-form-components": "2.11.0",
|
|
18
18
|
"string-ts": "^2.0.0",
|
|
19
19
|
"tailwind-merge": "^2.0.0",
|
|
20
20
|
"react-calendar": "^6.0.1"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DateRange } from "@trackunit/date-and-time-utils";
|
|
2
|
-
import { CommonProps, PopoverPlacement } from "@trackunit/react-components";
|
|
2
|
+
import { CommonProps, PopoverPlacement, Refable, type Styleable } from "@trackunit/react-components";
|
|
3
3
|
import { Size } from "@trackunit/shared-utils";
|
|
4
4
|
import { ReactElement } from "react";
|
|
5
5
|
import { DayRangePickerProps } from "../DayPicker/DayRangePicker";
|
|
6
6
|
import { SelectedDateRange, TemporalDirection, TemporalPeriod } from "./types";
|
|
7
|
-
export type DayRangeSelectProps = CommonProps & {
|
|
7
|
+
export type DayRangeSelectProps = CommonProps & Styleable & Refable<HTMLElement> & {
|
|
8
8
|
/**
|
|
9
9
|
* Whether the component is disabled.
|
|
10
10
|
*/
|
|
@@ -96,4 +96,4 @@ export type DayRangeSelectProps = CommonProps & {
|
|
|
96
96
|
* ```
|
|
97
97
|
* @param {DayRangeSelectProps} props - The props for the DayRangeSelect component
|
|
98
98
|
*/
|
|
99
|
-
export declare const DayRangeSelect: ({ className, "data-testid": dataTestId, disabled, selectedDateRange, onRangeSelect, allowedDirection, initialDateRangeOptions, showDateRangeSearch, showResetButton, showCustomDateRangeOption, timezone, maxDaysInRange, disabledDays, size, fullWidth, actionButton, popoverPlacement, }: DayRangeSelectProps) => import("react").JSX.Element;
|
|
99
|
+
export declare const DayRangeSelect: ({ className, "data-testid": dataTestId, style, ref, disabled, selectedDateRange, onRangeSelect, allowedDirection, initialDateRangeOptions, showDateRangeSearch, showResetButton, showCustomDateRangeOption, timezone, maxDaysInRange, disabledDays, size, fullWidth, actionButton, popoverPlacement, }: DayRangeSelectProps) => import("react").JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { CommonProps, IconColors, type Styleable } from "@trackunit/react-components";
|
|
1
|
+
import { CommonProps, IconColors, Refable, type Styleable } from "@trackunit/react-components";
|
|
2
2
|
import { IconName } from "@trackunit/ui-icons";
|
|
3
3
|
import { MouseEvent, ReactNode } from "react";
|
|
4
4
|
type TimelineElementTimestampFormat = "time" | "date" | "date-time";
|
|
5
|
-
interface TimeLineElementProps extends CommonProps, Styleable {
|
|
5
|
+
interface TimeLineElementProps extends CommonProps, Styleable, Refable<HTMLDivElement> {
|
|
6
6
|
date?: Date;
|
|
7
7
|
timestampFormat?: TimelineElementTimestampFormat;
|
|
8
8
|
header?: ReactNode;
|
|
@@ -28,5 +28,5 @@ interface TimeLineElementProps extends CommonProps, Styleable {
|
|
|
28
28
|
* @param {TimeLineElementProps} props the props
|
|
29
29
|
* @returns {ReactElement} component
|
|
30
30
|
*/
|
|
31
|
-
export declare const TimelineElement: ({ date, children, className, style, "data-testid": dataTestId, header, onClick, actionButton, selected, customDot, lineStyle, hoverBehavior, timestampFormat, }: TimeLineElementProps) => import("react").JSX.Element;
|
|
31
|
+
export declare const TimelineElement: ({ date, children, className, style, "data-testid": dataTestId, header, onClick, actionButton, selected, customDot, lineStyle, hoverBehavior, timestampFormat, ref, }: TimeLineElementProps) => import("react").JSX.Element;
|
|
32
32
|
export {};
|