Skip to content

Commit

Permalink
feat: RewardCard component
Browse files Browse the repository at this point in the history
  • Loading branch information
BrickheadJohnny committed Nov 29, 2024
1 parent c2a9f52 commit f0ff8ef
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
54 changes: 54 additions & 0 deletions src/components/rewards/RewardCard.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { cn } from "@/lib/cssUtils";
import { QuestionMark } from "@phosphor-icons/react/dist/ssr";
import type { PropsWithChildren, ReactNode } from "react";
import { Button, type ButtonProps } from "../ui/Button";
import { Card } from "../ui/Card";

export const RewardCard = ({
image,
title,
description,
className,
children,
}: PropsWithChildren<{
image?: ReactNode | string;
title: string;
description?: string;
className?: string;
}>) => (
<Card
className={cn("flex flex-col gap-4 border-2 p-4 shadow-none", className)}
>
<div className="grid grid-cols-[theme(space.9)_1fr] items-center gap-x-2 gap-y-0">
<div className="row-span-2 flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-full bg-blackAlpha dark:bg-blackAlpha-hard">
{!image ? (
<QuestionMark weight="bold" className="size-4" />
) : typeof image === "string" ? (
<img src={image} alt="Reward icon" />
) : (
image
)}
</div>

<span
className={cn("font-bold text-sm", {
"row-span-2": !description,
})}
>
{title}
</span>

{description && (
<span className="text-foreground-secondary text-xs">{description}</span>
)}
</div>
{children}
</Card>
);

export const RewardCardButton = ({
className,
...props
}: Omit<ButtonProps, "size">) => (
<Button className={cn(" mt-auto", className)} size="sm" {...props} />
);
31 changes: 31 additions & 0 deletions src/stories/rewards/RewardCard.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { RewardCard, RewardCardButton } from "@/components/rewards/RewardCard";
import { TooltipProvider } from "@/components/ui/Tooltip";
import type { Meta, StoryObj } from "@storybook/react";

const RewardCardExample = () => (
<RewardCard
title="Sample reward"
description="Description"
className="border-cyan-500"
>
<RewardCardButton className="bg-cyan-500 hover:bg-cyan-600 active:bg-cyan-700 dark:active:bg-cyan-300 dark:hover:bg-cyan-400">
Reward card button
</RewardCardButton>
</RewardCard>
);

const meta: Meta<typeof RewardCardExample> = {
title: "Rewards/RewardCard",
component: RewardCardExample,
decorators: (Story) => (
<TooltipProvider>
<Story />
</TooltipProvider>
),
};

export default meta;

type Story = StoryObj<typeof RewardCardExample>;

export const Default: Story = {};

0 comments on commit f0ff8ef

Please sign in to comment.