You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							192 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
	
	
							192 lines
						
					
					
						
							5.7 KiB
						
					
					
				"use strict";
 | 
						|
Object.defineProperty(exports, "__esModule", { value: true });
 | 
						|
exports.ButtonCSS = void 0;
 | 
						|
const styled_system_1 = require("styled-system");
 | 
						|
const styled_components_1 = require("styled-components");
 | 
						|
const utils_1 = require("../../utils");
 | 
						|
const variantShared = {
 | 
						|
    color: 'white',
 | 
						|
    'border-color': 'transparent',
 | 
						|
    [`& .${utils_1.cssClass('Icon')} svg`]: {
 | 
						|
        fill: 'white',
 | 
						|
    },
 | 
						|
    '&:disabled': {
 | 
						|
        bg: 'grey40',
 | 
						|
    },
 | 
						|
};
 | 
						|
const buttonVariants = styled_system_1.variant({
 | 
						|
    variants: {
 | 
						|
        primary: Object.assign({ bg: 'primary100', '&:hover': {
 | 
						|
                bg: 'hoverBg',
 | 
						|
            }, className: utils_1.cssClass(['Button', 'Button_Primary']) }, variantShared),
 | 
						|
        danger: Object.assign({ bg: 'error', '&:hover': {
 | 
						|
                bg: 'errorDark',
 | 
						|
                borderColor: 'transparent',
 | 
						|
            }, className: utils_1.cssClass(['Button', 'Button_Danger']) }, variantShared),
 | 
						|
        success: Object.assign({ bg: 'success', '&:hover': {
 | 
						|
                bg: 'successDark',
 | 
						|
                borderColor: 'transparent',
 | 
						|
            }, className: utils_1.cssClass(['Button', 'Button_Success']) }, variantShared),
 | 
						|
        info: Object.assign({ bg: 'info', '&:hover': {
 | 
						|
                bg: 'infoDark',
 | 
						|
                borderColor: 'transparent',
 | 
						|
            }, className: utils_1.cssClass(['Button', 'Button_Info']) }, variantShared),
 | 
						|
        secondary: Object.assign({ bg: 'accent', className: utils_1.cssClass(['Button', 'Button_Secondary']) }, variantShared),
 | 
						|
        light: {
 | 
						|
            bg: 'white',
 | 
						|
            className: utils_1.cssClass(['Button', 'Button_Grey']),
 | 
						|
            color: 'grey80',
 | 
						|
            borderColor: 'grey40',
 | 
						|
            [`& .${utils_1.cssClass('Icon')} svg`]: {
 | 
						|
                fill: 'grey80',
 | 
						|
            },
 | 
						|
            '&:hover': {
 | 
						|
                borderColor: 'grey60',
 | 
						|
                bg: 'grey60',
 | 
						|
            },
 | 
						|
        },
 | 
						|
        text: {
 | 
						|
            bg: 'transparent',
 | 
						|
            borderColor: 'transparent',
 | 
						|
            '&:disabled': {
 | 
						|
                'border-color': 'transparent',
 | 
						|
            },
 | 
						|
            '&:hover': {
 | 
						|
                background: 'transparent',
 | 
						|
                color: 'hoverBg',
 | 
						|
                borderColor: 'transparent',
 | 
						|
                textDecoration: 'underline',
 | 
						|
            },
 | 
						|
            '&:focus': {
 | 
						|
                background: 'transparent',
 | 
						|
                borderColor: 'transparent',
 | 
						|
            },
 | 
						|
            '& svg': {
 | 
						|
                fill: 'primary100',
 | 
						|
            },
 | 
						|
            [`&:hover .${utils_1.cssClass('Icon')} svg`]: {
 | 
						|
                fill: 'hoverBg',
 | 
						|
            },
 | 
						|
            className: utils_1.cssClass(['Button', 'Button_Text']),
 | 
						|
        },
 | 
						|
    },
 | 
						|
});
 | 
						|
const sizeVariants = styled_system_1.variant({
 | 
						|
    prop: 'size',
 | 
						|
    variants: {
 | 
						|
        sm: {
 | 
						|
            fontSize: 'sm',
 | 
						|
            py: 'xs',
 | 
						|
            lineHeight: 'default',
 | 
						|
            px: 'lg',
 | 
						|
            [`& .${utils_1.cssClass('Icon')}`]: {
 | 
						|
                marginTop: '-1px',
 | 
						|
                marginBottom: '-1px',
 | 
						|
            },
 | 
						|
        },
 | 
						|
        // md alias default
 | 
						|
        md: {},
 | 
						|
        default: {},
 | 
						|
        lg: {
 | 
						|
            py: 'default',
 | 
						|
            px: 'x3',
 | 
						|
            lineHeight: 'lg',
 | 
						|
        },
 | 
						|
        icon: {
 | 
						|
            py: 'default',
 | 
						|
            px: 'default',
 | 
						|
            lineHeight: 'sm',
 | 
						|
            minWidth: '34px',
 | 
						|
            height: '34px',
 | 
						|
            [`& .${utils_1.cssClass('Icon')} svg`]: {
 | 
						|
                padding: 0,
 | 
						|
                margin: 0,
 | 
						|
            },
 | 
						|
        },
 | 
						|
    },
 | 
						|
});
 | 
						|
