@trackunit/react-date-and-time-components 2.10.17 → 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.10.17",
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.8.10",
11
- "@trackunit/date-and-time-utils": "1.17.10",
12
- "@trackunit/react-date-and-time-hooks": "2.10.16",
13
- "@trackunit/css-class-variance-utilities": "2.3.10",
14
- "@trackunit/ui-icons": "1.17.9",
15
- "@trackunit/shared-utils": "1.19.10",
16
- "@trackunit/i18n-library-translation": "2.8.11",
17
- "@trackunit/react-form-components": "2.10.17",
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 {};