O componente DashboardPanel é usado para exibir um painel. O estado dele (tamanho, recolhido, etc.) é salvo com base nas props storage e storage-key que você fornece ao componente DashboardGroup.
Use-o dentro do slot padrão do componente DashboardGroup; você pode colocar vários painéis lado a lado:
<script setup lang="ts">
definePageMeta({
layout: 'dashboard'
})
</script>
<template>
<NDashboardPanel id="inbox-1" resizable />
<NDashboardPanel id="inbox-2" class="hidden lg:flex" />
</template>
id ao usar vários painéis em páginas diferentes para evitar conflitos.resizable, então envolva-o em um container (ex.: <div class="flex flex-1">) se você usar transições de página ou precisar de uma raiz única para o layout.Use os slots header, body e footer para personalizar o painel, ou o slot padrão se você não quiser um corpo rolável com espaçamento interno.
DashboardNavbar no slot header.Use a prop resizable para tornar o painel redimensionável.
<template>
<NDashboardPanel resizable>
<template #body>
<Placeholder class="h-96" />
</template>
</NDashboardPanel>
</template>
Use as props min-size, max-size e default-size para personalizar o tamanho do painel.
<template>
<NDashboardPanel resizable :min-size="22" :default-size="35" :max-size="40">
<template #body>
<Placeholder class="h-96" />
</template>
</NDashboardPanel>
</template>
unit no componente DashboardGroup.| Prop | Default | Type |
|---|---|---|
id | useId() | stringThe id of the panel. |
minSize | 15 | numberThe minimum size of the panel. |
maxSize | 100 | numberThe maximum size of the panel. |
defaultSize | 0 | numberThe default size of the panel. |
resizable | false | boolean Whether to allow the user to resize the panel. |
ui | { root?: SlotClass; body?: SlotClass; handle?: SlotClass; } |
| Slot | Type |
|---|---|
default | {} |
header | {} |
body | {} |
footer | {} |
resize-handle | { onMouseDown: (e: MouseEvent) => void; onTouchStart: (e: TouchEvent) => void; onDoubleClick: (e: MouseEvent) => void; } |
export default defineAppConfig({
ui: {
dashboardPanel: {
slots: {
root: 'relative flex flex-col min-w-0 min-h-svh lg:not-last:border-e lg:not-last:border-default shrink-0',
body: 'flex flex-col gap-4 sm:gap-6 flex-1 overflow-y-auto p-4 sm:p-6',
handle: ''
},
variants: {
size: {
true: {
root: 'w-full lg:w-(--width)'
},
false: {
root: 'flex-1'
}
}
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
dashboardPanel: {
slots: {
root: 'relative flex flex-col min-w-0 min-h-svh lg:not-last:border-e lg:not-last:border-default shrink-0',
body: 'flex flex-col gap-4 sm:gap-6 flex-1 overflow-y-auto p-4 sm:p-6',
handle: ''
},
variants: {
size: {
true: {
root: 'w-full lg:w-(--width)'
},
false: {
root: 'flex-1'
}
}
}
}
}
})
]
})