diff --git a/.changeset/swift-games-study.md b/.changeset/swift-games-study.md new file mode 100644 index 0000000..f23edf0 --- /dev/null +++ b/.changeset/swift-games-study.md @@ -0,0 +1,5 @@ +--- +"@zenml-io/react-component-library": minor +--- + +add badge component diff --git a/src/components/Badge/Badge.stories.tsx b/src/components/Badge/Badge.stories.tsx new file mode 100644 index 0000000..9ae96d2 --- /dev/null +++ b/src/components/Badge/Badge.stories.tsx @@ -0,0 +1,57 @@ +import { Meta } from "@storybook/react"; +import { Badge } from "./index"; +import { StoryObj } from "@storybook/react"; + +const meta = { + title: "Elements/Badge", + component: Badge, + argTypes: { + color: { + control: "select", + defaultValue: "green", + options: [ + "green", + "yellow", + "light-purple", + "purple", + "blue", + "light-grey", + "grey", + "red", + "orange", + "lime", + "teal", + "turquoise", + "magenta" + ] + }, + size: { + control: "select", + defaultValue: "sm", + options: ["xs", "sm", "md"] + }, + rounded: { + control: "boolean", + defaultValue: true + } + }, + parameters: { + layout: "centered" + }, + + tags: ["autodocs"] +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const defaultVariant: Story = { + name: "Default", + args: { + rounded: true, + color: "green", + size: "sm", + children: "Badge" + } +}; diff --git a/src/components/Badge/Badge.tsx b/src/components/Badge/Badge.tsx new file mode 100644 index 0000000..aca0090 --- /dev/null +++ b/src/components/Badge/Badge.tsx @@ -0,0 +1,49 @@ +import { cva, VariantProps } from "class-variance-authority"; +import React, { HTMLAttributes } from "react"; +import { cn } from "../../utilities"; + +export const badgeVariants = cva("inline-flex items-center", { + variants: { + rounded: { + true: "rounded-rounded", + false: "rounded-sm" + }, + size: { + xs: "text-text-xs px-0.5", + sm: "text-text-xs py-0.5 px-2 h-5", + md: "text-text-sm py-0.5 px-2 h-6" + }, + color: { + green: "bg-success-100 text-success-800", + yellow: "bg-warning-200 text-warning-900", + "light-purple": "bg-primary-25 text-primary-500", + purple: "bg-primary-50 text-primary-500", + blue: "bg-blue-50 text-blue-600", + "light-grey": "bg-neutral-100 text-theme-text-secondary", + grey: "bg-neutral-200 text-theme-text-primary", + red: "bg-error-100 text-error-700", + orange: "bg-orange-100 text-orange-700", + lime: "bg-lime-100 text-lime-800", + teal: "bg-teal-100 text-teal-700", + turquoise: "bg-turquoise-100 text-turquoise-700", + magenta: "bg-magenta-100 text-magenta-700" + } + }, + defaultVariants: { + color: "purple", + rounded: true, + size: "md" + } +}); + +interface ButtonVariants + extends Omit, "color">, + VariantProps {} + +export function Badge({ children, className, color, rounded, size, ...rest }: ButtonVariants) { + return ( +
+ {children} +
+ ); +} diff --git a/src/components/Badge/index.tsx b/src/components/Badge/index.tsx new file mode 100644 index 0000000..ae21190 --- /dev/null +++ b/src/components/Badge/index.tsx @@ -0,0 +1 @@ +export * from "./Badge"; diff --git a/src/components/index.ts b/src/components/index.ts index 6a96195..e819abd 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -7,3 +7,4 @@ export * from "./Skeleton"; export * from "./Dropdown"; export * from "./Table"; export * from "./Tag"; +export * from "./Badge";