@trackunit/react-components 1.8.6 → 1.8.8
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 +145 -15
- package/index.esm.js +144 -15
- package/package.json +7 -7
- package/src/components/ToggleGroup/ToggleGroup.d.ts +21 -11
- package/src/components/ToggleGroup/ToggleGroup.variants.d.ts +10 -1
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", "
|
|
3891
|
-
const cvaToggleItem = cssClassVarianceUtilities.cvaMerge(["
|
|
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: [
|
|
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
|
|
3910
|
+
const cvaToggleGroupWithSlidingBackground = cssClassVarianceUtilities.cvaMerge([], {
|
|
3900
3911
|
variants: {
|
|
3901
|
-
|
|
3902
|
-
true: [
|
|
3903
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
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", "
|
|
3889
|
-
const cvaToggleItem = cvaMerge(["
|
|
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: [
|
|
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
|
|
3908
|
+
const cvaToggleGroupWithSlidingBackground = cvaMerge([], {
|
|
3898
3909
|
variants: {
|
|
3899
|
-
|
|
3900
|
-
true: [
|
|
3901
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
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,
|
|
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.
|
|
3
|
+
"version": "1.8.8",
|
|
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.
|
|
21
|
-
"@trackunit/css-class-variance-utilities": "1.6.
|
|
22
|
-
"@trackunit/shared-utils": "1.8.
|
|
23
|
-
"@trackunit/ui-icons": "1.6.
|
|
24
|
-
"@trackunit/react-table-pagination": "1.6.
|
|
25
|
-
"@trackunit/react-test-setup": "1.3.
|
|
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
|
|
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:
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
size
|
|
70
|
-
|
|
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;
|