X Enterprises
nuxt-x-app

Slide

Slideover panel components for off-canvas drawers and overlay panels from any side of the screen.

Slide

The Slide category provides off-canvas drawer components. XASlide is the high-level wrapper built on Nuxt UI's USlideover, offering built-in header, body, footer layout and optional trigger button. XASlidePanel is the lower-level primitive that teleports directly to <body> and supports all four entry directions.

Components

<XASlide />

A full-featured slideover that wraps USlideover. It manages its own open/close state (or accepts external v-model) and renders a structured layout with header, scrollable body, and optional footer. An optional trigger button can be configured entirely via props without needing a custom slot.

<!-- Controlled externally -->
<XASlide v-model="isOpen" title="User Details" size="lg">
  <p>Slideover body content here.</p>
  <template #footer>
    <UButton @click="isOpen = false">Close</UButton>
  </template>
</XASlide>

<!-- Self-contained with built-in trigger -->
<XASlide
  title="Filters"
  trigger-label="Open Filters"
  trigger-icon="i-lucide-sliders"
  side="left"
  size="md"
>
  <p>Filter controls here.</p>
</XASlide>

Props

PropTypeDefaultDescription
modelValueBooleanundefinedControls open state via v-model. When omitted, component manages its own state.
titleString''Header title text.
sideString'right'Entry side — 'left' or 'right'.
sizeString'md'Panel width — 'sm', 'md', 'lg', 'xl', or 'full'.
triggerLabelString''Label for the auto-generated trigger button.
triggerIconString''Icon for the auto-generated trigger button.
triggerColorString'primary'Color for the trigger button.
triggerVariantString'solid'Variant for the trigger button.
triggerSizeString'sm'Size for the trigger button.

Slots

SlotDescription
triggerCustom trigger element (receives open function).
headerReplaces the default title in the header.
defaultScrollable body content.
footerFooter content — only renders when slot is provided.

Exposed Methods

MethodDescription
open()Opens the slideover programmatically.
close()Closes the slideover programmatically.

<XASlidePanel />

A lightweight, low-level slide panel that teleports to <body>. Supports all four entry sides (left, right, top, bottom) and manages transitions, overlay backdrop, and dismissal internally. Use this when you need full layout control without the opinionated header/body/footer structure of XASlide.

<XASlidePanel
  v-model="showPanel"
  side="bottom"
  size="md"
  :overlay="true"
  :dismissible="true"
>
  <div class="p-6">
    <h2>Custom panel content</h2>
  </div>
</XASlidePanel>

Props

PropTypeDefaultDescription
modelValueBooleanfalseControls panel visibility via v-model.
sideString'right'Entry direction — 'left', 'right', 'top', or 'bottom'.
sizeString'md'Panel dimension — 'sm', 'md', 'lg', 'xl', or 'full'. For top/bottom sides this controls height; for left/right it controls width.
overlayBooleantrueShow dark backdrop overlay behind the panel.
dismissibleBooleantrueAllow closing the panel by clicking the overlay.

AI Context

category: Slide
package: "@xenterprises/nuxt-x-app"
use-when: >
  Use XASlide when you need an off-canvas drawer with a standard header/body/footer
  layout, an optional self-contained trigger button, and built-in open/close state
  management. Use XASlidePanel when you need a bare teleported panel (e.g. mobile
  bottom sheets, custom side drawers) with full control over internal layout.
  Both components support v-model for external state control.
Copyright © 2026