Use a Button or any other component in the default slot of the Collapsible.
Depois, use o slot #content para adicionar o conteúdo exibido quando o Collapsible está aberto.
<template>
<NCollapsible class="flex flex-col gap-2 w-48">
<NButton
label="Open"
color="neutral"
variant="subtle"
trailing-icon="i-lucide-chevron-down"
block
/>
<template #content>
<Placeholder class="h-48" />
</template>
</NCollapsible>
</template>
Use a prop unmount-on-hide para evitar que o conteúdo seja desmontado quando o Collapsible é recolhido. O padrão é true.
<template>
<NCollapsible :unmount-on-hide="false" class="flex flex-col gap-2 w-48">
<NButton
label="Open"
color="neutral"
variant="subtle"
trailing-icon="i-lucide-chevron-down"
block
/>
<template #content>
<Placeholder class="h-48" />
</template>
</NCollapsible>
</template>
Use a prop disabled para desabilitar o Collapsible.
<template>
<NCollapsible class="flex flex-col gap-2 w-48" disabled>
<NButton
label="Open"
color="neutral"
variant="subtle"
trailing-icon="i-lucide-chevron-down"
block
/>
<template #content>
<Placeholder class="h-48" />
</template>
</NCollapsible>
</template>
Você pode controlar o estado de abertura usando a prop default-open ou a diretiva v-model:open.
defineShortcuts, você pode abrir e fechar o Collapsible pressionando O.Aqui está um exemplo com um ícone rotativo no Button que indica o estado de abertura do Collapsible.
| Prop | Default | Type |
|---|---|---|
as | 'div' | anyThe element or component this component should render as. |
disabled | boolean When | |
defaultOpen | boolean The open state of the collapsible when it is initially rendered. | |
open | boolean The controlled open state of the collapsible. Can be binded with | |
unmountOnHide | true | boolean When |
ui | { root?: SlotClass; content?: SlotClass; } |
| Slot | Type |
|---|---|
default | { open: boolean; } |
content | {} |
| Event | Type |
|---|---|
update:open | [value: boolean] |
export default defineAppConfig({
ui: {
collapsible: {
slots: {
root: '',
content: 'data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
collapsible: {
slots: {
root: '',
content: 'data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] overflow-hidden'
}
}
}
})
]
})