Voortgang
Een smalle balk die volloopt zodra een taak is voltooid — uploads, installaties, een onboarding in meerdere stappen — met die neobrutalistische stijl van randen en schaduwen.
"use client"
import * as React from "react"De progress bar meldt hoeveel van een taak af is — een balk die zich vult van 0 tot 100. Gebouwd op de Base UI Progress-component en vormgegeven volgens het neobrutalistische recept: een dikke rand, een scherpe schaduw en een egale vulling.
Ideaal voor:
- Bestandsuploads en -downloads — determinate voortgang op basis van bytes, met een zichtbaar percentage.
- Flows met meerdere stappen — onboarding, checkout en wizards; de balk laat zien hoe ver de gebruiker is.
- Langlopende taken — imports, exports en installaties waarvan de server de voortgang doorgeeft.
Installatie#
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
Installeer de volgende afhankelijkheden:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Kopieer en plak de volgende code in je project.
"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 }
Werk de importpaden bij zodat ze overeenkomen met je projectconfiguratie.
Gebruik#
import { Progress } from "@/components/ui/progress"<Progress value={33} />Compositie#
Met label en waarde#
Gebruik ProgressLabel en ProgressValue om een weergave van label en waarde toe te voegen.
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
└── ProgressIndicatorVoorbeelden#
Label#
Gebruik ProgressLabel en ProgressValue om een weergave van label en waarde toe te voegen.
import {
Progress,
ProgressLabel,Gecontroleerd#
Een voortgangsbalk die met een slider kan worden bediend.
"use client"
import * as React from "react"RTL#
Om RTL-ondersteuning in Neobrutalism in te schakelen, zie de RTL-configuratiegids.
"use client"
import * as React from "react"Toegankelijkheid#
Progress is een statusindicator, geen besturingselement — hij krijgt nooit focus en kent geen toetsenbordinteracties. Base UI rendert role="progressbar" met aria-valuemin, aria-valuemax en aria-valuenow, en ProgressLabel wordt automatisch gekoppeld via aria-labelledby — geef daaraan (of aan een aria-label) de voorkeur boven een balk zonder label, zodat schermlezers kunnen zeggen wát er laadt, niet alleen het percentage. Geef value={null} door wanneer de voortgang onbekend is; de balk schakelt dan over naar een indeterminate status.
API-referentie#
Zie de documentatie van Base UI Progress.