import clsx from "clsx"; import { FC, HTMLAttributes, useEffect, useState } from "react"; import { useSelector } from "react-redux"; import { SpellUtils, EntityUtils, FormatUtils, BaseSpell, DataOriginRefData, characterEnvSelectors, } from "@dndbeyond/character-rules-engine/es"; import { Tooltip } from "~/components/Tooltip"; import { useCharacterTheme } from "~/contexts/CharacterTheme"; import { useUnpropagatedClick } from "~/hooks/useUnpropagatedClick"; import { ConcentrationIcon, RitualIcon } from "../../tools/js/smartComponents/"; import { LegacyBadge } from "../LegacyBadge"; import styles from "./styles.module.css"; interface Props extends HTMLAttributes { onClick?: () => void; spell: BaseSpell; showSpellLevel?: boolean; showIcons?: boolean; showExpandedType?: boolean; showLegacy?: boolean; showLegacyBadge?: boolean; dataOriginRefData?: DataOriginRefData | null; } export const SpellName: FC = ({ onClick, spell, showSpellLevel = true, showExpandedType = false, showIcons = true, dataOriginRefData = null, showLegacy = false, showLegacyBadge = false, className, ...props }) => { const [expandedInfoText, setExpandedInfoText] = useState(""); const location = useSelector(characterEnvSelectors.getContext); const { isDarkMode } = useCharacterTheme(); const getIconTheme = () => { if (location === "BUILDER") return "dark"; return isDarkMode ? "gray" : "dark"; }; const handleClick = useUnpropagatedClick(onClick); useEffect(() => { if (dataOriginRefData) { let expandedDataOriginRef = SpellUtils.getExpandedDataOriginRef(spell); if (expandedDataOriginRef === null) { setExpandedInfoText(""); } else { setExpandedInfoText( EntityUtils.getDataOriginRefName( expandedDataOriginRef, dataOriginRefData ) ); } } }, []); return ( <> {showExpandedType && expandedInfoText !== "" && ( <> + )} {SpellUtils.getName(spell)} {SpellUtils.isCustomized(spell) && ( <> * )} {showIcons && SpellUtils.getConcentration(spell) && ( )} {showIcons && SpellUtils.isRitual(spell) && ( )} {showSpellLevel && ( ({FormatUtils.renderSpellLevelShortName(SpellUtils.getLevel(spell))} ) )} {showLegacy && SpellUtils.isLegacy(spell) && ( • Legacy )} {showLegacyBadge && SpellUtils.isLegacy(spell) && ( )} ); };