Postęp
Wąski pasek, który wypełnia się w miarę wykonywania zadania — przesyłanie plików, instalacje, wieloetapowa rejestracja — z neobrutalistycznymi obramowaniami i cieniami.
"use client"
import * as React from "react"Pasek postępu informuje, jaka część zadania jest ukończona — tor wypełniający się od 0 do 100. Zbudowany na komponencie Base UI Progress i ostylowany zgodnie z neobrutalistyczną recepturą: gruba ramka, twardy cień, jednolite wypełnienie.
Sięgnij po ten komponent, gdy:
- Przesyłanie i pobieranie plików — określony, liczony w bajtach postęp z widocznym procentem.
- Przepływy wieloetapowe — onboarding, płatność i kreatory; pasek pokazuje, jak daleko zaszedł użytkownik.
- Długotrwałe zadania — importy, eksporty i instalacje, które raportują ukończenie z serwera.
Instalacja#
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
Zainstaluj następujące zależności:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Skopiuj i wklej poniższy kod do swojego projektu.
"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 }
Zaktualizuj ścieżki importu, aby pasowały do konfiguracji twojego projektu.
Użycie#
import { Progress } from "@/components/ui/progress"<Progress value={33} />Kompozycja#
Z etykietą i wartością#
Użyj ProgressLabel i ProgressValue, aby dodać wyświetlanie etykiety i wartości.
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
└── ProgressIndicatorPrzykłady#
Etykieta#
Użyj ProgressLabel i ProgressValue, aby dodać wyświetlanie etykiety i wartości.
import {
Progress,
ProgressLabel,Kontrolowany#
Pasek postępu, którym można sterować za pomocą slidera.
"use client"
import * as React from "react"RTL#
Aby włączyć obsługę RTL w Neobrutalism, zobacz przewodnik konfiguracji RTL.
"use client"
import * as React from "react"Dostępność#
Progress to wskaźnik stanu, a nie kontrolka — nigdy nie przyjmuje fokusu i nie ma żadnej obsługi klawiatury. Base UI renderuje role="progressbar" z aria-valuemin, aria-valuemax i aria-valuenow, a ProgressLabel jest wiązany automatycznie przez aria-labelledby — wybieraj go (lub aria-label) zamiast paska bez etykiety, aby czytniki ekranu mogły powiedzieć, co się ładuje, a nie tylko podać procent. Gdy stopień ukończenia jest nieznany, przekaż value={null} — pasek przełączy się w stan nieokreślony.
Referencja API#
Zobacz dokumentację Base UI Progress.