UNPKG

@drivy/cobalt

Version:

Opinionated design system for Drivy's projects.

50 lines (47 loc) 2.12 kB
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