Progress
Una barra o anillo que muestra cuánto ha avanzado una tarea, se suaviza entre actualizaciones y se desliza mientras el total es desconocido.
pnpm dlx shadcn@latest add https://hextaui.com/r/progress.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/progress.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
<Progress /> dibuja su propia pista e indicador después de sus hijos, así que una etiqueta y un valor quedan en una línea sobre la barra. Cada actualización suaviza el relleno desde donde está, de modo que las actualizaciones rápidas se leen como un movimiento fluido y no como saltos.
Tamaños
xs, sm, default y lg cambian el grosor de la barra. xs es la línea fina que Attachment dibuja a lo largo de su borde inferior.
Estado
variant colorea solo el relleno o el anillo, así que la pista, la etiqueta y el valor se mantienen neutros.
Indeterminado
Pasa value={null} mientras se desconoce el total. Un segmento se desliza por la pista y, cuando llega un número, el relleno crece desde el inicio.
Círculo
<ProgressCircle /> dibuja el mismo valor como un anillo, empezando por arriba. Los hijos quedan en el centro, lo que encaja con <ProgressValue /> en lg y xl.
Círculo indeterminado
Un arco gira alrededor del anillo hasta que llega un valor.
Rango y formato personalizados
Define min y max para cualquier rango, format para el número y un hijo función en <ProgressValue /> para el texto. Da a los lectores de pantalla las mismas palabras con getAriaValueText.
Valor animado
Renderiza <NumberFlow /> dentro de <ProgressValue /> para que solo giren los dígitos que cambian, al ritmo del relleno.
Etiquetas largas
Los nombres largos se ajustan en sus propias líneas y el valor se queda al final. Los anillos funcionan como estado compacto junto a cada fila.
Sin etiqueta visible
Da nombre a la barra con aria-label cuando el contexto ya dice qué se está cargando.
De derecha a izquierda
El relleno y el deslizamiento indeterminado empiezan desde la derecha. Pasa locale para dar formato al valor con los dígitos del lector.
- La raíz es un
progressbarconaria-valuenow,aria-valuemin,aria-valuemaxy unaria-valuetextcon formato. Mientras es indeterminado no tiene valor actual. <ProgressLabel />da nombre a la barra. Sin él, pasaaria-label.<ProgressValue />se oculta a los lectores de pantalla, ya que el progressbar ya anuncia el valor.- Con movimiento reducido, el relleno salta a cada nuevo valor, y la barra y el anillo indeterminados pulsan en su sitio en lugar de moverse.
- Los valores se formatean en
en-USsalvo que paseslocale, para que el servidor y el navegador rendericen el mismo texto.
Construido sobre el progress de Base UI. Cada parte acepta las props de la primitiva que envuelve.
| Prop | Tipo | Predeterminado |
|---|---|---|
valuenull hace que la barra sea indeterminada. | number | null | – |
min | number | 0 |
max | number | 100 |
size | "xs" | "sm" | "default" | "lg" | "default" |
variant | "default" | "success" | "warning" | "destructive" | "default" |
formatDa formato al valor. Sin él, el valor se muestra como porcentaje. | Intl.NumberFormatOptions | – |
locale | Intl.LocalesArgument | "en-US" |
getAriaValueText | (formattedValue: string, value: number | null) => string | – |
className | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="progress" | La raíz. |
data-size | El tamaño: xs, sm, default o lg. |
data-variant | La variante de estado. |
data-progressing | Presente mientras el valor está por debajo de max. |
data-complete | Presente cuando el valor alcanza max. |
data-indeterminate | Presente cuando el valor es null o no es un número finito. |
Da nombre al progressbar. Renderiza un <span> y acepta los mismos atributos de estado que la raíz.
| Prop | Tipo | Predeterminado |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descripción |
|---|---|
data-slot="progress-label" | La etiqueta. |
| Prop | Tipo | Predeterminado |
|---|---|---|
childrenTexto personalizado. Sin él, se muestra el valor formateado, o nada mientras es indeterminado. | (formattedValue: string | null, value: number | null) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descripción |
|---|---|
data-slot="progress-value" | El valor. |
Lo renderiza <Progress /> y su tamaño lo define size. Se exporta para composiciones personalizadas.
| Atributo | Descripción |
|---|---|
data-slot="progress-track" | La pista. |
--progress-dir | 1, o -1 en derecha a izquierda, para que el deslizamiento indeterminado siga la dirección de lectura. |
El relleno. Su ancho se define en línea a partir del valor y se suaviza entre actualizaciones.
| Atributo | Descripción |
|---|---|
data-slot="progress-indicator" | El relleno. |
| Prop | Tipo | Predeterminado |
|---|---|---|
valuenull hace girar un arco. | number | null | – |
min | number | 0 |
max | number | 100 |
size | "sm" | "default" | "lg" | "xl" | "default" |
variant | "default" | "success" | "warning" | "destructive" | "default" |
locale | Intl.LocalesArgument | "en-US" |
childrenSe muestra en el centro del anillo. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="progress-circle" | La raíz. |
data-size | El tamaño: sm, default, lg o xl. |
data-variant | La variante de estado. |
data-progressing | Presente mientras el valor está por debajo de max. |
data-complete | Presente cuando el valor alcanza max. |
data-indeterminate | Presente cuando el valor es null o no es un número finito. |
--progress-circle-size | El ancho y el alto del anillo. |
--progress-stroke | El grosor del trazo del anillo. |
- AlertMensajes en línea para estado y comentarios, con una superficie neutra, un icono de color y un descarte que se colapsa con suavidad.
- EmptyUn marcador de posición para pantallas que aún no tienen nada que mostrar, con un icono, un mensaje y la siguiente acción.
- SkeletonMarcadores de posición que esperan 150ms antes de mostrarse, toman el tamaño exacto del contenido que envuelven y lo hacen aparecer con un fundido sin mover nada.
- SpinnerUn indicador de carga con marcas al estilo Apple o un anillo que respira, que puede esperar antes de mostrarse y permanecer el tiempo suficiente para no parpadear.
- ToastMensajes breves que se apilan con orden, se expanden al pasar el cursor, se descartan deslizando y convierten un estado de carga en éxito o error en el mismo lugar.
- AttachmentTarjetas de archivos e imágenes para subidas, con progreso, estados, acciones, un trigger de tarjeta completa y nombres que conservan su extensión.