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;
 |