Last update:
June 24, 2025
VcStatus Component¶
The VcStatus
component is an atom used throughout the VC-Shell framework for displaying status indicators with different visual styles. It's used to represent the state of items or processes in the application.
Storybook¶
Basic Usage¶
<template>
<VcStatus variant="success">Completed</VcStatus>
</template>
<script lang="ts" setup>
import { VcStatus } from '@vc-shell/framework';
</script>
Props¶
Prop | Type | Default | Description |
---|---|---|---|
variant |
'info' \| 'warning' \| 'danger' \| 'success' \| 'light-danger' \| 'info-dark' \| 'primary' |
'info' |
Visual style of the status indicator |
outline |
boolean |
false |
DEPRECATED: Whether to show only the outline |
extend |
boolean |
false |
Whether to use an extended layout with more padding & square corners |
dot |
boolean |
false |
Whether to display only a colored dot without text |
Slots¶
Slot | Description |
---|---|
default |
Content of the status indicator (text or complex content) |
CSS Variables¶
The status component uses CSS variables for theming, which can be customized:
:root {
--status-padding: 4px 14px; /* Default padding for status component */
--status-padding-extended: 8px; /* Padding for extended status variant */
--status-dot-size: 10px; /* Size of dot-only status indicator */
--status-text-color: var(--neutrals-700); /* Default text color for status content */
--status-border-radius: 20px; /* Border radius for standard status */
--status-border-radius-extended: 4px; /* Border radius for extended status */
--status-border-width: 1px; /* Width of the border around the status component */
--status-border-color: var(--neutrals-500); /* Default border color */
--status-bg-color: var(--additional-50); /* Default background color */
/* Info variant colors */
--status-info-color: var(--additional-950); /* Text color for info variant */
--status-info-main-color: var(--info-500); /* Dot color for info variant */
--status-info-bg-color: var(--info-50); /* Background color for info variant */
/* Warning variant colors */
--status-warning-color: var(--additional-950); /* Text color for warning variant */
--status-warning-main-color: var(--warning-500); /* Dot color for warning variant */
--status-warning-bg-color: var(--warning-50); /* Background color for warning variant */
/* Danger variant colors */
--status-danger-color: var(--additional-950); /* Text color for danger variant */
--status-danger-main-color: var(--danger-500); /* Dot color for danger variant */
--status-danger-bg-color: var(--danger-50); /* Background color for danger variant */
/* Success variant colors */
--status-success-color: var(--additional-950); /* Text color for success variant */
--status-success-main-color: var(--success-500); /* Dot color for success variant */
--status-success-bg-color: var(--success-50); /* Background color for success variant */
/* Light danger variant colors */
--status-light-danger-color: var(--additional-950); /* Text color for light danger variant */
--status-light-danger-main-color: var(--danger-300); /* Dot color for light danger variant */
--status-light-danger-bg-color: var(--danger-50); /* Background color for light danger variant */
/* Info dark variant colors */
--status-info-dark-color: var(--additional-50); /* Text color for info dark variant */
--status-info-dark-main-color: var(--info-600); /* Dot color for info dark variant */
--status-info-dark-bg-color: var(--info-600); /* Background color for info dark variant */
/* Primary variant colors */
--status-primary-color: var(--additional-950); /* Text color for primary variant */
--status-primary-main-color: var(--primary-500); /* Dot color for primary variant */
--status-primary-bg-color: var(--primary-50); /* Background color for primary variant */
}
Examples¶
Basic Status¶
<template>
<VcStatus>Status text</VcStatus>
</template>
<script lang="ts" setup>
import { VcStatus } from '@vc-shell/framework';
</script>
Status Variants¶
<template>
<div class="tw-space-y-2">
<VcStatus variant="info">Information</VcStatus>
<VcStatus variant="success">Success</VcStatus>
<VcStatus variant="warning">Warning</VcStatus>
<VcStatus variant="danger">Error</VcStatus>
<VcStatus variant="primary">Primary</VcStatus>
<VcStatus variant="info-dark">Info Dark</VcStatus>
<VcStatus variant="light-danger">Light Danger</VcStatus>
</div>
</template>
<script lang="ts" setup>
import { VcStatus } from '@vc-shell/framework';
</script>
Dot-Only Display Mode¶
<template>
<div class="tw-flex tw-items-center tw-gap-2">
<VcStatus variant="success" dot />
<span>Item is active</span>
</div>
</template>
<script lang="ts" setup>
import { VcStatus } from '@vc-shell/framework';
</script>
Extended Status for Rich Content¶
<template>
<VcStatus extend variant="danger">
<div class="tw-flex tw-flex-row tw-items-center">
<VcIcon icon="material-warning" size="xl" variant="danger" class="tw-mr-3" />
<div>
<h3 class="tw-font-bold">Error Status</h3>
<p>There was an error processing your request. Please try again later.</p>
</div>
</div>
</VcStatus>
</template>
<script lang="ts" setup>
import { VcStatus, VcIcon } from '@vc-shell/framework';
</script>
Status with Dynamic Variant¶
<template>
<VcStatus :variant="orderStatus.variant">
{{ orderStatus.label }}
</VcStatus>
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue';
import { VcStatus } from '@vc-shell/framework';
const status = ref('processing');
const orderStatus = computed(() => {
switch (status.value) {
case 'completed':
return { variant: 'success', label: 'Completed' };
case 'cancelled':
return { variant: 'danger', label: 'Cancelled' };
case 'processing':
return { variant: 'info', label: 'Processing' };
case 'on-hold':
return { variant: 'warning', label: 'On Hold' };
default:
return { variant: 'info', label: 'Unknown' };
}
});
</script>
Table with Status Indicators¶
<template>
<table class="tw-min-w-full tw-border-collapse">
<thead>
<tr class="tw-bg-[color:var(--neutrals-100)]">
<th class="tw-p-2 tw-text-left">Order ID</th>
<th class="tw-p-2 tw-text-left">Customer</th>
<th class="tw-p-2 tw-text-left">Date</th>
<th class="tw-p-2 tw-text-left">Status</th>
</tr>
</thead>
<tbody>
<tr v-for="order in orders" :key="order.id" class="tw-border-t tw-border-[color:var(--neutrals-200)]">
<td class="tw-p-2">#{{ order.id }}</td>
<td class="tw-p-2">{{ order.customer }}</td>
<td class="tw-p-2">{{ order.date }}</td>
<td class="tw-p-2">
<VcStatus :variant="getStatusVariant(order.status)">
{{ order.status }}
</VcStatus>
</td>
</tr>
</tbody>
</table>
</template>
<script lang="ts" setup>
import { VcStatus } from '@vc-shell/framework';
const orders = [
{ id: '1001', customer: 'John Doe', date: '2023-06-15', status: 'Completed' },
{ id: '1002', customer: 'Jane Smith', date: '2023-06-16', status: 'Processing' },
{ id: '1003', customer: 'Robert Johnson', date: '2023-06-17', status: 'On Hold' },
{ id: '1004', customer: 'Emily Davis', date: '2023-06-18', status: 'Cancelled' },
];
function getStatusVariant(status: string) {
switch (status) {
case 'Completed':
return 'success';
case 'Processing':
return 'info';
case 'On Hold':
return 'warning';
case 'Cancelled':
return 'danger';
default:
return 'info';
}
}
</script>
Status with Count Badge¶
<template>
<div class="tw-flex tw-items-center tw-gap-4">
<div class="tw-flex tw-items-center">
<VcStatus variant="success" dot />
<span class="tw-ml-2">Active</span>
<VcBadge class="tw-ml-2" variant="success">{{ activeTasks }}</VcBadge>
</div>
<div class="tw-flex tw-items-center">
<VcStatus variant="danger" dot />
<span class="tw-ml-2">Failed</span>
<VcBadge class="tw-ml-2" variant="danger">{{ failedTasks }}</VcBadge>
</div>
<div class="tw-flex tw-items-center">
<VcStatus variant="warning" dot />
<span class="tw-ml-2">Pending</span>
<VcBadge class="tw-ml-2" variant="warning">{{ pendingTasks }}</VcBadge>
</div>
</div>
</template>
<script lang="ts" setup>
import { VcStatus, VcBadge } from '@vc-shell/framework';
const activeTasks = 12;
const failedTasks = 3;
const pendingTasks = 5;
</script>