Action Components

Button and interactive components for user actions throughout the application.

Overview

Action components provide consistent styling and behavior for user interactions. They are categorized by context and usage patterns.

List Action Components

Action buttons used in list views and table interfaces.

AddButton

Primary action button for creating new resources.

Props:

Usage:

<AddButton to="/projects/new" label="New Project" color="blue" />

ViewButton

Action button for viewing resource details.

Props:

Usage:

<ViewButton to="/projects/123" label="View Details" />

EditButton (List)

Action button for editing resources from list views.

Props:

Usage:

<EditButton to="/projects/123?edit=true" />

DeleteButton (List)

Action button for deleting resources from lists.

Events:

Usage:

<DeleteButton @click="confirmDelete(item.id)" />

FilterButton

Toggle button for filtering list content.

Props:

Events:

Usage:

<FilterButton
  label="Active"
  :count="activeCount"
  :is-active="activeFilter"
  variant="green"
  @click="toggleFilter('active')"
/>

Detail Action Components

Action buttons used in detail views and forms.

EditButton (Detail)

Initiates edit mode in detail views.

Props:

Events:

Usage:

<EditButton :disabled="!canEdit" @click="startEdit" />

SaveButton

Saves changes in forms and detail views.

Props:

Events:

Usage:

<SaveButton :disabled="!hasUnsavedChanges" @click="saveChanges" />

CancelButton

Cancels edit mode or form changes.

Events:

Usage:

<CancelButton @click="cancelEdit" />

DeleteButton (Detail)

Deletes the current resource in detail views.

Events:

Usage:

<DeleteButton @click="confirmDelete" />

Button Patterns

Action Button Groups

List Row Actions

<div class="flex space-x-2">
  <ViewButton :to="`/projects/${project.id}`" />
  <EditButton :to="`/projects/${project.id}?edit=true`" />
  <DeleteButton @click="deleteProject(project.id)" />
</div>

Detail View Actions

<div class="flex space-x-3">
  <template v-if="!isEditing">
    <EditButton @click="startEdit" />
    <DeleteButton @click="confirmDelete" />
  </template>
  <template v-else>
    <SaveButton :disabled="!hasChanges" @click="save" />
    <CancelButton @click="cancel" />
  </template>
</div>

Filter Bar

<div class="flex space-x-1">
  <FilterButton
    label="All"
    :count="totalCount"
    :is-active="!activeFilter"
    @click="clearFilter"
  />
  <FilterButton
    label="Active"
    :count="activeCount"
    :is-active="activeFilter === 'active'"
    variant="green"
    @click="setFilter('active')"
  />
  <FilterButton
    label="Inactive"
    :count="inactiveCount"
    :is-active="activeFilter === 'inactive'"
    variant="red"
    @click="setFilter('inactive')"
  />
</div>

Styling and Theming

Color Variants

Size Variants

State Variants

Accessibility

All action components include:

Examples

Complete List Action Example

<template>
  <tr>
    <td></td>
    <td></td>
    <td>
      <div class="flex justify-end space-x-2">
        <ViewButton :to="`/projects/${project.id}`" />
        <EditButton :to="`/projects/${project.id}?edit=true`" />
        <DeleteButton @click="handleDelete(project.id)" />
      </div>
    </td>
  </tr>
</template>

Complete Detail Action Example

<template>
  <div class="flex items-center justify-between">
    <Title></Title>
    <div class="flex space-x-3">
      <template v-if="!isEditing">
        <EditButton @click="isEditing = true" />
        <DeleteButton @click="confirmDelete" />
      </template>
      <template v-else>
        <SaveButton :disabled="!hasUnsavedChanges" @click="saveProject" />
        <CancelButton @click="cancelEdit" />
      </template>
    </div>
  </div>
</template>