@trackunit/react-components 0.1.405 → 0.1.407

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
@@ -1813,23 +1813,28 @@ const cvaDialog = cssClassVarianceUtilities.cvaMerge([
1813
1813
  bottom: "bottom-0 left-0 right-0 h-fit w-full rounded-t-lg",
1814
1814
  },
1815
1815
  sidebarMode: {
1816
- closed: "translate-y-[calc(100%-2.2rem)] rounded-t-lg",
1817
- half: "translate-y-[30%] rounded-t-lg",
1818
- full: "h-full translate-y-0 rounded-none",
1816
+ "semi-closed": "translate-y-[calc(100%-2.2rem)]",
1817
+ "1/3": "translate-y-2/3",
1818
+ "2/3": "translate-y-1/3",
1819
+ full: "translate-y-0",
1820
+ "semi-full": "translate-y-5",
1821
+ closed: "translate-y-full",
1819
1822
  },
1820
1823
  isLargeScreen: {
1821
1824
  true: "",
1822
- false: "bottom-0 left-0 right-0 w-full w-full sm:rounded-none",
1825
+ false: "bottom-0 left-0 right-0 h-full w-full rounded-t-lg",
1823
1826
  },
1824
1827
  open: {
1825
1828
  true: "",
1826
1829
  false: "",
1827
1830
  },
1828
1831
  },
1829
- defaultVariants: {
1830
- position: "left",
1831
- },
1832
1832
  compoundVariants: [
1833
+ {
1834
+ isLargeScreen: false,
1835
+ open: false,
1836
+ className: "translate-y-full",
1837
+ },
1833
1838
  {
1834
1839
  isLargeScreen: true,
1835
1840
  open: true,
@@ -1880,10 +1885,21 @@ const cvaDialog = cssClassVarianceUtilities.cvaMerge([
1880
1885
  },
1881
1886
  ],
1882
1887
  });
1883
- const cvaDialogContainer = cssClassVarianceUtilities.cvaMerge(["relative", "flex", "h-full", "flex-col"]);
1884
- const cvaSwipeContainer = cssClassVarianceUtilities.cvaMerge(["mb-4", "flex", "items-center", "justify-center", "lg:hidden"]);
1888
+ const cvaDialogContainer = cssClassVarianceUtilities.cvaMerge(["flex", "flex-col", "overflow-hidden", "rounded-[inherit]"], {
1889
+ variants: {
1890
+ sidebarMode: {
1891
+ "semi-closed": "h-auto",
1892
+ "1/3": "h-[34%]",
1893
+ "2/3": "h-[67%]",
1894
+ "semi-full": "h-[calc(100%-1.25rem)]",
1895
+ full: "h-full",
1896
+ closed: "h-auto",
1897
+ },
1898
+ },
1899
+ });
1900
+ const cvaSwipeContainer = cssClassVarianceUtilities.cvaMerge(["my-4", "flex", "items-center", "justify-center", "lg:hidden"]);
1885
1901
  const cvaSwipeIcon = cssClassVarianceUtilities.cvaMerge(["block", "h-1", "w-10", "rounded-full", "bg-gray-400"]);
