Skip to content
Snippets Groups Projects
Overline.tsx 1.26 KiB
Newer Older
insert's avatar
insert committed
import styled, { css } from "styled-components";
import { Children } from "../../types/Preact";
insert's avatar
insert committed
import { Text } from 'preact-i18n';
insert's avatar
insert committed

interface Props {
insert's avatar
insert committed
    error?: string;
insert's avatar
insert committed
    block?: boolean;
    children?: Children;
    type?: "default" | "subtle" | "error";
}

insert's avatar
insert committed
const OverlineBase = styled.div<Omit<Props, "children" | "error">>`
insert's avatar
insert committed
    display: inline;
    margin: 0.4em 0;
    margin-top: 0.8em;

    font-size: 14px;
    font-weight: 600;
    color: var(--foreground);
    text-transform: uppercase;

insert's avatar
insert committed
    ${(props) =>
        props.type === "subtle" &&
        css`
            font-size: 12px;
            color: var(--secondary-foreground);
        `}
insert's avatar
insert committed
    ${(props) =>
        props.type === "error" &&
        css`
            font-size: 12px;
            font-weight: 400;
            color: var(--error);
        `}
insert's avatar
insert committed
    ${(props) =>
        props.block &&
        css`
            display: block;
        `}
export default function Overline(props: Props) {
insert's avatar
insert committed
    return (
        <OverlineBase {...props}>
insert's avatar
insert committed
            {props.children}
            {props.children && props.error && <> &middot; </>}
insert's avatar
insert committed
            {props.error && <Overline type="error">
                <Text id={`error.${props.error}`}>{props.error}</Text>
            </Overline>}
insert's avatar
insert committed
        </OverlineBase>
insert's avatar
insert committed
    );
insert's avatar
insert committed
}