Message
Global message prompt, used to feedback the result of user operations.
Basic Usage
If you have fully registered the component library, you can use it in the following ways:
window.$message
;- Inside a Vue component:
getCurrentInstance().appContext.config.globalProperties.PixeliumVue.message
; - Import from
@pixelium/web-vue
.
When importing on-demand, you can also import Message
from @pixelium/web-vue/es
for use.
<template>
<px-space>
<px-button @click="callByWindow">Window</px-button>
<px-button @click="callByCurrentInstance">Current Instance</px-button>
<px-button @click="callByOnDemandImport">On-demand Import</px-button>
</px-space>
</template>
<script lang="ts" setup>
import { getCurrentInstance } from 'vue'
import { Message } from '@pixelium/web-vue/es'
const instance = getCurrentInstance()
const callByWindow = () => {
$message('Global Message')
}
const callByCurrentInstance = () => {
instance.appContext.config.globalProperties.PixeliumVue.message('Global Message')
}
const callByOnDemandImport = () => {
Message('Global Message')
}
</script>
Message Types
Messages come in 7 types: 'normal'
(default), 'info'
, 'success'
, 'warning'
, 'error'
, 'loading'
, and 'sakura'
. Among them, 'normal'
and 'sakura'
do not display icons by default.
<template>
<px-space>
<px-button @click="callMessage('info')">Info</px-button>
<px-button theme="success" @click="callMessage('success')">Success</px-button>
<px-button theme="warning" @click="callMessage('warning')">Warning</px-button>
<px-button theme="danger" @click="callMessage('error')">Error</px-button>
<px-button color="#909399" @click="callMessage('loading')">Loading</px-button>
<px-button theme="sakura" @click="callMessage('sakura')">Sakura</px-button>
<px-button theme="info" @click="callMessage('normal')">Normal</px-button>
</px-space>
</template>
<script lang="ts" setup>
const callMessage = (type: string) => {
const text = type.slice(0, 1).toUpperCase() + type.slice(1)
$message[type](`${text} message`)
}
</script>
Message Placements
Messages can appear in 6 placements: top-left, top (default), top-right, bottom-left, bottom-right, and bottom.
<template>
<px-space direction="vertical">
<px-space>
<px-button theme="info" @click="callMessage('top-left')">Top Left</px-button>
<px-button theme="info" @click="callMessage('top')">Top</px-button>
<px-button theme="info" @click="callMessage('top-right')">Top Right</px-button>
</px-space>
<px-space>
<px-button theme="info" @click="callMessage('bottom-left')">Bottom Left</px-button>
<px-button theme="info" @click="callMessage('bottom')">Bottom</px-button>
<px-button theme="info" @click="callMessage('bottom-right')">Bottom Right</px-button>
</px-space>
</px-space>
</template>
<script lang="ts" setup>
const textMap: Record<string, string> = {
'top-eft': 'Top Left',
top: 'Top',
'top-right': 'Top Right',
'bottom-left': 'Bottom Left',
bottom: 'Bottom',
'bottom-right': 'Bottom Right'
}
const callMessage = (placement: string) => {
$message.info({
content: `${textMap[placement]} Message`,
placement
})
}
</script>
Closable Messages
Set closable
to make the message closable.
<template>
<px-space>
<px-button @click="callMessage('info')">Info, Closable</px-button>
<px-button theme="success" @click="callMessage('success')">Success, Closable</px-button>
<px-button theme="warning" @click="callMessage('warning')">Warning, Closable</px-button>
<px-button theme="danger" @click="callMessage('error')">Error, Closable</px-button>
<px-button color="#909399" @click="callMessage('loading')">Loading, Closable</px-button>
<px-button theme="sakura" @click="callMessage('sakura')">Sakura, Closable</px-button>
<px-button theme="info" @click="callMessage('normal')">Normal, Closable</px-button>
</px-space>
</template>
<script lang="ts" setup>
const callMessage = (type: string) => {
const text = type.slice(0, 1).toUpperCase() + type.slice(1)
$message[type]({
content: `${text} message, closable`,
closable: true
})
}
</script>
Duration
Set the duration of the message with duration
.
<template>
<px-space>
<px-button @click="call(1000)">1s</px-button>
<px-button @click="call(3000)">3s</px-button>
<px-button @click="call(10000)">10s</px-button>
</px-space>
</template>
<script lang="ts" setup>
const call = (duration: number) => {
$message({
content: `Message with Duration of ${duration}ms...`,
duration: duration
})
}
</script>
Message Icons
Set the message icon with icon
.
<template>
<px-button @click="call">Icon</px-button>
</template>
<script lang="ts" setup>
import { IconMinds } from '@pixelium/web-vue/icon-hn/es'
import { h } from 'vue'
const call = () => {
$message.info({
content: 'Minds Icon',
icon: () => h(IconMinds)
})
}
</script>
Message Content
Message content supports JSX or render functions.
<template>
<px-button @click="call" theme="success">Content</px-button>
</template>
<script lang="ts" setup>
import { h } from 'vue'
import { Button } from '@pixelium/web-vue'
const call = () => {
$message.info({
content: () => h('div', {}, ['It can be a ', h(Button, {}, 'Button')])
})
}
</script>
Custom Colors
Customize the primary color. The internal system generates a complete color palette based on this, which has a higher priority than the preset color palette provided by the info
property. It supports CSS-like 'rgb(r, g, b)'
and 'rgba(r, g, b, a)'
strings, as well as 3, 4, 6, and 8-digit hexadecimal numbers.
<template>
<px-space>
<px-button color="#409EFF" @click="call('#409EFF')">#409EFF Color</px-button>
<px-button color="#FAE13C" @click="call('#FAE13C')">#FAE13C Color</px-button>
<px-button color="#E956AE" @click="call('#E956AE')">#E956AE Color</px-button>
<px-button color="#909399" @click="call('#909399')">#909399 Color</px-button>
</px-space>
</template>
<script lang="ts" setup>
const call = (color: string) => {
$message({
content: `${color}`,
color
})
}
</script>
Message Container
The MessageBox component is the container for messages. The position of the message is determined by the container's placement
. In functionally created messages, messages with the same position are sub-components of the same MessageBox. We also provide an export for MessageBox.
<template>
<div>
<px-message-box v-model:messages="messages"></px-message-box>
<px-button @click="pushMessage">Add Message</px-button>
<div>
{{ messages.map((e: MessageProps) => e.content).join('\n') }}
</div>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import type { MessageProps } from '@pixelium/web-vue/es/message/type.d.ts'
const messages = ref<MessageProps[]>([])
let id = 0
const pushMessage = () => {
messages.value.push({
id: id,
content: `Message ${id}`
})
id++
}
</script>
API
MessageFunction
type MessageFunction = (options: ValidContent | MessageOptions) => MessageReturn & {
[key in MessageOptions['type'] & string]: (options: Omit<MessageOptions, 'type'> | string) => MessageReturn
}
declare const message: MessageFunction
2
3
4
ValidContent, ValidVNodeContent
type ValidContent = string | (() => VNode | string | JSX.Element)
type ValidVNodeContent = () => VNode | JSX.Element
2
MessageOptions
Attribute | Type | Optional | Default | Description | Version |
---|---|---|---|---|---|
content | ValidContent | True |
| Message content. | 0.0.0-beta |
icon | ValidVNodeContent | True |
| Message icon. | 0.0.0-beta |
duration | number | True | 3000 | Duration (ms). | 0.0.0-beta |
type | 'info' | 'success' | 'warning' | 'error' | 'loading' | 'normal' | 'sakura' | True | 'normal' | Message type. | 0.0.0-beta |
color | string | True |
| Custom primary color. The internal system generates a complete color palette based on this, which has a higher priority than the preset color palette provided by info property. It supports CSS-like 'rgb(r, g, b)' and 'rgba(r, g, b, a)' strings, as well as 3, 4, 6, and 8-digit hexadecimal numbers. | 0.0.0-beta |
closable | boolean | True | false | Whether the message can be closed. | 0.0.0-beta |
placement | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | True | 'top' | The position where the message appears. | 0.0.2 |
position | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | True | 'top' | Deprecated The position where the message appears. | 0.0.0-beta |
root | string | HTMLElement | True | 'body' | The element where the message is mounted. | 0.0.0-beta |
MessageReturn
Attribute | Type | Optional | Default | Description | Version |
---|---|---|---|---|---|
close | () => void | False |
| Close the current message. | 0.0.0-beta |
clear | () => void | False |
| Clear all messages in the current MessageBox. | 0.0.0-beta |
MessageBoxProps
Attribute | Type | Optional | Default | Description | Version |
---|---|---|---|---|---|
messages | MessageProps[] | False |
| All messages in the current MessageBox. | 0.0.0-beta |
placement | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | True | 'top' | The position where the message appears. | 0.0.2 |
position | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | True | 'top' | Deprecated The position where the message appears. | 0.0.0-beta |
zIndex | number | True |
| The z-index style of MessageBox. | 0.0.0-beta |
root | string | HTMLElement | True | 'body' | The element where the message is mounted. | 0.0.0-beta |
MessageBoxEvents
Event | Parameter | Description | Version |
---|---|---|---|
update:messages | value: MessageProps[] | v-model updates the messages property. | 0.0.0-beta |
close | id: string | number | symbol | Callback for closing the message. | 0.0.0-beta |
MessageBoxExpose
Attribute | Type | Optional | Default | Description | Version |
---|---|---|---|---|---|
close | (id: number | string | symbol) => void | False |
| Close the message. | 0.0.0-beta |
MessageProps
Attribute | Type | Optional | Default | Description | Version |
---|---|---|---|---|---|
content | ValidContent | True |
| Message content. | 0.0.0-beta |
icon | ValidVNodeContent | True |
| Message icon. | 0.0.0-beta |
duration | number | True | 3000 | Duration (ms). | 0.0.0-beta |
id | number | string | symbol | True |
| The unique identifier for the message. A random nanoid is used by default. | 0.0.0-beta |
type | 'info' | 'success' | 'warning' | 'error' | 'loading' | 'normal' | 'sakura' | True | 'normal' | Message type. | 0.0.0-beta |
color | string | True |
| Custom primary color. The internal system generates a complete color palette based on this, which has a higher priority than the preset color palette provided by info property. It supports CSS-like 'rgb(r, g, b)' and 'rgba(r, g, b, a)' strings, as well as 3, 4, 6, and 8-digit hexadecimal numbers. | 0.0.0-beta |
closable | boolean | True | false | Whether the message can be closed. | 0.0.0-beta |