Skip to content

Lists - AvCheckboxListItem

✨ Introduction

The AvCheckboxListItem component represents an individual checkbox item within a list container. It provides a flexible and accessible way to display content with optional icons, titles, descriptions, and interactive capabilities while maintaining consistent styling and behavior patterns.

The AvCheckboxListItem component is designed to work seamlessly within AvList containers, offering extensive customization for various use cases including navigation menus, content lists, action items, and interactive elements. It supports full accessibility compliance with proper ARIA attributes and keyboard navigation.

It features comprehensive interaction states (hover, focus, active, disabled, selected), flexible content structure with slots, and dynamic tag rendering for different semantic contexts while maintaining visual consistency with the design system.

🏗️ Structure

The checkbox list item consists of the following elements:

  • The AvListItem wrapper
  • The icon (optional): Visual indicator displayed between the checkbox and the content
  • The content area (mandatory): Contains label and/or custom content
  • Custom content slot (optional): Allows insertion of any custom elements within the content area

The checkbox list item integrates:

  • Full accessibility support with ARIA attributes and keyboard navigation
  • Comprehensive interaction states and visual feedback
  • Flexible content structure with icon, label, and slot support

🏷️ Props

NameTypeDefaultMandatoryDescription
idstringUnique ID of the checkbox list item.
listIdstringUnique ID of the parent checkbox list, used for accessibility and focus management.
labelstringLabel for the checkbox list item.
iconstringIcon to display alongside the checkbox list item.
disabledbooleanfalseWhether the checkbox list item is disabled.
ariaLabelstringCustom ARIA label for accessibility.
ariaDescribedbystringID of element that describes the list item.

🔊 Events

None.

🎨 Slots

NameDescription
defaultDefault slot for custom content within the ckeckbox list item.

🚀 Storybook demos

You can find examples of use and demo of the component on its dedicated Storybook page.

💡 Examples of use

Basic Checkbox List Item

vue
<script lang="ts" setup>
const selectedItems = ref<string[]>([])
</script>

<template>
  <AvList>
    <AvCheckboxListItem
      id="first-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="First Item"
    />
    <AvCheckboxListItem
      id="second-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="Second Item"
    />
    <AvCheckboxListItem
      id="third-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="Third Item (disabled)"
      :disabled="true"
    />
  </AvList>
</template>

Checkbox List Item with Icon

vue
<script lang="ts" setup>
import { MDI_ICONS } from '@/utils/constants'

const selectedItems = ref<string[]>([])
</script>

<template>
  <AvList>
    <AvCheckboxListItem
      id="first-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="First Item"
    />
    <AvCheckboxListItem
      id="second-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="Second Item"
      :icon="MDI_ICONS.STAR"
    />
    <AvCheckboxListItem
      id="third-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      label="Third Item (disabled)"
      :disabled="true"
    />
  </AvList>
</template>

Checkbox List Item with Custom Content

vue
<script lang="ts" setup>
const selectedItems = ref<string[]>([])
</script>

<template>
  <AvList>
    <AvCheckboxListItem
      id="first-item"
      v-model="selectedItems"
      list-id="checkbox-list"
    >
      <div class="custom-content">
        <h3>First Item</h3>
        <p>This is a custom description for the first item.</p>
      </div>
    </AvCheckboxListItem>
    <AvCheckboxListItem
      id="second-item"
      v-model="selectedItems"
      list-id="checkbox-list"
    >
      <div class="custom-content">
        <h3>Second Item</h3>
        <p>This is a custom description for the second item.</p>
      </div>
    </AvCheckboxListItem>
    <AvCheckboxListItem
      id="third-item"
      v-model="selectedItems"
      list-id="checkbox-list"
      :disabled="true"
    >
      <div class="custom-content">
        <h3>Third Item (disabled)</h3>
        <p>This is a custom description for the third item.</p>
      </div>
    </AvCheckboxListItem>
  </AvList>
</template>