Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Dúvida] Organização do Tailwind

import { cva } from "class-variance-authority";

const Container = cva(
  "bg-neutral-darker rounded-lg overflow-hidden w-full h-10",
);

const Bar = cva(
  "h-full flex justify-center text-neutral-darker items-center text-base leading-[125%] transition-all duration-500 ease-in-out",
  {
    variants: {
      status: {
        completed: "bg-green-500",
        loading: "bg-primary-highlight",
      },
    },
  },
);

export function ProgressBar({ percent }) {
  const Progress = percent >= 100 ? "completed" : "loading";
  const Percentage = percent <= 100 ? `${percent}%` : `100%`;

  return (
    <div className={Container()}>
      <div
        style={{
          width: `${percent}%`,
          maxWidth: `100%`,
        }}
        className={Bar({ status: Progress })}
      >
        <p>{Percentage}</p>
      </div>
    </div>
  );
}

O curso foi muito bom, apesar de ter q "reaprender" o css gostei do tailwind, não se preocupar em nome de class, pastas etc é o melhor de tudo, o que pega é a organização mesmo. Essa biblioteca que estava disponivel no curso ajuda a separar as responsabilidades de cada estilo, mas mesmo assim é um pouco ruim de visualizar as cores, a extensão que o Vinny mostra não pega no cva, teria algum outro jeito ou outra biblioteca para isso?

2 respostas

Olá, Allan!

Que bom saber que você gostou do curso! Essa é uma percepção bem comum de quem começa a usar Tailwind. A liberdade de não precisar criar nomes de classes é ótima, mas, conforme a aplicação cresce, a organização dos estilos passa a ser um desafio.

No caso do class-variance-authority (cva), realmente algumas extensões, como a de visualização de cores do Tailwind, não conseguem interpretar as classes que estão dentro da função cva(). Isso acontece porque elas normalmente analisam apenas atributos className escritos diretamente no JSX.

Uma alternativa é utilizar extensões que ofereçam suporte ao cva ou configurar a própria extensão do Tailwind CSS no VS Code para reconhecer padrões personalizados, quando houver suporte. Outra possibilidade é usar bibliotecas como tailwind-variants (tv), que possuem uma API semelhante ao cva e são adotadas por alguns projetos justamente pela experiência de desenvolvimento. Ainda assim, a compatibilidade depende das extensões utilizadas.

De qualquer forma, o padrão que você aplicou está bem organizado: você separou as variantes do componente da lógica de renderização, o que facilita bastante a manutenção conforme novos estados forem surgindo.

solução!

Opa!

Coloquei um codigo que faz a extensão do tailwind funcionar no cva e deu certo!!

Pra quem estiver lendo isso e está com a mesma duvida, o codigo é esse: "tailwindCSS.experimental.classRegex": [
["cva\(([^)])\)", "["']([^\"']*).?["'`]"]

só colocar no settings.json do vs code e reinicar o programa, talvez tenha que reiniciar a própria extensão também

valeu!