avatar

Avatar with loading state demonstration

Avatar with loading state demonstration

Загрузка превью…

src/avatar/c-avatar-30.vue

<script setup lang="ts">
import { onBeforeUnmount, onMounted, ref } from "vue"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import { Spinner } from "@/components/ui/spinner"

const PIXEL =
  "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAUwAOw=="

const loading = ref(true)
let interval: ReturnType<typeof setInterval> | undefined

onMounted(() => {
  interval = setInterval(() => {
    loading.value = !loading.value
  }, 2000)
})

onBeforeUnmount(() => {
  clearInterval(interval)
})
</script>

<template>
  <div class="relative">
    <Avatar>
      <AvatarImage :src="PIXEL" alt="@shadcn" />
      <AvatarFallback>CN</AvatarFallback>
    </Avatar>
    <div
      v-if="loading"
      class="bg-background/60 absolute inset-0 flex items-center justify-center rounded-full"
    >
      <Spinner class="text-primary" />
    </div>
  </div>
</template>

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-avatar-30.json

Зависимости реестра

Источник: порт из ReUI (Keenthemes, MIT)