@trackunit/react-date-and-time-components 2.4.4 → 2.4.7-alpha-770d9994af7.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
@@ -712,7 +712,9 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
712
712
  return filterTemporalPeriodsInRange({ temporalPeriods: defaultCombinations, maxDaysInRange });
713
713
  }, [initialDateRangeOptions, filterTemporalPeriodsInRange, allowedDirection, maxDaysInRange]);
714
714
  const [temporalPeriods, setTemporalPeriods] = react.useState(defaultTemporalPeriods);
715
- const [dateRangeSearchValue, setDateRangeSearchValue] = react.useState();
715
+ // Starts as an empty string rather than undefined: clearing the search would otherwise switch the
716
+ // input from uncontrolled to controlled, which React warns about.
717
+ const [dateRangeSearchValue, setDateRangeSearchValue] = react.useState("");
716
718
  const [selectedRange, setSelectedRange] = react.useState();
717
719
  const currentSelectedRange = react.useMemo(() => {
718
720
  // Internal selected range takes precedence
@@ -787,7 +789,7 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
787
789
  onRangeSelect(_selectedDateRange);
788
790
  }, [onRangeSelect, handleReset]);
789
791
  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 => {
790
- return !isCustomDateRangeOpen ? (jsxRuntime.jsxs(reactComponents.MenuList, { 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"
792
+ 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"
791
793
  ? t("input.placeholder.customRange.last")
792
794
  : 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
793
795
  ? {
package/index.esm.js CHANGED
@@ -5,7 +5,7 @@ import { useLocale, useHourCycle, useTimezone, useDateAndTime } from '@trackunit
5
5
  import { truthy, DateTimeFormat, nonNullable, objectKeys } from '@trackunit/shared-utils';
6
6
  import { useMemo, useCallback, useState, useEffect, useRef, Children, isValidElement } from 'react';
7
7
  import { twMerge } from 'tailwind-merge';
8
- import { Tooltip, Button, MenuItem, Icon, Popover, PopoverTrigger, PopoverContent, MenuList, MenuDivider, Card, Text } from '@trackunit/react-components';
8
+ import { Tooltip, Button, MenuItem, Icon, Popover, PopoverTrigger, PopoverContent, MenuContent, MenuDivider, Card, Text } from '@trackunit/react-components';
9
9
  import Calendar from 'react-calendar';
10
10
  import { Search } from '@trackunit/react-form-components';
11
11
  import { cvaMerge } from '@trackunit/css-class-variance-utilities';
@@ -710,7 +710,9 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
710
710
  return filterTemporalPeriodsInRange({ temporalPeriods: defaultCombinations, maxDaysInRange });
711
711
  }, [initialDateRangeOptions, filterTemporalPeriodsInRange, allowedDirection, maxDaysInRange]);
712
712
  const [temporalPeriods, setTemporalPeriods] = useState(defaultTemporalPeriods);
713
- const [dateRangeSearchValue, setDateRangeSearchValue] = useState();
713
+ // Starts as an empty string rather than undefined: clearing the search would otherwise switch the
714
+ // input from uncontrolled to controlled, which React warns about.
715
+ const [dateRangeSearchValue, setDateRangeSearchValue] = useState("");
714
716
  const [selectedRange, setSelectedRange] = useState();
715
717
  const currentSelectedRange = useMemo(() => {
716
718
  // Internal selected range takes precedence
@@ -785,7 +787,7 @@ const DayRangeSelect = ({ className, "data-testid": dataTestId, disabled = false
785
787
  onRangeSelect(_selectedDateRange);
786
788
  }, [onRangeSelect, handleReset]);
787
789
  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 => {
788
- return !isCustomDateRangeOpen ? (jsxs(MenuList, { 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"
790
+ 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"
789
791
  ? t("input.placeholder.customRange.last")
790
792
  : 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
791
793
  ? {
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@trackunit/react-date-and-time-components",
3
- "version": "2.4.4",
3
+ "version": "2.4.7-alpha-770d9994af7.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": "2.5.4",
11
- "@trackunit/date-and-time-utils": "1.14.1",
12
- "@trackunit/react-date-and-time-hooks": "2.4.4",
13
- "@trackunit/css-class-variance-utilities": "1.14.1",
14
- "@trackunit/ui-icons": "1.14.1",
15
- "@trackunit/shared-utils": "1.16.1",
16
- "@trackunit/i18n-library-translation": "2.3.1",
17
- "@trackunit/react-form-components": "2.4.4",
10
+ "@trackunit/react-components": "2.6.2-alpha-770d9994af7.0",
11
+ "@trackunit/date-and-time-utils": "1.14.3-alpha-770d9994af7.0",
12
+ "@trackunit/react-date-and-time-hooks": "2.4.7-alpha-770d9994af7.0",
13
+ "@trackunit/css-class-variance-utilities": "1.14.3-alpha-770d9994af7.0",
14
+ "@trackunit/ui-icons": "1.14.3-alpha-770d9994af7.0",
15
+ "@trackunit/shared-utils": "1.16.3-alpha-770d9994af7.0",
16
+ "@trackunit/i18n-library-translation": "2.3.4-alpha-770d9994af7.0",
17
+ "@trackunit/react-form-components": "2.4.7-alpha-770d9994af7.0",
18
18
  "string-ts": "^2.0.0",
19
19
  "tailwind-merge": "^2.0.0",
20
20
  "react-calendar": "^6.0.0"