diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts
index c4b7818..9edff1c 100644
--- a/apps/web/next-env.d.ts
+++ b/apps/web/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
index 3532566..3989d45 100644
--- a/apps/web/src/app/page.tsx
+++ b/apps/web/src/app/page.tsx
@@ -5,315 +5,202 @@ import { Container } from "@tpmjs/ui/Container/Container";
import { Header } from "@tpmjs/ui/Header/Header";
import { Icon } from "@tpmjs/ui/Icon/Icon";
import { Input } from "@tpmjs/ui/Input/Input";
-import { createElement } from "react";
+import Link from "next/link";
import { ThemeToggle } from "../components/ThemeToggle";
import { categories, featuredTools, statistics } from "../data/homePageData";
export default function HomePage(): React.ReactElement {
- return createElement(
- "div",
- { className: "min-h-screen flex flex-col" },
- // Header
- createElement(Header, {
- title: "TPMJS",
- size: "md",
- sticky: true,
- actions: createElement(
- "div",
- { className: "flex items-center gap-4" },
- createElement(Button, { variant: "ghost", size: "sm" }, "Pro"),
- createElement(Button, { variant: "ghost", size: "sm" }, "Teams"),
- createElement(Button, { variant: "ghost", size: "sm" }, "Pricing"),
- createElement(
- Button,
- { variant: "ghost", size: "sm" },
- "Documentation",
- ),
- createElement(Button, { variant: "outline", size: "sm" }, "Sign In"),
- createElement(Button, { size: "sm" }, "Sign Up"),
- createElement(ThemeToggle, {}),
- ),
- }),
+ return (
+
);
}
diff --git a/apps/web/src/app/playground/page.tsx b/apps/web/src/app/playground/page.tsx
new file mode 100644
index 0000000..1cd546e
--- /dev/null
+++ b/apps/web/src/app/playground/page.tsx
@@ -0,0 +1,532 @@
+"use client";
+
+import { Badge } from "@tpmjs/ui/Badge/Badge";
+import { Button } from "@tpmjs/ui/Button/Button";
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@tpmjs/ui/Card/Card";
+import { CodeBlock } from "@tpmjs/ui/CodeBlock/CodeBlock";
+import { Container } from "@tpmjs/ui/Container/Container";
+import { Header } from "@tpmjs/ui/Header/Header";
+import { Icon } from "@tpmjs/ui/Icon/Icon";
+import { Input } from "@tpmjs/ui/Input/Input";
+import { Label } from "@tpmjs/ui/Label/Label";
+import { ProgressBar } from "@tpmjs/ui/ProgressBar/ProgressBar";
+import { Tabs } from "@tpmjs/ui/Tabs/Tabs";
+import Link from "next/link";
+import { useState } from "react";
+import { ThemeToggle } from "../../components/ThemeToggle";
+
+export default function PlaygroundPage() {
+ const [activeTab, setActiveTab] = useState("all");
+ const [progress, setProgress] = useState(65);
+
+ return (
+
+ {/* Header */}
+
TPMJS Playground}
+ size="md"
+ sticky={true}
+ actions={
+
+
+
+
+
+
+ }
+ />
+
+
+
+
+ {/* Page Title */}
+
+
Component Playground
+
+ Explore and test all TPMJS UI components in one place
+
+
+
+ {/* Buttons Section */}
+
+
+ Buttons
+
+
+ {/* Button Variants */}
+
+
Variants
+
+
+
+
+
+
+
+
+
+
+ {/* Button Sizes */}
+
+
Sizes
+
+
+
+
+
+
+
+ {/* Button States */}
+
+
States
+
+
+
+
+
+
+
+
+
+ {/* Badges Section */}
+
+
+ Badges
+
+
+ {/* Badge Variants */}
+
+
Variants
+
+ Default
+ Secondary
+ Error
+ Outline
+ Success
+ Warning
+ Info
+
+
+
+ {/* Badge Sizes */}
+
+
Sizes
+
+ Small
+ Medium
+ Large
+
+
+
+
+
+ {/* Icons Section */}
+
+
+ Icons
+
+
+ {/* Icon Sizes */}
+
+
Sizes
+
+
+
+ Small
+
+
+
+ Medium
+
+
+
+ Large
+
+
+
+
+ {/* Icon Gallery */}
+
+
Available Icons
+
+ {[
+ "check",
+ "x",
+ "chevronDown",
+ "copy",
+ "externalLink",
+ "github",
+ "sun",
+ "moon",
+ ].map((icon) => (
+
+
+ {icon}
+
+ ))}
+
+
+
+
+
+ {/* Cards Section */}
+
+
+ Cards
+
+
+ {/* Card Variants */}
+
+
Variants
+
+
+
+ Default Card
+
+ This is the default card style
+
+
+
+
+ Cards are flexible containers for content.
+
+
+
+
+
+
+
+
+
+ Elevated Card
+
+ This card has a shadow elevation
+
+
+
+
+ Perfect for highlighting important content.
+
+
+
+
+
+
+
+
+
+ Outline Card
+
+ This card has an outline border
+
+
+
+
+ Great for subtle content separation.
+
+
+
+
+
+
+
+
+
+
+
+ {/* Inputs Section */}
+
+
+ Inputs
+
+
+ {/* Input Sizes */}
+
+
+ {/* Input States */}
+
+
+
+
+ {/* Progress Bars Section */}
+
+
+ Progress Bars
+
+
+ {/* Progress Bar Variants */}
+
+
Variants
+
+
+
+ Primary
+ {progress}%
+
+
+
+
+
+
+
+
+
+ {/* Interactive Progress */}
+
+
Interactive
+
+
+
+
+
+ Adjust Progress
+
+
+ {progress}%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Tabs Section */}
+
+
+ Tabs
+
+
+
+
Interactive Tabs
+
+
+
+
+
+ Active tab: {activeTab}
+
+
+
+
+
+
+
+
+ {/* Code Block Section */}
+
+
+ Code Block
+
+
+
+
Example Code
+
+ Click me!
+
+ );
+}`}
+ />
+
+
+
+
JSON Example
+
+
+
+
+
+ {/* Containers Section */}
+
+
+ Containers
+
+
+
+
Container Sizes
+
+
+
+
+ size="sm"
+
+
+
+
+
+
+ size="md"
+
+
+
+
+
+
+ size="lg"
+
+
+
+
+
+
+ size="xl"
+
+
+
+
+
+
+
+
+ {/* Labels Section */}
+
+
+
+
+
+ {/* Footer */}
+
+
+ );
+}