1886
- const cvaToogleContainer = cssClassVarianceUtilities.cvaMerge(["z-8", "relative"], {
1902
+ const cvaToogleContainer = cssClassVarianceUtilities.cvaMerge(["z-8", "absolute"], {
1887
1903
  variants: {
1888
1904
  position: {
1889
1905
  left: "right-[-24px] top-[calc(50%-24px)]",
@@ -1920,7 +1936,7 @@ const cvaToogleButton = cssClassVarianceUtilities.cvaMerge([
1920
1936
  },
1921
1937
  });
1922
1938
  const cvaOverlayContainer = cssClassVarianceUtilities.cvaMerge([
1923
- "fixed",
1939
+ "absolute",
1924
1940
  "flex",
1925
1941
  "items-center",
1926
1942
  "justify-center",
@@ -2017,15 +2033,14 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2017
2033
  if (!open) {
2018
2034
  return "closed";
2019
2035
  }
2020
- return isLargeScreen ? "full" : "half";
2036
+ return isLargeScreen ? "full" : "2/3";
2021
2037
  };
2022
2038
  const [sidebarMode, setSidebarMode] = React.useState(initialSidebarMode);
2023
2039
  const [isVisible, setIsVisible] = React.useState(open);
2024
2040
  const [isAnimationStart, setStartAnimation] = React.useState(open);
2025
2041
  React.useEffect(() => {
2026
2042
  if (!isLargeScreen && open) {
2027
- setSidebarMode("half");
2028
- return;
2043
+ setSidebarMode("2/3");
2029
2044
  }
2030
2045
  if (onToggle) {
2031
2046
  setStartAnimation(open);
@@ -2051,10 +2066,12 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2051
2066
  const handleSwipedUp = () => {
2052
2067
  setSidebarMode(prev => {
2053
2068
  switch (prev) {
2054
- case "closed":
2055
- return "half";
2056
- case "half":
2057
- return "full";
2069
+ case "semi-closed":
2070
+ return "1/3";
2071
+ case "1/3":
2072
+ return "2/3";
2073
+ case "2/3":
2074
+ return "semi-full";
2058
2075
  default:
2059
2076
  return prev;
2060
2077
  }
@@ -2063,14 +2080,24 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2063
2080
  const handleSwipedDown = () => {
2064
2081
  setSidebarMode(prev => {
2065
2082
  switch (prev) {
2066
- case "full":
2067
- return "half";
2068
- case "half":
2069
- return "closed";
2083
+ case "semi-full":
2084
+ return "2/3";
2085
+ case "2/3":
2086
+ return "1/3";
2087
+ case "1/3":
2088
+ return onClose ? "closed" : "semi-closed";
2070
2089
  default:
2071
2090
  return prev;
2072
2091
  }
2073
2092
  });
2093
+ /*
2094
+ * Within a mobile device context, when swiping down,
2095
+ * if the Drawer is open a third and no onToggle function is provided,
2096
+ * the Drawer will automatically be closed using the onClose function.
2097
+ */
2098
+ if (sidebarMode === "1/3" && !onToggle && onClose) {
2099
+ onClose();
2100
+ }
2074
2101
  };
2075
2102
  const handleAnimationEnd = () => {
2076
2103
  if (!open && !onToggle) {
@@ -2080,13 +2107,15 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2080
2107
  if (!isVisible && !onToggle) {
2081
2108
  return null;
2082
2109
  }
2083
- return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, children: [!disableOverlay ? jsxRuntime.jsx(Overlay, { onClose: onClose, open: isAnimationStart }) : null, jsxRuntime.jsx("div", { ...handlers, className: cvaDialog({
2110
+ return (jsxRuntime.jsxs("div", { className: className, "data-testid": dataTestId, children: [!disableOverlay ? jsxRuntime.jsx(Overlay, { onClose: onClose, open: isAnimationStart }) : null, jsxRuntime.jsxs("div", { ...handlers, className: cvaDialog({
2084
2111
  sidebarMode: isLargeScreen ? null : sidebarMode,
2085
2112
  isLargeScreen,
2086
2113
  open: isAnimationStart,
2087
- position,
2114
+ position: isLargeScreen ? position : undefined,
2088
2115
  className: dialogClassName,
2089
- }), "data-testid": dataTestId ? `${dataTestId}-container` : undefined, onTransitionEnd: handleAnimationEnd, children: jsxRuntime.jsxs("div", { className: cvaDialogContainer(), children: [jsxRuntime.jsx("div", { className: cvaSwipeContainer(), children: jsxRuntime.jsx("div", { className: cvaSwipeIcon() }) }), isLargeScreen && onToggle ? jsxRuntime.jsx(ToogleButton, { onToggle: onToggle, open: open, position: position }) : null, children] }) })] }));
2116
+ }), "data-testid": dataTestId ? `${dataTestId}-container` : undefined, onTransitionEnd: handleAnimationEnd, children: [isLargeScreen && onToggle ? jsxRuntime.jsx(ToogleButton, { onToggle: onToggle, open: open, position: position }) : null, jsxRuntime.jsxs("div", { className: cvaDialogContainer({
2117
+ sidebarMode: isLargeScreen ? "full" : sidebarMode,
2118
+ }), children: [jsxRuntime.jsx("div", { className: cvaSwipeContainer(), children: jsxRuntime.jsx("div", { className: cvaSwipeIcon() }) }), children] })] })] }));
2090
2119
  };
2091
2120
 
2092
2121
  const cvaSkeletonLine = cssClassVarianceUtilities.cvaMerge([
package/index.esm.js CHANGED
@@ -1793,23 +1793,28 @@ const cvaDialog = cvaMerge([
1793
1793
  bottom: "bottom-0 left-0 right-0 h-fit w-full rounded-t-lg",
1794
1794
  },
1795
1795
  sidebarMode: {
1796
- closed: "translate-y-[calc(100%-2.2rem)] rounded-t-lg",
1797
- half: "translate-y-[30%] rounded-t-lg",
1798
- full: "h-full translate-y-0 rounded-none",
1796
+ "semi-closed": "translate-y-[calc(100%-2.2rem)]",
1797
+ "1/3": "translate-y-2/3",
1798
+ "2/3": "translate-y-1/3",
1799
+ full: "translate-y-0",
1800
+ "semi-full": "translate-y-5",
1801
+ closed: "translate-y-full",
1799
1802
  },
1800
1803
  isLargeScreen: {
1801
1804
  true: "",
1802
- false: "bottom-0 left-0 right-0 w-full w-full sm:rounded-none",
1805
+ false: "bottom-0 left-0 right-0 h-full w-full rounded-t-lg",
1803
1806
  },
1804
1807
  open: {
1805
1808
  true: "",
1806
1809
  false: "",
1807
1810
  },
1808
1811
  },
1809
- defaultVariants: {
1810
- position: "left",
1811
- },
1812
1812
  compoundVariants: [
1813
+ {
1814
+ isLargeScreen: false,
1815
+ open: false,
1816
+ className: "translate-y-full",
1817
+ },
1813
1818
  {
1814
1819
  isLargeScreen: true,
1815
1820
  open: true,
@@ -1860,10 +1865,21 @@ const cvaDialog = cvaMerge([
1860
1865
  },
1861
1866
  ],
1862
1867
  });
1863
- const cvaDialogContainer = cvaMerge(["relative", "flex", "h-full", "flex-col"]);
1864
- const cvaSwipeContainer = cvaMerge(["mb-4", "flex", "items-center", "justify-center", "lg:hidden"]);
1868
+ const cvaDialogContainer = cvaMerge(["flex", "flex-col", "overflow-hidden", "rounded-[inherit]"], {
1869
+ variants: {
1870
+ sidebarMode: {
1871
+ "semi-closed": "h-auto",
1872
+ "1/3": "h-[34%]",
1873
+ "2/3": "h-[67%]",
1874
+ "semi-full": "h-[calc(100%-1.25rem)]",
1875
+ full: "h-full",
1876
+ closed: "h-auto",
1877
+ },
1878
+ },
1879
+ });
1880
+ const cvaSwipeContainer = cvaMerge(["my-4", "flex", "items-center", "justify-center", "lg:hidden"]);
1865
1881
  const cvaSwipeIcon = cvaMerge(["block", "h-1", "w-10", "rounded-full", "bg-gray-400"]);
1866
- const cvaToogleContainer = cvaMerge(["z-8", "relative"], {
1882
+ const cvaToogleContainer = cvaMerge(["z-8", "absolute"], {
1867
1883
  variants: {
1868
1884
  position: {
1869
1885
  left: "right-[-24px] top-[calc(50%-24px)]",
@@ -1900,7 +1916,7 @@ const cvaToogleButton = cvaMerge([
1900
1916
  },
1901
1917
  });
1902
1918
  const cvaOverlayContainer = cvaMerge([
1903
- "fixed",
1919
+ "absolute",
1904
1920
  "flex",
1905
1921
  "items-center",
1906
1922
  "justify-center",
@@ -1997,15 +2013,14 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
1997
2013
  if (!open) {
1998
2014
  return "closed";
1999
2015
  }
2000
- return isLargeScreen ? "full" : "half";
2016
+ return isLargeScreen ? "full" : "2/3";
2001
2017
  };
2002
2018
  const [sidebarMode, setSidebarMode] = useState(initialSidebarMode);
2003
2019
  const [isVisible, setIsVisible] = useState(open);
2004
2020
  const [isAnimationStart, setStartAnimation] = useState(open);
2005
2021
  useEffect(() => {
2006
2022
  if (!isLargeScreen && open) {
2007
- setSidebarMode("half");
2008
- return;
2023
+ setSidebarMode("2/3");
2009
2024
  }
2010
2025
  if (onToggle) {
2011
2026
  setStartAnimation(open);
@@ -2031,10 +2046,12 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2031
2046
  const handleSwipedUp = () => {
2032
2047
  setSidebarMode(prev => {
2033
2048
  switch (prev) {
2034
- case "closed":
2035
- return "half";
2036
- case "half":
2037
- return "full";
2049
+ case "semi-closed":
2050
+ return "1/3";
2051
+ case "1/3":
2052
+ return "2/3";
2053
+ case "2/3":
2054
+ return "semi-full";
2038
2055
  default:
2039
2056
  return prev;
2040
2057
  }
@@ -2043,14 +2060,24 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2043
2060
  const handleSwipedDown = () => {
2044
2061
  setSidebarMode(prev => {
2045
2062
  switch (prev) {
2046
- case "full":
2047
- return "half";
2048
- case "half":
2049
- return "closed";
2063
+ case "semi-full":
2064
+ return "2/3";
2065
+ case "2/3":
2066
+ return "1/3";
2067
+ case "1/3":
2068
+ return onClose ? "closed" : "semi-closed";
2050
2069
  default:
2051
2070
  return prev;
2052
2071
  }
2053
2072
  });
2073
+ /*
2074
+ * Within a mobile device context, when swiping down,
2075
+ * if the Drawer is open a third and no onToggle function is provided,
2076
+ * the Drawer will automatically be closed using the onClose function.
2077
+ */
2078
+ if (sidebarMode === "1/3" && !onToggle && onClose) {
2079
+ onClose();
2080
+ }
2054
2081
  };
2055
2082
  const handleAnimationEnd = () => {
2056
2083
  if (!open && !onToggle) {
@@ -2060,13 +2087,15 @@ const Drawer = ({ open = true, onToggle, onClose, disableOverlay, position = "le
2060
2087
  if (!isVisible && !onToggle) {
2061
2088
  return null;
2062
2089
  }
2063
- return (jsxs("div", { className: className, "data-testid": dataTestId, children: [!disableOverlay ? jsx(Overlay, { onClose: onClose, open: isAnimationStart }) : null, jsx("div", { ...handlers, className: cvaDialog({
2090
+ return (jsxs("div", { className: className, "data-testid": dataTestId, children: [!disableOverlay ? jsx(Overlay, { onClose: onClose, open: isAnimationStart }) : null, jsxs("div", { ...handlers, className: cvaDialog({
2064
2091
  sidebarMode: isLargeScreen ? null : sidebarMode,
2065
2092
  isLargeScreen,
2066
2093
  open: isAnimationStart,
2067
- position,
2094
+ position: isLargeScreen ? position : undefined,
2068
2095
  className: dialogClassName,
2069
- }), "data-testid": dataTestId ? `${dataTestId}-container` : undefined, onTransitionEnd: handleAnimationEnd, children: jsxs("div", { className: cvaDialogContainer(), children: [jsx("div", { className: cvaSwipeContainer(), children: jsx("div", { className: cvaSwipeIcon() }) }), isLargeScreen && onToggle ? jsx(ToogleButton, { onToggle: onToggle, open: open, position: position }) : null, children] }) })] }));
2096
+ }), "data-testid": dataTestId ? `${dataTestId}-container` : undefined, onTransitionEnd: handleAnimationEnd, children: [isLargeScreen && onToggle ? jsx(ToogleButton, { onToggle: onToggle, open: open, position: position }) : null, jsxs("div", { className: cvaDialogContainer({
2097
+ sidebarMode: isLargeScreen ? "full" : sidebarMode,
2098
+ }), children: [jsx("div", { className: cvaSwipeContainer(), children: jsx("div", { className: cvaSwipeIcon() }) }), children] })] })] }));
2070
2099
  };
2071
2100
 
2072
2101
  const cvaSkeletonLine = cvaMerge([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-components",
3
- "version": "0.1.405",
3
+ "version": "0.1.407",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -8,7 +8,7 @@ export interface DrawerProps extends CommonProps {
8
8
  /**
9
9
  * The onClose handler for the drawer.
10
10
  */
11
- onClose?: (event: React.MouseEvent | KeyboardEvent) => void;
11
+ onClose?: (event?: React.MouseEvent | KeyboardEvent) => void;
12
12
  /**
13
13
  * The handler for toggling the drawer state.
14
14
  */
@@ -1,10 +1,12 @@
1
1
  export declare const cvaDialog: (props?: ({
2
2
  position?: "left" | "right" | "top" | "bottom" | null | undefined;
3
- sidebarMode?: "closed" | "half" | "full" | null | undefined;
3
+ sidebarMode?: "semi-closed" | "1/3" | "2/3" | "full" | "semi-full" | "closed" | null | undefined;
4
4
  isLargeScreen?: boolean | null | undefined;
5
5
  open?: boolean | null | undefined;
6
6
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
7
- export declare const cvaDialogContainer: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
7
+ export declare const cvaDialogContainer: (props?: ({
8
+ sidebarMode?: "semi-closed" | "1/3" | "2/3" | "full" | "semi-full" | "closed" | null | undefined;
9
+ } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
8
10
  export declare const cvaSwipeContainer: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
9
11
  export declare const cvaSwipeIcon: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
10
12
  export declare const cvaToogleContainer: (props?: ({