diff --git a/apps/platform/components/showcase/component-live-preview.tsx b/apps/platform/components/showcase/component-live-preview.tsx
index 0ecf8eb..db2674f 100644
--- a/apps/platform/components/showcase/component-live-preview.tsx
+++ b/apps/platform/components/showcase/component-live-preview.tsx
@@ -6,6 +6,11 @@ import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { SpotlightButtonDemo } from "@/components/showcase/spotlight-button-demo";
+import { Card, CardContent, CardHeader, CardFooter } from "@/components/ui/card";
+import { Label } from "@/components/ui/label";
+import { Separator } from "@/components/ui/separator";
+import { Textarea } from "@/components/ui/textarea";
+import { Text } from "@/components/ui/text";
function PreviewShell({
children,
@@ -362,6 +367,56 @@ export function TextCodeInlinePreview() {
);
}
+export function CardInlinePreview() {
+ return (
+
+
+
+ Card Title
+ Description or subtitle goes here.
+
+
+ Main content area for your card data.
+
+
+ Footer Action Area
+
+
+
+ );
+}
+
+export function LabelInlinePreview() {
+ return (
+
+
+
+
+
+
+ );
+}
+
+export function SeparatorInlinePreview() {
+ return (
+
+
+ Section Top
+
+ Section Bottom
+
+
+ );
+}
+
+export function TextareaInlinePreview() {
+ return (
+
+
+
+ );
+}
+
export function ComponentLivePreview({ slug }: { slug: string }) {
switch (slug) {
case "button":
@@ -374,6 +429,14 @@ export function ComponentLivePreview({ slug }: { slug: string }) {
return ;
case "text":
return ;
+ case "card":
+ return ;
+ case "label":
+ return ;
+ case "separator":
+ return ;
+ case "textarea":
+ return ;
case "spotlight-button":
return ;
default:
diff --git a/apps/platform/components/ui/card.tsx b/apps/platform/components/ui/card.tsx
new file mode 100644
index 0000000..0b6c67a
--- /dev/null
+++ b/apps/platform/components/ui/card.tsx
@@ -0,0 +1,69 @@
+"use client"
+
+import * as React from "react"
+import { cn } from "@/lib/utils"
+
+function Card({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function CardContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
diff --git a/apps/platform/components/ui/label.tsx b/apps/platform/components/ui/label.tsx
new file mode 100644
index 0000000..cfd000a
--- /dev/null
+++ b/apps/platform/components/ui/label.tsx
@@ -0,0 +1,23 @@
+"use client"
+
+import * as React from "react"
+import { Label as LabelPrimitive } from "radix-ui"
+import { cn } from "@/lib/utils"
+
+function Label({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
+}
+
+export { Label }
diff --git a/apps/platform/components/ui/text.tsx b/apps/platform/components/ui/text.tsx
new file mode 100644
index 0000000..88e6a5e
--- /dev/null
+++ b/apps/platform/components/ui/text.tsx
@@ -0,0 +1,50 @@
+"use client"
+
+import * as React from "react"
+import { cn } from "@/lib/utils"
+
+type TextVariant =
+ | "default"
+ | "h1"
+ | "h2"
+ | "h3"
+ | "h4"
+ | "p"
+ | "blockquote"
+ | "code"
+ | "lead"
+ | "large"
+ | "small"
+ | "muted";
+
+interface TextProps extends React.ComponentProps<"p"> {
+ variant?: TextVariant;
+}
+
+const TextStyleContext = React.createContext(undefined);
+
+function Text({ className, variant = "default", ...props }: TextProps) {
+ const styles = {
+ default: "text-foreground",
+ h1: "scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl",
+ h2: "scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0",
+ h3: "scroll-m-20 text-2xl font-semibold tracking-tight",
+ h4: "scroll-m-20 text-xl font-semibold tracking-tight",
+ p: "leading-7 [&:not(:first-child)]:mt-6",
+ blockquote: "mt-6 border-l-2 pl-6 italic",
+ code: "relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold",
+ lead: "text-xl text-muted-foreground",
+ large: "text-lg font-semibold",
+ small: "text-sm font-medium leading-none",
+ muted: "text-sm text-muted-foreground",
+ };
+
+ return (
+
+ );
+}
+
+export { Text, TextStyleContext };
diff --git a/apps/platform/content/docs/components/card.mdx b/apps/platform/content/docs/components/card.mdx
new file mode 100644
index 0000000..2e7b2dc
--- /dev/null
+++ b/apps/platform/content/docs/components/card.mdx
@@ -0,0 +1,59 @@
+---
+title: Card
+description: A flexible container component with support for headers, content, and footers.
+kind: component
+category: Components
+image: /logo.png
+---
+
+import { CodeBlock } from "@/components/showcase/code-block";
+import {
+ ApiTable,
+ DocSection,
+ DocSubsection,
+} from "@/components/showcase/docs-primitives";
+import { CompPreview } from "@/components/mdx/component-preview";
+import { CardInlinePreview } from "@/components/showcase/component-live-preview";
+
+## Import
+
+
+
+ {`import { Card, CardHeader, CardContent, CardFooter } from "@/components/ui/card";
+import { Text } from "@/components/ui/text";`}
+
+
+
+## Usage
+
+
+ The `Card` component provides a structured layout with consistent padding and borders for grouping related information.
+
+### Basic Card
+
+
+ A standard card with header, content, and footer.
+
+
+ Card Title
+ Card Description
+
+
+ This is the main content of the card.
+
+
+ Footer Content
+
+`}
+ >
+
+
+
+
+
+## API Reference
+
+
+ `Card`, `CardHeader`, `CardContent`, and `CardFooter` all extend the standard `View` props.
+
diff --git a/apps/platform/content/docs/components/label.mdx b/apps/platform/content/docs/components/label.mdx
new file mode 100644
index 0000000..8dc8df3
--- /dev/null
+++ b/apps/platform/content/docs/components/label.mdx
@@ -0,0 +1,50 @@
+---
+title: Label
+description: An accessible label component for form inputs and other interactive elements.
+kind: component
+category: Components
+image: /logo.png
+---
+
+import { CodeBlock } from "@/components/showcase/code-block";
+import {
+ ApiTable,
+ DocSection,
+ DocSubsection,
+} from "@/components/showcase/docs-primitives";
+import { CompPreview } from "@/components/mdx/component-preview";
+import { LabelInlinePreview } from "@/components/showcase/component-live-preview";
+
+## Import
+
+
+
+ {`import { Label } from "@/components/ui/label";`}
+
+
+
+## Usage
+
+
+ The `Label` component provides a consistent typography style for labeling form fields.
+
+### Basic Usage
+
+
+ Use it alongside an input to provide clear context.
+
+
+
+`}
+ >
+
+
+
+
+
+## API Reference
+
+
+ `Label` extends the standard `Text` props from React Native.
+
diff --git a/apps/platform/content/docs/components/meta.json b/apps/platform/content/docs/components/meta.json
index 52047a1..70d5d70 100644
--- a/apps/platform/content/docs/components/meta.json
+++ b/apps/platform/content/docs/components/meta.json
@@ -1,4 +1,4 @@
{
"title": "Components",
- "pages": ["button", "text", "spotlight-button"]
+ "pages": ["button", "text", "input", "badge", "avatar", "card", "label", "separator", "textarea", "spotlight-button"]
}
diff --git a/apps/platform/content/docs/components/separator.mdx b/apps/platform/content/docs/components/separator.mdx
new file mode 100644
index 0000000..2cdfbdb
--- /dev/null
+++ b/apps/platform/content/docs/components/separator.mdx
@@ -0,0 +1,60 @@
+---
+title: Separator
+description: A thin line used to visually separate content or group related items.
+kind: component
+category: Components
+image: /logo.png
+---
+
+import { CodeBlock } from "@/components/showcase/code-block";
+import {
+ ApiTable,
+ DocSection,
+ DocSubsection,
+} from "@/components/showcase/docs-primitives";
+import { CompPreview } from "@/components/mdx/component-preview";
+import { SeparatorInlinePreview } from "@/components/showcase/component-live-preview";
+
+## Import
+
+
+
+ {`import { Separator } from "@/components/ui/separator";`}
+
+
+
+## Usage
+
+
+ The `Separator` is a simple horizontal or vertical line divider.
+
+### Horizontal
+
+
+ The default orientation is horizontal.
+
+ Section Top
+
+ Section Bottom
+`}
+ >
+
+
+
+
+
+## API Reference
+
+
+
+
diff --git a/apps/platform/content/docs/components/textarea.mdx b/apps/platform/content/docs/components/textarea.mdx
new file mode 100644
index 0000000..c460700
--- /dev/null
+++ b/apps/platform/content/docs/components/textarea.mdx
@@ -0,0 +1,47 @@
+---
+title: Textarea
+description: A multi-line input component for longer text entries.
+kind: component
+category: Components
+image: /logo.png
+---
+
+import { CodeBlock } from "@/components/showcase/code-block";
+import {
+ ApiTable,
+ DocSection,
+ DocSubsection,
+} from "@/components/showcase/docs-primitives";
+import { CompPreview } from "@/components/mdx/component-preview";
+import { TextareaInlinePreview } from "@/components/showcase/component-live-preview";
+
+## Import
+
+
+
+ {`import { Textarea } from "@/components/ui/textarea";`}
+
+
+
+## Usage
+
+
+ The `Textarea` is an extended `TextInput` that defaults to a multi-line format with a consistent border and background.
+
+### Basic Usage
+
+
+ Provide a placeholder for user guidance.
+ `}
+ >
+
+
+
+
+
+## API Reference
+
+
+ `Textarea` extends the standard `TextInput` props from React Native and adds support for the `variant` prop.
+