tpmjs/packages/storybook/stories/Icon.stories.tsx
Ajax Davis b17349c071 refactor(ui): convert Icon and Badge components to JSX syntax
- Convert Icon component from createElement to JSX (Icon.tsx)
- Convert Icon tests to JSX (24 tests passing)
- Convert Icon stories to JSX (Icon.stories.tsx)
- Convert Badge component from createElement to JSX (Badge.tsx)
- Convert Badge tests to JSX (34 tests passing)
- Rename files from .ts to .tsx
- Remove createElement imports, use native JSX syntax
- All tests passing (58/58)

Part of broader effort to convert entire codebase from createElement to JSX.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 02:10:18 +10:00

62 lines
1.5 KiB
TypeScript

import type { Meta, StoryObj } from "@storybook/react";
import { Icon } from "@tpmjs/ui/Icon/Icon";
const meta = {
title: "Components/Icon",
component: Icon,
tags: ["autodocs"],
parameters: {
layout: "centered",
},
} satisfies Meta<typeof Icon>;
export default meta;
type Story = StoryObj<typeof meta>;
export const AllIcons: Story = {
render: () => (
<div className="grid grid-cols-4 gap-8 p-8">
{(
[
"copy",
"externalLink",
"github",
"check",
"x",
"chevronDown",
"sun",
"moon",
] as const
).map((iconName) => (
<div key={iconName} className="flex flex-col items-center gap-2">
<Icon icon={iconName} size="lg" />
<span className="text-sm text-foreground-secondary">{iconName}</span>
</div>
))}
</div>
),
};
export const AllSizes: Story = {
render: () => (
<div className="flex items-center gap-6">
{(["sm", "md", "lg"] as const).map((size) => (
<div key={size} className="flex flex-col items-center gap-2">
<Icon icon="github" size={size} />
<span className="text-sm text-foreground-secondary">{size}</span>
</div>
))}
</div>
),
};
export const WithColors: Story = {
render: () => (
<div className="flex items-center gap-6">
<Icon icon="check" size="lg" className="text-success" />
<Icon icon="x" size="lg" className="text-error" />
<Icon icon="github" size="lg" className="text-info" />
<Icon icon="sun" size="lg" className="text-warning" />
</div>
),
};