Hecho sobre el UI SDK 0.1.0-beta.2 de Vercel. Su API puede cambiar.
Timeline
Una línea de tiempo sobre el UI SDK de Vercel para actividad, progreso de pedidos y pasos de agentes, vertical u horizontal, con estados, marcas de tiempo, iconos y modo feed.
- Componentes de visualización de datos
- 7 partes
- 8 ejemplos
@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-timeline.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 @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/ui-sdk-timeline.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
UI SDK añade un poco de CSS propio en una capa de cascada llamada ui-sdk. Declara esa capa al principio de tu hoja de estilos global, encima del import de Tailwind, para que tus clases ganen.
Una línea de tiempo enumera lo que pasó, o pasará, como un feed de actividad, el progreso de un pedido o los pasos de un agente. Para los lectores de pantalla es una lista con una sola parada de tabulación, y las flechas se mueven entre eventos. Pasa dateTime a TimelineTime para que la fecha sea legible por máquinas y el texto siga siendo amable. UI SDK la marca como experimental en 0.1.0-beta.2.
Cada parte dentro de un elemento es opcional. El marcador ocupa su propia columna y el conector va desde él hasta el siguiente evento, oculto tras el último. Cualquier otra cosa que pongas en un elemento, como un botón o un desplegable, se alinea con el título.
Da a cada elemento un status de complete, current o upcoming. El evento actual recibe aria-current="step" y la parada de tabulación, y un controlador enfoca un evento por su value. Indica también el estado en el título, ya que el marcador solo lo muestra.
Un icono en TimelineMarker lo convierte en un círculo pequeño. Pon un spinner en el paso actual mientras un agente trabaja, y una duración como PT5S en dateTime.
La variant del marcador es success, warning, destructive o info, para un punto vacío o un icono.
orientation="horizontal" coloca los eventos en fila, como una hoja de ruta. Izquierda y Derecha se mueven entre ellos, y loop={false} se detiene en los extremos.
Los enlaces y botones dentro de un evento siguen en el orden de tabulación. Tab pasa del evento a ellos, y las flechas siguen moviéndose entre eventos.
feed convierte la lista en un feed de artículos para líneas de tiempo que crecen, y Av Pág y Re Pág se mueven entre ellos. Activa busy mientras cargan más.
Los marcadores y la línea pasan al lado derecho.
| Key | Acción |
|---|---|
| ↓↑ | Se mueven entre eventos en una línea de tiempo vertical. |
| →← | Se mueven entre eventos en una línea de tiempo horizontal. Se invierten en texto de derecha a izquierda. |
| HomeEnd | Enfocan el primer o el último evento. |
| PageDownPageUp | En un feed, enfocan el artículo siguiente o anterior, desde cualquier punto dentro de uno. |
| Tab | Entra en el evento actual, o si no en el primero, y luego pasa a los enlaces y botones de dentro. |
Una línea de tiempo es una lista nombrada con aria-label, o un feed de artículos con sus posiciones. Cada evento se nombra por su título y se describe por su hora y su descripción, y los marcadores y conectores quedan ocultos para los lectores de pantalla.
El evento enfocado muestra un anillo con espacio alrededor. Los colores del marcador se funden entre estados solo si se permite el movimiento, y en colores forzados los puntos y las líneas se dibujan con el color del texto.
Cada parte envuelve la parte de UI SDK del mismo nombre y acepta todas sus props, incluidas render y un className que puede ser una función del estado de la parte.
| Prop | Tipo | Predeterminado |
|---|---|---|
orientation | "vertical" | "horizontal" | "vertical" |
loop | boolean | true |
feed | boolean | false |
busyPone aria-busy en un feed mientras carga. | boolean | false |
controllerDe createTimelineController(). | TimelineController | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="timeline" | Para apuntar a la línea de tiempo en CSS. |
data-orientation | vertical u horizontal. |
data-busy | Presente mientras un feed está ocupado. |
--timeline-count | Cuántos eventos hay en la página. |
| Prop | Tipo | Predeterminado |
|---|---|---|
valueNombra el evento para el focus() del controlador. | string | – |
status | "complete" | "current" | "upcoming" | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="timeline-item" | Para apuntar a un evento en CSS. |
data-complete | Presente cuando el estado del evento es complete. |
data-current | Presente cuando el estado del evento es current. |
data-upcoming | Presente cuando el estado del evento es upcoming. |
data-first | Presente en el primer evento una vez que está en la página. |
data-last | Presente en el último evento una vez que está en la página. |
--timeline-index | La posición del evento desde 0. |
| Prop | Tipo | Predeterminado |
|---|---|---|
variant | "default" | "success" | "warning" | "destructive" | "info" | "default" |
childrenUn icono o una imagen. Vacío dibuja un punto. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="timeline-marker" | Para apuntar al marcador en CSS. |
data-variant | La variante del marcador. |
data-complete | Presente cuando el estado del evento es complete. |
data-current | Presente cuando el estado del evento es current. |
data-upcoming | Presente cuando el estado del evento es upcoming. |
La línea del marcador al siguiente evento. Es sólida bajo un evento completo y se oculta tras el último.
Nombra su evento. Muéstralo como encabezado con render={<h3 />} para que se pueda ir de evento en evento por encabezados.
| Prop | Tipo | Predeterminado |
|---|---|---|
dateTimeUna fecha, hora o duración legible por máquinas. Describe el evento. | string | – |
Más sobre su evento. Describe el evento.
- AvatarFotos de usuario con iniciales como alternativa, insignias de estado y grupos apilados que se colapsan en un contador.
- BadgeEtiquetas de estado con puntos de color, tags eliminables que se deslizan al cerrarse y contadores que ruedan hasta su nuevo valor.
- CardUna superficie para agrupar contenido, con tres variantes, contenido multimedia de borde a borde, radios concéntricos y enlaces en toda la tarjeta.
- ChartGráficos de Recharts con colores del tema, un tooltip y una leyenda que leen las etiquetas de una sola configuración, y navegación con teclado con un anillo de foco visible.
- Data tableUna tabla para datos reales, con ordenación, búsqueda, selección de filas, columnas fijadas, un encabezado fijo y paginación.
- ItemUna fila de contenido multimedia, texto y acciones para listas, ajustes y selectores, con una superficie agrupada y un resaltado al pasar el cursor que se desliza entre filas.