@trackunit/react-date-and-time-components 1.0.15 → 1.0.17
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 +10 -11
- package/index.esm.js +10 -11
- package/package.json +3 -3
package/index.cjs.js
CHANGED
|
@@ -93,15 +93,15 @@ const DateTime = ({ value, format, className, fromNow, withTitle, titleFormat, t
|
|
|
93
93
|
const locale = reactDateAndTimeHooks.useLocale();
|
|
94
94
|
const nowDate = React.useMemo(() => new Date(), []);
|
|
95
95
|
const date = value ? dateAndTimeUtils.toDateUtil(value) : nowDate;
|
|
96
|
-
const newDateTime = dateAndTimeUtils.formatDateUtil(date, format, timezone
|
|
97
|
-
const titleDateTime = withTitle ? dateAndTimeUtils.formatDateUtil(date, titleFormat, timezone
|
|
96
|
+
const newDateTime = dateAndTimeUtils.formatDateUtil(date, format, timezone?.id, locale);
|
|
97
|
+
const titleDateTime = withTitle ? dateAndTimeUtils.formatDateUtil(date, titleFormat, timezone?.id, locale) : undefined;
|
|
98
98
|
const getTimeSince = React.useCallback((from, to) => {
|
|
99
99
|
const same = dateAndTimeUtils.isEqualUtil(from, to);
|
|
100
100
|
if (same) {
|
|
101
101
|
return t("dateTime.instant.now");
|
|
102
102
|
}
|
|
103
|
-
return dateAndTimeUtils.timeSinceAuto(from, to, timezone
|
|
104
|
-
}, [locale, t, timezone
|
|
103
|
+
return dateAndTimeUtils.timeSinceAuto(from, to, timezone?.id, locale);
|
|
104
|
+
}, [locale, t, timezone?.id]);
|
|
105
105
|
const dateValue = React.useMemo(() => {
|
|
106
106
|
return fromNow ? getTimeSince(date, nowDate) : newDateTime;
|
|
107
107
|
}, [date, fromNow, getTimeSince, newDateTime, nowDate]);
|
|
@@ -169,7 +169,7 @@ const DayPicker = ({ onDaySelect, disabledDays, selectedDays, language, classNam
|
|
|
169
169
|
* @returns {JSX.Element} DayRangePicker component
|
|
170
170
|
*/
|
|
171
171
|
const DayRangePicker = ({ onRangeSelect, selectedDays, disabledDays, dataTestId, language, className, max, showQuickOptions, timezone, onClose, }) => {
|
|
172
|
-
const [newRange, setNewRange] = React.useState(selectedDays
|
|
172
|
+
const [newRange, setNewRange] = React.useState(selectedDays ?? { from: undefined, to: undefined });
|
|
173
173
|
const [t] = useTranslation();
|
|
174
174
|
const locale = useLocale(language);
|
|
175
175
|
React.useEffect(() => {
|
|
@@ -287,7 +287,7 @@ const DayRangePickerPopover = ({ interval = { from: undefined, to: undefined },
|
|
|
287
287
|
onRangeSelect(range);
|
|
288
288
|
}
|
|
289
289
|
}, [onRangeSelect]);
|
|
290
|
-
return (jsxRuntime.jsxs(reactComponents.Popover, { placement: placement, children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: jsxRuntime.jsx(reactComponents.Button, { className: className, dataTestId: dataTestId
|
|
290
|
+
return (jsxRuntime.jsxs(reactComponents.Popover, { placement: placement, children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: jsxRuntime.jsx(reactComponents.Button, { className: className, dataTestId: dataTestId ?? "show-date-range", disabled: disabled, fullWidth: fullwidth, size: size, suffix: jsxRuntime.jsx(reactComponents.Icon, { ariaLabel: t("dayRangePickerPopover.icon.tooltip.calendar"), name: "Calendar", size: "small" }), variant: variant, children: buttonContent }) }), jsxRuntime.jsx(reactComponents.PopoverContent, { children: close => (jsxRuntime.jsx(reactComponents.Card, { className: "min-w-min p-4", dataTestId: "range-popover-list", children: jsxRuntime.jsx(DayRangePicker, { disabledDays: disabledDays, language: language || "en", max: max, onClose: close, onRangeSelect: handleOnRangeSelect, selectedDays: interval, showQuickOptions: showQuickOptions, timezone: timezone }) })) })] }));
|
|
291
291
|
};
|
|
292
292
|
|
|
293
293
|
const cvaTimelineElement = cssClassVarianceUtilities.cvaMerge([
|
|
@@ -378,7 +378,6 @@ const cvaTimelineElementTime = cssClassVarianceUtilities.cvaMerge([
|
|
|
378
378
|
* @returns {JSX.Element} Timeline component
|
|
379
379
|
*/
|
|
380
380
|
const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, toggleButton, }) => {
|
|
381
|
-
var _a;
|
|
382
381
|
const ref = React.useRef(null);
|
|
383
382
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
384
383
|
const { formatDate, formatRange } = reactDateAndTimeHooks.useDateAndTime();
|
|
@@ -389,9 +388,9 @@ const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, t
|
|
|
389
388
|
const childProps = React.isValidElement(firstChild) ? firstChild.props : {};
|
|
390
389
|
const lastChild = remainingChildren.pop();
|
|
391
390
|
const middleChildren = remainingChildren;
|
|
392
|
-
const renderToggleButton = () => (jsxRuntime.jsxs("div", { className: cvaTimelineElement(), children: [
|
|
391
|
+
const renderToggleButton = () => (jsxRuntime.jsxs("div", { className: cvaTimelineElement(), children: [childProps?.date ? (jsxRuntime.jsx("div", { className: cvaTimelineElementTime({
|
|
393
392
|
width: hourCycle === "h12" || hourCycle === "h11" ? "large" : "small",
|
|
394
|
-
}) })) : null, jsxRuntime.jsx("div", { className: cvaDotWrapper(), children: jsxRuntime.jsx("div", { className: cvaLine({ lineStyle: childProps
|
|
393
|
+
}) })) : null, jsxRuntime.jsx("div", { className: cvaDotWrapper(), children: jsxRuntime.jsx("div", { className: cvaLine({ lineStyle: childProps?.lineStyle }) }) }), jsxRuntime.jsxs("div", { className: "flex text-sm text-secondary-500 cursor-pointer items-center min-h-8 hover:text-secondary-600", "data-testid": "timeline-toggle-btn", onClick: () => setIsOpen(!isOpen), children: [jsxRuntime.jsx(reactComponents.Icon, { className: cvaToggleBtnIcon({ rotated: isOpen }), name: "ChevronDown", size: "small" }), jsxRuntime.jsx("span", { children: isOpen ? toggleButton?.collapsedLabel : toggleButton?.expandedLabel })] })] }));
|
|
395
394
|
const renderDateHeader = () => {
|
|
396
395
|
if (!dateHeader) {
|
|
397
396
|
return null;
|
|
@@ -402,7 +401,7 @@ const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, t
|
|
|
402
401
|
const { date, dateRange, showTime } = dateHeader;
|
|
403
402
|
return (jsxRuntime.jsx("div", { className: "pb-4", "data-testid": "timeline-date-header", children: date ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(reactComponents.Text, { size: "medium", type: "span", weight: "thick", children: formatDate(date, { selectFormat: !showTime ? "dateOnly" : undefined }) }), jsxRuntime.jsx(reactComponents.Text, { className: "text-secondary-500", size: "medium", type: "span", weight: "thick", children: ` (${dateAndTimeUtils.timeSinceAuto(date, new Date())})` })] })) : (jsxRuntime.jsx(reactComponents.Text, { className: "pr-1", size: "medium", type: "span", weight: "thick", children: formatRange(dateRange, { dateStyle: !showTime ? "medium" : undefined }) })) }));
|
|
404
403
|
};
|
|
405
|
-
return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, children: [renderDateHeader(), customHeader ? jsxRuntime.jsx("div", { className: "pb-4 font-semibold text-sm", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxRuntime.jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxRuntime.jsxs("div", { "aria-hidden": !isOpen, className: "transition-all duration-300 overflow-hidden", ref: ref, style: { height: isOpen ? `${
|
|
404
|
+
return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, children: [renderDateHeader(), customHeader ? jsxRuntime.jsx("div", { className: "pb-4 font-semibold text-sm", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxRuntime.jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxRuntime.jsxs("div", { "aria-hidden": !isOpen, className: "transition-all duration-300 overflow-hidden", ref: ref, style: { height: isOpen ? `${ref.current?.scrollHeight}px` : "0px" }, children: [jsxRuntime.jsx("div", {}), middleChildren, jsxRuntime.jsx("div", {})] }), lastChild] })) : (jsxRuntime.jsx("div", { children: children }))] }));
|
|
406
405
|
};
|
|
407
406
|
|
|
408
407
|
/**
|
|
@@ -438,7 +437,7 @@ const renderDate = (formattedDate, locale) => {
|
|
|
438
437
|
return (jsxRuntime.jsx("div", { className: "pt-2 items-center", children: timelineElementTime(formattedDate, locale) }));
|
|
439
438
|
};
|
|
440
439
|
const renderDot = (customDot, isHovered, selected) => {
|
|
441
|
-
return
|
|
440
|
+
return customDot?.name
|
|
442
441
|
? customDotElement(customDot.name, isHovered, selected, customDot.color)
|
|
443
442
|
: defaultDot(isHovered, selected);
|
|
444
443
|
};
|
package/index.esm.js
CHANGED
|
@@ -91,15 +91,15 @@ const DateTime = ({ value, format, className, fromNow, withTitle, titleFormat, t
|
|
|
91
91
|
const locale = useLocale$1();
|
|
92
92
|
const nowDate = useMemo(() => new Date(), []);
|
|
93
93
|
const date = value ? toDateUtil(value) : nowDate;
|
|
94
|
-
const newDateTime = formatDateUtil(date, format, timezone
|
|
95
|
-
const titleDateTime = withTitle ? formatDateUtil(date, titleFormat, timezone
|
|
94
|
+
const newDateTime = formatDateUtil(date, format, timezone?.id, locale);
|
|
95
|
+
const titleDateTime = withTitle ? formatDateUtil(date, titleFormat, timezone?.id, locale) : undefined;
|
|
96
96
|
const getTimeSince = useCallback((from, to) => {
|
|
97
97
|
const same = isEqualUtil(from, to);
|
|
98
98
|
if (same) {
|
|
99
99
|
return t("dateTime.instant.now");
|
|
100
100
|
}
|
|
101
|
-
return timeSinceAuto(from, to, timezone
|
|
102
|
-
}, [locale, t, timezone
|
|
101
|
+
return timeSinceAuto(from, to, timezone?.id, locale);
|
|
102
|
+
}, [locale, t, timezone?.id]);
|
|
103
103
|
const dateValue = useMemo(() => {
|
|
104
104
|
return fromNow ? getTimeSince(date, nowDate) : newDateTime;
|
|
105
105
|
}, [date, fromNow, getTimeSince, newDateTime, nowDate]);
|
|
@@ -167,7 +167,7 @@ const DayPicker = ({ onDaySelect, disabledDays, selectedDays, language, classNam
|
|
|
167
167
|
* @returns {JSX.Element} DayRangePicker component
|
|
168
168
|
*/
|
|
169
169
|
const DayRangePicker = ({ onRangeSelect, selectedDays, disabledDays, dataTestId, language, className, max, showQuickOptions, timezone, onClose, }) => {
|
|
170
|
-
const [newRange, setNewRange] = useState(selectedDays
|
|
170
|
+
const [newRange, setNewRange] = useState(selectedDays ?? { from: undefined, to: undefined });
|
|
171
171
|
const [t] = useTranslation();
|
|
172
172
|
const locale = useLocale(language);
|
|
173
173
|
useEffect(() => {
|
|
@@ -285,7 +285,7 @@ const DayRangePickerPopover = ({ interval = { from: undefined, to: undefined },
|
|
|
285
285
|
onRangeSelect(range);
|
|
286
286
|
}
|
|
287
287
|
}, [onRangeSelect]);
|
|
288
|
-
return (jsxs(Popover, { placement: placement, children: [jsx(PopoverTrigger, { children: jsx(Button, { className: className, dataTestId: dataTestId
|
|
288
|
+
return (jsxs(Popover, { placement: placement, children: [jsx(PopoverTrigger, { children: jsx(Button, { className: className, dataTestId: dataTestId ?? "show-date-range", disabled: disabled, fullWidth: fullwidth, size: size, suffix: jsx(Icon, { ariaLabel: t("dayRangePickerPopover.icon.tooltip.calendar"), name: "Calendar", size: "small" }), variant: variant, children: buttonContent }) }), jsx(PopoverContent, { children: close => (jsx(Card, { className: "min-w-min p-4", dataTestId: "range-popover-list", children: jsx(DayRangePicker, { disabledDays: disabledDays, language: language || "en", max: max, onClose: close, onRangeSelect: handleOnRangeSelect, selectedDays: interval, showQuickOptions: showQuickOptions, timezone: timezone }) })) })] }));
|
|
289
289
|
};
|
|
290
290
|
|
|
291
291
|
const cvaTimelineElement = cvaMerge([
|
|
@@ -376,7 +376,6 @@ const cvaTimelineElementTime = cvaMerge([
|
|
|
376
376
|
* @returns {JSX.Element} Timeline component
|
|
377
377
|
*/
|
|
378
378
|
const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, toggleButton, }) => {
|
|
379
|
-
var _a;
|
|
380
379
|
const ref = useRef(null);
|
|
381
380
|
const [isOpen, setIsOpen] = useState(false);
|
|
382
381
|
const { formatDate, formatRange } = useDateAndTime();
|
|
@@ -387,9 +386,9 @@ const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, t
|
|
|
387
386
|
const childProps = React.isValidElement(firstChild) ? firstChild.props : {};
|
|
388
387
|
const lastChild = remainingChildren.pop();
|
|
389
388
|
const middleChildren = remainingChildren;
|
|
390
|
-
const renderToggleButton = () => (jsxs("div", { className: cvaTimelineElement(), children: [
|
|
389
|
+
const renderToggleButton = () => (jsxs("div", { className: cvaTimelineElement(), children: [childProps?.date ? (jsx("div", { className: cvaTimelineElementTime({
|
|
391
390
|
width: hourCycle === "h12" || hourCycle === "h11" ? "large" : "small",
|
|
392
|
-
}) })) : null, jsx("div", { className: cvaDotWrapper(), children: jsx("div", { className: cvaLine({ lineStyle: childProps
|
|
391
|
+
}) })) : null, jsx("div", { className: cvaDotWrapper(), children: jsx("div", { className: cvaLine({ lineStyle: childProps?.lineStyle }) }) }), jsxs("div", { className: "flex text-sm text-secondary-500 cursor-pointer items-center min-h-8 hover:text-secondary-600", "data-testid": "timeline-toggle-btn", onClick: () => setIsOpen(!isOpen), children: [jsx(Icon, { className: cvaToggleBtnIcon({ rotated: isOpen }), name: "ChevronDown", size: "small" }), jsx("span", { children: isOpen ? toggleButton?.collapsedLabel : toggleButton?.expandedLabel })] })] }));
|
|
393
392
|
const renderDateHeader = () => {
|
|
394
393
|
if (!dateHeader) {
|
|
395
394
|
return null;
|
|
@@ -400,7 +399,7 @@ const Timeline = ({ className, dataTestId, children, dateHeader, customHeader, t
|
|
|
400
399
|
const { date, dateRange, showTime } = dateHeader;
|
|
401
400
|
return (jsx("div", { className: "pb-4", "data-testid": "timeline-date-header", children: date ? (jsxs(Fragment, { children: [jsx(Text, { size: "medium", type: "span", weight: "thick", children: formatDate(date, { selectFormat: !showTime ? "dateOnly" : undefined }) }), jsx(Text, { className: "text-secondary-500", size: "medium", type: "span", weight: "thick", children: ` (${timeSinceAuto(date, new Date())})` })] })) : (jsx(Text, { className: "pr-1", size: "medium", type: "span", weight: "thick", children: formatRange(dateRange, { dateStyle: !showTime ? "medium" : undefined }) })) }));
|
|
402
401
|
};
|
|
403
|
-
return (jsxs("div", { className: className, "data-testid": dataTestId, children: [renderDateHeader(), customHeader ? jsx("div", { className: "pb-4 font-semibold text-sm", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxs("div", { "aria-hidden": !isOpen, className: "transition-all duration-300 overflow-hidden", ref: ref, style: { height: isOpen ? `${
|
|
402
|
+
return (jsxs("div", { className: className, "data-testid": dataTestId, children: [renderDateHeader(), customHeader ? jsx("div", { className: "pb-4 font-semibold text-sm", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxs("div", { "aria-hidden": !isOpen, className: "transition-all duration-300 overflow-hidden", ref: ref, style: { height: isOpen ? `${ref.current?.scrollHeight}px` : "0px" }, children: [jsx("div", {}), middleChildren, jsx("div", {})] }), lastChild] })) : (jsx("div", { children: children }))] }));
|
|
404
403
|
};
|
|
405
404
|
|
|
406
405
|
/**
|
|
@@ -436,7 +435,7 @@ const renderDate = (formattedDate, locale) => {
|
|
|
436
435
|
return (jsx("div", { className: "pt-2 items-center", children: timelineElementTime(formattedDate, locale) }));
|
|
437
436
|
};
|
|
438
437
|
const renderDot = (customDot, isHovered, selected) => {
|
|
439
|
-
return
|
|
438
|
+
return customDot?.name
|
|
440
439
|
? customDotElement(customDot.name, isHovered, selected, customDot.color)
|
|
441
440
|
: defaultDot(isHovered, selected);
|
|
442
441
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/react-date-and-time-components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"repository": "https://github.com/Trackunit/manager",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"engines": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"date-fns": "^2.30.0",
|
|
12
12
|
"tailwind-merge": "^2.0.0",
|
|
13
13
|
"react": "18.3.1",
|
|
14
|
-
"@trackunit/react-components": "^1.0
|
|
15
|
-
"@trackunit/react-date-and-time-hooks": "^1.0.
|
|
14
|
+
"@trackunit/react-components": "^1.1.0",
|
|
15
|
+
"@trackunit/react-date-and-time-hooks": "^1.0.8",
|
|
16
16
|
"@trackunit/react-core-hooks": "^1.0.5",
|
|
17
17
|
"@trackunit/date-and-time-utils": "^1.0.1",
|
|
18
18
|
"@trackunit/css-class-variance-utilities": "^1.0.1",
|