# Tiroir

Couche flottante glissant depuis le bord de l'écran, adaptée aux actions secondaires telles que le détail ou le filtrage. Quatre directions, taille et comportement du masque paramétrables.

Tiroir
<template>
  <div class="demo-col">
    <div class="demo-row" style="gap: 12px; flex-wrap: wrap">
      <LhButton type="primary" @click="open('right')">right à droite</LhButton>
      <LhButton @click="open('left')">left à gauche</LhButton>
      <LhButton @click="open('top')">top en haut</LhButton>
      <LhButton @click="open('bottom')">bottom en bas</LhButton>
      <LhButton @click="openNoMask">Le masque ne ferme pas</LhButton>
    </div>
    <LhDrawer v-model="visible" :title="title" :direction="direction" :size="size">
      <p style="margin: 0 0 8px">direction contrôle le sens, size contrôle la dimension (nombre en px ou chaîne en pourcentage).</p>
      <p class="demo-note">Les boutons du bas peuvent déclencher des combinaisons lockScroll / closeOnEsc, etc.</p>
      <template #footer>
        <LhButton @click="visible = false">Annuler</LhButton>
        <LhButton type="primary" @click="visible = false">Enregistrer</LhButton>
      </template>
    </LhDrawer>
    <LhDrawer
      v-model="noMask"
      title="Le clic sur le masque ne ferme pas"
      direction="right"
      size="30%"
      :mask-closable="false"
      :show-close="true"
      :lock-scroll="true"
      :close-on-esc="false"
    >
      <p style="margin: 0">maskClosable=false et closeOnEsc=false : seule la fermeture par bouton ou par l'icône de fermeture est possible.</p>
      <template #footer>
        <LhButton type="primary" @click="noMask = false">Fermer</LhButton>
      </template>
    </LhDrawer>
  </div>
</template>

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

# Props

Prop Description Type Valeur par défaut
v-model Affichage ou non (prop modelValue contrôlé) boolean false
title Titre string —
direction Direction 'right' \| 'left' \| 'top' \| 'bottom' 'right'
size Dimension : un nombre correspond à des px, une chaîne peut être un pourcentage string \| number —
maskClosable Fermeture par clic sur le masque ou non boolean true
showClose Afficher le bouton de fermeture ou non boolean true
teleportTarget Cible de montage de la couche flottante (sélecteur ou élément, body par défaut ; pas de Teleport en 2.7, déplacement de l'hôte) string \| HTMLElement —
lockScroll Verrouiller le défilement de la page ou non boolean true
closeOnEsc Réagir à la fermeture par Esc ou non boolean true
themeVars Variables de thème au niveau du composant, remplaçant la configuration de ConfigProvider Record<string, string> —
bgPattern Motif de fond au niveau du composant, remplaçant la configuration de ConfigProvider string —
sx Raccourci de mise en page sx (agit sur le panneau) — —

# Slots

Slot Description
header Zone de titre (titre prop par défaut)
default Corps du tiroir
footer Zone de boutons du bas

Copyright © 2024-2026 FengMo WenXue