@sinchsmb/ui-kit
Version:
UI kit for SinchSMB frontend
97 lines (81 loc) • 2.6 kB
text/typescript
import { AriaAttributes } from 'react';
import { css } from 'styled-components/macro';
import { color, radius, shadow } from '../theme';
export const commonInputBaseStyles = css`
background-color: ${color('sys/color/input/background/default')};
border-radius: ${radius('sys/radius/form-item')};
box-sizing: border-box;
color: ${color('sys/color/text/primary')};
font-size: 14px;
height: 36px;
outline: none;
padding: 6px 8px;
text-overflow: ellipsis;
width: 100%;
&::placeholder {
color: ${color('sys/color/text/disabled')};
}
&:disabled {
background-color: ${color('sys/color/input/background/disabled')};
color: ${color('sys/color/text/disabled')};
cursor: not-allowed;
}
`;
/**
* **IMPORTANT**: Pay attention that some components has their onw styled separated from this.
* Don't forget to fix it to on any this changes.
*
* @see inputBorderContainerStyles
*/
export const commonInputStyles = css`
@mixin ${commonInputBaseStyles};
border: 1px solid ${color('sys/color/input/border/default')};
transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out;
&[aria-invalid='true'] {
border-color: ${color('sys/color/input/border/invalid')};
}
&:hover:not(&:disabled) {
border: 1px solid ${color('sys/color/input/border/focus')};
}
&:focus:not(&:disabled) {
border: 1px solid ${color('sys/color/input/border/focus')};
box-shadow: ${shadow('sys/shadow/focus')};
}
`;
/* Styles for wrapper of {@link TextField} and {@link TextArea} */
export const inputBorderContainerStyles = (props: {
$invalid?: AriaAttributes['aria-invalid'];
$disabled?: boolean;
}) => {
return css`
background-color: ${() => {
if (props.$disabled) {
return color('sys/color/input/background/disabled');
}
return color('sys/color/input/background/default');
}};
border: 1px solid ${color('sys/color/input/border/default')};
border-color: ${() => {
if (props.$invalid) {
return color('sys/color/input/border/invalid');
}
if (props.$disabled) {
return color('sys/color/input/border/disabled');
}
return color('sys/color/input/border/default');
}};
border-radius: ${radius('sys/radius/form-item')};
&:focus-within {
box-shadow: ${shadow('sys/shadow/focus')};
border-color: ${color('sys/color/input/border/focus')};
}
&:hover {
border-color: ${() => {
if (props.$disabled) {
return undefined;
}
return color('sys/color/input/border/focus');
}};
}
`;
};