Skip to content
API 风格:

Pasos ​

Indicador de pasos de un flujo: cuatro estados (actual, completado, en espera, error), dirección horizontal o vertical y navegación por clic opcional. La barra horizontal ajusta el ancho de referencia fijo para saltar de línea automáticamente y el título siempre se muestra en una sola línea.

Uso básico ​

Uso básico
  1. Moler la tinta
  2. Posar el pincel
  3. Estampar el sello
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Moler la tinta" />
    <LhStep title="Posar el pincel" />
    <LhStep title="Estampar el sello" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Moler la tinta" />
    <LhStep title="Posar el pincel" />
    <LhStep title="Estampar el sello" />
  </LhSteps>
</template>

Con descripción ​

Con descripción
  1. Registro
    Rellenar los datos básicos
  2. Verificación
    Verificación por correo y teléfono
  3. Activación
    Activar los permisos de la cuenta
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Registro" description="Rellenar los datos básicos" />
    <LhStep title="Verificación" description="Verificación por correo y teléfono" />
    <LhStep title="Activación" description="Activar los permisos de la cuenta" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Registro" description="Rellenar los datos básicos" />
    <LhStep title="Verificación" description="Verificación por correo y teléfono" />
    <LhStep title="Activación" description="Activar los permisos de la cuenta" />
  </LhSteps>
</template>

icon asigna un icono personalizado al paso (toma un nombre de icono interno de LhIcon, como user/check/star); si no se pasa, los estados completado y error usan la marca y la cruz, y los demás muestran el número de orden. Cuando se necesita personalizar por completo el renderizado del icono, se puede sobrescribir con el slot #icon.

Icono personalizado
  1. Registro
  2. Verificación
  3. Activación
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep icon="user" title="Registro" />
    <LhStep icon="check" title="Verificación" />
    <LhStep icon="star" title="Activación" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep icon="user" title="Registro" />
    <LhStep icon="check" title="Verificación" />
    <LhStep icon="star" title="Activación" />
  </LhSteps>
</template>

Estado de error ​

Estado de error
  1. Cargar
  2. Validar
  3. Completado
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1" status="error">
    <LhStep title="Cargar" />
    <LhStep title="Validar" />
    <LhStep title="Completado" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1" status="error">
    <LhStep title="Cargar" />
    <LhStep title="Validar" />
    <LhStep title="Completado" />
  </LhSteps>
</template>

status es una superposición global: una vez establecido, todos los pasos quedan en ese estado, lo que sirve para visualizaciones personalizadas.

Navegación por clic
  1. Selección del borrador
    Elegir el modelo base
  2. Copia
    Copia directa o de memoria
  3. Montaje
    Montar en la pared

Paso actual: 1

vue
<script setup lang="ts">
import { ref } from 'vue'
const current = ref(1)
</script>

<template>
  <LhSteps v-model:current="current" clickable>
    <LhStep title="Selección del borrador" description="Elegir el modelo base" />
    <LhStep title="Copia" description="Copia directa o de memoria" />
    <LhStep title="Montaje" description="Montar en la pared" />
  </LhSteps>
</template>
vue
<script>
export default {
  data() {
    return { current: 1 }
  },
}
</script>

<template>
  <LhSteps v-model:current="current" clickable>
    <LhStep title="Selección del borrador" description="Elegir el modelo base" />
    <LhStep title="Copia" description="Copia directa o de memoria" />
    <LhStep title="Montaje" description="Montar en la pared" />
  </LhSteps>
</template>

Dirección vertical ​

Dirección vertical
  1. Inicio
    Postura inicial con la punta oculta
  2. Desarrollo
    Trazo central hacia adelante
  3. Cierre
    Retorno del trazo final
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1" direction="vertical">
    <LhStep title="Inicio" description="Postura inicial con la punta oculta" />
    <LhStep title="Desarrollo" description="Trazo central hacia adelante" />
    <LhStep title="Cierre" description="Retorno del trazo final" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1" direction="vertical">
    <LhStep title="Inicio" description="Postura inicial con la punta oculta" />
    <LhStep title="Desarrollo" description="Trazo central hacia adelante" />
    <LhStep title="Cierre" description="Retorno del trazo final" />
  </LhSteps>
</template>

Ancho fijo y ajuste de línea ​

La barra de pasos horizontal se dispone según el ancho de referencia de --lh-steps-item-basis (160px por defecto): si caben en el contenedor, los pasos se reparten a partes iguales en una línea; si no caben, el paso entero salta a la línea siguiente, en lugar de empujar el título a un ajuste de línea. El título se muestra siempre en una sola línea y, si es demasiado largo, se trunca con puntos suspensivos; tras el ajuste de línea, la línea de conexión del último paso de la fila se oculta automáticamente, sin señalar el espacio en blanco del final de la fila.

Ancho fijo y ajuste de línea
  1. Selección del borrador
    Elegir el modelo base
  2. Copia
    Copia directa o de memoria
  3. Inscripción
    Firmar y estampar
  4. Montaje
    Montar en la pared
