Sheet 侧边面板

用于侧边面板场景的 MoriUI 组件。

导入

import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger } from 'moriui'

示例

概览

编辑资料的侧边面板。

<script setup lang="ts">
  import {
    Button,
    Input,
    Label,
    Sheet,
    SheetClose,
    SheetContent,
    SheetDescription,
    SheetFooter,
    SheetHeader,
    SheetTitle,
    SheetTrigger
  } from 'moriui'
</script>

<template>
  <Sheet>
    <SheetTrigger as-child>
      <Button variant="outline">
        打开
      </Button>
    </SheetTrigger>
    <SheetContent>
      <SheetHeader>
        <SheetTitle>编辑资料</SheetTitle>
        <SheetDescription>在此修改你的资料。</SheetDescription>
      </SheetHeader>
      <div class="grid flex-1 auto-rows-min gap-6 px-4">
        <div class="grid gap-3">
          <Label for="name">姓名</Label>
          <Input id="name" default-value="张三" />
        </div>
        <div class="grid gap-3">
          <Label for="username">用户名</Label>
          <Input id="username" default-value="@zhangsan" />
        </div>
      </div>
      <SheetFooter>
        <Button type="submit">
          保存
        </Button>
        <SheetClose as-child>
          <Button variant="outline">
            取消
          </Button>
        </SheetClose>
      </SheetFooter>
    </SheetContent>
  </Sheet>
</template>

位置

使用 side 控制面板从屏幕边缘滑出。

<script setup lang="ts">
  import {
    Button,
    Sheet,
    SheetContent,
    SheetHeader,
    SheetTitle,
    SheetTrigger
  } from 'moriui'

  const sides = ['top', 'right', 'bottom', 'left'] as const
</script>

<template>
  <div class="flex flex-wrap gap-2">
    <Sheet v-for="side in sides" :key="side">
      <SheetTrigger as-child>
        <Button variant="outline" class="capitalize">
          {{ side }}
        </Button>
      </SheetTrigger>
      <SheetContent :side="side">
        <SheetHeader>
          <SheetTitle class="capitalize">
            {{ side }} 面板
          </SheetTitle>
        </SheetHeader>
      </SheetContent>
    </Sheet>
  </div>
</template>

无关闭按钮

隐藏默认关闭按钮。

<script setup lang="ts">
  import {
    Button,
    Sheet,
    SheetContent,
    SheetHeader,
    SheetTitle,
    SheetTrigger
  } from 'moriui'
</script>

<template>
  <Sheet>
    <SheetTrigger as-child>
      <Button variant="outline">
        无关闭按钮
      </Button>
    </SheetTrigger>
    <SheetContent show-close-button="false">
      <SheetHeader>
        <SheetTitle>无关闭按钮</SheetTitle>
      </SheetHeader>
      <p class="text-sm text-muted-foreground px-4">
        用户必须通过其他操作关闭此面板。
      </p>
    </SheetContent>
  </Sheet>
</template>

RTL

从右到左的面板布局。

<script setup lang="ts">
  import {
    Button,
    DirectionProvider,
    Sheet,
    SheetContent,
    SheetHeader,
    SheetTitle,
    SheetTrigger
  } from 'moriui'
</script>

<template>
  <DirectionProvider direction="rtl">
    <Sheet dir="rtl">
      <SheetTrigger as-child>
        <Button variant="outline">
          فتح
        </Button>
      </SheetTrigger>
      <SheetContent>
        <SheetHeader>
          <SheetTitle>لوحة جانبية</SheetTitle>
        </SheetHeader>
        <p class="text-sm text-muted-foreground px-4">
          اتجاه المحتوى من اليمين إلى اليسار.
        </p>
      </SheetContent>
    </Sheet>
  </DirectionProvider>
</template>

使用说明

组合方式

Sheet 由 Trigger 和 Content 组成;Content 内可使用 Header、Title、Description 与 Footer 组织结构。

位置

side 控制面板从屏幕边缘滑出的方向,支持 top、right、bottom、left。

无关闭按钮

showCloseButton 控制默认关闭控件的显示。

RTL

方向由 DirectionProvider 控制。

变体

SheetContent 的 side 支持 top、right、bottom、left。

可访问性

Sheet 复用 Reka UI Dialog 的焦点管理、Escape 关闭、遮罩交互和焦点归还。Content 内应提供 SheetTitle,并在需要时提供 SheetDescription。

API 参考

属性类型默认值说明
Sheet v-model:openbooleanundefined面板的受控打开状态。
Sheet defaultOpenbooleanfalse非受控初始打开状态。
SheetContent side'top' | 'right' | 'bottom' | 'left''right'面板从屏幕边缘滑出的方向。
SheetContent showCloseButtonbooleantrue是否显示默认关闭按钮。
SheetClose as / asChildstring | Component / boolean'button' / false关闭触发器的元素组合能力。
SheetHeader classHTMLAttributes["class"]undefined合并到面板头部的调用方类。
SheetFooter classHTMLAttributes["class"]undefined合并到面板脚部的调用方类。