mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-27 18:30:35 +01:00
feat(Notification): support html with title and description slots (#431)
This commit is contained in:
10
docs/app.vue
10
docs/app.vue
@@ -38,7 +38,15 @@
|
|||||||
<UDocsSearch :files="files" :links="navigation" />
|
<UDocsSearch :files="files" :links="navigation" />
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
|
|
||||||
<UNotifications />
|
<UNotifications>
|
||||||
|
<template #title="{ title }">
|
||||||
|
<span v-html="title" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #description="{ description }">
|
||||||
|
<span v-html="description" />
|
||||||
|
</template>
|
||||||
|
</UNotifications>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
const toast = useToast()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UButton label="Show toast" @click="toast.add({ title: 'Notification <i>italic</i>', description: 'This is an <u>underlined</u> and <b>bold</b> notification.' })" />
|
||||||
|
</template>
|
||||||
@@ -316,6 +316,50 @@ excludedProps:
|
|||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
|
## Slots
|
||||||
|
|
||||||
|
### `title` / `description`
|
||||||
|
|
||||||
|
Use the `#title` and `#description` slots to customize the Notification.
|
||||||
|
|
||||||
|
This can be handy when you want to display HTML content. To achieve this, you can define those slots in the top-level `<UNotifications />` component in your `app.vue` and use the `v-html` directive.
|
||||||
|
|
||||||
|
```vue [app.vue]
|
||||||
|
<template>
|
||||||
|
<UNotifications>
|
||||||
|
<template #title="{ title }">
|
||||||
|
<span v-html="title" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #description="{ description }">
|
||||||
|
<span v-html="description" />
|
||||||
|
</template>
|
||||||
|
</UNotifications>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
This way, you can use HTML tags in the `title` and `description` props when using `useToast`.
|
||||||
|
|
||||||
|
::component-example
|
||||||
|
#default
|
||||||
|
:notification-example-html
|
||||||
|
|
||||||
|
#code
|
||||||
|
```vue
|
||||||
|
<script setup>
|
||||||
|
const toast = useToast()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UButton label="Show toast" @click="toast.add({ title: 'Notification <i>italic</i>', description: 'This is an <u>underlined</u> and <b>bold</b> notification.' })" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
::
|
||||||
|
|
||||||
|
::callout{icon="i-heroicons-light-bulb"}
|
||||||
|
Slots defined in the `<UNotifications />` component are automatically passed down to the `Notification` children.
|
||||||
|
::
|
||||||
|
|
||||||
## Props
|
## Props
|
||||||
|
|
||||||
:component-props
|
:component-props
|
||||||
|
|||||||
@@ -9,10 +9,14 @@
|
|||||||
|
|
||||||
<div class="w-0 flex-1">
|
<div class="w-0 flex-1">
|
||||||
<p :class="ui.title">
|
<p :class="ui.title">
|
||||||
{{ title }}
|
<slot name="title" :title="title">
|
||||||
|
{{ title }}
|
||||||
|
</slot>
|
||||||
</p>
|
</p>
|
||||||
<p v-if="description" :class="ui.description">
|
<p v-if="description" :class="ui.description">
|
||||||
{{ description }}
|
<slot name="description" :description="description">
|
||||||
|
{{ description }}
|
||||||
|
</slot>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div v-if="description && actions.length" class="mt-3 flex items-center gap-2">
|
<div v-if="description && actions.length" class="mt-3 flex items-center gap-2">
|
||||||
|
|||||||
@@ -7,7 +7,11 @@
|
|||||||
:class="notification.click && 'cursor-pointer'"
|
:class="notification.click && 'cursor-pointer'"
|
||||||
@click="notification.click && notification.click(notification)"
|
@click="notification.click && notification.click(notification)"
|
||||||
@close="toast.remove(notification.id)"
|
@close="toast.remove(notification.id)"
|
||||||
/>
|
>
|
||||||
|
<template v-for="(_, name) in $slots" #[name]="slotData">
|
||||||
|
<slot :name="name" v-bind="slotData" />
|
||||||
|
</template>
|
||||||
|
</UNotification>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user