@trackunit/react-date-and-time-components 1.17.14 → 1.17.16-alpha-ae1ff73fc64.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
@@ -469,7 +469,7 @@ const useFilterTemporalPeriodsInRange = () => {
469
469
  return difference(start ?? new Date(), end ?? new Date(), "day");
470
470
  }, [calculateDateRange, difference]);
471
471
  return react.useCallback(({ temporalPeriods, maxDaysInRange, }) => {
472
- if (!maxDaysInRange) {
472
+ if (maxDaysInRange === undefined || maxDaysInRange === 0) {
473
473
  return temporalPeriods;
474
474
  }
475
475
  return temporalPeriods.filter(period => {
@@ -612,7 +612,8 @@ const TEMPORAL_DIRECTIONS = ["last", "next"];
612
612
  * @param value - The value to check.
613
613
  * @returns {boolean} - Whether the value is a temporal period.
614
614
  */
615
- const isTemporalPeriod = (value) => !!value &&
615
+ const isTemporalPeriod = (value) => value !== null &&
616
+ value !== undefined &&
616
617
  typeof value === "object" &&
617
618
  "direction" in value &&
618
619
  "count" in value &&
@@ -866,7 +867,7 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
866
867
  setIsLoadingMore(true);
867
868
  // Use requestAnimationFrame to avoid layout thrashing
868
869
  requestAnimationFrame(() => {
869
- const scrollPos = ref.current?.scrollTop || 0;
870
+ const scrollPos = ref.current?.scrollTop ?? 0;
870
871
  setVisibleCount(prev => Math.min(prev + ITEMS_PER_PAGE, middleChildren.length));
871
872
  // After state update, preserve scroll position
872
873
  setTimeout(() => {
@@ -884,7 +885,7 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
884
885
  setIsLoadingMore(false);
885
886
  }
886
887
  }, [isOpen]);
887
- const renderToggleButton = () => (jsxRuntime.jsxs("div", { className: cvaTimelineElement(), children: [childProps.date ? (jsxRuntime.jsx("div", { className: cvaTimelineElementTime({
888
+ const renderToggleButton = () => (jsxRuntime.jsxs("div", { className: cvaTimelineElement(), children: [childProps.date !== undefined ? (jsxRuntime.jsx("div", { className: cvaTimelineElementTime({
888
889
  width: hourCycle === "h12" || hourCycle === "h11" ? "large" : "small",
889
890
  }) })) : null, jsxRuntime.jsx("div", { className: cvaDotWrapper(), children: jsxRuntime.jsx("div", { className: cvaLine({ lineStyle: childProps.lineStyle }) }) }), jsxRuntime.jsxs("div", { className: "min-h-8 flex cursor-pointer items-center text-sm text-neutral-500 hover:text-neutral-600", "data-testid": "timeline-toggle-btn", onClick: () => {
890
891
  if (toggleButton?.onClick) {
@@ -896,13 +897,13 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
896
897
  if (!dateHeader) {
897
898
  return null;
898
899
  }
899
- if (customHeader) {
900
+ if (customHeader !== undefined && customHeader !== null) {
900
901
  return null;
901
902
  }
902
903
  const { date, dateRange, showTime } = dateHeader;
903
904
  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-neutral-500", size: "medium", type: "span", weight: "thick", children: ` (${dateAndTimeUtils.timeSinceAuto(date, new Date(), undefined, locale)})` })] })) : (jsxRuntime.jsx(reactComponents.Text, { className: "pr-1", size: "medium", type: "span", weight: "thick", children: formatRange(dateRange, { dateStyle: !showTime ? "medium" : undefined }) })) }));
904
905
  }, [dateHeader, formatDate, formatRange, customHeader, locale]);
905
- return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, ref: refProp, children: [renderDateHeader(), customHeader ? jsxRuntime.jsx("div", { className: "text-sm font-semibold", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxRuntime.jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxRuntime.jsxs("div", { "aria-hidden": !isOpen, className: "overflow-hidden overflow-y-auto transition-all duration-300", ref: ref, children: [jsxRuntime.jsx("div", {}), visibleMiddleChildren, isOpen && visibleCount < middleChildren.length ? (jsxRuntime.jsx("div", { className: "flex justify-center py-2", onClick: e => {
906
+ return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, ref: refProp, children: [renderDateHeader(), customHeader !== undefined && customHeader !== null ? jsxRuntime.jsx("div", { className: "text-sm font-semibold", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxRuntime.jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxRuntime.jsxs("div", { "aria-hidden": !isOpen, className: "overflow-hidden overflow-y-auto transition-all duration-300", ref: ref, children: [jsxRuntime.jsx("div", {}), visibleMiddleChildren, isOpen && visibleCount < middleChildren.length ? (jsxRuntime.jsx("div", { className: "flex justify-center py-2", onClick: e => {
906
907
  e.stopPropagation(); // Prevent parent handlers from firing
907
908
  loadMoreItems();
908
909
  }, children: jsxRuntime.jsx(reactComponents.Text, { className: "cursor-pointer text-neutral-500 hover:text-neutral-600", "data-testid": "load-more-text", size: "small", type: "span", children: t("timeline.loadMore") }) })) : null, jsxRuntime.jsx("div", {})] }), lastChild] })) : (jsxRuntime.jsx("div", { children: children }))] }));
@@ -944,7 +945,7 @@ const renderDot = (customDot, isHovered, selected) => {
944
945
  : defaultDot(isHovered, selected);
945
946
  };
946
947
  const renderHeader = (header, dataTestId) => {
947
- if (!header) {
948
+ if (header === undefined || header === null) {
948
949
  return null;
949
950
  }
950
951
  if (typeof header === "string") {
@@ -953,7 +954,7 @@ const renderHeader = (header, dataTestId) => {
953
954
  return header;
954
955
  };
955
956
  const renderChildren = (children) => {
956
- if (!children) {
957
+ if (children === undefined || children === null) {
957
958
  return null;
958
959
  }
959
960
  return jsxRuntime.jsx("div", { className: "mt-0.5 content-center text-sm", children: children });
package/index.esm.js CHANGED
@@ -467,7 +467,7 @@ const useFilterTemporalPeriodsInRange = () => {
467
467
  return difference(start ?? new Date(), end ?? new Date(), "day");
468
468
  }, [calculateDateRange, difference]);
469
469
  return useCallback(({ temporalPeriods, maxDaysInRange, }) => {
470
- if (!maxDaysInRange) {
470
+ if (maxDaysInRange === undefined || maxDaysInRange === 0) {
471
471
  return temporalPeriods;
472
472
  }
473
473
  return temporalPeriods.filter(period => {
@@ -610,7 +610,8 @@ const TEMPORAL_DIRECTIONS = ["last", "next"];
610
610
  * @param value - The value to check.
611
611
  * @returns {boolean} - Whether the value is a temporal period.
612
612
  */
613
- const isTemporalPeriod = (value) => !!value &&
613
+ const isTemporalPeriod = (value) => value !== null &&
614
+ value !== undefined &&
614
615
  typeof value === "object" &&
615
616
  "direction" in value &&
616
617
  "count" in value &&
@@ -864,7 +865,7 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
864
865
  setIsLoadingMore(true);
865
866
  // Use requestAnimationFrame to avoid layout thrashing
866
867
  requestAnimationFrame(() => {
867
- const scrollPos = ref.current?.scrollTop || 0;
868
+ const scrollPos = ref.current?.scrollTop ?? 0;
868
869
  setVisibleCount(prev => Math.min(prev + ITEMS_PER_PAGE, middleChildren.length));
869
870
  // After state update, preserve scroll position
870
871
  setTimeout(() => {
@@ -882,7 +883,7 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
882
883
  setIsLoadingMore(false);
883
884
  }
884
885
  }, [isOpen]);
885
- const renderToggleButton = () => (jsxs("div", { className: cvaTimelineElement(), children: [childProps.date ? (jsx("div", { className: cvaTimelineElementTime({
886
+ const renderToggleButton = () => (jsxs("div", { className: cvaTimelineElement(), children: [childProps.date !== undefined ? (jsx("div", { className: cvaTimelineElementTime({
886
887
  width: hourCycle === "h12" || hourCycle === "h11" ? "large" : "small",
887
888
  }) })) : null, jsx("div", { className: cvaDotWrapper(), children: jsx("div", { className: cvaLine({ lineStyle: childProps.lineStyle }) }) }), jsxs("div", { className: "min-h-8 flex cursor-pointer items-center text-sm text-neutral-500 hover:text-neutral-600", "data-testid": "timeline-toggle-btn", onClick: () => {
888
889
  if (toggleButton?.onClick) {
@@ -894,13 +895,13 @@ const Timeline = ({ className, "data-testid": dataTestId, children, dateHeader,
894
895
  if (!dateHeader) {
895
896
  return null;
896
897
  }
897
- if (customHeader) {
898
+ if (customHeader !== undefined && customHeader !== null) {
898
899
  return null;
899
900
  }
900
901
  const { date, dateRange, showTime } = dateHeader;
901
902
  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-neutral-500", size: "medium", type: "span", weight: "thick", children: ` (${timeSinceAuto(date, new Date(), undefined, locale)})` })] })) : (jsx(Text, { className: "pr-1", size: "medium", type: "span", weight: "thick", children: formatRange(dateRange, { dateStyle: !showTime ? "medium" : undefined }) })) }));
902
903
  }, [dateHeader, formatDate, formatRange, customHeader, locale]);
903
- return (jsxs("div", { className: className, "data-testid": dataTestId, ref: refProp, children: [renderDateHeader(), customHeader ? jsx("div", { className: "text-sm font-semibold", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxs("div", { "aria-hidden": !isOpen, className: "overflow-hidden overflow-y-auto transition-all duration-300", ref: ref, children: [jsx("div", {}), visibleMiddleChildren, isOpen && visibleCount < middleChildren.length ? (jsx("div", { className: "flex justify-center py-2", onClick: e => {
904
+ return (jsxs("div", { className: className, "data-testid": dataTestId, ref: refProp, children: [renderDateHeader(), customHeader !== undefined && customHeader !== null ? jsx("div", { className: "text-sm font-semibold", children: customHeader }) : null, toggleButton && middleChildren.length > 0 ? (jsxs("div", { children: [firstChild, middleChildren.length > 0 ? renderToggleButton() : null, jsxs("div", { "aria-hidden": !isOpen, className: "overflow-hidden overflow-y-auto transition-all duration-300", ref: ref, children: [jsx("div", {}), visibleMiddleChildren, isOpen && visibleCount < middleChildren.length ? (jsx("div", { className: "flex justify-center py-2", onClick: e => {
904
905
  e.stopPropagation(); // Prevent parent handlers from firing
905
906
  loadMoreItems();
906
907
  }, children: jsx(Text, { className: "cursor-pointer text-neutral-500 hover:text-neutral-600", "data-testid": "load-more-text", size: "small", type: "span", children: t("timeline.loadMore") }) })) : null, jsx("div", {})] }), lastChild] })) : (jsx("div", { children: children }))] }));
@@ -942,7 +943,7 @@ const renderDot = (customDot, isHovered, selected) => {
942
943
  : defaultDot(isHovered, selected);
943
944
  };
944
945
  const renderHeader = (header, dataTestId) => {
945
- if (!header) {
946
+ if (header === undefined || header === null) {
946
947
  return null;
947
948
  }
948
949
  if (typeof header === "string") {
@@ -951,7 +952,7 @@ const renderHeader = (header, dataTestId) => {
951
952
  return header;
952
953
  };
953
954
  const renderChildren = (children) => {
954
- if (!children) {
955
+ if (children === undefined || children === null) {
955
956
  return null;
956
957
  }
957
958
  return jsx("div", { className: "mt-0.5 content-center text-sm", children: children });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-date-and-time-components",
3
- "version": "1.17.14",
3
+ "version": "1.17.16-alpha-ae1ff73fc64.0",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -8,14 +8,14 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "react": "19.0.0",
11
- "@trackunit/react-components": "1.18.9",
12
- "@trackunit/date-and-time-utils": "1.11.69",
13
- "@trackunit/react-date-and-time-hooks": "1.14.14",
14
- "@trackunit/css-class-variance-utilities": "1.11.68",
15
- "@trackunit/ui-icons": "1.11.66",
16
- "@trackunit/shared-utils": "1.13.68",
17
- "@trackunit/i18n-library-translation": "1.12.59",
18
- "@trackunit/react-form-components": "1.15.9",
11
+ "@trackunit/react-components": "1.18.10-alpha-ae1ff73fc64.0",
12
+ "@trackunit/date-and-time-utils": "1.11.70-alpha-ae1ff73fc64.0",
13
+ "@trackunit/react-date-and-time-hooks": "1.14.16-alpha-ae1ff73fc64.0",
14
+ "@trackunit/css-class-variance-utilities": "1.11.69-alpha-ae1ff73fc64.0",
15
+ "@trackunit/ui-icons": "1.11.67-alpha-ae1ff73fc64.0",
16
+ "@trackunit/shared-utils": "1.13.69-alpha-ae1ff73fc64.0",
17
+ "@trackunit/i18n-library-translation": "1.12.60-alpha-ae1ff73fc64.0",
18
+ "@trackunit/react-form-components": "1.15.10-alpha-ae1ff73fc64.0",
19
19
  "string-ts": "^2.0.0",
20
20
  "tailwind-merge": "^2.0.0",
21
21
  "react-calendar": "^6.0.0"
@@ -1,3 +1,3 @@
1
1
  export declare const cvaTriggerButton: (props?: ({
2
2
  active?: boolean | null | undefined;
3
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
3
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -1,15 +1,15 @@
1
1
  export declare const cvaTimelineElement: (props?: ({
2
2
  selected?: boolean | null | undefined;
3
3
  hoverBehavior?: boolean | null | undefined;
4
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
5
- export declare const cvaDotWrapper: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ export declare const cvaDotWrapper: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
6
6
  export declare const cvaLine: (props?: ({
7
7
  lineStyle?: "dashed" | "solid" | null | undefined;
8
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
9
- export declare const cvaCustomDot: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ export declare const cvaCustomDot: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
10
10
  export declare const cvaToggleBtnIcon: (props?: ({
11
11
  rotated?: boolean | null | undefined;
12
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
13
  export declare const cvaTimelineElementTime: (props?: ({
14
14
  width?: "large" | "small" | null | undefined;
15
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;