feat(Alert): add icon & avatar slots (#1401)

Co-authored-by: gangan <44604921+shinGangan@users.noreply.github.com>
Co-authored-by: Benjamin Canac <canacb1@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This commit is contained in:
Alex Thorwaldson
2024-03-13 13:49:57 -07:00
committed by GitHub
parent f4a48f6016
commit cee3e126a4
4 changed files with 48 additions and 2 deletions

View File

@@ -0,0 +1,20 @@
<template>
<UAlert
title="Customize Alert Avatar"
description="Insert custom content into the avatar slot!"
:avatar="{
src: 'https://avatars.githubusercontent.com/u/739984?v=4',
alt: 'Avatar'
}"
>
<template #avatar="{ avatar }">
<UAvatar
v-bind="avatar"
chip-color="primary"
chip-text=""
chip-position="top-right"
/>
</template>
</UAlert>
</template>

View File

@@ -0,0 +1,10 @@
<template>
<UAlert title="Customize Alert Icon" description="Insert custom content into the icon slot!" icon="i-heroicons-command-line">
<template #icon="{ icon }">
<UBadge size="sm">
<UIcon :name="icon" />
</UBadge>
</template>
</UAlert>
</template>

View File

@@ -163,6 +163,18 @@ This can be handy when you want to display HTML content. To achieve this, you ca
:component-example{component="alert-example-html"}
### `icon`
Use the `#icon` slot to customize the displayed icon.
:component-example{component="alert-example-icon"}
### `avatar`
Use the `#avatar` slot to customize the displayable avatar.
:component-example{component="alert-example-avatar"}
## Props
:component-props

View File

@@ -1,8 +1,12 @@
<template>
<div :class="alertClass" v-bind="attrs">
<div class="flex" :class="[ui.gap, { 'items-start': (description || $slots.description), 'items-center': !description && !$slots.description }]">
<UIcon v-if="icon" :name="icon" :class="ui.icon.base" />
<UAvatar v-if="avatar" v-bind="{ size: ui.avatar.size, ...avatar }" :class="ui.avatar.base" />
<slot name="icon" :icon="icon">
<UIcon v-if="icon" :name="icon" :ui="ui.icon.base" />
</slot>
<slot name="avatar" :avatar="avatar">
<UAvatar v-if="avatar" v-bind="{ size: ui.avatar.size, ...avatar }" :class="ui.avatar.base" />
</slot>
<div :class="ui.inner">
<p v-if="(title || $slots.title)" :class="ui.title">