import clsx from "clsx"; import { Check, Minus, X } from "lucide-react"; import type * as React from "react"; import type { Tables } from "~/db/tables"; import styles from "./NoteAvatar.module.css"; type Sentiment = Tables["PrivateUserNote"]["sentiment"]; const BADGE_CLASS: Record = { POSITIVE: styles.positive, NEUTRAL: styles.neutral, NEGATIVE: styles.negative, }; const BADGE_ICON: Record = { POSITIVE: , NEUTRAL: , NEGATIVE: , }; const SIZE_CLASS = { xs: styles.badgeXs, sm: styles.badgeSm, md: styles.badgeMd, } as const; /** * Overlays a sentiment badge (check / cross / dash) on the bottom-left of the wrapped avatar; * `size` matches the avatar. `onClick` is kept out of the tab order, so only use it as a shortcut * to an action also available elsewhere. */ export function NoteAvatar({ sentiment, size = "md", className, onClick, children, }: { sentiment?: Sentiment | null; size?: keyof typeof SIZE_CLASS; className?: string; onClick?: () => void; children: React.ReactNode; }) { const Wrapper = onClick ? "button" : "div"; return ( {children} {sentiment ? ( {BADGE_ICON[sentiment]} ) : null} ); }