Skip to content
Snippets Groups Projects
Tooltip.tsx 1.4 KiB
Newer Older
insert's avatar
insert committed
import Tippy, { TippyProps } from "@tippyjs/react";
import styled from "styled-components";
insert's avatar
insert committed

import { Text } from "preact-i18n";

insert's avatar
insert committed
import { Children } from "../../types/Preact";

insert's avatar
insert committed
type Props = Omit<TippyProps, "children"> & {
    children: Children;
    content: Children;
insert's avatar
insert committed
};
insert's avatar
insert committed

export default function Tooltip(props: Props) {
    const { children, content, ...tippyProps } = props;
    return (
        <Tippy content={content} {...tippyProps}>
            {/*
insert's avatar
insert committed
            // @ts-expect-error Type mis-match. */}
nizune's avatar
nizune committed
            <div style={`display: flex;`}>{children}</div>
        </Tippy>
    );
insert's avatar
insert committed
}

const PermissionTooltipBase = styled.div`
    display: flex;
    align-items: center;
    flex-direction: column;

    span {
        font-weight: 700;
        text-transform: uppercase;
        color: var(--secondary-foreground);
        font-size: 11px;
    }

    code {
        font-family: var(--monospace-font);
insert's avatar
insert committed
export function PermissionTooltip(
    props: Omit<Props, "content"> & { permission: string },
insert's avatar
insert committed
) {
    const { permission, ...tooltipProps } = props;

    return (
        <Tooltip
            content={
                <PermissionTooltipBase>
                    <span>
                        <Text id="app.permissions.required" />
                    </span>
                    <code>{permission}</code>
                </PermissionTooltipBase>
            }
            {...tooltipProps}
        />
    );