@trackunit/react-components 1.8.6 → 1.8.9

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
@@ -3887,26 +3887,118 @@ const Tabs = ({ children, forceRender, className, dataTestId, fullWidth, ...rest
3887
3887
  return (jsxRuntime.jsx(reactTabs.Root, { className: cvaTabsRoot({ className }), "data-testid": dataTestId, ...rest, children: children }));
3888
3888
  };
3889
3889
 
3890
- const cvaToggleGroup = cssClassVarianceUtilities.cvaMerge(["inline-flex", "divide-x", "divide-slate-300"]);
3891
- const cvaToggleItem = cssClassVarianceUtilities.cvaMerge(["text-slate-600", "rounded-none", "bg-transparent", "flex", "border-x-0", "bg-white"], {
3890
+ const cvaToggleGroup = cssClassVarianceUtilities.cvaMerge(["inline-flex", "p-0.5", "bg-neutral-200", "rounded-md", "gap-1", "relative"]);
3891
+ const cvaToggleItem = cssClassVarianceUtilities.cvaMerge(["z-10", "group"], {
3892
3892
  variants: {
3893
3893
  selected: {
3894
- true: ["bg-slate-200", "hover:bg-slate-200", "text-slate-800"],
3894
+ true: [],
3895
+ false: [],
3896
+ },
3897
+ disabled: {
3898
+ true: [],
3895
3899
  false: [],
3896
3900
  },
3897
3901
  },
3902
+ compoundVariants: [
3903
+ {
3904
+ selected: true,
3905
+ disabled: true,
3906
+ class: ["bg-neutral-50", "shadow-none", "rounded"],
3907
+ },
3908
+ ],
3898
3909
  });
3899
- const cvaToggleItemText = cssClassVarianceUtilities.cvaMerge(["text-ellipsis", "truncate", "flex-grow"], {
3910
+ const cvaToggleGroupWithSlidingBackground = cssClassVarianceUtilities.cvaMerge([], {
3900
3911
  variants: {
3901
- disabledAndSelected: {
3902
- true: ["text-slate-800"],
3903
- false: [],
3912
+ isMounted: {
3913
+ true: [
3914
+ "before:absolute",
3915
+ "before:top-0.5",
3916
+ "before:bottom-0.5",
3917
+ "before:left-[var(--sliding-left)]",
3918
+ "before:w-[var(--sliding-width)]",
3919
+ "before:transition-[left,width]",
3920
+ "before:duration-[var(--transition-duration)]",
3921
+ "before:ease-out",
3922
+ "before:rounded",
3923
+ "before:bg-white",
3924
+ "before:z-0",
3925
+ "before:content-['']",
3926
+ "before:shadow-md",
3927
+ ],
3904
3928
  },
3929
+ },
3930
+ });
3931
+ const cvaToggleItemText = cssClassVarianceUtilities.cvaMerge(["text-ellipsis", "truncate", "flex-grow", "font-medium"], {
3932
+ variants: {
3905
3933
  maxWidth: {
3906
3934
  sm: ["max-w-[80px]"],
3907
3935
  md: ["max-w-[120px]"],
3908
3936
  },
3937
+ selected: {
3938
+ true: [],
3939
+ false: [],
3940
+ },
3941
+ disabled: {
3942
+ true: [],
3943
+ false: [],
3944
+ },
3945
+ },
3946
+ compoundVariants: [
3947
+ {
3948
+ selected: true,
3949
+ disabled: false,
3950
+ class: ["text-neutral-900"],
3951
+ },
3952
+ {
3953
+ selected: true,
3954
+ disabled: true,
3955
+ class: ["text-neutral-400"],
3956
+ },
3957
+ {
3958
+ selected: false,
3959
+ disabled: false,
3960
+ class: ["text-neutral-600", "group-hover:text-neutral-900"],
3961
+ },
3962
+ {
3963
+ selected: false,
3964
+ disabled: true,
3965
+ class: ["text-neutral-400"],
3966
+ },
3967
+ ],
3968
+ });
3969
+ const cvaToggleItemContent = cssClassVarianceUtilities.cvaMerge([], {
3970
+ variants: {
3971
+ selected: {
3972
+ true: [],
3973
+ false: [],
3974
+ },
3975
+ disabled: {
3976
+ true: [],
3977
+ false: [],
3978
+ },
3909
3979
  },
3980
+ compoundVariants: [
3981
+ {
3982
+ selected: true,
3983
+ disabled: false,
3984
+ class: ["text-neutral-700"],
3985
+ },
3986
+ {
3987
+ selected: true,
3988
+ disabled: true,
3989
+ class: ["text-neutral-300"],
3990
+ },
3991
+ {
3992
+ selected: false,
3993
+ disabled: false,
3994
+ class: ["text-neutral-500", "group-hover:text-neutral-900"],
3995
+ },
3996
+ {
3997
+ selected: false,
3998
+ disabled: true,
3999
+ class: ["text-neutral-400"],
4000
+ },
4001
+ ],
3910
4002
  });
3911
4003
 
3912
4004
  /**
@@ -3916,16 +4008,53 @@ const cvaToggleItemText = cssClassVarianceUtilities.cvaMerge(["text-ellipsis", "
3916
4008
  * @returns {ReactElement} ToggleGroup component
3917
4009
  */
3918
4010
  const ToggleGroup = ({ list, selected, setSelected, onChange, disabled = false, size = "medium", isIconOnly = false, className, dataTestId, }) => {
3919
- return (jsxRuntime.jsx("div", { className: cvaToggleGroup({ className }), "data-testid": dataTestId, children: list.map((item, index) => (jsxRuntime.jsx(ToggleItem, { className: tailwindMerge.twMerge(item.className, index === 0 ? ["rounded-l-md", "border-l"] : "", index === list.length - 1 ? ["rounded-r-md", "border-r"] : ""), dataTestId: item.dataTestId, disabled: disabled, iconName: item.iconName, isIconOnly: isIconOnly, onClick: () => {
4011
+ const [isMounted, setIsMounted] = react.useState(false);
4012
+ const buttonRefs = react.useRef([]);
4013
+ const selectedIndex = list.findIndex(item => item.id === selected);
4014
+ const validIndex = selectedIndex >= 0 ? selectedIndex : 0;
4015
+ const containerPadding = 2; // p-0.5 = 2px
4016
+ const gap = 4;
4017
+ const slidingLeft = containerPadding +
4018
+ buttonRefs.current.slice(0, validIndex).reduce((sum, ref) => sum + (ref?.offsetWidth || 0) + gap, 0);
4019
+ const slidingWidth = buttonRefs.current[validIndex]?.offsetWidth || 0;
4020
+ react.useEffect(() => {
4021
+ setIsMounted(true);
4022
+ }, []);
4023
+ return (jsxRuntime.jsx("div", { className: tailwindMerge.twMerge(cvaToggleGroup({ className }), cvaToggleGroupWithSlidingBackground({ isMounted })), "data-testid": dataTestId, style:
4024
+ // eslint-disable-next-line local-rules/no-typescript-assertion
4025
+ {
4026
+ "--sliding-left": `${slidingLeft}px`,
4027
+ "--sliding-width": `${slidingWidth}px`,
4028
+ "--transition-duration": "200ms",
4029
+ }, children: list.map((item, index) => (jsxRuntime.jsx(ToggleItem, { className: item.className, dataTestId: item.dataTestId, disabled: disabled, iconName: item.iconName, isIconOnly: isIconOnly, onClick: () => {
3920
4030
  setSelected(item.id);
3921
4031
  onChange?.(item.id);
3922
- }, selected: selected === item.id, size: size, text: item.text, title: item.title, tooltip: item.tooltip }, item.id))) }));
4032
+ }, ref: el => (buttonRefs.current[index] = el), selected: selected === item.id, size: size, text: item.text, title: item.title, tooltip: item.tooltip }, item.id))) }));
3923
4033
  };
3924
- /**
3925
- * Individual ToggleItem to create custom ToggleGroups
3926
- */
3927
- const ToggleItem = ({ title, onClick, disabled = false, isIconOnly = false, iconName, size, className, selected = false, text, tooltip, dataTestId, }) => {
3928
- return isIconOnly ? (jsxRuntime.jsx(Tooltip, { label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsxRuntime.jsx(IconButton, { className: cvaToggleItem({ className, selected }), "data-testid": dataTestId, disabled: disabled, icon: iconName ? (jsxRuntime.jsx(Icon, { className: selected ? "text-slate-600" : "text-slate-400", name: iconName, size: "small" })) : null, onClick: onClick, size: size, title: iconName, variant: "secondary" }) })) : (jsxRuntime.jsx(Tooltip, { disabled: !tooltip?.content, label: tooltip?.content, placement: tooltip?.placement || "top", children: jsxRuntime.jsx(Button, { className: cvaToggleItem({ className, selected }), "data-testid": dataTestId, disabled: disabled, onClick: onClick, prefix: iconName ? (jsxRuntime.jsx(Icon, { className: selected ? "text-slate-600" : "text-slate-400", name: iconName, size: "small" })) : null, size: size, variant: "secondary", children: jsxRuntime.jsx("span", { className: cvaToggleItemText({ disabledAndSelected: disabled && selected, maxWidth: text?.maxWidth }), children: title }) }) }));
4034
+ const ToggleItem = ({ title, onClick, disabled, isIconOnly, iconName, size, className, selected, text, tooltip, dataTestId, ref, }) => {
4035
+ return isIconOnly ? (jsxRuntime.jsx(Tooltip, { label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsxRuntime.jsx(ToggleButton, { className: cvaToggleItem({
4036
+ className,
4037
+ selected,
4038
+ disabled,
4039
+ }), dataTestId: dataTestId, disabled: disabled, icon: iconName ? (jsxRuntime.jsx(Icon, { className: cvaToggleItemContent({ selected, disabled }), name: iconName, size: size === "large" ? "medium" : "small" })) : null, isIconOnly: isIconOnly, onClick: onClick, ref: ref, size: size, title: title }) })) : (jsxRuntime.jsx(Tooltip, { disabled: !tooltip?.content && !text?.truncate, label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsxRuntime.jsx(ToggleButton, { className: cvaToggleItem({
4040
+ className,
4041
+ selected,
4042
+ disabled,
4043
+ }), dataTestId: dataTestId, disabled: disabled, iconPrefix: iconName ? (jsxRuntime.jsx(Icon, { className: cvaToggleItemContent({ selected, disabled }), name: iconName, size: size === "large" ? "medium" : "small" })) : null, isIconOnly: isIconOnly, onClick: onClick, ref: ref, size: size, title: title, children: jsxRuntime.jsx("span", { className: cvaToggleItemText({ maxWidth: text?.maxWidth, selected, disabled }), children: title }) }) }));
4044
+ };
4045
+ const ToggleButton = ({ title, size, children, dataTestId, className, icon, iconPrefix, isIconOnly, ...rest }) => {
4046
+ const sizeClasses = {
4047
+ small: "px-2 py-1 text-xs",
4048
+ medium: "px-2 py-1 text-sm",
4049
+ large: "px-2.5 py-1.5 text-base",
4050
+ };
4051
+ const iconOnlySizeClasses = {
4052
+ small: "p-1 text-xs",
4053
+ medium: "p-1.5 text-sm",
4054
+ large: "p-2 text-base",
4055
+ };
4056
+ const paddingClasses = isIconOnly ? iconOnlySizeClasses[size] : sizeClasses[size];
4057
+ return (jsxRuntime.jsx("button", { className: tailwindMerge.twMerge("flex items-center justify-center gap-1 self-stretch", paddingClasses, className), "data-testid": dataTestId, title: isIconOnly ? title : undefined, ...rest, children: isIconOnly ? (icon) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [iconPrefix, children] })) }));
3929
4058
  };
3930
4059
 
3931
4060
  const cvaValueBar = cssClassVarianceUtilities.cvaMerge([
@@ -4225,7 +4354,6 @@ exports.Tabs = Tabs;
4225
4354
  exports.Tag = Tag;
4226
4355
  exports.Text = Text;
4227
4356
  exports.ToggleGroup = ToggleGroup;
4228
- exports.ToggleItem = ToggleItem;
4229
4357
  exports.Tooltip = Tooltip;
4230
4358
  exports.ValueBar = ValueBar;
4231
4359
  exports.VirtualizedList = VirtualizedList;
@@ -4253,7 +4381,9 @@ exports.cvaPageHeader = cvaPageHeader;
4253
4381
  exports.cvaPageHeaderContainer = cvaPageHeaderContainer;
4254
4382
  exports.cvaPageHeaderHeading = cvaPageHeaderHeading;
4255
4383
  exports.cvaToggleGroup = cvaToggleGroup;
4384
+ exports.cvaToggleGroupWithSlidingBackground = cvaToggleGroupWithSlidingBackground;
4256
4385
  exports.cvaToggleItem = cvaToggleItem;
4386
+ exports.cvaToggleItemContent = cvaToggleItemContent;
4257
4387
  exports.cvaToggleItemText = cvaToggleItemText;
4258
4388
  exports.cvaVirtualizedList = cvaVirtualizedList;
4259
4389
  exports.cvaVirtualizedListContainer = cvaVirtualizedListContainer;
package/index.esm.js CHANGED
@@ -3885,26 +3885,118 @@ const Tabs = ({ children, forceRender, className, dataTestId, fullWidth, ...rest
3885
3885
  return (jsx(Root, { className: cvaTabsRoot({ className }), "data-testid": dataTestId, ...rest, children: children }));
3886
3886
  };
3887
3887
 
3888
- const cvaToggleGroup = cvaMerge(["inline-flex", "divide-x", "divide-slate-300"]);
3889
- const cvaToggleItem = cvaMerge(["text-slate-600", "rounded-none", "bg-transparent", "flex", "border-x-0", "bg-white"], {
3888
+ const cvaToggleGroup = cvaMerge(["inline-flex", "p-0.5", "bg-neutral-200", "rounded-md", "gap-1", "relative"]);
3889
+ const cvaToggleItem = cvaMerge(["z-10", "group"], {
3890
3890
  variants: {
3891
3891
  selected: {
3892
- true: ["bg-slate-200", "hover:bg-slate-200", "text-slate-800"],
3892
+ true: [],
3893
+ false: [],
3894
+ },
3895
+ disabled: {
3896
+ true: [],
3893
3897
  false: [],
3894
3898
  },
3895
3899
  },
3900
+ compoundVariants: [
3901
+ {
3902
+ selected: true,
3903
+ disabled: true,
3904
+ class: ["bg-neutral-50", "shadow-none", "rounded"],
3905
+ },
3906
+ ],
3896
3907
  });
3897
- const cvaToggleItemText = cvaMerge(["text-ellipsis", "truncate", "flex-grow"], {
3908
+ const cvaToggleGroupWithSlidingBackground = cvaMerge([], {
3898
3909
  variants: {
3899
- disabledAndSelected: {
3900
- true: ["text-slate-800"],
3901
- false: [],
3910
+ isMounted: {
3911
+ true: [
3912
+ "before:absolute",
3913
+ "before:top-0.5",
3914
+ "before:bottom-0.5",
3915
+ "before:left-[var(--sliding-left)]",
3916
+ "before:w-[var(--sliding-width)]",
3917
+ "before:transition-[left,width]",
3918
+ "before:duration-[var(--transition-duration)]",
3919
+ "before:ease-out",
3920
+ "before:rounded",
3921
+ "before:bg-white",
3922
+ "before:z-0",
3923
+ "before:content-['']",
3924
+ "before:shadow-md",
3925
+ ],
3902
3926
  },
3927
+ },
3928
+ });
3929
+ const cvaToggleItemText = cvaMerge(["text-ellipsis", "truncate", "flex-grow", "font-medium"], {
3930
+ variants: {
3903
3931
  maxWidth: {
3904
3932
  sm: ["max-w-[80px]"],
3905
3933
  md: ["max-w-[120px]"],
3906
3934
  },
3935
+ selected: {
3936
+ true: [],
3937
+ false: [],
3938
+ },
3939
+ disabled: {
3940
+ true: [],
3941
+ false: [],
3942
+ },
3943
+ },
3944
+ compoundVariants: [
3945
+ {
3946
+ selected: true,
3947
+ disabled: false,
3948
+ class: ["text-neutral-900"],
3949
+ },
3950
+ {
3951
+ selected: true,
3952
+ disabled: true,
3953
+ class: ["text-neutral-400"],
3954
+ },
3955
+ {
3956
+ selected: false,
3957
+ disabled: false,
3958
+ class: ["text-neutral-600", "group-hover:text-neutral-900"],
3959
+ },
3960
+ {
3961
+ selected: false,
3962
+ disabled: true,
3963
+ class: ["text-neutral-400"],
3964
+ },
3965
+ ],
3966
+ });
3967
+ const cvaToggleItemContent = cvaMerge([], {
3968
+ variants: {
3969
+ selected: {
3970
+ true: [],
3971
+ false: [],
3972
+ },
3973
+ disabled: {
3974
+ true: [],
3975
+ false: [],
3976
+ },
3907
3977
  },
3978
+ compoundVariants: [
3979
+ {
3980
+ selected: true,
3981
+ disabled: false,
3982
+ class: ["text-neutral-700"],
3983
+ },
3984
+ {
3985
+ selected: true,
3986
+ disabled: true,
3987
+ class: ["text-neutral-300"],
3988
+ },
3989
+ {
3990
+ selected: false,
3991
+ disabled: false,
3992
+ class: ["text-neutral-500", "group-hover:text-neutral-900"],
3993
+ },
3994
+ {
3995
+ selected: false,
3996
+ disabled: true,
3997
+ class: ["text-neutral-400"],
3998
+ },
3999
+ ],
3908
4000
  });
3909
4001
 
3910
4002
  /**
@@ -3914,16 +4006,53 @@ const cvaToggleItemText = cvaMerge(["text-ellipsis", "truncate", "flex-grow"], {
3914
4006
  * @returns {ReactElement} ToggleGroup component
3915
4007
  */
3916
4008
  const ToggleGroup = ({ list, selected, setSelected, onChange, disabled = false, size = "medium", isIconOnly = false, className, dataTestId, }) => {
3917
- return (jsx("div", { className: cvaToggleGroup({ className }), "data-testid": dataTestId, children: list.map((item, index) => (jsx(ToggleItem, { className: twMerge(item.className, index === 0 ? ["rounded-l-md", "border-l"] : "", index === list.length - 1 ? ["rounded-r-md", "border-r"] : ""), dataTestId: item.dataTestId, disabled: disabled, iconName: item.iconName, isIconOnly: isIconOnly, onClick: () => {
4009
+ const [isMounted, setIsMounted] = useState(false);
4010
+ const buttonRefs = useRef([]);
4011
+ const selectedIndex = list.findIndex(item => item.id === selected);
4012
+ const validIndex = selectedIndex >= 0 ? selectedIndex : 0;
4013
+ const containerPadding = 2; // p-0.5 = 2px
4014
+ const gap = 4;
4015
+ const slidingLeft = containerPadding +
4016
+ buttonRefs.current.slice(0, validIndex).reduce((sum, ref) => sum + (ref?.offsetWidth || 0) + gap, 0);
4017
+ const slidingWidth = buttonRefs.current[validIndex]?.offsetWidth || 0;
4018
+ useEffect(() => {
4019
+ setIsMounted(true);
4020
+ }, []);
4021
+ return (jsx("div", { className: twMerge(cvaToggleGroup({ className }), cvaToggleGroupWithSlidingBackground({ isMounted })), "data-testid": dataTestId, style:
4022
+ // eslint-disable-next-line local-rules/no-typescript-assertion
4023
+ {
4024
+ "--sliding-left": `${slidingLeft}px`,
4025
+ "--sliding-width": `${slidingWidth}px`,
4026
+ "--transition-duration": "200ms",
4027
+ }, children: list.map((item, index) => (jsx(ToggleItem, { className: item.className, dataTestId: item.dataTestId, disabled: disabled, iconName: item.iconName, isIconOnly: isIconOnly, onClick: () => {
3918
4028
  setSelected(item.id);
3919
4029
  onChange?.(item.id);
3920
- }, selected: selected === item.id, size: size, text: item.text, title: item.title, tooltip: item.tooltip }, item.id))) }));
4030
+ }, ref: el => (buttonRefs.current[index] = el), selected: selected === item.id, size: size, text: item.text, title: item.title, tooltip: item.tooltip }, item.id))) }));
3921
4031
  };
3922
- /**
3923
- * Individual ToggleItem to create custom ToggleGroups
3924
- */
3925
- const ToggleItem = ({ title, onClick, disabled = false, isIconOnly = false, iconName, size, className, selected = false, text, tooltip, dataTestId, }) => {
3926
- return isIconOnly ? (jsx(Tooltip, { label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsx(IconButton, { className: cvaToggleItem({ className, selected }), "data-testid": dataTestId, disabled: disabled, icon: iconName ? (jsx(Icon, { className: selected ? "text-slate-600" : "text-slate-400", name: iconName, size: "small" })) : null, onClick: onClick, size: size, title: iconName, variant: "secondary" }) })) : (jsx(Tooltip, { disabled: !tooltip?.content, label: tooltip?.content, placement: tooltip?.placement || "top", children: jsx(Button, { className: cvaToggleItem({ className, selected }), "data-testid": dataTestId, disabled: disabled, onClick: onClick, prefix: iconName ? (jsx(Icon, { className: selected ? "text-slate-600" : "text-slate-400", name: iconName, size: "small" })) : null, size: size, variant: "secondary", children: jsx("span", { className: cvaToggleItemText({ disabledAndSelected: disabled && selected, maxWidth: text?.maxWidth }), children: title }) }) }));
4032
+ const ToggleItem = ({ title, onClick, disabled, isIconOnly, iconName, size, className, selected, text, tooltip, dataTestId, ref, }) => {
4033
+ return isIconOnly ? (jsx(Tooltip, { label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsx(ToggleButton, { className: cvaToggleItem({
4034
+ className,
4035
+ selected,
4036
+ disabled,
4037
+ }), dataTestId: dataTestId, disabled: disabled, icon: iconName ? (jsx(Icon, { className: cvaToggleItemContent({ selected, disabled }), name: iconName, size: size === "large" ? "medium" : "small" })) : null, isIconOnly: isIconOnly, onClick: onClick, ref: ref, size: size, title: title }) })) : (jsx(Tooltip, { disabled: !tooltip?.content && !text?.truncate, label: tooltip?.content || title, placement: tooltip?.placement || "top", children: jsx(ToggleButton, { className: cvaToggleItem({
4038
+ className,
4039
+ selected,
4040
+ disabled,
4041
+ }), dataTestId: dataTestId, disabled: disabled, iconPrefix: iconName ? (jsx(Icon, { className: cvaToggleItemContent({ selected, disabled }), name: iconName, size: size === "large" ? "medium" : "small" })) : null, isIconOnly: isIconOnly, onClick: onClick, ref: ref, size: size, title: title, children: jsx("span", { className: cvaToggleItemText({ maxWidth: text?.maxWidth, selected, disabled }), children: title }) }) }));
4042
+ };
4043
+ const ToggleButton = ({ title, size, children, dataTestId, className, icon, iconPrefix, isIconOnly, ...rest }) => {
4044
+ const sizeClasses = {
4045
+ small: "px-2 py-1 text-xs",
4046
+ medium: "px-2 py-1 text-sm",
4047
+ large: "px-2.5 py-1.5 text-base",
4048
+ };
4049
+ const iconOnlySizeClasses = {
4050
+ small: "p-1 text-xs",
4051
+ medium: "p-1.5 text-sm",
4052
+ large: "p-2 text-base",
4053
+ };
4054
+ const paddingClasses = isIconOnly ? iconOnlySizeClasses[size] : sizeClasses[size];
4055
+ return (jsx("button", { className: twMerge("flex items-center justify-center gap-1 self-stretch", paddingClasses, className), "data-testid": dataTestId, title: isIconOnly ? title : undefined, ...rest, children: isIconOnly ? (icon) : (jsxs(Fragment, { children: [iconPrefix, children] })) }));
3927
4056
  };
3928
4057
 
3929
4058
  const cvaValueBar = cvaMerge([
@@ -4166,4 +4295,4 @@ const cvaClickable = cvaMerge([
4166
4295
  },
4167
4296
  });
4168
4297
 
4169
- export { ActionRenderer, Alert, Badge, Breadcrumb, BreadcrumbContainer, Button, Card, CardBody, CardFooter, CardHeader, Collapse, CompletionStatusIndicator, CopyableText, EmptyState, EmptyValue, ExternalLink, Heading, Highlight, Icon, IconButton, Indicator, KPI, KPICard, MenuDivider, MenuItem, MenuList, MoreMenu, Notice, PackageNameStoryComponent, Page, PageContent, PageHeader, PageHeaderKpiMetrics, PageHeaderSecondaryActions, PageHeaderTitle, Pagination, Polygon, Popover, PopoverContent, PopoverTitle, PopoverTrigger, Portal, Prompt, ROLE_CARD, SectionHeader, Sidebar, SkeletonLines, Spacer, Spinner, StarButton, Tab, TabContent, TabList, Tabs, Tag, Text, ToggleGroup, ToggleItem, Tooltip, ValueBar, VirtualizedList, ZStack, cvaButton, cvaButtonPrefixSuffix, cvaButtonSpinner, cvaButtonSpinnerContainer, cvaClickable, cvaContainerStyles, cvaIconButton, cvaImgStyles, cvaIndicator, cvaIndicatorIcon, cvaIndicatorIconBackground, cvaIndicatorLabel, cvaIndicatorPing, cvaInteractableItem, cvaMenuItem, cvaMenuItemLabel, cvaMenuItemPrefix, cvaMenuItemStyle, cvaMenuItemSuffix, cvaPageHeader, cvaPageHeaderContainer, cvaPageHeaderHeading, cvaToggleGroup, cvaToggleItem, cvaToggleItemText, cvaVirtualizedList, cvaVirtualizedListContainer, cvaVirtualizedListItem, cvaZStackContainer, cvaZStackItem, docs, getDevicePixelRatio, getValueBarColorByValue, iconColorNames, iconPalette, useClickOutside, useContainerBreakpoints, useContinuousTimeout, useDebounce, useDevicePixelRatio, useElevatedReducer, useElevatedState, useGeometry, useHover, useIsFirstRender, useIsFullscreen, useIsTextTruncated, useModifierKey, useOverflowItems, usePopoverContext, usePrompt, useResize, useScrollDetection, useSelfUpdatingRef, useTimeout, useViewportBreakpoints, useWatch, useWindowActivity };
4298
+ export { ActionRenderer, Alert, Badge, Breadcrumb, BreadcrumbContainer, Button, Card, CardBody, CardFooter, CardHeader, Collapse, CompletionStatusIndicator, CopyableText, EmptyState, EmptyValue, ExternalLink, Heading, Highlight, Icon, IconButton, Indicator, KPI, KPICard, MenuDivider, MenuItem, MenuList, MoreMenu, Notice, PackageNameStoryComponent, Page, PageContent, PageHeader, PageHeaderKpiMetrics, PageHeaderSecondaryActions, PageHeaderTitle, Pagination, Polygon, Popover, PopoverContent, PopoverTitle, PopoverTrigger, Portal, Prompt, ROLE_CARD, SectionHeader, Sidebar, SkeletonLines, Spacer, Spinner, StarButton, Tab, TabContent, TabList, Tabs, Tag, Text, ToggleGroup, Tooltip, ValueBar, VirtualizedList, ZStack, cvaButton, cvaButtonPrefixSuffix, cvaButtonSpinner, cvaButtonSpinnerContainer, cvaClickable, cvaContainerStyles, cvaIconButton, cvaImgStyles, cvaIndicator, cvaIndicatorIcon, cvaIndicatorIconBackground, cvaIndicatorLabel, cvaIndicatorPing, cvaInteractableItem, cvaMenuItem, cvaMenuItemLabel, cvaMenuItemPrefix, cvaMenuItemStyle, cvaMenuItemSuffix, cvaPageHeader, cvaPageHeaderContainer, cvaPageHeaderHeading, cvaToggleGroup, cvaToggleGroupWithSlidingBackground, cvaToggleItem, cvaToggleItemContent, cvaToggleItemText, cvaVirtualizedList, cvaVirtualizedListContainer, cvaVirtualizedListItem, cvaZStackContainer, cvaZStackItem, docs, getDevicePixelRatio, getValueBarColorByValue, iconColorNames, iconPalette, useClickOutside, useContainerBreakpoints, useContinuousTimeout, useDebounce, useDevicePixelRatio, useElevatedReducer, useElevatedState, useGeometry, useHover, useIsFirstRender, useIsFullscreen, useIsTextTruncated, useModifierKey, useOverflowItems, usePopoverContext, usePrompt, useResize, useScrollDetection, useSelfUpdatingRef, useTimeout, useViewportBreakpoints, useWatch, useWindowActivity };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-components",
3
- "version": "1.8.6",
3
+ "version": "1.8.9",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -17,12 +17,12 @@
17
17
  "@floating-ui/react": "^0.26.25",
18
18
  "string-ts": "^2.0.0",
19
19
  "tailwind-merge": "^2.0.0",
20
- "@trackunit/ui-design-tokens": "1.6.39",
21
- "@trackunit/css-class-variance-utilities": "1.6.37",
22
- "@trackunit/shared-utils": "1.8.37",
23
- "@trackunit/ui-icons": "1.6.36",
24
- "@trackunit/react-table-pagination": "1.6.36",
25
- "@trackunit/react-test-setup": "1.3.37",
20
+ "@trackunit/ui-design-tokens": "1.6.40",
21
+ "@trackunit/css-class-variance-utilities": "1.6.38",
22
+ "@trackunit/shared-utils": "1.8.38",
23
+ "@trackunit/ui-icons": "1.6.37",
24
+ "@trackunit/react-table-pagination": "1.6.37",
25
+ "@trackunit/react-test-setup": "1.3.38",
26
26
  "@tanstack/react-router": "1.114.29"
27
27
  },
28
28
  "module": "./index.esm.js",
@@ -1,6 +1,7 @@
1
1
  import { VariantProps } from "@trackunit/css-class-variance-utilities";
2
2
  import { MappedOmit } from "@trackunit/shared-utils";
3
3
  import { IconName } from "@trackunit/ui-icons";
4
+ import { Dispatch, SetStateAction } from "react";
4
5
  import { CommonProps } from "../../common/CommonProps";
5
6
  import { TooltipPlacement } from "../Tooltip/Tooltip";
6
7
  import { cvaToggleGroup } from "./ToggleGroup.variants";
@@ -45,15 +46,15 @@ export type ToggleGroupProps<TSelectedId extends string = string> = CommonProps
45
46
  onChange?: (selectedId: TSelectedId) => void;
46
47
  disabled?: boolean;
47
48
  /**
48
- * ToggleGroup buttons can be one of two sizes
49
+ * ToggleGroup buttons can be one of three sizes
49
50
  */
50
- size?: "small" | "medium";
51
+ size?: "small" | "medium" | "large";
51
52
  /**
52
53
  * Enable to use toggle buttons with icons only and a tooltip on hover
53
54
  */
54
55
  isIconOnly?: boolean;
55
56
  selected: TSelectedId;
56
- setSelected: React.Dispatch<React.SetStateAction<TSelectedId>>;
57
+ setSelected: Dispatch<SetStateAction<TSelectedId>>;
57
58
  };
58
59
  /**
59
60
  * Toggle Group allows users to toggle between two or more closely related options, and immediately apply that selection.
@@ -63,13 +64,22 @@ export type ToggleGroupProps<TSelectedId extends string = string> = CommonProps
63
64
  */
64
65
  export declare const ToggleGroup: <TSelectedId extends string = string>({ list, selected, setSelected, onChange, disabled, size, isIconOnly, className, dataTestId, }: ToggleGroupProps<TSelectedId>) => import("react/jsx-runtime").JSX.Element;
65
66
  export interface ToggleItemProps extends CommonProps, MappedOmit<BasicToggleGroupListProps<string>, "id"> {
67
+ title: string;
68
+ text?: {
69
+ truncate: boolean;
70
+ maxWidth: "sm" | "md";
71
+ };
72
+ tooltip?: {
73
+ content?: string;
74
+ placement?: TooltipPlacement;
75
+ };
66
76
  onClick: (event?: React.MouseEvent<HTMLElement>) => void;
67
- disabled?: boolean;
68
- isIconOnly?: boolean;
69
- size?: "small" | "medium";
70
- selected?: boolean;
77
+ selected: boolean;
78
+ disabled: boolean;
79
+ size: "small" | "medium" | "large";
80
+ isIconOnly: boolean;
81
+ iconName?: IconName;
82
+ className?: string;
83
+ dataTestId?: string;
84
+ ref?: (el: HTMLButtonElement | null) => void;
71
85
  }
72
- /**
73
- * Individual ToggleItem to create custom ToggleGroups
74
- */
75
- export declare const ToggleItem: ({ title, onClick, disabled, isIconOnly, iconName, size, className, selected, text, tooltip, dataTestId, }: ToggleItemProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,8 +1,17 @@
1
1
  export declare const cvaToggleGroup: (props?: import("class-variance-authority/dist/types").ClassProp | undefined) => string;
2
2
  export declare const cvaToggleItem: (props?: ({
3
3
  selected?: boolean | null | undefined;
4
+ disabled?: boolean | null | undefined;
5
+ } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
6
+ export declare const cvaToggleGroupWithSlidingBackground: (props?: ({
7
+ isMounted?: boolean | null | undefined;
4
8
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
5
9
  export declare const cvaToggleItemText: (props?: ({
6
- disabledAndSelected?: boolean | null | undefined;
7
10
  maxWidth?: "sm" | "md" | null | undefined;
11
+ selected?: boolean | null | undefined;
12
+ disabled?: boolean | null | undefined;
13
+ } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
14
+ export declare const cvaToggleItemContent: (props?: ({
15
+ selected?: boolean | null | undefined;
16
+ disabled?: boolean | null | undefined;
8
17
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;