Message

Message component is used to display inline messages.

Usage#

import { Message } from 'primereact/message';
<Message>
    <Message.Content>
        <Message.Text>Message</Message.Text>
    </Message.Content>
</Message>

Examples#

Basic#

Message Content
basic-demo.tsx
'use client';

import { Message } from 'primereact/message';

export default function BasicDemo() {
    return (
        <div>
            <Message>
                <Message.Content>
                    <Message.Text>Message Content</Message.Text>
                </Message.Content>
            </Message>
        </div>
    );
}

Severity#

The severity option specifies the type of the message.

Success Message
Info Message
Warn Message
Error Message
Secondary Message
Contrast Message
severity-demo.tsx
'use client';

import { Message } from 'primereact/message';

export default function SeverityDemo() {
    return (
        <div className="flex items-center justify-center gap-4">
            <Message severity="success">
                <Message.Content>
                    <Message.Text>Success Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="info">
                <Message.Content>
                    <Message.Text>Info Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="warn">
                <Message.Content>
                    <Message.Text>Warn Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="error">
                <Message.Content>
                    <Message.Text>Error Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="secondary">
                <Message.Content>
                    <Message.Text>Secondary Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="contrast">
                <Message.Content>
                    <Message.Text>Contrast Message</Message.Text>
                </Message.Content>
            </Message>
        </div>
    );
}

Icon#

Message.Icon is used to display an icon.

Info Message
How may I help you?
icon-demo.tsx
'use client';

import { Avatar } from 'primereact/avatar';
import { Message } from 'primereact/message';

export default function IconDemo() {
    return (
        <div className="flex justify-center gap-4">
            <Message severity="info">
                <Message.Content>
                    <Message.Icon className="pi pi-info-circle" />
                    <Message.Text>Info Message</Message.Text>
                </Message.Content>
            </Message>
            <Message severity="success">
                <Message.Content>
                    <Message.Icon asChild>
                        <Avatar shape="circle">
                            <Avatar.Image src="https://primefaces.org/cdn/primereact/images/avatar/amyelsner.png" />
                        </Avatar>
                    </Message.Icon>
                    <Message.Text>How may I help you?</Message.Text>
                </Message.Content>
            </Message>
        </div>
    );
}

Variant#

Configure the variant value as outlined or simple.

Outlined

Success Message
Info Message
Warn Message
Error Message
Secondary Message
Contrast Message

Simple

Success Message
Info Message
Warn Message
Error Message
Secondary Message
Contrast Message
variant-demo.tsx
'use client';

import { Message } from 'primereact/message';

export default function VariantDemo() {
    return (
        <div className="space-y-8">
            <div className="space-y-4">
                <h3 className="text-lg font-semibold mb-2">Outlined</h3>
                <div className="flex items-center gap-4">
                    <Message severity="success" variant="outlined">
                        <Message.Content>
                            <Message.Text>Success Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="info" variant="outlined">
                        <Message.Content>
                            <Message.Text>Info Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="warn" variant="outlined">
                        <Message.Content>
                            <Message.Text>Warn Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="error" variant="outlined">
                        <Message.Content>
                            <Message.Text>Error Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="secondary" variant="outlined">
                        <Message.Content>
                            <Message.Text>Secondary Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="contrast" variant="outlined">
                        <Message.Content>
                            <Message.Text>Contrast Message</Message.Text>
                        </Message.Content>
                    </Message>
                </div>
            </div>
            <div className="space-y-4">
                <h3 className="text-lg font-semibold mb-2">Simple</h3>
                <div className="flex items-center gap-4">
                    <Message severity="success" variant="simple">
                        <Message.Content>
                            <Message.Text>Success Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="info" variant="simple">
                        <Message.Content>
                            <Message.Text>Info Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="warn" variant="simple">
                        <Message.Content>
                            <Message.Text>Warn Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="error" variant="simple">
                        <Message.Content>
                            <Message.Text>Error Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="secondary" variant="simple">
                        <Message.Content>
                            <Message.Text>Secondary Message</Message.Text>
                        </Message.Content>
                    </Message>
                    <Message severity="contrast" variant="simple">
                        <Message.Content>
                            <Message.Text>Contrast Message</Message.Text>
                        </Message.Content>
                    </Message>
                </div>
            </div>
        </div>
    );
}

