Skip to content

Icon ​

<pa-icon> | PaIcon

A flexible icon component that supports both FontAwesome icons and custom SVG icons. The component automatically determines the icon type and renders accordingly with support for different sizes, variants, and states.

Usage ​

vue
<template>
  <pa-icon icon="check-regular" />
</template>

Examples ​

Basic Usage ​

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="check-regular" />
    <pa-icon icon="edit-regular" />
    <pa-icon icon="trash-alt-regular" />
    <pa-icon icon="user-regular" />
    <pa-icon icon="cog-regular" />
    <pa-icon icon="search-regular" />
  </div>
</template>

Sizes ​

Icons support multiple sizes for different use cases.

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="star-solid" size="sm" />   <!-- 16x16px -->
    <pa-icon icon="star-solid" />             <!-- 24x24px (default) -->
    <pa-icon icon="star-solid" size="lg" />   <!-- 32x32px -->
    <pa-icon icon="star-solid" size="xl" />   <!-- 48x48px -->
  </div>
</template>

Color Variants ​

Icons can use semantic color variants to convey meaning.

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="info-circle-solid" variant="primary" />
    <pa-icon icon="check-circle-solid" variant="success" />
    <pa-icon icon="exclamation-triangle-solid" variant="warning" />
    <pa-icon icon="times-circle-solid" variant="danger" />
    <pa-icon icon="question-circle-solid" variant="secondary" />
  </div>
</template>

FontAwesome Icon Styles ​

The component supports FontAwesome Pro Light, Pro Solid, Pro Regular, and Free Brand icons. Icons use kebab-case naming with style suffixes:

Light Style (-light suffix):

Solid Style (-solid suffix):

Regular Style (-regular suffix):

Brand Style (-brand suffix):

vue
<template>
  <div>
    <!-- Light icons -->
    <pa-icon icon="check-light" />
    <pa-icon icon="copy-light" />
    <pa-icon icon="download-light" />
    
    <!-- Solid icons -->
    <pa-icon icon="check-solid" />
    <pa-icon icon="times-solid" />
    <pa-icon icon="star-solid" />
    
    <!-- Regular icons -->
    <pa-icon icon="star-regular" />
    <pa-icon icon="bell-regular" />
    <pa-icon icon="search-regular" />
    
    <!-- Brand icons -->
    <pa-icon icon="cc-mastercard-brand" />
    <pa-icon icon="cc-visa-brand" />
    <pa-icon icon="cc-amex-brand" />
    <pa-icon icon="google-pay-brand" />
  </div>
</template>

Custom Icons ​

The component supports custom SVG icons alongside FontAwesome icons.

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="visa-logo" />
    <pa-icon icon="mastercard-logo" />
    <pa-icon icon="bpay-vertical" />
    <pa-icon icon="credit-card" />
  </div>
</template>

Monochrome Mode ​

Custom colored icons can be forced to monochrome using the monochrome prop.

Color
Monochrome
vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="visa-logo" />              <!-- Color version -->
    <pa-icon icon="visa-logo" :monochrome="true" />  <!-- Monochrome version -->
  </div>
</template>

Clickable Icons ​

Icons can be made interactive by listening to click events. However, when using icons as interactive elements, consider accessibility concerns such as providing appropriate ARIA labels, ensuring sufficient contrast, and offering alternative text for screen readers.

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon 
      icon="edit-regular" 
      variant="primary"
      @click="handleEdit"
      role="button"
      tabindex="0"
      aria-label="Edit item"
      style="cursor: pointer;"
    />
  </div>
</template>

<script setup>
const handleEdit = () => console.log('Edit clicked')
</script>

Disabled State ​

Icons can be shown in a disabled state using the disabled variant.

vue
<template>
  <div style="display: flex; gap: 1rem; align-items: center;">
    <pa-icon icon="user-regular" variant="primary" />   <!-- Normal state -->
    <pa-icon icon="user-regular" variant="disabled" />  <!-- Disabled state -->
  </div>
</template>

Icon Container ​

For centering icons within parent containers, use the pa-icon-container class provided by the component.

vue
<template>
  <div class="pa-icon-container" style="width: 60px; height: 60px; border: 1px dashed #ccc; border-radius: 5px;">
    <pa-icon icon="star-solid" size="lg" variant="warning" />
  </div>
</template>

Layout tip: Use the pa-icon-container class on the parent element to automatically center icons with flexbox.

Custom PayAdvantage Icons ​

The component supports custom SVG icons alongside FontAwesome icons. For a complete list of all available custom icons with visual previews, see the "Complete Icon Library Reference" section at the bottom of this page.

Importing ​

js
import { PaIcon } from '@payadvantage/ui-components'

Properties ​

NameDescriptionReflectsTypeDefault
iconThe icon name (FontAwesome or custom icon identifier).nostringrequired
variantColor variant for the icon (primary, secondary, success, danger, warning, info, light, dark, disabled).nostringnull
sizeSize of the icon (sm, md, lg, xl).nostring'md'
monochromeForce custom colored icons to render in monochrome.nobooleanfalse
compatibilityModeAdds margins for backward compatibility with UI Lib 1.x.nobooleanfalse

Events ​

NameDescriptionEvent Detail
clickEmitted when the icon is clicked.Native click event

Icon System Architecture ​

The PaIcon component uses a dual-system approach:

FontAwesome Icons ​

  • Naming Convention: Uses kebab-case with style suffixes
    • Regular: icon-name (e.g., star, user)
    • Solid: icon-name-solid (e.g., star-solid, user-solid)
    • Light: icon-name-light (e.g., star-light, user-light)
    • Brand: icon-name-brand (e.g., cc-visa-brand)

Custom SVG Icons ​

  • Monochrome & Color: Many custom icons have both colored and monochrome versions
  • Automatic Selection: Color version used by default, monochrome when monochrome prop is true
  • Custom Naming: Uses descriptive names like visa-logo, bpay-logo

Dependencies ​

  • @fortawesome/vue-fontawesome: FontAwesome Vue integration
  • @fortawesome/fontawesome-svg-core: FontAwesome core library
  • Custom SVG Icons: Internal PayAdvantage icon collection

Design Notes ​

  • Default Size: 24x24px for optimal readability
  • Responsive Sizes: sm (16px), md (24px), lg (32px), xl (48px)
  • Color Variants: Uses CSS custom properties for theming
  • Accessibility: Icons are properly sized for touch targets
  • Performance: FontAwesome icons are tree-shaken and only loaded icons are bundled

This component is essential for:

  • UI consistency across the application
  • Semantic meaning through color variants
  • Flexible sizing for different contexts
  • Payment method identification (custom logos)
  • Action indication in buttons and controls

Complete Icon Library Reference ​

Loading icons...