veza/apps/web/src/components/ui/LoadingSpinner.stories.tsx
2026-02-12 22:04:45 +01:00

79 lines
1.9 KiB
TypeScript

import type { Meta, StoryObj } from '@storybook/react';
import { LoadingSpinner } from './loading-spinner';
import { Button } from './button';
const meta = {
title: 'UI/LoadingSpinner',
component: LoadingSpinner,
tags: ['autodocs'],
argTypes: {
size: {
control: 'select',
options: ['sm', 'md', 'lg'],
},
text: { control: 'text' },
inline: { control: 'boolean' },
variant: {
control: 'select',
options: ['default', 'muted', 'white', 'current'],
},
},
} satisfies Meta<typeof LoadingSpinner>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Default: Story = {
args: {},
};
export const WithText: Story = {
args: {
text: 'Loading resources...',
},
};
export const Small: Story = {
args: {
size: 'sm',
},
};
export const Large: Story = {
args: {
size: 'lg',
text: 'Please wait, this might take a while...',
},
};
export const InlineSizes: Story = {
render: () => (
<div className="flex items-center gap-4">
<LoadingSpinner size="sm" inline />
<LoadingSpinner size="md" inline />
<LoadingSpinner size="lg" inline />
</div>
),
};
export const InlineVariants: Story = {
render: () => (
<div className="flex items-center gap-4 bg-muted p-4 rounded-md">
<LoadingSpinner variant="default" inline />
<LoadingSpinner variant="muted" inline />
<LoadingSpinner variant="white" inline />
<div className="text-destructive">
<LoadingSpinner variant="current" inline />
</div>
</div>
),
};
export const InButton: Story = {
render: () => (
<Button disabled>
<LoadingSpinner size="sm" inline className="mr-2" />
Loading...
</Button>
),
};