Animated Badge
将紧凑状态标签与图标组合,并可加入脉冲反馈。
适用场景
- 当界面需要以下行为时使用 Animated Badge:将紧凑状态标签与图标组合,并可加入脉冲反馈。
安装
选择安装方式,用法示例将同步更新导入路径。
$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/animated-badge.json
首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。
示例
预览
Syncing
QueuedLiveIndexingVerifiedPendingBlocked
packages/vue/src/motion/animated-badge/demo.vue
<script setup lang="ts">
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
import { AnimatedBadge, type AnimatedBadgeStatus } from "@/components/orvui/motion/animated-badge";
const sequence = [
{ status: "loading", label: "Syncing" }, { status: "success", label: "Synced" },
{ status: "warning", label: "Review" }, { status: "danger", label: "Failed" },
] as const;
const samples = [["neutral", "Queued"], ["info", "Live"], ["loading", "Indexing"], ["success", "Verified"], ["warning", "Pending"], ["danger", "Blocked"]] as const;
const step = ref(0), current = computed(() => sequence[step.value % sequence.length]!);
let interval: ReturnType<typeof setInterval> | undefined;
onMounted(() => { interval = setInterval(() => { step.value += 1; }, 1600); });
onBeforeUnmount(() => clearInterval(interval));
</script>
<template>
<div class="flex flex-col items-center gap-6">
<div class="flex h-16 items-center justify-center"><AnimatedBadge :status="current.status" size="md" aria-live="polite">{{ current.label }}</AnimatedBadge></div>
<div class="grid grid-cols-2 gap-2 sm:grid-cols-3"><AnimatedBadge v-for="[status, label] in samples" :key="status" :status="status" size="sm">{{ label }}</AnimatedBadge></div>
</div>
</template>
packages/vue/src/motion/animated-badge/src/AnimatedBadge.vue
状态与事件
此示例组合没有声明成对的受控属性与 update 事件。使用已列出的属性、原生事件和插槽组合内容;不要为它添加未公开的 v-model。
API 参考
status?"info" | "success" | "warning" | "loading" | "neutral" | "danger""neutral"size?"sm" | "md""md"icon?any({ neutral: Circle, info: Info, success: Check, warning: TriangleAlert, danger: X, loading: LoaderCircle })[props.status]showIcon?booleantruepulse?booleanundefinedcontentKey?string | number—插槽
icon() => VNodeChild#icondefault() => VNodeChild#default无障碍
为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。
常见问题
- 如何配置 Animated Badge?
- 通过 status、size、icon、showIcon、pulse、contentKey 配置 Animated Badge;API 表列出其类型与默认值。
- 如何连接到应用状态?
- 通过icon、default 插槽提供内容,应用副作用由调用方管理。
- 可以在服务端渲染吗?
- 可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。
更新于
来源与许可 ↗MIT · 0.1.1