Skip to content
API 风格:

Selector segmentado ​

Conmutador de opciones excluyentes, típico de escenas de conmutación de vista.

Uso básico ​

Uso básico
vue
<script setup>
import { ref } from 'vue'
const view = ref('Lista')
</script>

<template>
  <LhSegmented v-model="view" :options="['Lista', 'Tarjetas', 'Tabla']" />
</template>
vue
<script>
export default {
  data() {
    return { view: 'Lista' }
  },
}
</script>

<template>
  <LhSegmented v-model="view" :options="['Lista', 'Tarjetas', 'Tabla']" />
</template>

Elemento deshabilitado y block ​

Elemento deshabilitado
vue
<script setup>
import { ref } from 'vue'
const seg = ref('day')
</script>

<template>
  <LhSegmented
    v-model="seg"
    block
    :options="[{ label: 'Día', value: 'day' }, { label: 'Semana', value: 'week' }, { label: 'Mes', value: 'month', disabled: true }]"
  />
</template>
vue
<script>
export default {
  data() {
    return { seg: 'day' }
  },
}
</script>

<template>
  <LhSegmented
    v-model="seg"
    block
    :options="[{ label: 'Día', value: 'day' }, { label: 'Semana', value: 'week' }, { label: 'Mes', value: 'month', disabled: true }]"
  />
</template>

El disabled a nivel de componente deshabilita todo el selector.

Grupo entero deshabilitado
vue
<script setup>
import { ref } from 'vue'
const segDisabled = ref('A')
</script>

<template>
  <LhSegmented
    v-model="segDisabled"
    disabled
    :options="['A', 'B', 'C']"
  />
</template>
vue
<script>
export default {
  data() {
    return { segDisabled: 'A' }
  },
}
</script>

<template>
  <LhSegmented
    v-model="segDisabled"
    disabled
    :options="['A', 'B', 'C']"
  />
</template>

API ​

LhSegmented Props ​

PropDescripciónTipoPredeterminado
modelValueValor actual (v-model controlado)string | number—
optionsOpciones (escritura abreviada en forma de cadena u objeto)[LhSegmentedInput](#type-LhSegmentedInput)[]—
disabledGrupo entero deshabilitadobooleanfalse
blockOcupa todo el ancho del contenedorbooleanfalse
sxProps de maquetación rápida sxLhSxProps—

Eventos ​

EventoDescripciónParámetro
update:modelValueSe dispara al cambiar la opción seleccionada; se usa con v-model(value: string | number)
changeSe dispara al cambiar la opción seleccionada (tanto con clic como con las teclas de dirección)(value: string | number)

Accesibilidad ​

  • role="radiogroup" + opciones role="radio" + aria-checked
  • Roving tabindex: las teclas de dirección se mueven (omitiendo los deshabilitados y haciendo ciclo entre el primero y el último); solo la posición con el foco es alcanzable con Tab
  • El color de fondo de la selección se transiciona con variables CSS

Definiciones de tipos ​

Las estructuras de tipos TypeScript que exporta este componente son las siguientes (extraídas automáticamente de packages/components/segmented/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):

LhSegmentedProps
ts
export interface LhSegmentedProps {
  /** Valor actual (v-model controlado) */
  modelValue?: LhSegmentedValue
  /** Opciones (escritura abreviada en forma de cadena u objeto) */
  options: LhSegmentedInput[]
  disabled?: boolean
  /** Ocupa todo el ancho del contenedor */
  block?: boolean
  /** Props de maquetación rápida sx */
  sx?: LhSxProps
}
LhSegmentedValue (de @lh-ui/share/core/segmented)
ts
/** Tipo del valor de la opción */
export type LhSegmentedValue = string | number
LhSegmentedInput (de @lh-ui/share/core/segmented)
ts
/** Opción de entrada (escritura abreviada en forma de cadena u objeto) */
export type LhSegmentedInput = LhSegmentedValue | LhSegmentedOption
LhSegmentedOption (de @lh-ui/share/core/segmented)
ts
/** Forma de la opción como objeto */
export interface LhSegmentedOption {
  label: string
  value: LhSegmentedValue
  disabled?: boolean
}

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