Skip to content

AlertModal Component ​

Alert modal component for displaying important messages, confirmations, and notifications. Provides a clean, accessible modal interface with customizable actions.

Overview ​

The AlertModal component creates modal dialogs for important user interactions like confirmations, warnings, and informational messages. It includes proper focus management, keyboard navigation, and customizable action buttons.

Preview ​

Alert Modal Component Preview

Basic Usage ​

vue
<template>
  <div>
    <Button @click="showAlert = true">Show Alert</Button>
    
    <AlertModal
      v-model="showAlert"
      title="Confirm Action"
      message="Are you sure you want to delete this item?"
      type="warning"
      @confirm="handleConfirm"
      @cancel="handleCancel"
    />
  </div>
</template>

<script setup lang="ts">
const showAlert = ref(false)

const handleConfirm = () => {
  // Handle confirmation
  showAlert.value = false
}

const handleCancel = () => {
  // Handle cancellation
  showAlert.value = false
}
</script>

Features ​

🎯 Multiple Alert Types ​

  • Info - Informational messages
  • Success - Success confirmations
  • Warning - Warning messages
  • Error - Error notifications

🔘 Customizable Actions ​

  • Primary and secondary buttons
  • Custom button labels
  • Configurable button variants
  • Action callbacks

♿ Accessibility Features ​

  • Focus trap management
  • Keyboard navigation (Enter/Escape)
  • ARIA labels and roles
  • Screen reader support

🎨 Modern Design ​

  • Clean modal overlay
  • Responsive design
  • Smooth animations
  • Icon integration

Component API ​

Props ​

PropTypeDefaultDescription
modelValuebooleanfalseModal visibility state
titlestring''Modal title
messagestring''Modal message content
type'info' | 'success' | 'warning' | 'error''info'Alert type
confirmTextstring'Confirm'Confirm button text
cancelTextstring'Cancel'Cancel button text
showCancelbooleantrueShow cancel button

Events ​

EventPayloadDescription
update:modelValuebooleanModal visibility change
confirmvoidConfirm button clicked
cancelvoidCancel button clicked
closevoidModal closed (any method)

Alert Types ​

Info Alert ​

vue
<AlertModal
  type="info"
  title="Information"
  message="Here's some important information for you."
/>

Success Alert ​

vue
<AlertModal
  type="success"
  title="Success!"
  message="Your action was completed successfully."
/>

Warning Alert ​

vue
<AlertModal
  type="warning"
  title="Warning"
  message="This action cannot be undone. Continue?"
/>

Error Alert ​

vue
<AlertModal
  type="error"
  title="Error"
  message="Something went wrong. Please try again."
/>

Advanced Examples ​

Custom Actions ​

vue
<AlertModal
  v-model="showCustomAlert"
  title="Custom Actions"
  message="Choose your action:"
  confirm-text="Save Changes"
  cancel-text="Discard"
  @confirm="saveChanges"
  @cancel="discardChanges"
/>

Single Action Modal ​

vue
<AlertModal
  v-model="showInfoModal"
  title="Information"
  message="This is an informational message."
  :show-cancel="false"
  confirm-text="Got it"
  @confirm="acknowledgeInfo"
/>

With Custom Content ​

vue
<AlertModal v-model="showModal" title="Custom Content">
  <template #content>
    <div class="custom-content">
      <p>Your custom HTML content goes here.</p>
      <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
      </ul>
    </div>
  </template>
</AlertModal>

Styling Details ​

  • Overlay with backdrop blur
  • Centered modal container
  • Responsive width and padding
  • Smooth fade animations

Type-specific Styling ​

Each alert type has distinct visual styling:

  • Info: Blue accent colors
  • Success: Green accent colors
  • Warning: Yellow/orange accent colors
  • Error: Red accent colors

Keyboard Navigation ​

  • Enter: Confirm action
  • Escape: Cancel/close modal
  • Tab: Navigate between buttons
  • Space: Activate focused button

Integration Examples ​

With Form Validation ​

vue
<script setup lang="ts">
const showValidationAlert = ref(false)
const validationErrors = ref([])

const validateForm = () => {
  if (errors.length > 0) {
    validationErrors.value = errors
    showValidationAlert.value = true
  }
}
</script>

<template>
  <AlertModal
    v-model="showValidationAlert"
    type="error"
    title="Validation Errors"
    :message="`Please fix ${validationErrors.length} errors before continuing.`"
    :show-cancel="false"
    confirm-text="OK"
  />
</template>

With API Operations ​

vue
<script setup lang="ts">
const deleteItem = async (itemId) => {
  const confirmed = await showConfirmation({
    title: 'Delete Item',
    message: 'This action cannot be undone.',
    type: 'warning'
  })
  
  if (confirmed) {
    try {
      await $fetch(`/api/items/${itemId}`, { method: 'DELETE' })
      toast.success('Item deleted successfully')
    } catch (error) {
      showError('Failed to delete item')
    }
  }
}
</script>

Built with love by mhdevfr