Popover 弹出卡片

用于弹出卡片场景的 MoriUI 组件。

导入

import { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from 'moriui'

示例

概览

Popover 的基本结构与标题、说明。

<script setup lang="ts">
  import {
    Button,
    Popover,
    PopoverContent,
    PopoverDescription,
    PopoverHeader,
    PopoverTitle,
    PopoverTrigger
  } from 'moriui'
</script>

<template>
  <Popover>
    <PopoverTrigger as-child>
      <Button variant="outline">
        打开 Popover
      </Button>
    </PopoverTrigger>
    <PopoverContent class="w-80">
      <PopoverHeader>
        <PopoverTitle>标题</PopoverTitle>
        <PopoverDescription>这是一段 Popover 描述文本。</PopoverDescription>
      </PopoverHeader>
    </PopoverContent>
  </Popover>
</template>

表单

在 Popover 中放置表单字段。

<script setup lang="ts">
  import { ref } from 'vue'
  import {
    Button,
    Input,
    Label,
    Popover,
    PopoverContent,
    PopoverDescription,
    PopoverHeader,
    PopoverTitle,
    PopoverTrigger
  } from 'moriui'

  const width = ref('100%')
  const height = ref('25px')
</script>

<template>
  <Popover>
    <PopoverTrigger as-child>
      <Button variant="outline">
        尺寸设置
      </Button>
    </PopoverTrigger>
    <PopoverContent class="w-80">
      <PopoverHeader>
        <PopoverTitle>尺寸</PopoverTitle>
        <PopoverDescription>设置图层的宽高尺寸。</PopoverDescription>
      </PopoverHeader>
      <div class="grid gap-3">
        <div class="grid grid-cols-3 items-center gap-4">
          <Label for="width">宽度</Label>
          <Input id="width" v-model="width" class="col-span-2 h-8" />
        </div>
        <div class="grid grid-cols-3 items-center gap-4">
          <Label for="height">高度</Label>
          <Input id="height" v-model="height" class="col-span-2 h-8" />
        </div>
      </div>
    </PopoverContent>
  </Popover>
</template>

对齐

使用 align 控制内容对齐方向。

<script setup lang="ts">
  import { Button, Popover, PopoverContent, PopoverTrigger } from 'moriui'
</script>

<template>
  <div class="flex flex-wrap gap-6">
    <Popover>
      <PopoverTrigger as-child>
        <Button variant="outline" size="sm">
          Start
        </Button>
      </PopoverTrigger>
      <PopoverContent align="start" class="w-36">
        对齐到 start
      </PopoverContent>
    </Popover>
    <Popover>
      <PopoverTrigger as-child>
        <Button variant="outline" size="sm">
          Center
        </Button>
      </PopoverTrigger>
      <PopoverContent align="center" class="w-36">
        对齐到 center
      </PopoverContent>
    </Popover>
    <Popover>
      <PopoverTrigger as-child>
        <Button variant="outline" size="sm">
          End
        </Button>
      </PopoverTrigger>
      <PopoverContent align="end" class="w-36">
        对齐到 end
      </PopoverContent>
    </Popover>
  </div>
</template>

RTL

从右到左的弹出卡片布局。

<script setup lang="ts">
  import {
    Button,
    DirectionProvider,
    Popover,
    PopoverContent,
    PopoverDescription,
    PopoverHeader,
    PopoverTitle,
    PopoverTrigger
  } from 'moriui'
</script>

<template>
  <DirectionProvider direction="rtl">
    <Popover>
      <PopoverTrigger as-child>
        <Button variant="outline">
          افتح القائمة
        </Button>
      </PopoverTrigger>
      <PopoverContent class="w-72">
        <PopoverHeader>
          <PopoverTitle>العنوان</PopoverTitle>
          <PopoverDescription>نص الوصف هنا.</PopoverDescription>
        </PopoverHeader>
      </PopoverContent>
    </Popover>
  </DirectionProvider>
</template>

使用说明

组合方式

Popover 由 Trigger、Content 组成;Content 内可使用 Header、Title 与 Description 提供清晰结构。

定位

Content 的 align 与 side 控制弹出卡片的方向和对齐。

RTL

方向由 DirectionProvider 控制。

变体

PopoverContent 的 align 与 side 来自 Reka Popper 定位。

可访问性

Popover 复用 Reka UI 的 Popper 定位、焦点管理、Escape 关闭与 DismissableLayer。Content 内应提供 PopoverTitle,并在需要时补充 PopoverDescription。

API 参考

属性类型默认值说明
Popover v-model:openbooleanundefined弹出卡的受控打开状态。
Popover defaultOpenbooleanfalse非受控初始打开状态。
Popover modalbooleantrue弹出卡打开时是否阻断背景交互。
PopoverContent side / alignPopperContentProps'bottom' / 'center'卡片方向与对齐。
PopoverContent sideOffsetnumber4卡片与触发器的偏移像素。
PopoverHeader classHTMLAttributes["class"]undefined合并到卡片头部的调用方类。
PopoverAnchor as / asChildstring | Component / boolean'div' / false自定义锚点的元素组合能力。