Progresso
Uma barra fina que vai se preenchendo à medida que uma tarefa é concluída — uploads, instalações, integração em várias etapas — com aquele estilo neobrutalista de bordas e sombras.
"use client"
import * as React from "react"A barra de progresso informa quanto de uma tarefa já foi concluído — uma trilha que se preenche de 0 a 100. Construída sobre o componente Base UI Progress e estilizada seguindo a receita neobrutalista: borda grossa, sombra dura, preenchimento sólido.
Quando usar:
- Uploads e downloads de arquivos — progresso determinado, guiado por bytes, com porcentagem visível.
- Fluxos em várias etapas — onboarding, checkout e assistentes; a barra mostra até onde o usuário chegou.
- Tarefas demoradas — importações, exportações e instalações que reportam a conclusão a partir do servidor.
Instalação#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/progress.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/progress.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/progress.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/progress.json
Instale as seguintes dependências:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Copie e cole o código a seguir no seu projeto.
"use client"
import * as React from "react"
import { Progress as ProgressPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function Progress({
className,
value,
...props
}: React.ComponentProps<typeof ProgressPrimitive.Root>) {
return (
<ProgressPrimitive.Root
data-slot="progress"
className={cn(
"relative flex h-4 w-full items-center overflow-hidden rounded border-2 bg-background",
className
)}
{...props}
>
<ProgressPrimitive.Indicator
data-slot="progress-indicator"
className="size-full flex-1 bg-primary transition-all"
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
/>
</ProgressPrimitive.Root>
)
}
export { Progress }
Atualize os caminhos de importação conforme a configuração do seu projeto.
Uso#
import { Progress } from "@/components/ui/progress"<Progress value={33} />Composição#
Com rótulo e valor#
Use ProgressLabel e ProgressValue para exibir um rótulo e um valor.
import {
Progress,
ProgressLabel,
ProgressValue,
} from "@/components/ui/progress"
;<Progress value={56} className="w-full max-w-sm">
<ProgressLabel>Upload progress</ProgressLabel>
<ProgressValue />
</Progress>Progress
├── ProgressLabel
├── ProgressValue
└── ProgressTrack
└── ProgressIndicatorExemplos#
Rótulo#
Use ProgressLabel e ProgressValue para exibir um rótulo e um valor.
import {
Progress,
ProgressLabel,Controlado#
Uma barra de progresso que pode ser controlada por um slider.
"use client"
import * as React from "react"RTL#
Para ativar o suporte a RTL no Neobrutalism, consulte o guia de configuração de RTL.
"use client"
import * as React from "react"Acessibilidade#
Progress é um indicador de status, não um controle — nunca recebe foco e não tem interações de teclado. O Base UI renderiza role="progressbar" com aria-valuemin, aria-valuemax e aria-valuenow, e o ProgressLabel é associado automaticamente via aria-labelledby — prefira usá-lo (ou um aria-label) em vez de uma barra sem rótulo, para que os leitores de tela possam dizer o que está sendo carregado, e não apenas a porcentagem. Passe value={null} quando a conclusão for desconhecida; a barra muda para o estado indeterminado.
Referência da API#
Consulte a documentação Base UI Progress.