@drivy/cobalt
Version:
Opinionated design system for Drivy's projects.
50 lines (47 loc) • 2.12 kB
JavaScript
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
import cx from 'classnames';
import { forwardRef } from 'react';
import '../../Icon/index.js';
import { ButtonLinkBase, ButtonBase } from './ButtonComponent.js';
import { isLinkProps } from './type.js';
import ChevronRightIcon from '../../Icon/__generated__/ChevronRightIcon.js';
const getComputedClassName = ({ className, variant, size, destructive, primary, text, isIconOnly, fullWidth, selected, }) => {
return cx(className, "cobalt-button", {
"cobalt-button--primary": primary,
"cobalt-button--destructive": destructive,
"cobalt-button--text": text,
"cobalt-button--icon-only": isIconOnly,
"cobalt-button--small": size === "small",
"cobalt-button--large": size === "large",
"cobalt-button--warning": variant === "warning",
"cobalt-button--secondary": variant === "secondary",
"cobalt-button--tertiary": variant === "tertiary",
"cobalt-button--business": variant === "business",
"cobalt-button--success": variant === "success",
"cobalt-button--neutral": variant === "neutral",
"cobalt-button--selected": selected,
"c-w-full": fullWidth,
});
};
const Button = forwardRef((props, ref) => {
const { children, className, variant, size, destructive, primary, text, icon, fullWidth, selected, ...restProps } = props;
const computedClassName = getComputedClassName({
className,
variant,
size,
destructive,
primary,
text,
fullWidth,
selected,
isIconOnly: !!icon && !children,
});
const content = (jsxs(Fragment, { children: [icon, children, text && children ? jsx(ChevronRightIcon, {}) : null] }));
if (isLinkProps(restProps)) {
return (jsx(ButtonLinkBase, { ...restProps, className: computedClassName, ref: ref, children: content }));
}
return (jsx(ButtonBase, { ...restProps, className: computedClassName, ref: ref, children: content }));
});
Button.displayName = "Button";
export { Button as default };
//# sourceMappingURL=index.js.map