@kubit-ui-web/react-components
Version:
Kubit React Components is a customizable, accessible library of React web components, designed to enhance your application's user experience
55 lines (51 loc) • 1.69 kB
JavaScript
import styled, { css } from 'styled-components';
// mixin
import { focusVisibleAlt } from '../../styles/mixins/focusAlt.mixin';
// theme styles
import { getStyles, getTypographyStyles } from '../../utils/getStyles/getStyles';
import { IconPositionType } from './types/buttonIconPosition';
// set tokens
const setTokens = (state, styles, sizeStyles) => {
if (!styles?.[state]) {
return css ``;
}
const combinedStyles = { ...sizeStyles, ...styles[state] };
return css `
// common styles
${getStyles(combinedStyles)}
// typography
${getTypographyStyles(combinedStyles)}
`;
};
export const ButtonStyled = styled.button `
display: inline-flex;
align-items: center;
justify-content: center;
text-align: ${({ alignText }) => alignText ?? 'left'};
cursor: pointer;
flex-direction: ${props => props.$iconPosition === IconPositionType.LEFT ? 'row' : 'row-reverse'};
position: relative;
${({ $state, $styles, $sizeStyles }) => setTokens($state, $styles, $sizeStyles)}
&:disabled {
cursor: default;
}
min-width: ${props => props.minWidth};
width: ${props => (props.$fullWidth ? '100%' : 'auto')};
&::after {
content: '${props => props.$ghostText}';
display: ${props => (props.$loading ? 'block' : 'none')};
position: relative;
visibility: hidden;
}
// In alternative variants, the focus colors must be change
${({ $styles, $state }) => $styles?.[$state]?.altVariant && focusVisibleAlt()}
`;
export const ButtonLoaderStyled = styled.span `
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
`;
//# sourceMappingURL=button.styled.js.map