Solução 02
Veja diff no github
Criando o botão
Vamos criar nosso terceiro botão. Mas cuidado, um color picker é um input e não um botão!
No HeaderCard.tsx:
type HeaderCardProps = {  bgColor: string,  handleClick: React.MouseEventHandler<HTMLButtonElement>,  handleChangeColorClick: React.MouseEventHandler<HTMLButtonElement>,};
export default function HeaderCard({  bgColor,  handleClick,  handleChangeColorClick,}: HeaderCardProps) {  return (    <div className="w-full max-w-4xl px-10 py-6 mx-auto bg-white border-2 border-white rounded-lg bg-opacity-15 ">      <h1        className="font-bold brightness-50 text-7xl font-display"        style={{ color: bgColor }}      >        Frases Motivacionais      </h1>      <button        onClick={handleClick}        className="px-4 py-2 mt-10 font-bold text-white bg-transparent bg-gray-800 border-2 border-white rounded bg-opacity-10 focus:outline-none focus:ring-2 focus:ring-white focus:ring-opacity-50"      >        Me dê uma dose de ânimo      </button>
      <button        onClick={handleChangeColorClick}        className="px-4 py-2 mt-10 ml-3 font-bold text-white bg-transparent bg-gray-800 border-2 border-white rounded bg-opacity-10 focus:outline-none focus:ring-2 focus:ring-white focus:ring-opacity-50"      >        <span className="text-base">Trocar a Cor</span>      </button>      <label        htmlFor="color-changer"        className="inline-flex items-center justify-center px-4 py-2 mt-10 ml-3 font-bold text-white bg-transparent bg-gray-800 border-2 border-white rounded cursor-pointer bg-opacity-10 focus:outline-none focus:ring-2 focus:ring-white focus:ring-opacity-50"      >        Cor manual        <input type="color" name="" id="color-changer" className="w-0 h-0" />      </label>    </div>  );}Ok, o botão está lá. Mas ele não faz nada além de mostrar um color picker. Precisamos agora trazer para o HeaderCard a função que altera a cor do estado (setBgColor) e usá-la aqui.
Vamos receber a setBgColor como props - e por enquanto com uma tipagem bem genérica:
type HeaderCardProps = {  bgColor: string;  handleClick: React.MouseEventHandler<HTMLButtonElement>;  handleChangeColorClick: React.MouseEventHandler<HTMLButtonElement>;  setBgColor: (color: string) => void;
export default function HeaderCard({  bgColor,  handleClick,  handleChangeColorClick,  setBgColor,}: HeaderCardProps) {  return (};// (...)Tipando um setState
Analogamente ao event handler, não temos ideia de como tipar uma função setState. Mas com a “técnica do hover” a gente consegue rapidamente descobrir. Vamos até o componente App e descobrir que o setBgColor tem a tipagem React.Dispatch<React.SetStateAction<string>>
type HeaderCardProps = {  bgColor: string;  handleClick: React.MouseEventHandler<HTMLButtonElement>;  handleChangeColorClick: React.MouseEventHandler<HTMLButtonElement>;  setBgColor: React.Dispatch<React.SetStateAction<string>>
export default function HeaderCard({  bgColor,  handleClick,  handleChangeColorClick,  setBgColor,}: HeaderCardProps) {  return (};// (...)E pronto! temos a solução!