mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-28 18:54:09 +00:00
## Summary Refactors StatusBadge to use CVA (class-variance-authority) for variant management and adds a new `dot` mode for label-free status indicators. ## Changes - **CVA variants** (`statusBadge.variants.ts`): Extracts styling logic into a CVA config with: - `severity`: `default` | `secondary` | `warn` | `danger` | `contrast` - `variant`: `label` (text badge) | `dot` (small indicator) | `circle` (numeric badge) - **StatusBadge.vue**: Simplified component using CVA; auto-selects `dot` variant when no label provided - **Storybook stories**: Comprehensive coverage of all severities and variants ## Breaking Changes - `label` prop is now optional (was required) - `label` accepts `string | number` (was `string` only) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8202-feat-StatusBadge-add-dot-mode-with-CVA-variants-2ef6d73d36508120beedd04b2c277227) by [Unito](https://www.unito.io) --------- Co-authored-by: Amp <amp@ampcode.com>
96 lines
2.2 KiB
TypeScript
96 lines
2.2 KiB
TypeScript
import type { Meta, StoryObj } from '@storybook/vue3-vite'
|
|
|
|
import StatusBadge from './StatusBadge.vue'
|
|
|
|
const meta = {
|
|
title: 'Common/StatusBadge',
|
|
component: StatusBadge,
|
|
tags: ['autodocs'],
|
|
argTypes: {
|
|
label: { control: 'text' },
|
|
severity: {
|
|
control: 'select',
|
|
options: ['default', 'secondary', 'warn', 'danger', 'contrast']
|
|
},
|
|
variant: {
|
|
control: 'select',
|
|
options: ['label', 'dot', 'circle']
|
|
}
|
|
},
|
|
args: {
|
|
label: 'Status',
|
|
severity: 'default'
|
|
}
|
|
} satisfies Meta<typeof StatusBadge>
|
|
|
|
export default meta
|
|
type Story = StoryObj<typeof meta>
|
|
|
|
export const Default: Story = {}
|
|
|
|
export const Failed: Story = {
|
|
args: {
|
|
label: 'Failed',
|
|
severity: 'danger'
|
|
}
|
|
}
|
|
|
|
export const Finished: Story = {
|
|
args: {
|
|
label: 'Finished',
|
|
severity: 'contrast'
|
|
}
|
|
}
|
|
|
|
export const Dot: Story = {
|
|
args: {
|
|
label: undefined,
|
|
variant: 'dot',
|
|
severity: 'danger'
|
|
}
|
|
}
|
|
|
|
export const Circle: Story = {
|
|
args: {
|
|
label: '3',
|
|
variant: 'circle'
|
|
}
|
|
}
|
|
|
|
export const AllSeverities: Story = {
|
|
render: () => ({
|
|
components: { StatusBadge },
|
|
template: `
|
|
<div class="flex items-center gap-2">
|
|
<StatusBadge label="Default" severity="default" />
|
|
<StatusBadge label="Secondary" severity="secondary" />
|
|
<StatusBadge label="Warn" severity="warn" />
|
|
<StatusBadge label="Danger" severity="danger" />
|
|
<StatusBadge label="Contrast" severity="contrast" />
|
|
</div>
|
|
`
|
|
})
|
|
}
|
|
|
|
export const AllVariants: Story = {
|
|
render: () => ({
|
|
components: { StatusBadge },
|
|
template: `
|
|
<div class="flex items-center gap-4">
|
|
<div class="flex flex-col items-center gap-1">
|
|
<StatusBadge label="Label" variant="label" />
|
|
<span class="text-xs text-muted">label</span>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-1">
|
|
<StatusBadge variant="dot" severity="danger" />
|
|
<span class="text-xs text-muted">dot</span>
|
|
</div>
|
|
<div class="flex flex-col items-center gap-1">
|
|
<StatusBadge label="5" variant="circle" />
|
|
<span class="text-xs text-muted">circle</span>
|
|
</div>
|
|
</div>
|
|
`
|
|
})
|
|
}
|