diff --git a/frontend/src/app/dev/components/page.tsx b/frontend/src/app/dev/components/page.tsx
new file mode 100644
index 0000000..83a53e3
--- /dev/null
+++ b/frontend/src/app/dev/components/page.tsx
@@ -0,0 +1,17 @@
+/**
+ * Component Showcase Page
+ * Development-only page to preview all shadcn/ui components
+ * Access: /dev/components
+ */
+
+import type { Metadata } from 'next';
+import { ComponentShowcase } from '@/components/dev/ComponentShowcase';
+
+export const metadata: Metadata = {
+ title: 'Component Showcase | Dev',
+ description: 'Preview all design system components',
+};
+
+export default function ComponentShowcasePage() {
+ return ;
+}
diff --git a/frontend/src/components/auth/PasswordResetConfirmForm.tsx b/frontend/src/components/auth/PasswordResetConfirmForm.tsx
index 96213ca..2a385d9 100644
--- a/frontend/src/components/auth/PasswordResetConfirmForm.tsx
+++ b/frontend/src/components/auth/PasswordResetConfirmForm.tsx
@@ -223,7 +223,7 @@ export function PasswordResetConfirmForm({
{/* Password Strength Indicator */}
{watchPassword && (
-
+
+
{title}
+
+ {children}
+
+
+ );
+}
+
+/**
+ * Component showcase
+ */
+export function ComponentShowcase() {
+ const [isDark, setIsDark] = useState(false);
+ const [checked, setChecked] = useState(false);
+
+ const toggleTheme = () => {
+ setIsDark(!isDark);
+ document.documentElement.classList.toggle('dark');
+ };
+
+ return (
+
+ {/* Header */}
+
+
+
+
Component Showcase
+
Development Preview
+
+
+
+
+
+ {/* Content */}
+
+
+ {/* Colors */}
+
+
+ {/* Typography */}
+
+
+
+
Heading 1
+
text-4xl font-bold
+
+
+
Heading 2
+
text-3xl font-semibold
+
+
+
Heading 3
+
text-2xl font-semibold
+
+
+
Heading 4
+
text-xl font-medium
+
+
+
Body text - The quick brown fox jumps over the lazy dog
+
text-base
+
+
+
+ Small text - The quick brown fox jumps over the lazy dog
+
+
text-sm text-muted-foreground
+
+
+
+ const example = true;
+
+
Code / Mono
+
+
+
+
+ {/* Buttons */}
+
+
+ {/* Variants */}
+
+
Variants
+
+
+
+
+
+
+
+
+
+
+ {/* Sizes */}
+
+
Sizes
+
+
+
+
+
+
+
+
+ {/* With Icons */}
+
+
With Icons
+
+
+
+
+
+
+
+ {/* States */}
+
+
States
+
+
+
+
+
+
+
+
+ {/* Form Inputs */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setChecked(value as boolean)} />
+
+
+
+
+
+
+
+ {/* Cards */}
+
+
+
+
+ Simple Card
+ Basic card with title and description
+
+
+
+ This is the card content area. You can put any content here.
+
+
+
+
+
+
+ Card with Footer
+ Card with action buttons
+
+
+
+ Cards can have footers with actions.
+
+
+
+
+
+
+
+
+
+
+ {/* Badges */}
+
+
+ Default
+ Secondary
+ Outline
+ Destructive
+ Success
+ Warning
+
+
+
+ {/* Avatars */}
+
+
+
+ AB
+
+
+ CD
+
+
+ EF
+
+
+
+
+ {/* Alerts */}
+
+
+
+
+ Information
+
+ This is an informational alert message.
+
+
+
+
+
+ Error
+
+ Something went wrong. Please try again.
+
+
+
+
+
+ Success
+
+ Your changes have been saved successfully.
+
+
+
+
+
+ Warning
+
+ Please review your changes before proceeding.
+
+
+
+
+
+ {/* Dropdown Menu */}
+
+
+
+
+
+
+ My Account
+
+
+
+ Profile
+
+
+
+ Settings
+
+
+
+ Security
+
+
+
+
+ Log out
+
+
+
+
+
+ {/* Dialog */}
+
+
+
+
+ {/* Tabs */}
+
+
+ {/* Table */}
+
+
+ A list of your recent invoices.
+
+
+ Invoice
+ Status
+ Method
+ Amount
+
+
+
+
+ INV001
+
+ Paid
+
+ Credit Card
+ $250.00
+
+
+ INV002
+
+ Pending
+
+ PayPal
+ $150.00
+
+
+ INV003
+
+ Unpaid
+
+ Bank Transfer
+ $350.00
+
+
+
+
+
+ {/* Skeletons */}
+
+
+ {/* Separator */}
+
+
+
+
Section 1
+
+
Section 2
+
+
+
+
+
+
+ {/* Footer */}
+
+
+ );
+}