@@ -53,11 +66,9 @@ export const Header = () => {
-
-
-
+
@@ -67,15 +78,14 @@ export const Header = () => {
{/* Mobile menu buttons */}
+ >
)
}
-export default Header
\ No newline at end of file
+export default Header
diff --git a/components/purchase-credits-popup.tsx b/components/purchase-credits-popup.tsx
new file mode 100644
index 00000000..63a4b83c
--- /dev/null
+++ b/components/purchase-credits-popup.tsx
@@ -0,0 +1,57 @@
+'use client';
+
+import React from 'react';
+import {
+ Dialog,
+ DialogContent,
+ DialogHeader,
+ DialogTitle,
+ DialogDescription,
+ DialogFooter,
+} from '@/components/ui/dialog';
+import { Button } from '@/components/ui/button';
+import { CreditCard, Zap } from 'lucide-react';
+
+interface PurchaseCreditsPopupProps {
+ isOpen: boolean;
+ onClose: () => void;
+}
+
+export function PurchaseCreditsPopup({ isOpen, onClose }: PurchaseCreditsPopupProps) {
+ const handlePurchase = () => {
+ window.open('https://buy.stripe.com/3cIaEX3tRcur9EM7tbasg00', '_blank');
+ onClose();
+ };
+
+ return (
+
+ );
+}
diff --git a/components/sidebar/chat-history-client.tsx b/components/sidebar/chat-history-client.tsx
index 9190dea7..5af15a4e 100644
--- a/components/sidebar/chat-history-client.tsx
+++ b/components/sidebar/chat-history-client.tsx
@@ -18,6 +18,7 @@ import {
} from '@/components/ui/alert-dialog';
import { toast } from 'sonner';
import { Spinner } from '@/components/ui/spinner';
+import { Zap, ChevronDown, ChevronUp } from 'lucide-react';
import HistoryItem from '@/components/history-item'; // Adjust path if HistoryItem is moved or renamed
import type { Chat as DrizzleChat } from '@/lib/actions/chat-db'; // Use the Drizzle-based Chat type
@@ -31,6 +32,7 @@ export function ChatHistoryClient({}: ChatHistoryClientProps) {
const [error, setError] = useState
(null);
const [isClearPending, startClearTransition] = useTransition();
const [isAlertDialogOpen, setIsAlertDialogOpen] = useState(false);
+ const [isCreditsVisible, setIsCreditsVisible] = useState(false);
const router = useRouter();
useEffect(() => {
@@ -113,6 +115,34 @@ export function ChatHistoryClient({}: ChatHistoryClientProps) {
return (
+
+
+
+ {isCreditsVisible && (
+
+
+ Available Credits
+ 0
+
+
+
Upgrade to get more credits
+
+ )}
+
+
{!chats?.length ? (
diff --git a/components/usage-toggle-context.tsx b/components/usage-toggle-context.tsx
new file mode 100644
index 00000000..d9a3beaf
--- /dev/null
+++ b/components/usage-toggle-context.tsx
@@ -0,0 +1,28 @@
+'use client'
+
+import { createContext, useContext, useState, ReactNode } from "react"
+
+interface UsageToggleContextType {
+ isUsageOpen: boolean
+ toggleUsage: () => void
+}
+
+const UsageToggleContext = createContext
(undefined)
+
+export const UsageToggleProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
+ const [isUsageOpen, setIsUsageOpen] = useState(false)
+
+ const toggleUsage = () => setIsUsageOpen(prev => !prev)
+
+ return (
+
+ {children}
+
+ )
+}
+
+export const useUsageToggle = () => {
+ const context = useContext(UsageToggleContext)
+ if (!context) throw new Error('useUsageToggle must be used within UsageToggleProvider')
+ return context
+}
diff --git a/components/usage-view.tsx b/components/usage-view.tsx
new file mode 100644
index 00000000..71412633
--- /dev/null
+++ b/components/usage-view.tsx
@@ -0,0 +1,96 @@
+'use client'
+
+import React, { useEffect, useState } from 'react'
+import { Button } from '@/components/ui/button'
+import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'
+import { Zap, RefreshCw, LayoutPanelLeft, Minus } from 'lucide-react'
+import { useUsageToggle } from './usage-toggle-context'
+
+export function UsageView() {
+ const [usage] = useState([
+ { details: 'Efficiently Fix Pull Request ...', date: '2026-01-17 08:05', change: -418 },
+ { details: 'Fix Build and Add Parallel S...', date: '2026-01-16 06:10', change: -482 },
+ { details: 'How to Add a Feature to a ...', date: '2026-01-14 10:42', change: -300 },
+ ])
+ const [credits] = useState(0)
+ const { toggleUsage } = useUsageToggle()
+
+ return (
+
+
+
+
Usage
+
Track your credits and usage history
+
+
+
+
+
+
+
+ Free
+
+
+
+
+
+
+
+ Credits
+
+
{credits}
+
+
+ Free credits
+ 0
+
+
+
+
+
+
+
+ Daily refresh credits
+
+
300
+
+
Refresh to 300 at 00:00 every day
+
+
+
+
+
+
+
+ Website usage & billing
+
+
+
+
+
+
+ Details
+ Date
+ Credits change
+
+
+
+ {usage.map((item, i) => (
+
+ {item.details}
+ {item.date}
+ {item.change}
+
+ ))}
+
+
+
+
+
+ )
+}