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