revite/src/components/common/IconBase.tsx

65 lines
1.3 KiB
TypeScript
Raw Normal View History

import { API } from "revolt.js";
2022-04-27 15:18:51 -04:00
import { Nullable } from "revolt.js";
import styled, { css } from "styled-components/macro";
2021-06-19 07:34:53 -04:00
export interface IconBaseProps<T> {
2021-07-05 06:25:20 -04:00
target?: T;
url?: string;
attachment?: Nullable<API.File>;
2021-06-19 07:34:53 -04:00
2021-07-05 06:25:20 -04:00
size: number;
hover?: boolean;
2021-07-05 06:25:20 -04:00
animate?: boolean;
2021-06-19 07:34:53 -04:00
}
2021-06-19 10:29:04 -04:00
interface IconModifiers {
/**
* If this is undefined or null then the icon defaults to square, else uses the CSS variable given.
*/
borderRadius?: string;
hover?: boolean;
2021-06-19 10:29:04 -04:00
}
export default styled.svg<IconModifiers>`
2021-07-05 06:25:20 -04:00
flex-shrink: 0;
2022-01-16 07:44:00 -05:00
cursor: pointer;
2021-07-05 06:25:20 -04:00
img {
width: 100%;
height: 100%;
object-fit: cover;
${(props) =>
props.borderRadius &&
2021-07-05 06:25:20 -04:00
css`
border-radius: var(${props.borderRadius});
2021-07-05 06:25:20 -04:00
`}
}
${(props) =>
props.hover &&
css`
&:hover .icon {
filter: brightness(0.8);
}
`}
2021-06-19 07:34:53 -04:00
`;
2021-06-19 10:29:04 -04:00
export const ImageIconBase = styled.img<IconModifiers>`
2021-07-05 06:25:20 -04:00
flex-shrink: 0;
object-fit: cover;
${(props) =>
props.borderRadius &&
2021-07-05 06:25:20 -04:00
css`
border-radius: var(${props.borderRadius});
2021-07-05 06:25:20 -04:00
`}
${(props) =>
props.hover &&
css`
&:hover img {
filter: brightness(0.8);
}
`}
2021-06-19 10:29:04 -04:00
`;