const setPointer = (props) => {
 | 
						|
    if (props.href || props.onClick) {
 | 
						|
        return 'cursor: pointer';
 | 
						|
    }
 | 
						|
    if (props.as === 'a' && !props.href && !props.onClick) {
 | 
						|
        return 'cursor: auto';
 | 
						|
    }
 | 
						|
    return '';
 | 
						|
};
 | 
						|
/**
 | 
						|
 * Button CSS Styles which can be reused in another button-like component with styled-components
 | 
						|
 *
 | 
						|
 * Usage:
 | 
						|
 * ```
 | 
						|
 * import { ButtonCSS } from '@adminjs/design-system'
 | 
						|
 * import { Link } from 'react-router-dom'
 | 
						|
 *
 | 
						|
 * const MyStyledLink = styled(Link)`
 | 
						|
 *   ${ButtonCSS}
 | 
						|
 * `
 | 
						|
 * ```
 | 
						|
 * @memberof Button
 | 
						|
 * @alias ButtonCSS
 | 
						|
 */
 | 
						|
exports.ButtonCSS = styled_components_1.css `
 | 
						|
  -webkit-appearance: none;
 | 
						|
  -moz-appearance: none;
 | 
						|
  outline: 0;
 | 
						|
  display: inline-block;
 | 
						|
  font-family: ${({ theme }) => theme.font};
 | 
						|
  line-height: ${utils_1.themeGet('lineHeights', 'lg')};
 | 
						|
  vertical-align: middle;
 | 
						|
 | 
						|
  border: 1px solid ${utils_1.themeGet('colors', 'primary100')};
 | 
						|
  color: ${utils_1.themeGet('colors', 'primary100')};
 | 
						|
  
 | 
						|
  ${(props) => setPointer(props)};
 | 
						|
  text-decoration: none;
 | 
						|
  padding: ${utils_1.themeGet('space', 'sm')} ${utils_1.themeGet('space', 'xxl')};
 | 
						|
  box-sizing: border-box;
 | 
						|
 | 
						|
  & > .${utils_1.cssClass('Icon')} {
 | 
						|
    vertical-align: middle;
 | 
						|
  }
 | 
						|
 | 
						|
  & > .${utils_1.cssClass('Icon')} svg {
 | 
						|
    margin: 0 ${utils_1.themeGet('space', 'md')} 0 0;
 | 
						|
  }
 | 
						|
 | 
						|
  & .${utils_1.cssClass('Icon')} svg {
 | 
						|
    fill: ${utils_1.themeGet('colors', 'primary100')};
 | 
						|
  }
 | 
						|
  &:hover {
 | 
						|
    color: ${utils_1.themeGet('colors', 'white')};
 | 
						|
    background: ${utils_1.themeGet('colors', 'hoverBg')};
 | 
						|
    border-color: ${utils_1.themeGet('colors', 'hoverBg')};
 | 
						|
    & .${utils_1.cssClass('Icon')} svg {
 | 
						|
      fill: ${utils_1.themeGet('colors', 'white')};
 | 
						|
    }
 | 
						|
  }
 | 
						|
  &:focus {
 | 
						|
    border-color: ${utils_1.themeGet('colors', 'accent')};
 | 
						|
    ${({ theme }) => `box-shadow: ${utils_1.focusShadowStyle(theme)}`};
 | 
						|
  }
 | 
						|
 | 
						|
  &:disabled {
 | 
						|
    color: ${utils_1.themeGet('colors', 'grey60')};
 | 
						|
    border-color: ${utils_1.themeGet('colors', 'grey80')};
 | 
						|
    background: ${utils_1.themeGet('colors', 'white')};
 | 
						|
    cursor: default;
 | 
						|
    & .${utils_1.cssClass('Icon')} svg {
 | 
						|
      fill: ${utils_1.themeGet('colors', 'grey60')};
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  ${({ rounded }) => (rounded ? 'border-radius: 9999px' : '')};
 | 
						|
 | 
						|
  ${styled_system_1.color};
 | 
						|
  ${styled_system_1.space};
 | 
						|
  ${styled_system_1.typography};
 | 
						|
  ${buttonVariants};
 | 
						|
  ${sizeVariants};
 | 
						|
`;
 | 
						|
exports.default = exports.ButtonCSS;
 |