vue
<script setup lang="ts">
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Selección del borrador" description="Elegir el modelo base" />
    <LhStep title="Copia" description="Copia directa o de memoria" />
    <LhStep title="Inscripción" description="Firmar y estampar" />
    <LhStep title="Montaje" description="Montar en la pared" />
  </LhSteps>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSteps :current="1">
    <LhStep title="Selección del borrador" description="Elegir el modelo base" />
    <LhStep title="Copia" description="Copia directa o de memoria" />
    <LhStep title="Inscripción" description="Firmar y estampar" />
    <LhStep title="Montaje" description="Montar en la pared" />
  </LhSteps>
</template>

En el ejemplo anterior el contenedor está limitado a 280px para forzar el ajuste de línea. Para cambiar el ritmo del ajuste de línea, sobrescribe steps-item-basis mediante themeVars (la clave recibe automáticamente el prefijo --lh-): <LhSteps :theme-vars="{ 'steps-item-basis': '220px' }">; también se puede configurar globalmente a través de componentTheme.steps en LhConfigProvider.

Steps API ​

LhSteps Props ​

PropDescripciónTipoPredeterminado
currentÍndice del paso actual (v-model:current, a partir de 0)number0
directionDirección"horizontal" | "vertical"'horizontal'
clickableSi los pasos permiten la navegación por clicbooleanfalse
statusSuperposición del estado de todos los pasos (para visualizaciones personalizadas)"wait" | "process" | "finish" | "error"—
themeVarsVariables de tema a nivel de componente (la clave recibe automáticamente el prefijo --lh-){ [x: string]: string; }—
sxProps de maquetación rápida sxLhSxProps—

LhSteps Events ​

EventoDescripciónParámetro
update:currentCambio del paso actual (v-model)(index: number)
changeCambio del paso actual(index: number)

LhStep Props ​

PropDescripciónTipoPredeterminado
titleTítulo del paso (también se puede usar el slot title)string''
descriptionDescripción del paso (también se puede usar el slot description)string''
iconNombre del icono personalizado (iconos internos de LhIcon; si no se pasa, finish/error usan la marca y la cruz, y los demás muestran el número de orden)LhIconName—

Slots ​

SlotDescripciónComponente afín
defaultElementos de paso (lista de LhStep)LhSteps
titleTítulo personalizadoLhStep
descriptionDescripción personalizadaLhStep
iconIcono personalizado (sobrescribe el renderizado por defecto de la prop icon)LhStep

Variables a nivel de componente ​

Las siguientes variables CSS definen sus valores predeterminados en .lh-steps y se pueden sobrescribir de forma global o a nivel de componente con themeVars (la clave recibe automáticamente el prefijo --lh-):

VariableDescripciónPredeterminado
--lh-steps-item-basisAncho de referencia fijo de los pasos horizontales; cuando no caben en el contenedor, el ajuste de línea se hace según este ancho160px

Accesibilidad ​

  • El contenedor es un <ol role="list">: el orden semántico es el orden del flujo
  • El paso actual recibe automáticamente aria-current="step"
  • Con clickable, la cabecera de los pasos completados o actuales es un <button> real y su aria-label procede del paquete de idioma (steps.finish / steps.error / steps.step); los pasos en espera no se pueden pulsar, para evitar guiar al usuario a saltarse etapas no alcanzadas
  • La línea de conexión se dibuja con un pseudoelemento, por lo que no entra en el árbol de accesibilidad

Definiciones de tipos ​

Las estructuras de tipos TypeScript que exporta este componente son las siguientes (extraídas automáticamente de packages/components/steps/src/types.ts y del código fuente de @lh-ui/share/core/*; despliega cada entrada para ver la definición completa; la descripción de los atributos está en la tabla de Props de arriba):

LhStepsProps
ts
export interface LhStepsProps {
  /** Índice del paso actual (v-model:current, a partir de 0) */
  current?: number
  /** Dirección */
  direction?: LhStepsDirection
  /** Si los pasos permiten la navegación por clic */
  clickable?: boolean
  /** Superposición del estado de todos los pasos (para visualizaciones personalizadas) */
  status?: LhStepStatus
  /** Variables de tema a nivel de componente (la clave recibe automáticamente el prefijo --lh-, p. ej. `steps-item-basis`) */
  themeVars?: Record<string, string>
  /** Props de maquetación rápida sx */
  sx?: LhSxProps
}
LhStepProps
ts
export interface LhStepProps {
  /** Título del paso (también se puede usar el slot title) */
  title?: string
  /** Descripción del paso (también se puede usar el slot description) */
  description?: string
  /** Nombre del icono personalizado (si no se pasa, finish/error usan la marca y la cruz, y los demás muestran el número de orden) */
  icon?: LhIconName
}
LhIconName (de @lh-ui/share/core/icon (svgs.ts))
ts
export type LhIconName = keyof typeof LH_ICON_SVGS_CONST
LhStepsDirection (de @lh-ui/share/core/steps)
ts
/**
 * Dirección de la barra de pasos
 */
export type LhStepsDirection = 'horizontal' | 'vertical'
LhStepStatus (de @lh-ui/share/core/steps)
ts
/**
 * Estado del paso
 */
export type LhStepStatus = 'wait' | 'process' | 'finish' | 'error'

La belleza de la tradición, el cimiento del código