Alert
The VAlert component is a flexible alert component that can be used to display various types of messages to the user. It is registered globally when you install @morpheme/ui, so you don't need to import it manually.
Usage
Basic Usage
To use the VAlert component, you can simply include it in your template like this:
Colors
- prop:
color - type:
string - default:
default - required:
false
You can use the color prop to specify the color style of the alert. The following colors are available:
defaultprimarysecondaryinfowarningsuccesserrordark
Here's an example of how to use different colors:
Solid Style
- prop:
solid - type:
boolean - default:
false - required:
false
Use solid to apply solid style to the alert.
Outlined Style
- prop:
outlined - type:
boolean - default:
false - required:
false
Use outlined to apply outlined style to the alert.
Bordered Style
- prop:
border - type:
boolean - default:
false - required:
false
Use border to apply bordered style to the alert.
v-model
- prop:
modelValue - type:
boolean - default:
true - required:
false
You can use the v-model directive to bind the alert to a data model. The modelValue prop is used to represent the model value, and it is a boolean that defaults to true.
Dismissable
- prop:
dismissable - type:
boolean - default:
false - required:
false
Use dismissable to make alert dismissable.
Transition
- prop:
transition - type:
string - default:
fade - required:
false
Use transition prop change the default transition.
Props
| Name | Type | Default |
|---|---|---|
| modelValue | boolean | true |
| color | string , available colors | default |
| icon | string | |
| dismissable | boolean | false |
| outlined | boolean | false |
| solid | boolean | false |
| border | boolean | false |
| transition | string | fade |
| iconClass | string | |
Events
| Name | Payload | Description |
|---|---|---|
| update:modelValue | (value: boolean) | Emitted when the modelValue prop changes. Receives a value argument with the new value. |
| dismissed | None | Emitted when the alert is dismissed by the user. |
To listen for the emit event in a parent component or another component, you can use the @ symbol followed by the event name. For example:
<script setup>
function handleModelValueUpdate(value) {
// do something with the value passed from the child component
}
function handleDismissed() {
// do something when the dismissed event is triggered
}
</script>
<template>
<VAlert
@update:modelValue="handleModelValueUpdate"
@dismissed="handleDismissed"
>
Alert message
</VAlert>
</template><script setup>
function handleModelValueUpdate(value) {
// do something with the value passed from the child component
}
function handleDismissed() {
// do something when the dismissed event is triggered
}
</script>
<template>
<VAlert
@update:modelValue="handleModelValueUpdate"
@dismissed="handleDismissed"
>
Alert message
</VAlert>
</template>Slots
default
A slot for placing the alert content/message.
icon
A slot for customizing the icon. Receives an icon prop with the name of the current icon.
x-button
A slot for customizing the dismiss button. Receives a dismiss prop with a function that dismisses the alert.
x-icon
A slot for customizing the icon in the dismiss button.
CSS Variables
:root {
--alert-bg-color: var(--color-white);
--alert-text-color: var(--color-gray-700);
--alert-border-color: var(--color-gray-300);
--alert-border-radius: var(--border-radius-lg);
--alert-border-width: 1px;
--alert-padding-x: var(--size-spacing-4);
--alert-padding-y: var(--size-spacing-3);
--alert-gap: 0.75rem;
--alert-font-size: var(--size-font-sm);
--alert-line-height: 20px;
--alert-icon-size: 20px;
// title
--alert-title-font-size: var(--size-font-sm);
--alert-title-font-weight: var(--font-weight-semibold);
--alert-title-line-height: 20px;
}:root {
--alert-bg-color: var(--color-white);
--alert-text-color: var(--color-gray-700);
--alert-border-color: var(--color-gray-300);
--alert-border-radius: var(--border-radius-lg);
--alert-border-width: 1px;
--alert-padding-x: var(--size-spacing-4);
--alert-padding-y: var(--size-spacing-3);
--alert-gap: 0.75rem;
--alert-font-size: var(--size-font-sm);
--alert-line-height: 20px;
--alert-icon-size: 20px;
// title
--alert-title-font-size: var(--size-font-sm);
--alert-title-font-weight: var(--font-weight-semibold);
--alert-title-line-height: 20px;
}Customization
With the power of CSS Variables and Tailwind's theme function, you can create your custom alert.
<script setup lang="ts">
import {ref} from 'vue';
const isOpen = ref(true);
</script>
<template>
<VAlert v-model="isOpen" color="indigo"> Alert text </VAlert>
</template>
<style>
.alert-indigo {
--alert-bg-color: var(--color-indigo-600);
--alert-text-color: var(--color-white);
--alert-border-radius: var(--border-radius-lg);
--alert-border-color: var(--color-indigo-600);
--alert-border-width: 2px;
--alert-padding-x: var(--size-spacing-6);
--alert-padding-y: var(--size-spacing-4);
}
</style><script setup lang="ts">
import {ref} from 'vue';
const isOpen = ref(true);
</script>
<template>
<VAlert v-model="isOpen" color="indigo"> Alert text </VAlert>
</template>
<style>
.alert-indigo {
--alert-bg-color: var(--color-indigo-600);
--alert-text-color: var(--color-white);
--alert-border-radius: var(--border-radius-lg);
--alert-border-color: var(--color-indigo-600);
--alert-border-width: 2px;
--alert-padding-x: var(--size-spacing-6);
--alert-padding-y: var(--size-spacing-4);
}
</style>Standalone Installation
You can also install the VAlert component individually via @morpheme/alert package:
npm i @morpheme/alertnpm i @morpheme/alertThen, use it like so.
<script setup lang="ts">
import VAlert from '@morpheme/alert';
</script>
<template>
<VAlert> Alert text </VAlert>
</template><script setup lang="ts">
import VAlert from '@morpheme/alert';
</script>
<template>
<VAlert> Alert text </VAlert>
</template>Tailwind Plugin
This package comes with custom tailwind plugin for styling. If you are installing this package separately from @morpheme/ui package, you need to include the plugin in plugins section in your Tailwind config file.
// tailwind.config.js
module.exports = {
content: [],
plugins: [require('@morpheme/tailwind-components/alert')],
};// tailwind.config.js
module.exports = {
content: [],
plugins: [require('@morpheme/tailwind-components/alert')],
};Storybook
View Storybook documentation here.
Morpheme