UNPKG

@motor-js/cli

Version:

CLI tool for generating Qlik Sense Mashups

147 lines (139 loc) 3.15 kB
/* eslint-disable react/button-has-type */ import classnames from "classnames"; import { StyledButton, StyledAnchor, StyledLink } from "./style"; export const Button = ({ children, type, variant, color, size, shape, fullwidth, active, disabled, iconButton, hasIcon, label, onClick, className, path, iconPosition, iconSize, iconSpace, ...restProps }) => { if (path) { const internal = /^\/(?!\/)/.test(path); const isHash = path?.startsWith("#"); if (internal) { return ( <StyledLink $color={color} $variant={variant} $size={size} $shape={shape} $fullwidth={fullwidth} $active={active} disabled={disabled} $iconButton={iconButton} $hasIcon={hasIcon} $iconPosition={iconPosition} $iconSize={iconSize} $iconSpace={iconSpace} aria-label={label} onClick={onClick} className={classnames(className, "btn")} to={path} {...restProps} > {children} </StyledLink> ); } if (isHash) { return ( <StyledAnchor $color={color} $variant={variant} $size={size} $shape={shape} $fullwidth={fullwidth} $active={active} disabled={disabled} $iconButton={iconButton} $hasIcon={hasIcon} $iconPosition={iconPosition} $iconSize={iconSize} $iconSpace={iconSpace} aria-label={label} onClick={onClick} className={classnames(className, "btn")} href={path} {...restProps} > {children} </StyledAnchor> ); } return ( <StyledAnchor $color={color} $variant={variant} $size={size} $shape={shape} $fullwidth={fullwidth} $active={active} disabled={disabled} $iconButton={iconButton} $hasIcon={hasIcon} $iconPosition={iconPosition} $iconSize={iconSize} $iconSpace={iconSpace} aria-label={label} onClick={onClick} className={classnames(className, "btn")} href={path} {...restProps} > {children} </StyledAnchor> ); } return ( <StyledButton $color={color} $variant={variant} $size={size} $shape={shape} $fullwidth={fullwidth} type={type} $active={active} disabled={disabled} $iconButton={iconButton} $hasIcon={hasIcon} $iconPosition={iconPosition} $iconSize={iconSize} $iconSpace={iconSpace} aria-label={label} onClick={onClick} className={classnames(className, "btn")} {...restProps} > {children} </StyledButton> ); }; Button.defaultProps = { type: "button", variant: "contained", color: "primary", size: "md", shape: "rounded", fullwidth: false, active: false, disabled: false, iconButton: false, iconPosition: "left", iconSize: "sm", }; Button.displayName = "Button";