Animated Alert
用紧凑消息行呈现反馈,可加入操作并允许关闭。
适用场景
- 当界面需要以下行为时使用 Animated Alert:用紧凑消息行呈现反馈,可加入操作并允许关闭。
安装
选择安装方式,用法示例将同步更新导入路径。
$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/alert.json https://orvui.efu.me/r/button.json https://orvui.efu.me/r/tabs.json
首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。
示例
预览
A quick update
Edits are stored in the background while you work.
packages/vue/src/motion/alert/demo.vue
<script setup lang="ts">
import { computed, ref } from "vue";
import { Alert, AlertAction, AlertClose, AlertContent, AlertDescription, AlertIcon, AlertTitle } from "@/components/orvui/motion/alert";
import { Button } from "@/components/orvui/motion/button";
import { Tabs, TabsList, TabsTrigger } from "@/components/orvui/motion/tabs";
import { resolveElement } from "@/components/orvui/lib/composables";
const messages = {
info: { label: "Info", title: "A quick update", description: "Edits are stored in the background while you work." },
success: { label: "Success", title: "Ready to go", description: "Your latest edits are now stored." },
warning: { label: "Warning", title: "Storage is nearly full", description: "There is only a little storage left. Remove a few unused files to make room for your next upload." },
destructive: { label: "Error", title: "Please try once more", description: "The latest edits could not be stored. Try saving again." },
};
type Variant = keyof typeof messages;
const selected = ref<Variant>("info"), opened = ref(true), showButton = ref<HTMLElement | null>(null);
const message = computed(() => messages[selected.value]);
function choose(value: string) { selected.value = value as Variant; opened.value = true; }
</script>
<template>
<div class="flex w-full max-w-md flex-col items-center gap-6">
<Tabs :model-value="selected" @update:model-value="choose" class="w-full"><TabsList aria-label="Alert variant" class="bg-muted">
<TabsTrigger v-for="(item, variant) in messages" :key="variant" :value="variant" class="px-3 py-1.5 text-xs">{{ item.label }}</TabsTrigger>
</TabsList></Tabs>
<Alert v-model:open="opened" :variant="selected" :return-focus-ref="showButton ?? undefined"><AlertIcon /><AlertContent>
<AlertTitle>{{ message.title }}</AlertTitle><AlertDescription>{{ message.description }}</AlertDescription>
<AlertAction v-if="selected === 'destructive'"><Button size="sm" variant="outline" @click="selected = 'success'">Try again</Button></AlertAction>
</AlertContent><AlertClose /></Alert>
<Button :ref="node => showButton = resolveElement<HTMLElement>(node)" variant="ghost" size="sm" @click="opened = true" :disabled="opened">Show alert</Button>
</div>
</template>
packages/vue/src/motion/alert/src/Alert.vue
状态与事件
需要由表单、路由或父组件管理时,绑定下列状态并接收对应更新。v-model 是属性与 update 事件的简写;值的类型应与 API 一致。
| 组件 | Vue 绑定 | 更新事件 |
|---|---|---|
Alert | v-model:openboolean | update:open |
可选受控属性未传入时,按组件文档的默认行为工作;不要用固定的 false 或空值代替未传入。异步请求和持久化在应用中处理,再把结果传回组件。
API 参考
Alert
variant?"default" | "info" | "success" | "warning" | "destructive""default"open?booleanundefineddefaultOpen?booleantruecontentClassName?string—role?"alert" | "status"—returnFocusRef?HTMLElement | Ref<HTMLElement | null, HTMLElement | null>—事件
update:open—@update:open插槽
default—作用域参数: dismiss
#defaultAlertAction
插槽
default() => any#defaultAlertClose
插槽
default() => VNodeChild#defaultAlertContent
插槽
default() => any#defaultAlertDescription
插槽
default() => any#defaultAlertIcon
插槽
default() => VNodeChild#defaultAlertTitle
插槽
default() => any#default无障碍
为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。
常见问题
- 如何配置 Animated Alert?
- 通过 variant、open、defaultOpen、contentClassName、role、returnFocusRef 配置 Animated Alert;API 表列出其类型与默认值。
- 如何连接到应用状态?
- 监听 update:open,将组件连接到应用状态。
- 可以在服务端渲染吗?
- 可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。
更新于
来源与许可 ↗MIT · 0.1.1