diff --git a/src/app/cart/page.tsx b/src/app/cart/page.tsx index e110355..f10bf7c 100644 --- a/src/app/cart/page.tsx +++ b/src/app/cart/page.tsx @@ -6,8 +6,9 @@ import FooterCard from "@/components/sections/footer/FooterCard"; import { Instagram, Twitter, Youtube, Trash2, Plus, Minus, TrendingUp } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; +import type { LucideIcon } from "lucide-react"; -const TikTok = (props: React.SVGProps) => ( +const TikTok: LucideIcon = (props: React.SVGProps) => ( ) => ( > -); +) as LucideIcon; export default function CartPage() { const navItems = [ @@ -59,7 +60,7 @@ export default function CartPage() { const tax = subtotal * 0.08; const total = subtotal + shipping + tax; - const socialLinks = [ + const socialLinks: Array<{ icon: LucideIcon; href: string; ariaLabel: string }> = [ { icon: Instagram, href: "https://instagram.com/umbra", ariaLabel: "Instagram" }, { icon: Twitter, href: "https://twitter.com/umbra", ariaLabel: "Twitter" }, { icon: TikTok, href: "https://tiktok.com/@umbra", ariaLabel: "TikTok" }, diff --git a/src/app/page.tsx b/src/app/page.tsx index cd0c949..9779a22 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -11,8 +11,9 @@ import ContactText from "@/components/sections/contact/ContactText"; import FooterCard from "@/components/sections/footer/FooterCard"; import Link from "next/link"; import { Sparkles, TrendingUp, Instagram, Twitter, Youtube } from "lucide-react"; +import type { LucideIcon } from "lucide-react"; -const TikTok = (props: React.SVGProps) => ( +const TikTok: LucideIcon = (props: React.SVGProps) => ( ) => ( > -); +) as LucideIcon; export default function HomePage() { const navItems = [ @@ -34,7 +35,7 @@ export default function HomePage() { { name: "Contact", id: "contact" }, ]; - const socialLinks = [ + const socialLinks: Array<{ icon: LucideIcon; href: string; ariaLabel: string }> = [ { icon: Instagram, href: "https://instagram.com/umbra", ariaLabel: "Instagram" }, { icon: Twitter, href: "https://twitter.com/umbra", ariaLabel: "Twitter" }, { icon: TikTok, href: "https://tiktok.com/@umbra", ariaLabel: "TikTok" }, diff --git a/src/app/product/[id]/page.tsx b/src/app/product/[id]/page.tsx index f1200f6..c8692e8 100644 --- a/src/app/product/[id]/page.tsx +++ b/src/app/product/[id]/page.tsx @@ -3,11 +3,12 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered"; import FooterCard from "@/components/sections/footer/FooterCard"; -import { Instagram, Twitter, Youtube, ShoppingCart, Heart, Share2 } from "lucide-react"; +import { Instagram, Twitter, Youtube, Heart, ShoppingCart } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; +import type { LucideIcon } from "lucide-react"; -const TikTok = (props: React.SVGProps) => ( +const TikTok: LucideIcon = (props: React.SVGProps) => ( ) => ( > -); +) as LucideIcon; export default function ProductPage() { const navItems = [ @@ -29,27 +30,18 @@ export default function ProductPage() { { name: "Contact", id: "contact" }, ]; - const [quantity, setQuantity] = useState(1); const [selectedSize, setSelectedSize] = useState("M"); const [selectedColor, setSelectedColor] = useState("Black"); - const [isFavorite, setIsFavorite] = useState(false); + const [quantity, setQuantity] = useState(1); + const [isFavorited, setIsFavorited] = useState(false); - const socialLinks = [ + const socialLinks: Array<{ icon: LucideIcon; href: string; ariaLabel: string }> = [ { icon: Instagram, href: "https://instagram.com/umbra", ariaLabel: "Instagram" }, { icon: Twitter, href: "https://twitter.com/umbra", ariaLabel: "Twitter" }, { icon: TikTok, href: "https://tiktok.com/@umbra", ariaLabel: "TikTok" }, { icon: Youtube, href: "https://youtube.com/@umbra", ariaLabel: "YouTube" }, ]; - const product = { - id: "1", name: "Classic Black Hoodie", price: 89.99, - description: "Our signature Classic Black Hoodie combines premium comfort with timeless style. Crafted from high-quality cotton blend fabric, this oversized hoodie features a spacious kangaroo pocket, adjustable drawstrings, and reinforced seams for durability. Perfect for layering or wearing solo, it's the essential streetwear piece for any wardrobe.", image: "http://img.b2bpic.net/free-photo/medium-shot-man-posing-with-hoodie-indoors_23-2149359859.jpg", rating: 4.8, - reviewCount: 247, - inStock: true, - sizes: ["XS", "S", "M", "L", "XL", "XXL"], - colors: ["Black", "Gray", "Navy", "White"], - material: "80% Cotton, 20% Polyester", care: "Machine wash cold with similar colors. Tumble dry low."}; - return ( -
-
- - ← Back to Shop - +
+
+
+ + ← Back to Shop + -
- {/* Product Image */} -
-
+
+ {/* Product Image */} +
{product.name}
-
- {/* Product Details */} -
-

{product.name}

- -
-
- {product.rating} - ({product.reviewCount} reviews) + {/* Product Details */} +
+
+

Premium Collection

+

Classic Black Hoodie

+

$89.99

+

+ Experience the perfect blend of comfort and style with our Classic Black Hoodie. Crafted from premium materials, this versatile piece is ideal for layering or wearing alone. The spacious fit and quality construction make it a wardrobe essential for any streetwear enthusiast. +

-
-
- ${product.price.toFixed(2)} -
+ {/* Color Selection */} +
+ +
+ {["Black", "Grey", "Navy"].map((color) => ( + + ))} +
+
-

{product.description}

+ {/* Size Selection */} +
+ +
+ {["XS", "S", "M", "L", "XL", "XXL"].map((size) => ( + + ))} +
+
- {/* Size Selection */} -
- -
- {product.sizes.map((size) => ( + {/* Quantity */} +
+ +
- ))} -
-
- - {/* Color Selection */} -
- -
- {product.colors.map((color) => ( + {quantity} - ))} +
-
- {/* Quantity */} -
- -
- - {quantity}
-
- {/* Action Buttons */} -
- -
- - + {/* Product Info */} +
+
+

Material

+

100% Premium Cotton

+
+
+

Shipping

+

Free shipping on orders over $150

+
+
+

Returns

+

30-day return policy

+
- - {product.inStock ? ( -

✓ In Stock - Ships within 24 hours

- ) : ( -

Out of Stock

- )}
-
- {/* Product Info */} -
-
-

Material & Care

-

- Material: {product.material} -

-

- Care: {product.care} -

-
-
-

Shipping & Returns

-

• Free shipping on orders over $150

-

• 30-day returns with free return shipping

-

• Easy exchanges within 30 days

+ {/* Related Products */} +
+

Related Products

+
+ {[ + { + name: "Vintage Denim Jacket", price: "$129.99", image: "http://img.b2bpic.net/free-photo/fashionable-woman-wearing-denim-jacket_23-2148859621.jpg"}, + { + name: "Cargo Pants - Khaki", price: "$79.99", image: "http://img.b2bpic.net/free-photo/young-woman-wearing-trucker-hat_23-2149432334.jpg"}, + { + name: "Oversized T-Shirt", price: "$49.99", image: "http://img.b2bpic.net/free-photo/teenager-boy-stylish-clothes-posing_23-2149085228.jpg"}, + ].map((product, i) => ( + +
+ {product.name} +
+

+ {product.name} +

+

{product.price}

+ + ))} +
diff --git a/src/app/shop/page.tsx b/src/app/shop/page.tsx index 9828595..6180e60 100644 --- a/src/app/shop/page.tsx +++ b/src/app/shop/page.tsx @@ -8,8 +8,9 @@ import ContactText from "@/components/sections/contact/ContactText"; import FooterCard from "@/components/sections/footer/FooterCard"; import Link from "next/link"; import { TrendingUp, Instagram, Twitter, Youtube } from "lucide-react"; +import type { LucideIcon } from "lucide-react"; -const TikTok = (props: React.SVGProps) => ( +const TikTok: LucideIcon = (props: React.SVGProps) => ( ) => ( > -); +) as LucideIcon; export default function ShopPage() { const navItems = [ @@ -31,7 +32,7 @@ export default function ShopPage() { { name: "Contact", id: "contact" }, ]; - const socialLinks = [ + const socialLinks: Array<{ icon: LucideIcon; href: string; ariaLabel: string }> = [ { icon: Instagram, href: "https://instagram.com/umbra", ariaLabel: "Instagram" }, { icon: Twitter, href: "https://twitter.com/umbra", ariaLabel: "Twitter" }, { icon: TikTok, href: "https://tiktok.com/@umbra", ariaLabel: "TikTok" },