# Cajón

Capa emergente que se desliza desde un borde de la pantalla, ideal para operaciones secundarias como detalles o filtrado. Cuatro direcciones, tamaño configurable y control del comportamiento de la máscara.

Cajón
<template>
  <div class="demo-col">
    <div class="demo-row" style="gap: 12px; flex-wrap: wrap">
      <LhButton type="primary" @click="open('right')">right, derecha</LhButton>
      <LhButton @click="open('left')">left, izquierda</LhButton>
      <LhButton @click="open('top')">top, arriba</LhButton>
      <LhButton @click="open('bottom')">bottom, abajo</LhButton>
      <LhButton @click="openNoMask">La máscara no cierra</LhButton>
    </div>
    <LhDrawer v-model="visible" :title="title" :direction="direction" :size="size">
      <p style="margin: 0 0 8px">direction controla la dirección y size, las dimensiones (un número en px o una cadena con porcentaje).</p>
      <p class="demo-note">Los botones inferiores pueden combinar lockScroll / closeOnEsc, etc.</p>
      <template #footer>
        <LhButton @click="visible = false">Cancelar</LhButton>
        <LhButton type="primary" @click="visible = false">Guardar</LhButton>
      </template>
    </LhDrawer>
    <LhDrawer
      v-model="noMask"
      title="Hacer clic en la máscara no cierra"
      direction="right"
      size="30%"
      :mask-closable="false"
      :show-close="true"
      :lock-scroll="true"
      :close-on-esc="false"
    >
      <p style="margin: 0">Con maskClosable=false y closeOnEsc=false, solo se puede cerrar mediante los botones o el icono de cierre.</p>
      <template #footer>
        <LhButton type="primary" @click="noMask = false">Cerrar</LhButton>
      </template>
    </LhDrawer>
  </div>
</template>

<script>
export default {
  data: () => ({
    visible: false,
    noMask: false,
    title: 'Cajón derecho',
    direction: 'right',
    size: '360px',
  }),
  methods: {
    open(dir) {
      this.direction = dir
      this.title = `Cajón ${dir}`
      this.size = dir === 'top' || dir === 'bottom' ? '30%' : '360px'
      this.visible = true
    },
    openNoMask() {
      this.noMask = true
    },
  },
}
</script>

# Props

Prop Descripción Tipo Predeterminado
v-model Visibilidad (prop modelValue controlado) boolean false
title Título string —
direction Dirección 'right' \| 'left' \| 'top' \| 'bottom' 'right'
size Dimensiones: un número se interpreta como px; una cadena admite porcentajes string \| number —
maskClosable Si se cierra al hacer clic en la máscara boolean true
showClose Si se muestra el botón de cierre boolean true
teleportTarget Destino de montaje de la capa emergente (selector o elemento; body por defecto. Vue 2.7 no tiene Teleport: se implementa moviendo el anfitrión) string \| HTMLElement —
lockScroll Si se bloquea el desplazamiento de la página boolean true
closeOnEsc Si responde al cierre con Esc boolean true
themeVars Variables de tema a nivel de componente; anula la configuración de ConfigProvider Record<string, string> —
bgPattern Patrón de fondo a nivel de componente; anula la configuración de ConfigProvider string —
sx Propiedades de layout abreviadas (se aplican al panel) — —

# Slots

Slot Descripción
header Área del título (por defecto usa el prop title)
default Cuerpo del cajón
footer Área de botones inferior

Copyright © 2024-2026 FengMo WenXue