import { Spinner } from "./index"; import { DocsPage } from "@shared/stories/DocsTemplate"; import type { Meta, StoryObj } from "@storybook/react"; const meta: Meta = { title: "Components/Spinner", component: Spinner, tags: ["autodocs"], parameters: { layout: "centered", docs: { page: DocsPage, description: { component: "A loading spinner component with customizable size, color, and animation.", }, }, }, argTypes: { size: { control: { type: "select" }, options: ["small", "medium", "large", "xlarge"], description: "Spinner size", }, color: { control: { type: "color" }, description: "Spinner color", }, className: { control: { type: "text" }, description: "Additional CSS classes", }, }, args: { size: "medium", }, }; export default meta; type Story = StoryObj; // Default spinner export const Default: Story = { args: {}, }; // Different sizes export const Sizes: Story = { render: () => (

Small

Medium

Large

XLarge

), parameters: { docs: { description: { story: "All available spinner sizes.", }, }, }, }; // Colored spinners export const ColoredSpinners: Story = { render: () => (

Blue

Green

Red

Yellow

), parameters: { docs: { description: { story: "Spinners with different colors.", }, }, }, }; // Spinner with text export const SpinnerWithText: Story = { render: () => (
Loading...
Processing request...
Saving changes...
), parameters: { docs: { description: { story: "Spinners used alongside loading text.", }, }, }, }; // Button with spinner export const ButtonWithSpinner: Story = { render: () => (
), parameters: { docs: { description: { story: "Spinners integrated into buttons for loading states.", }, }, }, }; // Card with spinner export const CardWithSpinner: Story = { render: () => (

Loading content...

Processing data...

), parameters: { docs: { description: { story: "Spinners in card layouts for content loading states.", }, }, }, }; // Inline spinner export const InlineSpinner: Story = { render: () => (

This is some text with an inline{" "} spinner.

Another example with a{" "} colored spinner.

Status: Checking...
), parameters: { docs: { description: { story: "Inline spinners within text content.", }, }, }, }; // Loading states export const LoadingStates: Story = { render: () => (

Initial Loading

Loading application...

Data Fetching

Fetching user data...

Form Submission

Submitting form...

File Upload

Uploading file...
), parameters: { docs: { description: { story: "Different loading states with appropriate messaging.", }, }, }, }; // All variants showcase export const AllVariants: Story = { render: () => (

Spinner Sizes

Small

Medium

Large

XLarge

Color Variants

Blue

Green

Red

Yellow

Purple

), parameters: { docs: { description: { story: "Complete showcase of all spinner sizes and colors.", }, }, }, };