import clsx from "clsx"; import { FC, HTMLAttributes } from "react"; import { v4 as uuidv4 } from "uuid"; import { Item, Constants, ItemUtils, } from "@dndbeyond/character-rules-engine/es"; import { AttunementIcon } from "~/tools/js/smartComponents/Icons"; import { LegacyBadge } from "../LegacyBadge"; import { Tooltip } from "../Tooltip"; import styles from "./styles.module.css"; /** * Component to display the name of an item with an attunement icon and a color * to identify the rarity of the object. It is used in the equipment tab on the * character sheet as well as the manage inventory pane. */ interface ItemNameProps extends HTMLAttributes { item: Item; className?: string; onClick?: () => void; showAttunement?: boolean; showLegacy?: boolean; showLegacyBadge?: boolean; } export const ItemName: FC = ({ showAttunement = true, showLegacy = false, showLegacyBadge, className, onClick, item, ...props }) => { const handleClick = (e: React.MouseEvent): void => { if (onClick) { e.stopPropagation(); e.nativeEvent.stopImmediatePropagation(); onClick(); } }; const getDisplayName = () => { const name = ItemUtils.getName(item); if (!name) return ItemUtils.getDefinitionName(item); if (!name) return "Item"; return name; }; const getItemRarity = () => { switch (ItemUtils.getRarity(item)) { case Constants.ItemRarityNameEnum.ARTIFACT: return "artifact"; case Constants.ItemRarityNameEnum.LEGENDARY: return "legendary"; case Constants.ItemRarityNameEnum.VERY_RARE: return "veryrare"; case Constants.ItemRarityNameEnum.RARE: return "rare"; case Constants.ItemRarityNameEnum.UNCOMMON: return "uncommon"; case Constants.ItemRarityNameEnum.COMMON: default: return "common"; } }; const tooltipId = `itemName-${uuidv4()}`; return ( <> {getDisplayName()} {item.isCustomized && ( <> * )} {showAttunement && item.isAttuned && ( )} {showLegacy && ItemUtils.isLegacy(item) && ( (Legacy) )} {showLegacyBadge && ItemUtils.isLegacy(item) && ( )} ); };