Sizes#

Message provides small and large sizes as alternatives to the base.

Small Message
Normal Message
Large Message
sizes-demo.tsx
'use client';

import { Message } from 'primereact/message';

export default function SizesDemo() {
    return (
        <div className="flex flex-col items-center gap-4">
            <Message size="small">
                <Message.Content>
                    <Message.Icon className="pi pi-send" />
                    <Message.Text>Small Message</Message.Text>
                </Message.Content>
            </Message>
            <Message>
                <Message.Content>
                    <Message.Icon className="pi pi-send" />
                    <Message.Text>Normal Message</Message.Text>
                </Message.Content>
            </Message>
            <Message size="large">
                <Message.Content>
                    <Message.Icon className="pi pi-send" />
                    <Message.Text>Large Message</Message.Text>
                </Message.Content>
            </Message>
        </div>
    );
}

Dynamic#

Multiple messages can be displayed.

dynamic-demo.tsx
'use client';

import { MessageProps } from '@primereact/types/shared/message';
import { Button } from 'primereact/button';
import { Message } from 'primereact/message';
import * as React from 'react';

export default function DynamicDemo() {
    const [messages, setMessages] = React.useState<MessageProps[]>([]);

    const addMessages = () => {
        setMessages([
            { severity: 'info', content: 'Dynamic Info Message' },
            { severity: 'success', content: 'Dynamic Success Message' },
            { severity: 'warn', content: 'Dynamic Warn Message' }
        ]);
    };

    const clearMessages = () => {
        setMessages([]);
    };

    return (
        <div className="flex flex-col items-center justify-center gap-4">
            <div className="flex gap-2">
                <Button onClick={addMessages}>Add Messages</Button>
                <Button severity="secondary" onClick={clearMessages}>
                    Clear Messages
                </Button>
            </div>
            {messages.map((item, index) => (
                <Message key={index} severity={item.severity}>
                    <Message.Content>
                        <Message.Text>{item.content}</Message.Text>
                    </Message.Content>
                </Message>
            ))}
        </div>
    );
}

Closable#

Message.Close is a triggerable element used to close the message.

This is a closable message.
closable-demo.tsx
'use client';

import { Message } from 'primereact/message';

export default function ClosableDemo() {
    return (
        <div>
            <Message>
                <Message.Content>
                    <Message.Text>This is a closable message.</Message.Text>
                    <Message.Close />
                </Message.Content>
            </Message>
        </div>
    );
}

Life#

Messages can disappear automatically by defined the life in milliseconds.

life-demo.tsx
'use client';

import { Button } from 'primereact/button';
import { Message } from 'primereact/message';
import * as React from 'react';

export default function LifeDemo() {
    const [visible, setVisible] = React.useState(false);

    return (
        <div className="flex flex-col items-center justify-center gap-4">
            <Button disabled={visible} onClick={() => setVisible(true)}>
                Show Message
            </Button>
            {visible && (
                <Message life={3000} severity="success" onClose={() => setVisible(false)}>
                    <Message.Content>
                        <Message.Text>Auto Disappear Message</Message.Text>
                    </Message.Content>
                </Message>
            )}
        </div>
    );
}

Accessibility#

Screen Reader#

Message component uses alert role that implicitly defines aria-live as "assertive" and aria-atomic as "true". Since any attribute is passed to the root element, attributes like aria-labelledby and aria-label can optionally be used as well.

Close element is a button with an aria-label that refers to the aria.close property of the locale API by default, you may use closeButtonProps to customize the element and override the default aria-label.

Close Button Keyboard Support#

KeyFunction
enterCloses the message.
spaceCloses the message.