{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "blocks", "type": "registry:block", "description": "All blocks from @creative-tim/blocks", "dependencies": [ "date-fns" ], "registryDependencies": [ "accordion", "avatar", "badge", "button", "calendar", "card", "checkbox", "dialog", "dropdown-menu", "input", "label", "popover", "progress", "radio-group", "scroll-area", "select", "separator", "slider", "software-purchase-card", "switch", "tabs", "textarea", "tooltip" ], "files": [ { "path": "blocks/software-purchase-01/page.tsx", "type": "registry:page", "target": "app/software-purchase/page.tsx", "content": "\"use client\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { SoftwarePurchaseCard } from \"@/components/ui/software-purchase-card\"\n\nexport default function Page() {\n const handleApprove = () => {\n console.log(\"Purchase approved\")\n }\n\n const handleDiscard = () => {\n console.log(\"Purchase discarded\")\n }\n\n return (\n
\n
\n {/* Left side - Purchase Details */}\n
\n
\n

Software Purchase Request

\n

\n Review and approve the software purchase details below\n

\n
\n\n \n\n
\n
\n

Purchase Details

\n
\n
\n Software Name\n \n Enterprise Cloud Suite\n \n
\n
\n Vendor\n \n CloudTech Solutions Inc.\n \n
\n
\n License Type\n \n Commercial License\n \n
\n
\n Contract Duration\n 12 months\n
\n
\n
\n\n \n\n
\n

\n Billing Information\n

\n
\n
\n Billing Cycle\n Monthly\n
\n
\n Payment Method\n \n Corporate Credit Card\n \n
\n
\n Cost Center\n \n Engineering Department\n \n
\n
\n Annual Total\n \n $30,000\n \n
\n
\n
\n\n \n\n
\n

\n Additional Information\n

\n
\n
\n Requested By\n \n John Smith (Engineering Manager)\n \n
\n
\n Request Date\n \n December 28, 2024\n \n
\n
\n Status\n \n Pending Approval\n \n
\n
\n Justification\n

\n This software is critical for our cloud infrastructure\n management and will enable the engineering team to scale\n operations more efficiently. The per-seat pricing model\n aligns with our team growth projections for Q1 2025.\n

\n
\n
\n
\n
\n
\n\n {/* Right side - Software Purchase Card */}\n
\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/billing-information-01/page.tsx", "type": "registry:page", "target": "app/billing-information/page.tsx", "content": "\"use client\"\n\nimport { Building2, Pencil, Plus, Trash2 } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\"\n\ninterface BillingCardProps {\n company: string\n contact: string\n email: string\n vat: string\n}\n\nfunction BillingCard({ company, contact, email, vat }: BillingCardProps) {\n return (\n \n \n
\n
\n \n
\n
\n {company}\n

Company

\n
\n
\n \n
\n \n \n \n Delete\n \n
\n
\n
\n \n
\n Contact: \n {contact}\n
\n
\n \n Email Address:{\" \"}\n \n {email}\n
\n
\n \n VAT Number:{\" \"}\n \n {vat}\n
\n
\n
\n )\n}\n\nexport default function BillingInformation01() {\n return (\n
\n
\n
\n

Billing Information

\n

\n View and update your billing details quickly and easily.\n

\n
\n \n
\n
\n \n \n \n
\n
\n )\n}\n" }, { "path": "blocks/card-display-01/page.tsx", "type": "registry:page", "target": "app/card-display/page.tsx", "content": "\"use client\"\n\nimport { Wifi } from \"lucide-react\"\n\nimport { Card } from \"@/components/ui/card\"\n\ninterface CreditCardProps {\n variant?: \"dark\" | \"light\"\n number: string\n holder: string\n expires: string\n}\n\nfunction CreditCard({\n variant = \"light\",\n number,\n holder,\n expires,\n}: CreditCardProps) {\n const isDark = variant === \"dark\"\n\n return (\n \n
\n\n
\n \n \n
\n \n
\n
\n
\n\n
\n

\n {String(number)\n .match(/.{1,4}/g)\n ?.join(\" \")}\n

\n
\n\n
\n
\n
\n \n Card Holder\n

\n

{holder}

\n
\n
\n \n Expires\n

\n

{expires}

\n
\n
\n
\n \n
\n
\n \n )\n}\n\nexport default function CardDisplay01() {\n return (\n
\n \n \n
\n )\n}\n" }, { "path": "blocks/payment-method-01/page.tsx", "type": "registry:page", "target": "app/payment-method/page.tsx", "content": "\"use client\"\n\nimport { Check, Pencil, Plus, Trash2 } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\ninterface PaymentMethodProps {\n type: \"visa\" | \"mastercard\"\n number: string\n isDefault?: boolean\n}\n\nfunction PaymentMethod({ type, number, isDefault }: PaymentMethodProps) {\n const cardImg =\n type === \"visa\"\n ? \"https://v3.material-tailwind.com/visa.webp\"\n : \"https://v3.material-tailwind.com/mastercard.webp\"\n\n return (\n \n {isDefault && (\n
\n
\n \n Default\n
\n
\n )}\n\n
\n
\n \n
\n\n
\n

\n **** **** **** {number}\n

\n

\n {type} Card\n

\n
\n
\n\n
\n \n \n \n \n \n \n

Edit Card

\n
\n
\n
\n\n \n \n \n \n \n \n \n \n

Remove Card

\n
\n
\n
\n
\n
\n )\n}\n\nexport default function PaymentMethod01() {\n return (\n
\n
\n
\n

Payment Methods

\n

\n Manage your preferred payment methods securely and conveniently.\n

\n
\n \n
\n\n
\n \n \n \n \n
\n
\n )\n}\n" }, { "path": "blocks/transaction-history-01/page.tsx", "type": "registry:page", "target": "app/transaction-history/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { CalendarIcon, ChevronDown, ChevronUp, Clock } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Calendar } from \"@/components/ui/calendar\"\nimport { Card } from \"@/components/ui/card\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\"\n\nconst DATA = {\n \"March 2023\": [\n {\n name: \"Netflix\",\n date: \"27 March 2026, at 12:30 PM\",\n value: 2500,\n status: \"decreasing\" as const,\n },\n {\n name: \"Apple\",\n date: \"27 March 2026, at 04:30 AM\",\n value: 2000,\n status: \"increasing\" as const,\n },\n ],\n \"February 2023\": [\n {\n name: \"Stripe\",\n date: \"26 March 2026, at 13:45 PM\",\n value: 2500,\n status: \"decreasing\" as const,\n },\n {\n name: \"HubSpot\",\n date: \"26 March 2023, at 12:30 PM\",\n value: 750,\n status: \"increasing\" as const,\n },\n {\n name: \"Figma\",\n date: \"26 March 2023, at 08:30 AM\",\n value: 1400,\n status: \"increasing\" as const,\n },\n {\n name: \"Webflow\",\n date: \"26 March 2023, at 05:00 AM\",\n value: 0,\n status: \"pending\" as const,\n },\n ],\n}\n\nconst ICONS = {\n increasing: ChevronUp,\n decreasing: ChevronDown,\n pending: Clock,\n}\n\nconst COLORS = {\n increasing: \"text-green-600\",\n decreasing: \"text-red-600\",\n pending: \"text-muted-foreground\",\n}\n\nconst ICON_COLORS = {\n increasing: \"text-green-600\",\n decreasing: \"text-red-600\",\n pending: \"text-black dark:text-white\",\n}\n\nconst PREFIX = {\n increasing: \"+\",\n decreasing: \"-\",\n pending: \"\",\n}\n\nexport default function TransactionHistory01() {\n const [date, setDate] = React.useState(new Date(2024, 9, 10))\n\n return (\n
\n
\n
\n
\n

History Transactions

\n

\n Track and monitor your financial activity.\n

\n
\n \n \n \n \n {date ? format(date, \"PPP\") : Pick a date}\n \n \n \n day && setDate(day)}\n initialFocus\n />\n \n \n
\n
\n {(Object.keys(DATA) as Array).map((month, key) => {\n return (\n
\n

\n {month}\n

\n
\n {DATA[month].map(({ name, value, date, status }) => {\n const Icon = ICONS[status]\n\n return (\n \n \n
\n

{name}

\n

\n {date}\n

\n
\n \n {PREFIX[status]}{\" \"}\n {value\n ? new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value)\n : \"Pending\"}\n

\n
\n )\n })}\n
\n
\n )\n })}\n
\n
\n \n )\n}\n" }, { "path": "blocks/invoices-01/page.tsx", "type": "registry:page", "target": "app/invoices/page.tsx", "content": "\"use client\"\n\nimport { Download } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Separator } from \"@/components/ui/separator\"\n\nconst DATA = [\n {\n name: \"INV-24 #MS-415646\",\n date: \"October 15, 2024\",\n amount: 2500,\n badge: \"24 Days\",\n isOverdue: false,\n },\n {\n name: \"INV-23 #MS-415740\",\n date: \"October 10, 2024\",\n amount: 1750,\n badge: \"20 Days\",\n isOverdue: false,\n },\n {\n name: \"INV-22 #MS-946285\",\n date: \"September 15, 2024\",\n amount: 1500,\n badge: \"18 Days\",\n isOverdue: false,\n },\n {\n name: \"INV-21 #MS-739734\",\n date: \"September 10, 2024\",\n amount: 2990,\n badge: \"3 Days Overdue\",\n isOverdue: true,\n },\n {\n name: \"INV-20 #MS-848649\",\n date: \"August 15, 2024\",\n amount: 3500,\n badge: \"3 Days Overdue\",\n isOverdue: true,\n },\n]\n\nexport default function Invoices01() {\n return (\n
\n
\n
\n
\n

Invoices

\n

\n Track and monitor your financial activity.\n

\n
\n \n
\n
\n {DATA.map(({ name, date, amount, badge, isOverdue }, index) => (\n
\n
\n
\n

{name}

\n

{date}

\n
\n \n {badge}\n \n

\n {new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(amount)}\n

\n \n
\n {index < DATA.length - 1 && }\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/simple-blog-content-01/page.tsx", "type": "registry:page", "target": "app/simple-blog-content/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\"\n\nconst POSTS = [\n {\n img: \"https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&auto=format&fit=crop\",\n tag: \"House\",\n title: \"Shared Coworking\",\n desc: \"Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons.\",\n date: \"Posted on 26 May\",\n author: {\n img: \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=400&h=400&auto=format&fit=crop\",\n name: \"Otto Gonzalez\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&auto=format&fit=crop\",\n tag: \"Office\",\n title: \"Really Housekeeping\",\n desc: \"Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons.\",\n date: \"Posted on 03 May\",\n author: {\n img: \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400&h=400&auto=format&fit=crop\",\n name: \"Chriss Smahos\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=800&auto=format&fit=crop\",\n tag: \"Hub\",\n title: \"Coworking Office\",\n desc: \"Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons.\",\n date: \"Posted on 12 April\",\n author: {\n img: \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&auto=format&fit=crop\",\n name: \"Elijah Miller\",\n },\n },\n]\n\nexport default function SimpleBlogContent01() {\n return (\n
\n
\n {POSTS.map(({ img, tag, title, desc, date, author }) => (\n \n \n
\n \n
\n
\n \n \n {tag}\n \n {title}\n {desc}\n \n \n \n \n {author.name.charAt(0)}\n \n
\n

{author.name}

\n

{date}

\n
\n
\n
\n ))}\n
\n
\n )\n}\n" }, { "path": "blocks/blog-cards-layout-01/page.tsx", "type": "registry:page", "target": "app/blog-cards-layout/page.tsx", "content": "\"use client\"\n\nimport { ArrowDown } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\"\n\nconst POSTS = [\n {\n img: \"https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&auto=format&fit=crop\",\n tag: \"Enterprise\",\n title: \"Autodesk and Figma looks to future of 3D printing with Project Escher\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"10 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&auto=format&fit=crop\",\n name: \"Ryan Samuel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&auto=format&fit=crop\",\n tag: \"Startups\",\n title: \"Bolt launching cross-platform service this week\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"12 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400&h=400&auto=format&fit=crop\",\n name: \"Nora Hazel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=800&auto=format&fit=crop\",\n tag: \"Trending\",\n title: \"6 insights into the French Fashion landscape view\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"16 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=400&h=400&auto=format&fit=crop\",\n name: \"Otto Gonzalez\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?w=800&auto=format&fit=crop\",\n tag: \"Enterprise\",\n title: \"Autodesk looks to future of 3D printing with Project Escher\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"18 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400&h=400&auto=format&fit=crop\",\n name: \"Ryan Samuel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497215728101-856f4ea42174?w=800&auto=format&fit=crop\",\n tag: \"Lifestyle\",\n title: \"Lyft launching cross-platform service this week\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"18 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=400&h=400&auto=format&fit=crop\",\n name: \"Nora Hazel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366412874-3415097a27e7?w=800&auto=format&fit=crop\",\n tag: \"Startups\",\n title: \"6 insights into the French Fashion landscape\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"22 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400&h=400&auto=format&fit=crop\",\n name: \"Otto Gonzalez\",\n },\n },\n]\n\nexport default function BlogCardsLayout01() {\n return (\n
\n
\n

\n Latest Blog Posts\n

\n

Blog Posts

\n

\n This is the paragraph where you can write more details about blogs.\n Keep you user engaged by providing meaningful information.\n

\n
\n
\n {POSTS.map(({ img, tag, title, desc, date, author }) => (\n \n \n \n \n \n \n {tag}\n \n {title}\n {desc}\n \n \n \n \n {author.name.charAt(0)}\n \n
\n

{author.name}

\n

{date}

\n
\n
\n
\n ))}\n
\n
\n \n
\n
\n )\n}\n" }, { "path": "blocks/blog-post-preview-tags-01/page.tsx", "type": "registry:page", "target": "app/blog-post-preview-tags/page.tsx", "content": "\"use client\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\n\nconst POSTS = [\n {\n img: \"https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&auto=format&fit=crop\",\n category: \"Otto Gonzalez\",\n title: \"Autodesk looks to future of 3D printing with Project\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n tags: [\"Product\", \"Design\", \"UX\"],\n },\n {\n img: \"https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&auto=format&fit=crop\",\n category: \"Ryan Samuel\",\n title: \"Lyft launching cross-platform service this week\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n tags: [\"Product\", \"Design\", \"UX\"],\n },\n {\n img: \"https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=800&auto=format&fit=crop\",\n category: \"Nora Hazel\",\n title: \"6 insights into the French Fashion landscape\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n tags: [\"Product\", \"Design\", \"UX\"],\n },\n]\n\nexport default function BlogPostPreviewTags01() {\n return (\n
\n
\n

\n Latest Blog Posts\n

\n

Explore Our Places

\n

\n This is the paragraph where you can write more details about blogs.\n Keep you user engaged by providing meaningful information.\n

\n
\n
\n {POSTS.map(({ img, category, title, desc, tags }) => (\n
\n
\n \n
\n
\n

{category}

\n

{title}

\n

{desc}

\n
\n
\n {tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n
\n ))}\n
\n
\n \n
\n
\n )\n}\n" }, { "path": "blocks/highlighted-blog-posts-01/page.tsx", "type": "registry:page", "target": "app/highlighted-blog-posts/page.tsx", "content": "\"use client\"\n\nimport { Globe, Heart, Mic, Puzzle } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\"\n\nconst POSTS = [\n {\n img: \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&auto=format&fit=crop\",\n icon: Heart,\n title: \"Cultural\",\n desc: \"257 spots\",\n },\n {\n img: \"https://images.unsplash.com/photo-1511593358241-7eea1f3c84e5?w=800&auto=format&fit=crop\",\n icon: Puzzle,\n title: \"Modern Life\",\n desc: \"117 spots\",\n },\n {\n img: \"https://images.unsplash.com/photo-1469474968028-56623f02e42e?w=800&auto=format&fit=crop\",\n icon: Globe,\n title: \"Popularity\",\n desc: \"363 spots\",\n },\n {\n img: \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&auto=format&fit=crop\",\n icon: Mic,\n title: \"Good Vibes\",\n desc: \"215 spots\",\n },\n]\n\nexport default function HighlightedBlogPosts01() {\n return (\n
\n
\n

Check out what's new

\n

\n We get insulted by others, lose trust for those others. We get back\n freezes every winter\n

\n
\n
\n \n \n

\n Landscape\n

\n
\n \n \n Nature's Light\n \n \n It really matters and then like it really doesn't matter.\n What matters is the people who are sparked by it.\n \n \n \n \n Read More\n \n \n
\n
\n {POSTS.map(({ img, icon: Icon, title, desc }) => (\n \n \n
\n \n \n
\n {title}\n \n {desc}\n \n
\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/blog-rectangular-images-01/page.tsx", "type": "registry:page", "target": "app/blog-rectangular-images/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\n\nconst POSTS = [\n {\n img: \"https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&auto=format&fit=crop\",\n tag: \"Enterprise\",\n title: \"Autodesk looks to future of 3D printing with Project\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"10 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&auto=format&fit=crop\",\n name: \"Ryan Samuel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366811353-6870744d04b2?w=800&auto=format&fit=crop\",\n tag: \"Startups\",\n title: \"Lyft launching cross-platform service this week\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"12 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400&h=400&auto=format&fit=crop\",\n name: \"Nora Hazel\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=800&auto=format&fit=crop\",\n tag: \"Trending\",\n title: \"6 insights into the French Fashion landscape\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"16 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=400&h=400&auto=format&fit=crop\",\n name: \"Otto Gonzalez\",\n },\n },\n {\n img: \"https://images.unsplash.com/photo-1486406146926-c627a92ad1ab?w=800&auto=format&fit=crop\",\n tag: \"Lifestyle\",\n title: \"Autodesk looks to future of 3D printing with Project\",\n desc: \"Don't be scared of the truth because we need to restart the human foundation in truth And I love you like Kanye loves Kanye I love Rick Owens bed design but the back is too high for the beams and angle of the ceiling.\",\n date: \"18 September 2022\",\n author: {\n img: \"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400&h=400&auto=format&fit=crop\",\n name: \"Ryan Samuel\",\n },\n },\n]\n\nexport default function BlogRectangularImages01() {\n return (\n
\n
\n {POSTS.map(({ img, tag, title, desc, date, author }) => (\n
\n
\n \n
\n
\n {tag}\n

{title}

\n

{desc}

\n
\n \n \n {author.name.charAt(0)}\n \n
\n

{author.name}

\n

{date}

\n
\n
\n
\n
\n ))}\n
\n
\n )\n}\n" }, { "path": "blocks/large-blog-preview-01/page.tsx", "type": "registry:page", "target": "app/large-blog-preview/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\n\nexport default function LargeBlogPreview01() {\n return (\n
\n \n
\n

Business

\n

\n Autodesk looks to future of 3D with Project Escher\n

\n

\n Warner Music Group announced today it's acquiring the selected\n assets of the music platform Songkick, including its app for finding\n concerts and the company's trademark. Songkick has been involved\n in a lawsuit against the major…{\" \"}\n \n Read More\n \n

\n
\n \n \n OG\n \n
\n

Otto Gonzalez

\n

10 October 2024

\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/simple-product-details-01/page.tsx", "type": "registry:page", "target": "app/simple-product-details/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Heart } from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst SIZES = [\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\"]\n\nconst SIMILAR_ITEMS = [\n {\n name: \"Black Bustier Top\",\n price: \"€49.95\",\n image:\n \"https://images.unsplash.com/photo-1661327930345-9c6714b603b3?auto=format&fit=crop&q=80&w=400&h=400\",\n sizes: \"Available in 5 size\",\n },\n {\n name: \"Black High-Waist Jeans\",\n price: \"€49.95\",\n image:\n \"https://images.unsplash.com/photo-1578508637199-240a8f25eff6?auto=format&fit=crop&q=80&w=400&h=400\",\n sizes: \"Available in 8 taille\",\n },\n]\n\nexport default function SimpleProductDetails01() {\n const [selectedSize, setSelectedSize] = useState(\"M\")\n const [isFavorite, setIsFavorite] = useState(false)\n\n return (\n
\n
\n {/* Main Product Section */}\n
\n
\n \n
\n
\n

Pink Blouse

\n

$1,490

\n

\n Whether you're closing deals or attending formal events, its\n breathable lining and natural stretch keep you comfortable and\n sharp from day to night.\n

\n\n
\n
\n {[1, 2, 3, 4].map((star) => (\n \n \n \n ))}\n \n \n \n
\n

100 Reviews

\n
\n\n
\n

Size

\n
\n {SIZES.map((size) => (\n setSelectedSize(size)}\n >\n {size}\n \n ))}\n
\n
\n\n
\n

Color

\n
\n
\n
\n
\n
\n
\n\n
\n \n setIsFavorite(!isFavorite)}\n >\n \n \n
\n
\n
\n\n {/* More Info & Similar Items Section */}\n
\n {/* More Info Section */}\n
\n

More Info

\n \n \n \n Description\n \n \n

\n Whether you're navigating city streets or embarking on\n outdoor adventures, this puffer jacket ensures you stay cozy\n and comfortable wherever you go. The versatile black hue\n effortlessly complements any outfit, making it a go-to\n choice for everyday wear.\n

\n

\n Equipped with practical features, including a front zipper\n closure and zippered pockets, the MidnightShield Jacket\n offers convenient storage for your essentials while on the\n move. Its adjustable cuffs and hem allow for a customizable\n fit, ensuring maximum comfort and versatility.\n

\n
\n
\n\n \n \n Delivery & Returns\n \n \n

\n Free Standard Delivery: Orders over $100\n qualify for free standard shipping. Delivery typically takes\n 3-5 business days.\n

\n

\n Express Shipping: Available at checkout for\n faster delivery (1-2 business days).\n

\n

\n Returns: We offer a 30-day return policy.\n Items must be in original condition with tags attached. Free\n returns for defective items.\n

\n
\n
\n\n \n \n Contact Us\n \n \n

\n Have questions about this product? We're here to help!\n

\n

\n Email: support@example.com\n

\n

\n Phone: +1 (555) 123-4567\n

\n

\n Hours: Mon-Fri, 9AM-6PM EST\n

\n
\n
\n \n
\n\n {/* Similar Items Section */}\n
\n

Similar Items

\n
\n {SIMILAR_ITEMS.map((item, index) => (\n \n \n
\n \n
\n
\n

\n {item.name}\n

\n

{item.price}

\n

\n {item.sizes}\n

\n
\n
\n \n ))}\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/grid-ecommerce-01/page.tsx", "type": "registry:page", "target": "app/grid-ecommerce/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\n\nconst CARDS = [\n {\n image:\n \"https://images.unsplash.com/photo-1574015974293-817f0ebebb74?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=973\",\n title: \"New\",\n subtitle: \"Urban Chick Collection\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1661327930345-9c6714b603b3?auto=format&fit=crop&q=80&w=400&h=400\",\n title: \"Shop Sales\",\n subtitle: \"Urban Chick Collection\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1535220459927-c8428851fd45?auto=format&fit=crop&q=80&w=400&h=400\",\n title: \"50% off\",\n subtitle: \"Urban Chick Collection\",\n },\n]\n\nexport default function GridEcommerce01() {\n return (\n
\n
\n

\n Gear Up and Enjoy Savings | Get up to 50% off on select items\n

\n
\n {CARDS.map(({ image, title, subtitle }, index) => (\n \n \n
\n
\n

\n {title}\n

\n

{subtitle}

\n \n
\n \n ))}\n
\n \n \n
\n
\n
\n

\n UP TO 70%\n

\n

\n Formal Elegance Series\n

\n \n
\n
\n \n
\n
\n )\n}\n" }, { "path": "blocks/promotional-cards-01/page.tsx", "type": "registry:page", "target": "app/promotional-cards/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nconst PRODUCTS = [\n {\n name: \"Active toning essence\",\n price: \"$59.00\",\n image:\n \"https://images.unsplash.com/photo-1620916566398-39f1143ab7be?ixlib=rb-4.1.0&auto=format&fit=crop&q=80&w=800\",\n },\n {\n name: \"Hydrating face serum\",\n price: \"$49.00\",\n image:\n \"https://images.unsplash.com/photo-1571781926291-c477ebfd024b?ixlib=rb-4.1.0&auto=format&fit=crop&q=80&w=800\",\n },\n {\n name: \"Vitamin C moisturizer\",\n price: \"$65.00\",\n image:\n \"https://images.unsplash.com/photo-1608571423902-eed4a5ad8108?ixlib=rb-4.1.0&auto=format&fit=crop&q=80&w=800\",\n },\n]\n\nexport default function PromotionalCards01() {\n const [currentProduct, setCurrentProduct] = useState(0)\n\n return (\n
\n
\n
\n {/* Left: Product Showcase */}\n
\n
\n \n
\n

\n {PRODUCTS[currentProduct].name}\n

\n

\n {PRODUCTS[currentProduct].price}\n

\n
\n {PRODUCTS.map((_, index) => (\n setCurrentProduct(index)}\n className={`h-2.5 w-2.5 rounded-full transition-all ${\n currentProduct === index\n ? \"w-8 bg-gray-800\"\n : \"bg-gray-400 hover:bg-gray-600\"\n }`}\n aria-label={`View product ${index + 1}`}\n />\n ))}\n
\n
\n\n {/* Right: Hero Image with Text */}\n
\n \n
\n

\n Glow up with\n
\n nature\n

\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/order-history-01/page.tsx", "type": "registry:page", "target": "app/order-history/page.tsx", "content": "\"use client\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\"\n\nconst OPTIONS = [\n {\n data: \"Order ID\",\n value: \"1234\",\n },\n {\n data: \"Date of Placement\",\n value: \"April 3, 2024\",\n },\n {\n data: \"Amount\",\n value: \"$2,570\",\n },\n]\n\nconst TABLE_ROW = [\n {\n img: \"https://v3.material-tailwind.com/coat-1.png\",\n product: \"Premium Suit\",\n amount: \"$790\",\n date: \"Apr 6, 2024\",\n },\n {\n img: \"https://v3.material-tailwind.com/coat-2.png\",\n product: \"Linen Suit\",\n amount: \"$790\",\n date: \"Apr 6, 2024\",\n },\n {\n img: \"https://v3.material-tailwind.com/coat-3.png\",\n product: \"Tweed Suit\",\n amount: \"$990\",\n date: \"Apr 6, 2024\",\n },\n]\n\nconst TABLE_HEAD = [\"Product\", \"Amount\", \"Status\", \"Date\", \"Details\"]\n\nexport default function OrderHistory01() {\n return (\n
\n
\n

Order History

\n

\n See your recent orders, download your invoices.\n

\n \n \n
\n {OPTIONS.map((option, i) => (\n
\n

\n {option.data}\n

\n

{option.value}

\n
\n ))}\n
\n \n
\n
\n \n
\n \n \n \n {TABLE_HEAD.map((head) => (\n {head}\n ))}\n \n \n \n {TABLE_ROW.map(({ img, product, amount, date }) => (\n \n \n
\n {product}\n {product}\n
\n
\n \n {amount}\n \n \n \n Delivered\n \n \n \n {date}\n \n \n \n \n
\n ))}\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/empty-shopping-cart-01/page.tsx", "type": "registry:page", "target": "app/empty-shopping-cart/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\n\nexport default function EmptyShoppingCart01() {\n return (\n
\n
\n
\n

Store

\n

\n Your Shopping Cart is Empty\n

\n \n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/digital-product-overview-01/page.tsx", "type": "registry:page", "target": "app/digital-product-overview/page.tsx", "content": "\"use client\"\n\nimport { Eye, Lock, ShoppingCart, Star } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\"\n\nconst data = [\n {\n name: \"HTML Version\",\n desc: \"Pure HTML/CSS with Tailwind, perfect for static websites.\",\n price: \"$39\",\n popular: false,\n },\n {\n name: \"React Version\",\n desc: \"React components with TypeScript support included.\",\n price: \"$49\",\n popular: true,\n },\n {\n name: \"Angular Version\",\n desc: \"Angular components with full type definitions.\",\n price: \"$99\",\n popular: false,\n },\n]\n\nexport default function DigitalProductOverview01() {\n return (\n
\n \n\n
\n
\n \n
\n
\n\n
\n
\n
\n

\n Premium UI Kit\n

\n \n Best Seller\n \n
\n

\n A comprehensive collection of beautifully crafted components and\n templates. Built with modern web technologies and best practices\n for seamless integration.\n

\n
\n\n
\n
\n \n 4.9/5\n \n (127 reviews)\n \n
\n
\n
\n \n 1,234\n sales\n
\n
\n\n
\n

Choose your version

\n \n {data.map(({ name, desc, price, popular }) => (\n \n \n \n
\n
\n
\n

{name}

\n {popular && (\n \n Popular\n \n )}\n
\n

{desc}

\n
\n
\n

{price}

\n

\n one-time\n

\n
\n
\n \n
\n ))}\n \n
\n\n
\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/product-description-01/page.tsx", "type": "registry:page", "target": "app/product-description/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n ChevronRight,\n Heart,\n RotateCcw,\n Shield,\n Star,\n Truck,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst IMAGES = [\n { imgelink: \"https://v3.material-tailwind.com/coat-1.png\" },\n { imgelink: \"https://v3.material-tailwind.com/coat-2.png\" },\n { imgelink: \"https://v3.material-tailwind.com/coat-3.png\" },\n { imgelink: \"https://v3.material-tailwind.com/coat-4.png\" },\n]\n\nconst SIZES = [\"32\", \"34\", \"36\", \"38\", \"40\", \"42\", \"44\"]\n\nconst COLORS = [\n { name: \"Black\", hex: \"#1a1a1a\" },\n { name: \"White\", hex: \"#ffffff\" },\n { name: \"Gray\", hex: \"#e5e7eb\" },\n { name: \"Navy\", hex: \"#1e3a8a\" },\n { name: \"Brown\", hex: \"#92400e\" },\n]\n\nconst FEATURES = [\n { icon: Truck, text: \"Free shipping over $150\" },\n { icon: RotateCcw, text: \"Easy 30-day returns\" },\n { icon: Shield, text: \"1-year warranty\" },\n]\n\nexport default function ProductDescription01() {\n const [active, setActive] = useState(\n \"https://v3.material-tailwind.com/coat-1.png\"\n )\n const [selectedSize, setSelectedSize] = useState(\"36\")\n const [selectedColor, setSelectedColor] = useState(\"Black\")\n const [isFavorite, setIsFavorite] = useState(false)\n\n return (\n
\n
\n \n\n
\n
\n
\n \n
\n
\n {IMAGES.map(({ imgelink }, index) => (\n setActive(imgelink)}\n className={`h-20 w-20 overflow-hidden rounded-lg border-2 transition-all ${\n active === imgelink\n ? \"border-neutral-900\"\n : \"border-neutral-200 hover:border-neutral-400\"\n }`}\n >\n \n \n ))}\n
\n\n
\n
\n

\n Product Description\n

\n

\n Experience luxury and comfort with this premium winter coat.\n Crafted from high-quality materials with meticulous attention\n to detail, this coat features a modern silhouette that\n flatters all body types. The water-resistant outer shell keeps\n you dry in light rain, while the insulated lining provides\n warmth without bulk.\n

\n
\n
\n

\n Key Features\n

\n
    \n
  • \n \n \n Water-resistant fabric with breathable membrane technology\n \n
  • \n
  • \n \n \n Premium insulation for optimal warmth in cold weather\n \n
  • \n
  • \n \n Adjustable cuffs and hem for personalized fit\n
  • \n
  • \n \n \n Multiple interior and exterior pockets for storage\n \n
  • \n
\n
\n
\n
\n\n
\n \n Limited Edition\n \n\n

\n Premium Winter Coat\n

\n\n
\n \n $1,290.00\n \n
\n
\n {[...Array(5)].map((_, i) => (\n \n ))}\n
\n (100 reviews)\n
\n
\n\n

\n Elevate your winter wardrobe with this sophisticated coat that\n seamlessly blends style and functionality. Perfect for both\n professional settings and casual outings.\n

\n\n
\n
\n

\n Color\n

\n \n
\n\n
\n

\n Size\n

\n \n
\n
\n\n
\n {FEATURES.map((feature, index) => (\n \n \n \n {feature.text}\n \n
\n ))}\n
\n\n
\n \n Add to Cart\n \n setIsFavorite(!isFavorite)}\n >\n \n \n
\n
\n
\n \n
\n )\n}\n" }, { "path": "blocks/dark-product-overview-01/page.tsx", "type": "registry:page", "target": "app/dark-product-overview/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Heart, Package, Shield, ShoppingCart, Star, Truck } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\nconst DATA = [\n {\n title: \"Features\",\n icon: Package,\n desc: `Premium cashmere blend with cable-knit pattern. Features a classic V-neck design, \n ribbed cuffs and hem for a perfect fit. Made with sustainable materials and ethically sourced \n fibers. Temperature-regulating properties keep you comfortable in any season.`,\n },\n {\n title: \"Product Care\",\n icon: Shield,\n desc: `Hand wash in cold water with mild detergent or dry clean for best results. \n Lay flat to dry, do not wring or twist. Store folded in a cool, dry place. \n Use a fabric shaver to remove any pilling. Steam gently to refresh between wears.`,\n },\n {\n title: \"Shipping\",\n icon: Truck,\n desc: `Free standard shipping on all orders over $100. Express shipping available at checkout. \n Orders are processed within 1-2 business days. International shipping available to select countries. \n 30-day hassle-free returns and exchanges.`,\n },\n]\n\nexport default function DarkProductOverview01() {\n const [isFavorite, setIsFavorite] = useState(false)\n\n return (\n
\n
\n
\n \n Shop Previewer\n \n

\n New Collection\n

\n

\n Easily preview furniture, decor, and more in your space, ensuring\n everything fits perfectly and looks just right. It's the\n ultimate tool for hassle-free home customization and design!\n

\n
\n\n
\n
\n
\n

Elegant Suite

\n New Arrival\n
\n\n
\n
\n {[1, 2, 3, 4, 5].map((star) => (\n \n ))}\n
\n (127 reviews)\n
\n\n
\n

$449.90

\n \n $599.90\n \n \n 25% OFF\n \n
\n\n

\n Add a touch of sophistication to your home with our handcrafted\n ceramic vase. Each piece is uniquely made, blending seamlessly\n into both modern and classic decors.\n

\n\n
\n \n \n Free shipping on orders over $100\n \n
\n\n
\n \n \n Add to Cart\n \n setIsFavorite(!isFavorite)}\n >\n \n \n
\n\n
\n \n \n {DATA.map(({ title, icon: Icon }) => (\n \n \n {title}\n \n ))}\n \n {DATA.map(({ title, desc }) => (\n \n

{desc}

\n \n ))}\n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/shopping-cart-01/page.tsx", "type": "registry:page", "target": "app/shopping-cart/page.tsx", "content": "\"use client\"\n\nimport { Lock, Package, ShoppingBag, Tag, Truck, X } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardContent,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Separator } from \"@/components/ui/separator\"\n\nconst CHECKOUT_PRODUCTS = [\n {\n name: \"Wool Suit\",\n price: \"$1,300\",\n product: \"Silk\",\n size: \"XS\",\n img: \"https://v3.material-tailwind.com/coat-2.png\",\n stock: \"In Stock\",\n },\n {\n name: \"Premium Suit\",\n price: \"$700\",\n product: \"Linen\",\n size: \"M\",\n img: \"https://v3.material-tailwind.com/coat-1.png\",\n stock: \"In Stock\",\n },\n]\n\nexport default function ShoppingCart01() {\n return (\n
\n
\n \n \n
\n
\n \n
\n
\n Shopping Cart\n
\n \n

\n You are eligible for Free Shipping\n

\n
\n
\n \n\n
\n
\n \n \n
\n \n \n Cart Items ({CHECKOUT_PRODUCTS.length})\n \n
\n
\n \n {CHECKOUT_PRODUCTS.map(\n ({ name, price, img, product, size, stock }, index) => (\n
\n
\n
\n
\n \n
\n
\n
\n
\n

\n {name}\n

\n

\n {product}\n

\n
\n \n \n \n
\n\n
\n \n Size:\n \n {size}\n \n \n \n {stock}\n \n
\n\n
\n
\n \n Quantity:\n \n \n
\n

\n {price}\n

\n
\n
\n
\n
\n {index < CHECKOUT_PRODUCTS.length - 1 && (\n \n )}\n
\n )\n )}\n
\n
\n
\n\n
\n
\n \n \n Order Summary\n \n \n
\n
\n \n Subtotal\n \n $2,090\n
\n
\n \n Shipping Tax\n \n \n $0\n \n
\n
\n\n \n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n \n\n
\n
\n Order Total\n \n $2,090\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n

\n Free Shipping Applied\n

\n

\n Estimated delivery: 3-5 business days\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/checkout-01/page.tsx", "type": "registry:page", "target": "app/checkout/page.tsx", "content": "\"use client\"\n\nimport {\n CreditCard,\n Lock,\n Mail,\n MapPin,\n Package,\n ShoppingBag,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\n\nconst OPTIONS = [\n {\n image: \"https://v3.material-tailwind.com/coat-1.png\",\n title: \"Classic Suit\",\n description: \"Silk\",\n size: \"M\",\n price: \"$1,300\",\n quantity: 1,\n },\n {\n image: \"https://v3.material-tailwind.com/coat-2.png\",\n title: \"Premium Suit\",\n description: \"Linen\",\n size: \"M\",\n price: \"$790\",\n quantity: 1,\n },\n]\n\nconst PRICE_OPTIONS = [\n { value: \"Subtotal\", price: \"$2,090\" },\n { value: \"Shipping estimate\", price: \"$0\" },\n { value: \"Tax estimate\", price: \"$5\" },\n]\n\nexport default function Checkout01() {\n return (\n
\n
\n
\n

Checkout

\n

\n Complete your order by providing your payment details\n

\n
\n\n
\n
\n
\n
\n
\n
\n \n
\n
\n

Contact

\n

\n We'll send order updates here\n

\n
\n
\n
\n \n \n
\n
\n \n \n I agree to the{\" \"}\n \n Terms & Conditions\n {\" \"}\n and{\" \"}\n \n Privacy Policy\n \n \n
\n
\n\n \n\n
\n
\n
\n \n
\n
\n

Shipping Address

\n

\n Where should we deliver your order?\n

\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n\n \n\n
\n
\n
\n \n
\n
\n

Payment Details

\n

\n Your payment information is secure\n

\n
\n \n \n Secure\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n\n \n
\n\n
\n
\n
\n
\n \n
\n

Order Summary

\n
\n\n
\n {OPTIONS.map(\n (\n { image, title, description, size, price, quantity },\n index\n ) => (\n \n
\n \n
\n
\n

{title}

\n

\n {description} · Size {size}\n

\n

\n Qty: {quantity}\n

\n
\n

{price}

\n
\n )\n )}\n
\n\n \n\n
\n {PRICE_OPTIONS.map(({ value, price }) => (\n
\n {value}\n {price}\n
\n ))}\n
\n\n \n\n
\n Total\n $2,095\n
\n\n
\n \n
\n

Free Shipping

\n

\n Your order qualifies for free standard shipping\n

\n
\n
\n
\n
\n
\n
\n \n
\n )\n}\n" }, { "path": "blocks/complex-product-description-01/page.tsx", "type": "registry:page", "target": "app/complex-product-description/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Heart, Package, RefreshCw, Shield, Star, Truck } from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\n\nconst IMAGES = [\n \"https://v3.material-tailwind.com/coat-1.png\",\n \"https://v3.material-tailwind.com/coat-2.png\",\n \"https://v3.material-tailwind.com/coat-3.png\",\n \"https://v3.material-tailwind.com/coat-4.png\",\n]\n\nconst SIZES = [\"XS\", \"S\", \"M\", \"L\", \"XL\"]\n\nconst COLORS = [\n { name: \"Black\", hex: \"#1a1a1a\" },\n { name: \"White\", hex: \"#ffffff\" },\n { name: \"Gray\", hex: \"#e5e7eb\" },\n]\n\nconst FEATURES = [\n { icon: Package, text: \"Premium quality materials\" },\n { icon: Truck, text: \"Free shipping on orders $100+\" },\n { icon: RefreshCw, text: \"30-day return policy\" },\n { icon: Shield, text: \"2-year warranty included\" },\n]\n\nconst ACCORDION_DATA = [\n {\n value: \"one\",\n title: \"Features\",\n desc: \"This premium coat is crafted from weather-resistant fabric with advanced Gore-Tex technology, ensuring you stay dry and comfortable in all conditions. Features include adjustable cuffs, reinforced seams, and breathable lining.\",\n },\n {\n value: \"two\",\n title: \"Product Care\",\n desc: \"Machine wash cold with like colors. Use mild detergent and avoid bleach. Tumble dry on low heat or hang to dry. For best results, store in a cool, dry place and avoid direct sunlight to maintain color and fabric integrity.\",\n },\n {\n value: \"three\",\n title: \"Shipping & Returns\",\n desc: \"Free standard shipping on orders over $100. Express shipping available at checkout. We offer a 30-day return policy with free returns. Items must be unworn, unwashed, and in original packaging with tags attached.\",\n },\n {\n value: \"four\",\n title: \"Warranty\",\n desc: \"All our products come with a comprehensive 2-year warranty covering manufacturing defects. This includes issues with stitching, zippers, and fabric quality. Contact our customer service for warranty claims and support.\",\n },\n]\n\nexport default function ComplexProductDescription01() {\n const [selectedImage, setSelectedImage] = useState(0)\n const [selectedColor, setSelectedColor] = useState(0)\n const [selectedSize, setSelectedSize] = useState(\"M\")\n const [isFavorite, setIsFavorite] = useState(false)\n\n return (\n
\n
\n
\n
\n
\n {IMAGES.map((img, index) => (\n setSelectedImage(index)}\n className={`h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg border-2 transition-all ${\n selectedImage === index\n ? \"border-neutral-900\"\n : \"border-neutral-200 hover:border-neutral-400\"\n }`}\n >\n \n \n ))}\n
\n\n
\n
\n \n
\n
\n
\n\n
\n \n New Arrival\n \n\n

\n Premium Winter Coat\n

\n\n
\n \n $1,490.00\n \n
\n
\n {[...Array(5)].map((_, i) => (\n \n ))}\n
\n (100 reviews)\n
\n
\n\n

\n Experience unparalleled comfort and style with our premium winter\n coat. Meticulously crafted with attention to detail, this coat\n features weather-resistant fabric and a timeless design that\n complements any wardrobe. Perfect for both casual and formal\n occasions.\n

\n\n
\n

\n Color:{\" \"}\n \n {COLORS[selectedColor].name}\n \n

\n
\n {COLORS.map((color, index) => (\n setSelectedColor(index)}\n className={`h-10 w-10 rounded-md border-2 transition-all ${\n selectedColor === index\n ? \"border-neutral-900 ring-2 ring-neutral-900 ring-offset-2\"\n : \"border-neutral-200 hover:border-neutral-400\"\n }`}\n style={{ backgroundColor: color.hex }}\n title={color.name}\n />\n ))}\n
\n
\n\n
\n

\n Size: {selectedSize}\n

\n
\n {SIZES.map((size) => (\n setSelectedSize(size)}\n className={`flex h-10 w-12 items-center justify-center rounded-md border-2 text-sm font-medium transition-all ${\n selectedSize === size\n ? \"border-neutral-900 bg-neutral-900 text-white\"\n : \"border-neutral-200 bg-white text-neutral-900 hover:border-neutral-400\"\n }`}\n >\n {size}\n \n ))}\n
\n
\n\n
\n \n Add to Cart\n \n setIsFavorite(!isFavorite)}\n >\n \n \n
\n\n
\n {FEATURES.map((feature, index) => (\n \n \n {feature.text}\n
\n ))}\n
\n\n \n {ACCORDION_DATA.map(({ value, title, desc }) => (\n \n \n {title}\n \n \n {desc}\n \n \n ))}\n \n
\n
\n \n
\n )\n}\n" }, { "path": "blocks/interactive-product-preview-01/page.tsx", "type": "registry:page", "target": "app/interactive-product-preview/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n Eye,\n Heart,\n Minus,\n Plus,\n ShoppingCart,\n Star,\n Truck,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\n\nexport default function InteractiveProductPreview01() {\n const [quantity, setQuantity] = useState(1)\n const [isFavorite, setIsFavorite] = useState(false)\n\n return (\n
\n
\n \n Room Previewer\n \n

\n Visualize Your Space\n

\n

\n Easily preview furniture, decor, and more in your space, ensuring\n everything fits perfectly and looks just right. It's the ultimate\n tool for hassle-free home customization and design!\n

\n
\n\n
\n
\n \n
\n\n
\n
\n
\n New Arrival\n setIsFavorite(!isFavorite)}\n >\n \n \n
\n\n
\n
\n \n
\n

Elegant Ceramic Vase

\n\n
\n
\n {[1, 2, 3, 4, 5].map((star) => (\n \n ))}\n
\n \n (127 reviews)\n \n
\n\n
\n

$149.90

\n \n $199.90\n \n
\n
\n\n

\n Add a touch of sophistication to your home with our handcrafted\n ceramic vase.\n

\n\n
\n \n \n Free shipping on orders over $100\n \n
\n\n
\n Quantity:\n
\n setQuantity(Math.max(1, quantity - 1))}\n >\n \n \n \n {quantity}\n \n setQuantity(quantity + 1)}\n >\n \n \n
\n
\n\n
\n \n \n
\n
\n
\n\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/order-details-01/page.tsx", "type": "registry:page", "target": "app/order-details/page.tsx", "content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport {\n Archive,\n CheckCircle,\n Clock,\n FileText,\n Home,\n Mail,\n MapPin,\n Package,\n Phone,\n Truck,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport { Separator } from \"@/components/ui/separator\"\n\nconst OPTIONS = [\n { title: \"Subtotal\", value: \"$1,780.00\" },\n { title: \"Shipping estimate\", value: \"$0\" },\n { title: \"Tax estimate\", value: \"$5\" },\n]\n\nexport default function OrderDetails01() {\n const [step, setStep] = useState(\"3\")\n const [isVertical, setIsVertical] = useState(false)\n\n useEffect(() => {\n const handleResize = () => {\n setIsVertical(window.innerWidth <= 768)\n }\n handleResize()\n window.addEventListener(\"resize\", handleResize)\n return () => window.removeEventListener(\"resize\", handleResize)\n }, [])\n\n return (\n
\n
\n
\n
\n
\n

Order #1234

\n \n In Transit\n \n
\n
\n
\n \n \n Placed on April 1, 2024\n \n
\n
\n \n 1 item\n
\n
\n
\n \n
\n\n \n \n
\n
\n \n
\n
\n
\n

Premium Suit

\n

$790

\n

\n The time is now for it to be okay to be great. People in\n this world shun people for being great.\n

\n
\n
\n Size: M\n Qty: 1\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n

Delivery Address

\n
\n

\n 362 Ridgewood Avenue\n
\n Alaska 99669, USA\n

\n
\n\n
\n
\n
\n \n
\n

Shipping Updates

\n
\n
\n

\n \n michael@email.com\n

\n

\n \n (307) 682-8835\n

\n
\n \n
\n
\n
\n\n \n
\n
\n

Order Timeline

\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n

Order Placed

\n \n Complete\n \n
\n

\n Your order was placed on April 1, 2024\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n
\n
\n
\n

Order Confirmed

\n \n Complete\n \n
\n

\n Your order has been confirmed on April 2, 2024\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n
\n
\n
\n

Order Shipped

\n \n In Progress\n \n
\n

\n Your order has been shipped on April 3, 2024\n

\n
\n
\n\n
\n
\n
\n \n
\n
\n
\n
\n

\n Order Delivered\n

\n \n Pending\n \n
\n

\n Expected delivery on April 6, 2024\n

\n
\n
\n
\n
\n\n \n\n
\n
\n

Order Summary

\n
\n {OPTIONS.map(({ title, value }) => (\n
\n {title}\n {value}\n
\n ))}\n
\n \n
\n Order Total\n $1,785.00\n
\n\n
\n \n
\n

Track Your Order

\n

\n Estimated delivery: April 6, 2024\n

\n
\n
\n
\n
\n
\n \n \n
\n
\n )\n}\n" }, { "path": "blocks/product-details-01/page.tsx", "type": "registry:page", "target": "app/product-details/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { ChevronLeft, ChevronRight, Heart } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst IMAGES = [\n \"https://v3.material-tailwind.com/coat-1.png\",\n \"https://v3.material-tailwind.com/coat-2.png\",\n \"https://v3.material-tailwind.com/coat-3.png\",\n]\n\nconst SIZES = [\"XS\", \"S\", \"M\", \"L\"]\n\nexport default function ProductDetails01() {\n const [selectedSize, setSelectedSize] = useState(\"S\")\n const [currentIndex, setCurrentIndex] = useState(0)\n\n const nextSlide = () => {\n setCurrentIndex((prev) => (prev + 1) % IMAGES.length)\n }\n\n const prevSlide = () => {\n setCurrentIndex((prev) => (prev - 1 + IMAGES.length) % IMAGES.length)\n }\n\n return (\n
\n
\n \n
\n
\n \n \n
\n \n
\n \n \n \n \n \n \n
\n
\n
\n
\n

Pink Blouse

\n

$1,290

\n
\n
\n {[1, 2, 3, 4].map((star) => (\n \n \n \n ))}\n \n \n \n
\n 100 Reviews\n
\n

\n There's nothing I really wanted to do in life that I\n wasn't able to get good at. That's my skill. I'm\n not really specifically talented at anything except for the\n ability to learn.\n

\n

\n Color\n

\n
\n
\n
\n
\n
\n

\n Size\n

\n
\n {SIZES.map((size) => (\n setSelectedSize(size)}\n variant={size === selectedSize ? \"default\" : \"outline\"}\n >\n {size}\n \n ))}\n
\n
\n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/product-listing-filters-01/page.tsx", "type": "registry:page", "target": "app/product-listing-filters/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Heart } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst FILTERS = [\n {\n id: \"categories\",\n label: \"Categories\",\n options: [\"All\", \"Shirts\", \"Pants\", \"Sweaters\", \"Jackets\"],\n },\n {\n id: \"size\",\n label: \"Size\",\n options: [\"All Sizes\", \"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\"],\n },\n {\n id: \"material\",\n label: \"Material\",\n options: [\"All Materials\", \"Cotton\", \"Cashmere\", \"Wool\", \"Silk\", \"Linen\"],\n },\n {\n id: \"color\",\n label: \"Color\",\n options: [\"All Colors\", \"Black\", \"Blue\", \"Gray\", \"Brown\", \"White\", \"Navy\"],\n },\n {\n id: \"pattern\",\n label: \"Pattern\",\n options: [\"All Patterns\", \"Solid\", \"Striped\", \"Cable-knit\", \"Printed\"],\n },\n]\n\nconst PRODUCTS = [\n {\n id: 1,\n image:\n \"https://images.unsplash.com/photo-1574015974293-817f0ebebb74?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=973\",\n brand: \"Zegna\",\n name: \"Cable-knit cashmere cardigan\",\n price: \"€3,450\",\n badge: \"Exclusive\",\n },\n {\n id: 2,\n image:\n \"https://images.unsplash.com/photo-1559745482-57bfa9ca5a8a?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1481\",\n brand: \"Zegna\",\n name: \"Cotton and cashmere shirt\",\n price: \"€675\",\n badge: null,\n },\n {\n id: 3,\n image:\n \"https://images.unsplash.com/photo-1737608734653-d1eaad541d46?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1027\",\n brand: \"Zegna\",\n name: \"Wool straight pants\",\n price: \"€1,450\",\n badge: \"Exclusive\",\n },\n {\n id: 4,\n image:\n \"https://images.unsplash.com/photo-1661327930345-9c6714b603b3?auto=format&fit=crop&q=80&w=400&h=400\",\n brand: \"Zegna\",\n name: \"Cashmere sweater\",\n price: \"€1,950\",\n badge: \"New Arrival\",\n },\n]\n\nexport default function ProductListingFilters01() {\n const [favorites, setFavorites] = useState([])\n const [selectedFilters, setSelectedFilters] = useState<\n Record\n >({})\n\n const toggleFavorite = (productId: number) => {\n setFavorites((prev) =>\n prev.includes(productId)\n ? prev.filter((id) => id !== productId)\n : [...prev, productId]\n )\n }\n\n return (\n
\n
\n
\n
\n {FILTERS.map((filter) => (\n \n setSelectedFilters((prev) => ({\n ...prev,\n [filter.id]: value,\n }))\n }\n >\n \n \n \n \n {filter.options.map((option) => (\n \n {option}\n \n ))}\n \n \n ))}\n
\n
\n 462 Products\n \n
\n
\n\n
\n {PRODUCTS.map((product) => (\n \n {product.badge && (\n \n {product.badge}\n \n )}\n toggleFavorite(product.id)}\n className=\"absolute top-3 right-3 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-white/90 backdrop-blur-sm transition-colors hover:bg-white dark:bg-gray-900/90 dark:hover:bg-gray-900\"\n >\n \n \n\n
\n \n
\n\n
\n
\n
\n

{product.brand}

\n

\n {product.name}\n

\n
\n
\n

{product.price}

\n
\n
\n ))}\n
\n \n
\n )\n}\n" }, { "path": "blocks/ecommerce-sections-01/page.tsx", "type": "registry:page", "target": "app/ecommerce-sections/page.tsx", "content": "\"use client\"\n\nimport { useEffect, useRef, useState } from \"react\"\nimport { Pause, Play, ShoppingBag, Shuffle } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst PRODUCTS = [\n {\n id: \"card-1\",\n media: {\n src: \"https://images.unsplash.com/photo-1595777457583-95e059d581b8?q=80&w=400&h=400&auto=format&fit=crop\",\n alt: \"Satin Wrap Dress product thumbnail\",\n },\n eyebrow: \"Maison Aurore\",\n title: \"Satin Wrap Dress\",\n description: \"Fluid silhouette with tie waist and soft sheen.\",\n price: \"$215.00\",\n },\n {\n id: \"card-2\",\n media: {\n src: \"https://images.unsplash.com/photo-1591369822096-ffd140ec948f?q=80&w=400&h=400&auto=format&fit=crop\",\n alt: \"Structured Blazer product thumbnail\",\n },\n eyebrow: \"Atelier No. 9\",\n title: \"Structured Blazer\",\n description: \"Sharp shoulders, single-breasted, polished finish.\",\n price: \"$329.00\",\n },\n {\n id: \"card-3\",\n media: {\n src: \"https://images.unsplash.com/photo-1543163521-1bf539c55dd2?q=80&w=400&h=400&auto=format&fit=crop\",\n alt: \"Chunky Chelsea Boots product thumbnail\",\n },\n eyebrow: \"Linea Forte\",\n title: \"Chunky Chelsea Boots\",\n description: \"Elevated lug sole with elastic side panels.\",\n price: \"From $180.00\",\n },\n]\n\nexport default function EcommerceSectionsBlock() {\n const [isPlaying, setIsPlaying] = useState(true)\n const playerRef = useRef(null)\n const [playerReady, setPlayerReady] = useState(false)\n\n useEffect(() => {\n const tag = document.createElement(\"script\")\n tag.src = \"https://www.youtube.com/iframe_api\"\n const firstScriptTag = document.getElementsByTagName(\"script\")[0]\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag)\n ;(window as any).onYouTubeIframeAPIReady = () => {\n playerRef.current = new (window as any).YT.Player(\"youtube-player\", {\n videoId: \"YCIuEU2y8XI\",\n playerVars: {\n autoplay: 1,\n mute: 1,\n loop: 1,\n playlist: \"YCIuEU2y8XI\",\n controls: 0,\n showinfo: 0,\n modestbranding: 1,\n playsinline: 1,\n },\n events: {\n onReady: () => {\n setPlayerReady(true)\n },\n },\n })\n }\n\n return () => {\n if (playerRef.current) {\n playerRef.current.destroy()\n }\n }\n }, [])\n\n const togglePlay = () => {\n if (playerRef.current && playerReady) {\n if (isPlaying) {\n playerRef.current.pauseVideo()\n } else {\n playerRef.current.playVideo()\n }\n setIsPlaying(!isPlaying)\n }\n }\n\n return (\n
\n
\n \n\n
\n\n \n {isPlaying ? (\n \n ) : (\n \n )}\n \n\n
\n
\n {PRODUCTS.map((product) => (\n \n
\n \n
\n\n
\n

\n {product.eyebrow}\n

\n

\n {product.title}\n

\n

{product.price}

\n
\n\n
\n \n \n \n \n \n \n
\n
\n ))}\n
\n\n
\n \n VIEW ALL PRODUCTS\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/ecommerce-sections-02/page.tsx", "type": "registry:page", "target": "app/ecommerce-sections/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n ChevronDown,\n MapPin,\n Package,\n Ruler,\n ShoppingBag,\n Star,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\n\nexport default function EcommerceSections02() {\n const [selectedImage, setSelectedImage] = useState(0)\n const [selectedColor, setSelectedColor] = useState(1)\n const [isInfoOpen, setIsInfoOpen] = useState(false)\n\n const thumbnails = [\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Bag+1`,\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Bag+2`,\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Detail`,\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Inside`,\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Model`,\n `${process.env.NEXT_PUBLIC_ASSET_PREFIX}/placeholder.svg?height=80&width=80&text=Lifestyle`,\n ]\n\n const colors = [\n { name: \"Black\", hex: \"#1a1a1a\" },\n { name: \"Cream\", hex: \"#f5f0e8\" },\n { name: \"Forest Green\", hex: \"#7d9488\" },\n { name: \"Gray\", hex: \"#9ca3af\" },\n { name: \"Navy Blue\", hex: \"#0f172a\" },\n { name: \"Brown\", hex: \"#a0522d\" },\n ]\n\n const features = [\n { icon: ShoppingBag, text: \"Crossbody style\" },\n { icon: Package, text: \"Premium leather\" },\n { icon: Ruler, text: \"Adjustable strap\" },\n { icon: MapPin, text: \"Crafted in France\" },\n ]\n\n return (\n
\n
\n
\n
\n {thumbnails.map((thumb, index) => (\n setSelectedImage(index)}\n className={`h-20 w-20 overflow-hidden rounded-lg border-2 transition-all ${\n selectedImage === index\n ? \"border-neutral-900\"\n : \"border-neutral-200 hover:border-neutral-400\"\n }`}\n >\n \n \n ))}\n
\n\n
\n
\n
\n \n
\n
\n {thumbnails.slice(0, 4).map((thumb, index) => (\n setSelectedImage(index)}\n className={`h-16 w-16 overflow-hidden rounded-lg border-2 ${\n selectedImage === index\n ? \"border-neutral-900\"\n : \"border-neutral-200\"\n }`}\n >\n \n \n ))}\n
\n
\n
\n\n
\n \n Trending Now\n \n\n

\n Artisan Leather Crossbody\n

\n\n
\n \n $385.00\n \n
\n
\n {[...Array(5)].map((_, i) => (\n \n ))}\n
\n (4.7)\n
\n
\n\n
\n

\n Color:{\" \"}\n \n {colors[selectedColor].name}\n \n

\n
\n {colors.map((color, index) => (\n setSelectedColor(index)}\n className={`h-10 w-10 rounded-md border-2 transition-all ${\n selectedColor === index\n ? \"border-neutral-900 ring-2 ring-neutral-900 ring-offset-2\"\n : \"border-neutral-200 hover:border-neutral-400\"\n }`}\n style={{ backgroundColor: color.hex }}\n title={color.name}\n />\n ))}\n
\n
\n\n

\n Elegant crossbody bag crafted from premium vegetable-tanned\n leather with a minimalist silhouette. Features a secure magnetic\n clasp closure, interior zip compartment, and an adjustable\n shoulder strap for versatile wear.\n

\n\n

\n This is a demo store. To buy this product, visit{\" \"}\n \n Maison Atelier\n {\" \"}\n official store.\n

\n\n
\n \n Add to Cart\n \n \n Buy it Now\n \n
\n\n
\n {features.map((feature, index) => (\n \n \n {feature.text}\n
\n ))}\n
\n\n
\n setIsInfoOpen(!isInfoOpen)}\n className=\"flex w-full items-center justify-between py-4 text-sm font-medium text-neutral-900 hover:text-neutral-600\"\n >\n More Information\n \n \n {isInfoOpen && (\n
\n

\n Materials & Care: This bag is made from\n 100% full-grain vegetable-tanned leather that develops a\n beautiful patina over time. Clean with a soft, dry cloth and\n condition regularly with leather cream.\n

\n

\n Dimensions: 9.5\" W x 7\" H x 3\" D. Strap\n drop adjustable from 20\" to 24\". Weight: 1.2 lbs.\n

\n

\n Shipping & Returns: Free standard shipping\n on orders over $200. 30-day return policy with original\n receipt and tags attached.\n

\n
\n )}\n
\n
\n
\n
\n \n )\n}\n" }, { "path": "blocks/simple-faq-01/page.tsx", "type": "registry:page", "target": "app/simple-faq/page.tsx", "content": "export default function SimpleFaq01() {\n return (\n
\n
\n
\n

\n Frequently asked questions\n

\n

\n A lot of people don't appreciate the moment until it's\n passed. I'm not trying my hardest, and I'm not trying to\n do\n

\n
\n
\n

\n How do I order?\n

\n

\n We're not always in the position that we want to be at.\n We're constantly growing. We're constantly making\n mistakes. We're constantly trying to express ourselves and\n actualize our dreams. If you have the opportunity to play this game\n of life you need to appreciate every moment. A lot of people\n don't appreciate the moment until it's passed.\n

\n
\n
\n

\n How can i make the payment?\n

\n

\n It really matters and then like it really doesn't matter. What\n matters is the people who are sparked by it. And the people who are\n like offended by it, it doesn't matter. Because it's about\n motivating the doers. Because I'm here to follow my dreams and\n inspire other people to follow their dreams, too. We're not\n always in the position that we want to be at. We're constantly\n growing. We're constantly making mistakes. We're\n constantly trying to express ourselves and actualize our dreams. If\n you have the opportunity to play this game of life you need to\n appreciate every moment. A lot of people don't appreciate the\n moment until it's passed.\n

\n
\n
\n
\n )\n}\n" }, { "path": "blocks/faqs-list-01/page.tsx", "type": "registry:page", "target": "app/faqs-list/page.tsx", "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\n\nconst DATA = [\n {\n value: \"one\",\n title: \"How do I order?\",\n desc: \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n {\n value: \"two\",\n title: \"How can i make the payment?\",\n desc: \"It really matters and then like it really doesn't matter. What matters is the people who are sparked by it. And the people who are like offended by it, it doesn't matter. Because it's about motivating the doers. Because I'm here to follow my dreams and inspire other people to follow their dreams, too. We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n {\n value: \"three\",\n title: \"How much time does it take to receive the order?\",\n desc: \"The time is now for it to be okay to be great. People in this world shun people for being great. For being a bright color. For standing out. But the time is now to be okay to be the greatest you. Would you believe in what you believe in, if you were the only one who believed it? If everything I did failed - which it doesn't, it actually succeeds - just the fact that I'm willing to fail is an inspiration. People are so scared to lose that they don't even try. Like, one thing people can't say is that I'm not trying, and I'm not trying my hardest, and I'm not trying to do the best way I know how.\",\n },\n {\n value: \"four\",\n title: \"Can I resell the products?\",\n desc: \"I always felt like I could do anything. That's the main thing people are controlled by! Thoughts- their perception of themselves! They're slowed down by their perception of themselves. If you're taught you can't do anything, you won't do anything. I was taught I could do everything. If everything I did failed - which it doesn't, it actually succeeds - just the fact that I'm willing to fail is an inspiration. People are so scared to lose that they don't even try. Like, one thing people can't say is that I'm not trying, and I'm not trying my hardest, and I'm not trying to do the best way I know how.\",\n },\n {\n value: \"five\",\n title: \"Where do I find the shipping details?\",\n desc: \"There's nothing I really wanted to do in life that I wasn't able to get good at. That's my skill. I'm not really specifically talented at anything except for the ability to learn. That's what I do. That's what I'm here for. Don't be afraid to be wrong because you can't learn anything from a compliment. I always felt like I could do anything. That's the main thing people are controlled by! Thoughts- their perception of themselves! They're slowed down by their perception of themselves. If you're taught you can't do anything, you won't do anything. I was taught I could do everything.\",\n },\n]\n\nexport default function FaqsList01() {\n return (\n
\n
\n
\n

\n Frequently asked questions\n

\n

\n A lot of people don't appreciate the moment until it's\n passed. I'm not trying my hardest, and I'm not trying to\n do\n

\n
\n \n {DATA.map(({ title, desc, value }, key) => (\n \n \n

{title}

\n
\n \n {desc}\n \n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/faq-left-title-01/page.tsx", "type": "registry:page", "target": "app/faq-left-title/page.tsx", "content": "import { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n title: \"How do I order?\",\n desc: \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n {\n title: \"How can i make the payment?\",\n desc: \"It really matters and then like it really doesn't matter. What matters is the people who are sparked by it. And the people who are like offended by it, it doesn't matter. Because it's about motivating the doers. Because I'm here to follow my dreams and inspire other people to follow their dreams, too. We're not always in the position that we want to be at.\",\n },\n {\n title: \"How much time does it take to receive the order?\",\n desc: \"The time is now for it to be okay to be great. People in this world shun people for being great. For being a bright color. For standing out. But the time is now to be okay to be the greatest you. Would you believe in what you believe in, if you were the only one who believed it?\",\n },\n {\n title: \"Can I resell the products?\",\n desc: \"I always felt like I could do anything. That's the main thing people are controlled by! Thoughts- their perception of themselves! They're slowed down by their perception of themselves. If you're taught you can't do anything, you won't do anything. I was taught I could do everything.\",\n },\n]\n\nexport default function FaqLeftTitle01() {\n return (\n
\n
\n
\n

\n Frequently asked questions\n

\n

\n A lot of people don't appreciate the moment until it's\n passed. I'm not trying my hardest, and I'm not trying to\n do\n

\n
\n
\n {DATA.map(({ title, desc }, key) => (\n \n \n

{title}

\n
\n \n

{desc}

\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/faqs-grid-cta-01/page.tsx", "type": "registry:page", "target": "app/faqs-grid-cta/page.tsx", "content": "import { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n title: \"How do I order?\",\n desc: \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n {\n title: \"How can i make the payment?\",\n desc: \"It really matters and then like it really doesn't matter. What matters is the people who are sparked by it. And the people who are like offended by it, it doesn't matter. Because it's about motivating the doers. Because I'm here to follow my dreams and inspire other people to follow their dreams, too. We're not always in the position that we want to be at.\",\n },\n {\n title: \"How much time does it take to receive the order?\",\n desc: \"The time is now for it to be okay to be great. People in this world shun people for being great. For being a bright color. For standing out. But the time is now to be okay to be the greatest you. Would you believe in what you believe in, if you were the only one who believed it?\",\n },\n {\n title: \"Can I resell the products?\",\n desc: \"I always felt like I could do anything. That's the main thing people are controlled by! Thoughts- their perception of themselves! They're slowed down by their perception of themselves. If you're taught you can't do anything, you won't do anything. I was taught I could do everything.\",\n },\n {\n title: \"Where do I find the shipping details?\",\n desc: \"There's nothing I really wanted to do in life that I wasn't able to get good at. That's my skill. I'm not really specifically talented at anything except for the ability to learn. That's what I do. That's what I'm here for. Don't be afraid to be wrong because you can't learn anything from a compliment.\",\n },\n {\n title: \"How do I order?\",\n desc: \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n]\n\nexport default function FaqsGridCta01() {\n return (\n
\n
\n
\n

\n Frequently asked questions\n

\n

\n A lot of people don't appreciate the moment until it's\n passed. I'm not trying my hardest, and I'm not trying to\n do\n

\n
\n
\n {DATA.map(({ title, desc }, key) => (\n \n \n

{title}

\n
\n \n

{desc}

\n
\n
\n ))}\n
\n
\n

Need more help?

\n

\n Send us an email with more details about your specific needs.\n

\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/faqs-cards-icons-01/page.tsx", "type": "registry:page", "target": "app/faqs-cards-icons/page.tsx", "content": "import { CreditCard, ShoppingCart, Users } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n icon: ShoppingCart,\n title: \"How do I order?\",\n desc: \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams. If you have the opportunity to play this game of life you need to appreciate every moment. A lot of people don't appreciate the moment until it's passed.\",\n },\n {\n icon: CreditCard,\n title: \"How can i make the payment?\",\n desc: \"It really matters and then like it really doesn't matter. What matters is the people who are sparked by it. And the people who are like offended by it, it doesn't matter. Because it's about motivating the doers. Because I'm here to follow my dreams and inspire other people to follow their dreams, too. We're not always in the position that we want to be at.\",\n },\n {\n icon: Users,\n title: \"How much time does it take to receive the order?\",\n desc: \"The time is now for it to be okay to be great. People in this world shun people for being great. For being a bright color. For standing out. But the time is now to be okay to be the greatest you. Would you believe in what you believe in, if you were the only one who believed it?\",\n },\n]\n\nexport default function FaqsCardsIcons01() {\n return (\n
\n
\n
\n

\n Frequently asked questions\n

\n

\n A lot of people don't appreciate the moment until it's\n passed. I'm not trying my hardest, and I'm not trying to\n do\n

\n
\n
\n {DATA.map(({ icon: Icon, title, desc }, key) => (\n \n \n
\n \n
\n

{title}

\n
\n \n

{desc}

\n
\n
\n ))}\n
\n
\n

Need more help?

\n

\n Send us an email with more details about your specific needs.\n

\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/faqs-grid-01/page.tsx", "type": "registry:page", "target": "app/faqs-grid/page.tsx", "content": "import {\n CreditCard,\n Package,\n RefreshCw,\n ShoppingCart,\n Store,\n Truck,\n} from \"lucide-react\"\n\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n icon: ShoppingCart,\n title: \"How do I order?\",\n desc: \"Browse our collection, add items to your cart, and proceed to checkout. We accept multiple payment methods including credit cards, PayPal, and digital wallets for your convenience.\",\n },\n {\n icon: CreditCard,\n title: \"How can I make the payment?\",\n desc: \"We accept all major credit cards, debit cards, PayPal, Apple Pay, and Google Pay. All transactions are secured with industry-standard encryption to protect your information.\",\n },\n {\n icon: Truck,\n title: \"How much time does it take to receive the order?\",\n desc: \"Standard shipping takes 3-5 business days. Express shipping is available for 1-2 day delivery. International orders typically arrive within 7-14 business days depending on your location.\",\n },\n {\n icon: Store,\n title: \"Can I resell the products?\",\n desc: \"Products purchased for personal use cannot be resold without authorization. For wholesale or reseller inquiries, please contact our business development team at business@example.com.\",\n },\n {\n icon: Package,\n title: \"Where do I find the shipping details?\",\n desc: \"Shipping information is available in your account under 'Order History'. You'll receive tracking details via email once your order ships, allowing you to monitor delivery progress.\",\n },\n {\n icon: RefreshCw,\n title: \"What is your return policy?\",\n desc: \"We offer a 30-day return policy on most items. Products must be in original condition with tags attached. Refunds are processed within 5-7 business days after we receive your return.\",\n },\n]\n\nexport default function FaqsGrid01() {\n return (\n
\n
\n
\n

\n Frequently Asked Questions\n

\n

\n Find answers to common questions about our products, shipping, and\n policies. Can't find what you're looking for? Contact our support\n team.\n

\n
\n
\n {DATA.map(({ icon: Icon, title, desc }, key) => (\n \n \n
\n \n
\n

{title}

\n
\n \n

{desc}

\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-01/page.tsx", "type": "registry:page", "target": "app/contact-sections-01/page.tsx", "content": "\"use client\"\n\nimport { Mail, Phone, Ticket } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst OPTIONS = [\n {\n icon: Phone,\n info: \"+1(424) 535 3523\",\n },\n {\n icon: Mail,\n info: \"hello@mail.com\",\n },\n {\n icon: Ticket,\n info: \"Open Support Ticket\",\n },\n]\n\nexport default function ContactSections01() {\n return (\n
\n
\n \n

Contact us

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n You agree to your friendly{\" \"}\n \n Privacy Policy\n \n \n
\n \n
\n
\n
\n

Get in Touch

\n

\n You need more information? Check what other persons are saying about\n our product. They are very happy with their purchase.\n

\n
\n {OPTIONS.map(({ icon: Icon, info }, key) => (\n
\n \n {info}\n
\n ))}\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-02/page.tsx", "type": "registry:page", "target": "app/contact-sections-02/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function ContactSections02() {\n return (\n
\n
\n
\n

Contact us

\n

\n Whether you have questions or you would just like to say hello,\n contact us.\n

\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n You agree to your friendly{\" \"}\n \n Privacy Policy\n \n \n
\n \n
\n
\n \n
\n )\n}\n" }, { "path": "blocks/contact-sections-03/page.tsx", "type": "registry:page", "target": "app/contact-sections-03/page.tsx", "content": "\"use client\"\n\nimport {\n Dribbble,\n Facebook,\n Linkedin,\n Mail,\n Phone,\n Ticket,\n Twitter,\n} from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst DATA = [\n {\n icon: Phone,\n info: \"+1(424) 535 3523\",\n },\n {\n icon: Mail,\n info: \"hello@mail.com\",\n },\n {\n icon: Ticket,\n info: \"Open Support Ticket\",\n },\n]\n\nexport default function ContactSections03() {\n return (\n
\n
\n
\n

Contact Us

\n

\n Any questions or remarks? Just write us a message!\n

\n
\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
\n

\n Contact Information\n

\n

\n Fill up the form and our Team will get back to you within 24\n hours.\n

\n
\n {DATA.map(({ icon: Icon, info }, key) => (\n
\n
\n \n
\n {info}\n
\n ))}\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-04/page.tsx", "type": "registry:page", "target": "app/contact-sections-04/page.tsx", "content": "\"use client\"\n\nimport { Mail, MapPin, Phone, User } from \"lucide-react\"\n\nconst OPTIONS = [\n {\n icon: MapPin,\n title: \"Address\",\n description: \"12124 First Street, nr 54\",\n },\n {\n icon: Mail,\n title: \"Email\",\n description: \"hello@email.com\",\n },\n {\n icon: Phone,\n title: \"Phone\",\n description: \"+1 (424) 535-3523\",\n },\n {\n icon: User,\n title: \"Contact\",\n description: \"Andrew Samian\",\n },\n]\n\nexport default function ContactSections04() {\n return (\n
\n \n
\n
\n

Got a Question?

\n

\n We'd like to talk more about what you need\n

\n
\n {OPTIONS.map(({ icon: Icon, title, description }, key) => (\n \n
\n \n
\n

{title}

\n

{description}

\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-05/page.tsx", "type": "registry:page", "target": "app/contact-sections-05/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst OPTIONS = [\"General Inquiry\", \"Product Support\"]\n\nexport default function ContactSections05() {\n const [selectedOption, setSelectedOption] = useState(\"\")\n\n return (\n
\n
\n
\n Customer Care\n

\n We're Here to Help\n

\n

\n Whether it's a question about our services, a request for\n technical assistance, or suggestions for improvement, our team is\n eager to hear from you.\n

\n
\n
\n \n \n
\n \n
\n {OPTIONS.map((option) => (\n \n setSelectedOption((cur) => (cur === option ? \"\" : option))\n }\n >\n {option}\n \n ))}\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-06/page.tsx", "type": "registry:page", "target": "app/contact-sections-06/page.tsx", "content": "\"use client\"\n\nimport { Mail, MapPin, Phone } from \"lucide-react\"\n\nconst OPTIONS = [\n {\n icon: MapPin,\n title: \"Address\",\n subTitle: \"Find us at the office\",\n description: \"12124 First Street, nr 54\",\n },\n {\n icon: Mail,\n title: \"Email\",\n subTitle: \"Send us your feedback\",\n description: \"hello@email.com\",\n },\n {\n icon: Phone,\n title: \"Phone\",\n subTitle: \"Give us a ring\",\n description: \"+1 (424) 535-3523\",\n },\n]\n\nexport default function ContactSections06() {\n return (\n
\n
\n
\n \n Contact Us\n \n

\n Got a Question?\n

\n

\n We'd like to talk more about what you need\n

\n
\n
\n {OPTIONS.map(({ icon: Icon, title, subTitle, description }, key) => (\n
\n
\n \n
\n

{title}

\n

{subTitle}

\n

{description}

\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-07/page.tsx", "type": "registry:page", "target": "app/contact-sections-07/page.tsx", "content": "\"use client\"\n\nimport { Mail, Phone } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst DATA = [\n {\n icon: Mail,\n title: \"Find us at the office\",\n options: [\"Bld Mihail Kogalniceanu, nr. 8,\", \"7652 Bucharest,\", \"Romania\"],\n },\n {\n icon: Phone,\n title: \"+1(424) 535 3523\",\n options: [\"Michael Jordan\", \"+40 762 321 762\", \"Mon - Fri, 8:00-22:00\"],\n },\n]\n\nexport default function ContactSections07() {\n return (\n
\n
\n \n

Contact us

\n

\n We'd love to hear from you.\n

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n You agree to your friendly{\" \"}\n \n Privacy Policy\n \n \n
\n \n
\n
\n
\n {DATA.map(({ icon: Icon, title, options }, key) => (\n
\n
\n \n
\n
\n

{title}

\n {options.map((option, idx) => (\n

\n {option}\n

\n ))}\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-08/page.tsx", "type": "registry:page", "target": "app/contact-sections-08/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport {\n Dribbble,\n Facebook,\n Linkedin,\n Mail,\n Phone,\n Ticket,\n Twitter,\n} from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst DATA = [\n {\n icon: Phone,\n info: \"+1(424) 535 3523\",\n },\n {\n icon: Mail,\n info: \"hello@mail.com\",\n },\n {\n icon: Ticket,\n info: \"Open Support Ticket\",\n },\n]\n\nconst OPTIONS = [\"Design\", \"Development\", \"Support\", \"Other\"]\n\nexport default function ContactSections08() {\n const [selectedOption, setSelectedOption] = useState(\"\")\n\n return (\n
\n
\n
\n

Contact Us

\n

\n Any questions or remarks? Just write us a message!\n

\n
\n \n
\n
\n

\n Contact Information\n

\n

\n Fill up the form and our Team will get back to you within 24\n hours.\n

\n {DATA.map(({ icon: Icon, info }, key) => (\n
\n \n {info}\n
\n ))}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n {OPTIONS.map((option) => (\n
\n \n \n {option}\n \n
\n ))}\n
\n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-09/page.tsx", "type": "registry:page", "target": "app/contact-sections-09/page.tsx", "content": "\"use client\"\n\nimport { Mail, Phone } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst DATA = [\n {\n icon: Mail,\n title: \"Find us at the office\",\n options: [\"Bld Mihail Kogalniceanu, nr. 8,\", \"7652 Bucharest,\", \"Romania\"],\n },\n {\n icon: Phone,\n title: \"+1(424) 535 3523\",\n options: [\"Michael Jordan\", \"+40 762 321 762\", \"Mon - Fri, 8:00-22:00\"],\n },\n]\n\nexport default function ContactSections09() {\n return (\n
\n
\n
\n

Get in Touch

\n

\n You need more information? Check what other persons are saying about\n our product. They are very happy with their purchase.\n

\n {DATA.map(({ icon: Icon, title, options }, key) => (\n
\n
\n \n

{title}

\n
\n
\n {options.map((option, idx) => (\n

\n {option}\n

\n ))}\n
\n
\n ))}\n
\n \n

Contact us

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n You agree to your friendly{\" \"}\n \n Privacy Policy\n \n \n
\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-10/page.tsx", "type": "registry:page", "target": "app/contact-sections-10/page.tsx", "content": "\"use client\"\n\nimport { Mail, MapPin, Phone } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst OPTIONS = [\n {\n icon: MapPin,\n info: \"12124 First Street, nr 54\",\n },\n {\n icon: Phone,\n info: \"+1(424) 535 3523\",\n },\n {\n icon: Mail,\n info: \"hello@mail.com\",\n },\n]\n\nexport default function ContactSections10() {\n return (\n
\n
\n

Contact Us

\n
\n \n

Send us a message

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n

Get in touch

\n

\n We're here to help and answer any question you might have.\n We look forward to hearing from you.\n

\n
\n
\n {OPTIONS.map(({ icon: Icon, info }, key) => (\n
\n
\n \n
\n
\n

{info}

\n
\n
\n ))}\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-11/page.tsx", "type": "registry:page", "target": "app/contact-sections-11/page.tsx", "content": "\"use client\"\n\nimport { Mail, Phone } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function ContactSections11() {\n return (\n
\n
\n
\n

Get In Touch

\n

\n Have a question or want to work together? Leave your details and\n we'll get back to you as soon as possible.\n

\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n \n
\n
\n \n

+1 (424) 535-3523

\n
\n
\n \n

hello@mail.com

\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-12/page.tsx", "type": "registry:page", "target": "app/contact-sections-12/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function ContactSections12() {\n return (\n
\n \n
\n
\n
\n

Let's Talk

\n

\n Fill out the form below and we'll be in touch shortly.\n

\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-13/page.tsx", "type": "registry:page", "target": "app/contact-sections-13/page.tsx", "content": "\"use client\"\n\nimport { Clock, Mail, MapPin, Phone } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst CONTACT_INFO = [\n {\n icon: MapPin,\n title: \"Visit us\",\n info: \"123 Main Street, New York, NY 10001\",\n },\n {\n icon: Phone,\n title: \"Call us\",\n info: \"+1 (424) 535-3523\",\n },\n {\n icon: Mail,\n title: \"Email us\",\n info: \"hello@mail.com\",\n },\n {\n icon: Clock,\n title: \"Working hours\",\n info: \"Mon - Fri, 9:00 AM - 6:00 PM\",\n },\n]\n\nexport default function ContactSections13() {\n return (\n
\n
\n
\n

Contact Information

\n

\n We're here to answer any questions you may have about our services.\n Reach out to us and we'll respond as soon as we can.\n

\n
\n
\n {CONTACT_INFO.map(({ icon: Icon, title, info }, key) => (\n \n
\n \n
\n

{title}

\n

{info}

\n
\n ))}\n
\n \n

Send us a message

\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-14/page.tsx", "type": "registry:page", "target": "app/contact-sections-14/page.tsx", "content": "\"use client\"\n\nimport { Send } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function ContactSections14() {\n return (\n
\n
\n
\n \n GET IN TOUCH\n \n

\n We'd Love to Hear From You\n

\n

\n Whether you have a question about features, pricing, or anything\n else, our team is ready to answer all your questions.\n

\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/contact-sections-15/page.tsx", "type": "registry:page", "target": "app/contact-sections-15/page.tsx", "content": "\"use client\"\n\nimport { FileText, Headphones, MessageSquare } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nconst CONTACT_OPTIONS = [\n {\n icon: MessageSquare,\n title: \"Chat with Sales\",\n description: \"Speak to our sales team\",\n action: \"Start Chat\",\n },\n {\n icon: Headphones,\n title: \"Get Support\",\n description: \"We're here to help\",\n action: \"Contact Support\",\n },\n {\n icon: FileText,\n title: \"Documentation\",\n description: \"Browse our docs\",\n action: \"View Docs\",\n },\n]\n\nexport default function ContactSections15() {\n return (\n
\n
\n
\n
\n

\n Let's start a conversation\n

\n

\n We're always happy to help with any questions you might have. Get\n in touch with us and we'll respond as soon as possible.\n

\n
\n {CONTACT_OPTIONS.map(\n ({ icon: Icon, title, description, action }, key) => (\n
\n
\n \n
\n
\n

{title}

\n

\n {description}\n

\n \n
\n
\n )\n )}\n
\n
\n \n

Quick Contact

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/web3-01/page.tsx", "type": "registry:page", "target": "app/web3-01/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n img: \"https://v3.material-tailwind.com/pixel-art-1.svg\",\n name: \"yqaw...09v\",\n tokenId: \"475\",\n profession: \"trader\",\n profileImg: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n },\n {\n img: \"https://v3.material-tailwind.com/pixel-art-2.svg\",\n name: \"yqaw...09v\",\n tokenId: \"476\",\n profession: \"owner\",\n profileImg: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n },\n {\n img: \"https://v3.material-tailwind.com/pixel-art-3.svg\",\n name: \"yqaw...09v\",\n tokenId: \"477\",\n profession: \"trader\",\n profileImg: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n },\n]\n\nexport default function Web301() {\n return (\n
\n \n \n \n \n PA\n \n

Pixelated Art

\n

\n These NFTs capture the essence of imagination and innovation,\n offering a glimpse into the boundless potential of the digital\n world.\n

\n
\n \n {DATA.map(({ img, name, tokenId, profession, profileImg }, key) => (\n \n \n \n \n \n

\n Pixelated Art\n

\n

Picture #{tokenId}

\n
\n
\n \n \n {name[0]}\n \n

{name}

\n
\n

\n {profession}\n

\n
\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/web3-02/page.tsx", "type": "registry:page", "target": "app/web3-02/page.tsx", "content": "\"use client\"\n\nimport { Grid3x3, Heart, Menu } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n img: \"https://v3.material-tailwind.com/nft-1.svg\",\n name: \"@thedreamytrees\",\n tokenId: \"876\",\n price: \"1,6 ETH\",\n },\n {\n img: \"https://v3.material-tailwind.com/nft-2.svg\",\n name: \"@lindemichael\",\n tokenId: \"877\",\n price: \"0,9 ETH\",\n },\n {\n img: \"https://v3.material-tailwind.com/nft-3.svg\",\n name: \"@mishastam\",\n tokenId: \"878\",\n price: \"1,3 ETH\",\n },\n]\n\nexport default function Web302() {\n return (\n
\n \n \n
\n \n \n EM\n \n

\n Emma\n \n ✓\n \n

\n

130 Collections

\n
\n
\n \n \n \n
\n
\n \n {DATA.map(({ img, name, tokenId, price }, key) => (\n \n \n \n
\n \n Auction ends in 23h:03m:33s\n \n \n \n \n
\n
\n \n
\n

\n Cosmic creatures\n

\n
\n

Current bid

\n
\n \n

{price}

\n
\n
\n
\n
\n

Picture #{tokenId}

\n \n
\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/web3-03/page.tsx", "type": "registry:page", "target": "app/web3-03/page.tsx", "content": "\"use client\"\n\nimport { Grid3x3, Menu } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst DATA = [\n {\n img: \"https://v3.material-tailwind.com/nft-1.svg\",\n name: \"@thedreamytrees\",\n desc: \"Owner\",\n profileImg: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n price: \"1,3 BTC\",\n time: \"23h:03m:33s\",\n },\n {\n img: \"https://v3.material-tailwind.com/nft-2.svg\",\n name: \"@lindemichael\",\n desc: \"Creator\",\n profileImg: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n price: \"0,4 BTC\",\n time: \"23h:03m:33s\",\n },\n {\n img: \"https://v3.material-tailwind.com/nft-3.svg\",\n name: \"@mishastam\",\n desc: \"Owner\",\n profileImg: \"https://v3.material-tailwind.com/man-profile-2.jpg\",\n price: \"0,3 BTC\",\n time: \"23h:03m:33s\",\n },\n]\n\nexport default function Web303() {\n return (\n
\n \n \n
\n

Top Auctions

\n

\n The most sought-after collections across the entire ecosystem.\n

\n
\n
\n \n \n \n \n
\n
\n \n {DATA.map(({ img, name, desc, profileImg, price, time }, key) => (\n \n \n \n \n \n \n {name[1]}\n \n
\n \n {name}\n \n \n {desc}\n \n
\n \n
\n \n
\n
\n

Current bid

\n

{price}

\n
\n
\n

\n Auction ends in\n

\n

{time}

\n
\n
\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/web3-04/page.tsx", "type": "registry:page", "target": "app/web3-04/page.tsx", "content": "\"use client\"\n\nimport { Cuboid, Grid3x3, Menu } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst DATA = [\n {\n price: \"9,999 NFTs\",\n img: \"https://v3.material-tailwind.com/nft-1.svg\",\n name: \"@thedreamytrees\",\n title: \"Dreamy Trees\",\n profileImg: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n desc: \"Website visitors today demand a frictionless user experience.\",\n },\n {\n price: \"3,000 NFTs\",\n img: \"https://v3.material-tailwind.com/nft-2.svg\",\n name: \"@3dfaces\",\n title: \"Face NFTs\",\n profileImg: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n desc: \"Website visitors today demand a frictionless user experience.\",\n },\n {\n price: \"9,999 NFTs\",\n img: \"https://v3.material-tailwind.com/nft-3.svg\",\n name: \"@theplanetsoftheuniverse\",\n title: \"The Planets Of The Universe\",\n profileImg: \"https://v3.material-tailwind.com/man-profile-2.jpg\",\n desc: \"Website visitors today demand a frictionless user experience.\",\n },\n]\n\nexport default function Web304() {\n return (\n
\n \n \n
\n
\n

Trending Collections

\n

\n The most sought-after collections across the entire ecosystem.\n

\n
\n
\n \n \n \n
\n
\n
\n {DATA.map(({ price, img, name, title, profileImg, desc }, key) => (\n \n \n
\n \n \n \n Collection\n \n
\n

\n {title}\n \n ✓\n \n

\n

{desc}

\n
\n
\n \n \n {name[1]}\n \n

{name}

\n
\n

\n {price}\n

\n
\n
\n
\n \n ))}\n
\n \n
\n
\n )\n}\n" }, { "path": "blocks/web3-05/page.tsx", "type": "registry:page", "target": "app/web3-05/page.tsx", "content": "\"use client\"\n\nimport { useState } from \"react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\n\nconst DATA = [\n {\n tokenId: \"#1\",\n profileImg: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Tina Andrew\",\n desc: \"Creator\",\n imgs: [\n \"https://v3.material-tailwind.com/nft-1.svg\",\n \"https://v3.material-tailwind.com/nft-2.svg\",\n \"https://v3.material-tailwind.com/nft-4.svg\",\n ],\n },\n {\n tokenId: \"#2\",\n profileImg: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Linde Michael\",\n desc: \"Creator\",\n imgs: [\n \"https://v3.material-tailwind.com/pixel-art-1.svg\",\n \"https://v3.material-tailwind.com/pixel-art-2.svg\",\n \"https://v3.material-tailwind.com/pixel-art-3.svg\",\n ],\n },\n {\n tokenId: \"#3\",\n profileImg: \"https://v3.material-tailwind.com/man-profile-2.jpg\",\n name: \"Misha Stam\",\n desc: \"Creator\",\n imgs: [\n \"https://v3.material-tailwind.com/nft-3.svg\",\n \"https://v3.material-tailwind.com/nft-3.svg\",\n \"https://v3.material-tailwind.com/nft-3.svg\",\n ],\n },\n]\n\nexport default function Web305() {\n const [timeFrame, setTimeFrame] = useState(\"month\")\n\n return (\n
\n \n \n
\n

Top Creators

\n

\n The most sought-after collections across the entire ecosystem.\n

\n
\n
\n setTimeFrame(\"hour\")}\n >\n Last 24h\n \n setTimeFrame(\"week\")}\n >\n Last week\n \n setTimeFrame(\"month\")}\n >\n Last month\n \n
\n
\n \n {DATA.map(({ tokenId, profileImg, name, desc, imgs }, key) => (\n \n \n

{tokenId}

\n
\n
\n \n \n {name[0]}\n \n
\n

{name}

\n

{desc}

\n
\n
\n \n
\n
\n \n {imgs.map((img, idx) => (\n \n ))}\n \n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/cruds-01/page.tsx", "type": "registry:page", "target": "app/cruds-01/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function Cruds01() {\n return (\n
\n \n
\n

Edit Apparel Item

\n

\n Update product information, pricing, and categorization for your\n fashion inventory.\n

\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/cruds-02/page.tsx", "type": "registry:page", "target": "app/cruds-02/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nexport default function Cruds02() {\n return (\n
\n \n
\n

\n Update Retail Staff Profile\n

\n

\n Manage employee account credentials and contact information for\n retail team members.\n

\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/cruds-03/page.tsx", "type": "registry:page", "target": "app/cruds-03/page.tsx", "content": "\"use client\"\n\nimport { Upload } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nexport default function Cruds03() {\n return (\n
\n \n
\n

Stylist Account Settings

\n

\n Configure your profile, roles, and permissions for your stylist\n account.\n

\n
\n
\n
\n \n
\n
\n \n
\n
\n

\n PNG, JPG, JPEG or GIF (max. 800x400px)\n

\n \n
\n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n \n \n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-01/page.tsx", "type": "registry:page", "target": "app/footers-01/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers01() {\n return (\n
\n
\n
\n

\n All rights reserved. Copyright © {YEAR} Creative Tim.\n

\n
\n \n \n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-02/page.tsx", "type": "registry:page", "target": "app/footers-02/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nconst LINKS = [\n {\n title: \"Company\",\n items: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Premium Tools\", href: \"#\" },\n { title: \"Blogs\", href: \"#\" },\n ],\n },\n {\n title: \"Pages\",\n items: [\n { title: \"Login\", href: \"#\" },\n { title: \"Register\", href: \"#\" },\n { title: \"Add List\", href: \"#\" },\n { title: \"Contact\", href: \"#\" },\n ],\n },\n {\n title: \"Legal\",\n items: [\n { title: \"Terms\", href: \"#\" },\n { title: \"Privacy\", href: \"#\" },\n { title: \"Teams\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n ],\n },\n]\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers02() {\n return (\n
\n
\n
\n
\n {LINKS.map(({ title, items }) => (\n
    \n

    {title}

    \n {items.map(({ title, href }) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n ))}\n
\n
\n

Subscribe

\n

\n Get access to subscriber exclusive deals and be the first who gets\n informed about fresh sales.\n

\n
\n
\n \n Your Email\n \n \n
\n \n
\n
\n \n \n I agree with the\n \n terms and conditions\n \n \n
\n
\n
\n

\n © {YEAR} Creative Tim. All Rights Reserved.\n

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-03/page.tsx", "type": "registry:page", "target": "app/footers-03/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"Home\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n { title: \"Blog\", href: \"#\" },\n { title: \"Service\", href: \"#\" },\n]\n\nexport default function Footers03() {\n return (\n
\n
\n
\n

\n Copyright © {YEAR} Creative Tim\n

\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-04/page.tsx", "type": "registry:page", "target": "app/footers-04/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Press\", href: \"#\" },\n { title: \"Blog\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n]\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers04() {\n return (\n
\n
\n \n

\n Be the first who see the news\n

\n

\n Your company may not be in the software business, but eventually, a\n software company will be in your business.\n

\n
\n \n \n
\n
\n
\n

Creative Tim

\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n
\n \n \n \n \n
\n
\n

\n All rights reserved. Copyright © {YEAR} Creative Tim\n

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-05/page.tsx", "type": "registry:page", "target": "app/footers-05/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst LINKS = [\n {\n title: \"Company\",\n items: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Premium Tools\", href: \"#\" },\n { title: \"Blogs\", href: \"#\" },\n ],\n },\n {\n title: \"Pages\",\n items: [\n { title: \"Login\", href: \"#\" },\n { title: \"Register\", href: \"#\" },\n { title: \"Add List\", href: \"#\" },\n { title: \"Contact\", href: \"#\" },\n ],\n },\n {\n title: \"Legal\",\n items: [\n { title: \"Terms\", href: \"#\" },\n { title: \"Privacy\", href: \"#\" },\n { title: \"Teams\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n items: [\n { title: \"Blog\", href: \"#\" },\n { title: \"Services\", href: \"#\" },\n { title: \"Products\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n ],\n },\n]\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers05() {\n return (\n
\n
\n
\n
\n {LINKS.map(({ title, items }) => (\n
    \n

    {title}

    \n {items.map(({ title, href }) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n ))}\n
\n
\n

\n Language & Currency\n

\n \n \n
\n
\n
\n
\n

\n Subscribe to our newsletters\n

\n

\n The latest news, articles and resources sent to your inbox weekly.\n

\n
\n
\n
\n \n Your Email\n \n \n
\n \n
\n
\n

\n All rights reserved. © {YEAR} Creative Tim\n

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-06/page.tsx", "type": "registry:page", "target": "app/footers-06/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst LINKS = [\n {\n title: \"Company\",\n items: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Premium Tools\", href: \"#\" },\n { title: \"Blogs\", href: \"#\" },\n ],\n },\n {\n title: \"Pages\",\n items: [\n { title: \"Login\", href: \"#\" },\n { title: \"Register\", href: \"#\" },\n { title: \"Add List\", href: \"#\" },\n { title: \"Contact\", href: \"#\" },\n ],\n },\n {\n title: \"Legal\",\n items: [\n { title: \"Terms\", href: \"#\" },\n { title: \"Privacy\", href: \"#\" },\n { title: \"Teams\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n ],\n },\n {\n title: \"Resources\",\n items: [\n { title: \"Blog\", href: \"#\" },\n { title: \"Services\", href: \"#\" },\n { title: \"Products\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n ],\n },\n]\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers06() {\n return (\n
\n
\n
\n
\n
Creative Tim
\n

\n The next generation of design systems.\n

\n
\n \n \n \n \n
\n
\n
\n {LINKS.map(({ title, items }) => (\n
    \n

    {title}

    \n {items.map(({ title, href }) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n ))}\n
\n
\n

\n © {YEAR} Creative Tim. All Rights Reserved.\n

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-07/page.tsx", "type": "registry:page", "target": "app/footers-07/page.tsx", "content": "\"use client\"\n\nimport { Settings } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Contact Information\", href: \"#\" },\n { title: \"Privacy Policy\", href: \"#\" },\n]\n\nconst COUNTRIES = [\n { name: \"United States\", flag: \"🇺🇸\" },\n { name: \"United Kingdom\", flag: \"🇬🇧\" },\n { name: \"Canada\", flag: \"🇨🇦\" },\n { name: \"Germany\", flag: \"🇩🇪\" },\n { name: \"France\", flag: \"🇫🇷\" },\n { name: \"Japan\", flag: \"🇯🇵\" },\n { name: \"Australia\", flag: \"🇦🇺\" },\n { name: \"Spain\", flag: \"🇪🇸\" },\n]\n\nexport default function Footers07() {\n return (\n
\n
\n
\n
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n

\n All rights reserved. Copyright © {YEAR} Creative Tim\n

\n
\n
\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-08/page.tsx", "type": "registry:page", "target": "app/footers-08/page.tsx", "content": "\"use client\"\n\nimport { Settings } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers08() {\n return (\n
\n
\n
\n

\n © {YEAR} Creative Tim. All rights reserved.\n

\n
\n \n v3.0.0\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-09/page.tsx", "type": "registry:page", "target": "app/footers-09/page.tsx", "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Contact Information\", href: \"#\" },\n { title: \"Privacy Policy\", href: \"#\" },\n]\n\nexport default function Footers09() {\n return (\n
\n
\n
\n
\n

\n New Features available! Upgrade to v3.0.0\n

\n \n
\n
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n

\n © {YEAR} Creative Tim. All rights reserved.\n

\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-10/page.tsx", "type": "registry:page", "target": "app/footers-10/page.tsx", "content": "\"use client\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"Company\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n { title: \"Team\", href: \"#\" },\n { title: \"Products\", href: \"#\" },\n { title: \"Blogs\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n]\n\nexport default function Footers10() {\n return (\n
\n
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n

Copyright © {YEAR} Creative Tim

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-11/page.tsx", "type": "registry:page", "target": "app/footers-11/page.tsx", "content": "\"use client\"\n\nconst LINKS = [\n {\n title: \"Company\",\n items: [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n ],\n },\n {\n title: \"Pages\",\n items: [\n { title: \"Login\", href: \"#\" },\n { title: \"Register\", href: \"#\" },\n ],\n },\n {\n title: \"Legal\",\n items: [\n { title: \"Terms\", href: \"#\" },\n { title: \"Privacy\", href: \"#\" },\n ],\n },\n]\n\nconst YEAR = new Date().getFullYear()\n\nexport default function Footers11() {\n return (\n
\n
\n
\n
\n
Creative Tim
\n

\n The reward for getting on the stage is fame.\n

\n
\n
\n {LINKS.map(({ title, items }) => (\n
    \n

    {title}

    \n {items.map(({ title, href }) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n ))}\n
\n
\n
\n

\n The price of fame is you can't get off the stage.\n

\n

\n © {YEAR} Creative Tim. All Rights Reserved.\n

\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-12/page.tsx", "type": "registry:page", "target": "app/footers-12/page.tsx", "content": "\"use client\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Contact Information\", href: \"#\" },\n { title: \"Privacy Policy\", href: \"#\" },\n { title: \"Terms & Conditions\", href: \"#\" },\n { title: \"FAQ\", href: \"#\" },\n]\n\nexport default function Footers12() {\n return (\n
\n
\n
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n

\n All rights reserved. Copyright © {YEAR} Creative Tim\n

\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-13/page.tsx", "type": "registry:page", "target": "app/footers-13/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"Company\", href: \"#\" },\n { title: \"About Us\", href: \"#\" },\n { title: \"Team\", href: \"#\" },\n { title: \"Products\", href: \"#\" },\n { title: \"Blogs\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n]\n\nexport default function Footers13() {\n return (\n
\n
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n
\n \n \n \n \n
\n

Copyright © {YEAR} Creative Tim

\n
\n
\n )\n}\n" }, { "path": "blocks/footers-14/page.tsx", "type": "registry:page", "target": "app/footers-14/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Press\", href: \"#\" },\n { title: \"Blog\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n]\n\nexport default function Footers14() {\n return (\n
\n
\n
\n
\n
Creative Tim
\n

\n The reward for getting on the stage is fame.\n

\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n
\n
\n

Get the App

\n
\n \n \n \n \n \n \n \n
\n \n GET IT ON\n \n \n Google Play\n \n
\n \n \n \n \n \n
\n \n Download on the\n \n \n App Store\n \n
\n \n
\n
\n
\n
\n

\n © {YEAR} Creative Tim. All Rights Reserved.\n

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/footers-15/page.tsx", "type": "registry:page", "target": "app/footers-15/page.tsx", "content": "\"use client\"\n\nimport { Github, Instagram, Twitter, Youtube } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\n\nconst YEAR = new Date().getFullYear()\n\nconst LINKS = [\n { title: \"About Us\", href: \"#\" },\n { title: \"Careers\", href: \"#\" },\n { title: \"Press\", href: \"#\" },\n { title: \"Blog\", href: \"#\" },\n { title: \"Pricing\", href: \"#\" },\n]\n\nexport default function Footers15() {\n return (\n
\n
\n
\n
\n
Creative Tim
\n
    \n {LINKS.map(({ title, href }, key) => (\n
  • \n \n {title}\n \n
  • \n ))}\n
\n
\n
\n

\n The reward for getting on the stage is fame.\n

\n

\n The price of fame is you can't get off the stage.\n

\n
\n \n \n \n \n
\n
\n
\n

\n All rights reserved. © {YEAR} Creative Tim\n

\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-01/page.tsx", "type": "registry:page", "target": "app/testimonials-01/page.tsx", "content": "\"use client\"\n\nimport { Sparkles } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n quote:\n \"The attention to detail and component quality is outstanding. These UI blocks have significantly accelerated our design workflow and improved consistency across our products.\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Michael Chen\",\n role: \"Tech Lead at Stripe\",\n quote:\n \"Exceptional component library with excellent documentation. The customization options and TypeScript support make it perfect for enterprise applications. Highly recommend!\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n quote:\n \"A game-changer for rapid prototyping and production. The components are production-ready, well-tested, and the design system is incredibly cohesive. Love it!\",\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n \n \n Testimonials\n \n

What Clients Say

\n

\n We're constantly trying to express ourselves and actualize our\n dreams. If you have the opportunity to play.\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, role, quote }, key) => (\n \n \n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n

{name}

\n

{role}

\n
\n "{quote}"\n
\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-02/page.tsx", "type": "registry:page", "target": "app/testimonials-02/page.tsx", "content": "\"use client\"\n\nimport { BadgeCheck, Twitter } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent, CardFooter, CardHeader } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Jessica Devis\",\n username: \"@jessicadevis\",\n quote:\n \"The utility-first approach and extensive component library make it a breeze to create beautiful and responsive interfaces. 🎉\",\n date: \"Jan 17, 2024\",\n },\n {\n image: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Lucian Eurel\",\n username: \"@lucianeurel\",\n quote:\n \"It's like having a superpower in your toolkit. The ability to craft custom designs quickly and efficiently with simple classes is unparalleled.\",\n date: \"Jan 18, 2024\",\n },\n {\n image: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Marcell Glock\",\n username: \"@marcelglock\",\n quote:\n \"The utility-first approach and extensive component library make it a breeze to create beautiful and responsive interfaces. 😍\",\n date: \"Jan 19, 2024\",\n },\n {\n image: \"https://v3.material-tailwind.com/man-profile-2.jpg\",\n name: \"Linde Michele\",\n username: \"@lindemichele\",\n quote:\n \"With its clear and concise classes, I can easily communicate design intentions to my colleagues. It's a must-have tool for any web developer. 👨🏻‍💻\",\n date: \"Jan 20, 2024\",\n },\n {\n image: \"https://v3.material-tailwind.com/man-profile-3.jpg\",\n name: \"Mary Joshiash\",\n username: \"@maryjoshiash\",\n quote:\n \"I've tried several CSS frameworks, but this is on a whole different level. It strikes the perfect balance between flexibility and design.\",\n date: \"Jan 21, 2024\",\n },\n {\n image: \"https://v3.material-tailwind.com/woman-profile-3.jpg\",\n name: \"Misha Stam\",\n username: \"@mishastam\",\n quote:\n \"Active community support make it easy to get started. It's the ideal framework for achieving design excellence in web applications.\",\n date: \"Jan 22, 2024\",\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n Testimonials\n

\n

Think about us

\n

\n That's the main thing people are controlled by! Thoughts -\n their perception of themselves!\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, username, quote, date }, key) => (\n \n \n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n
\n
\n

{name}

\n \n
\n

{username}

\n
\n
\n \n
\n {quote}\n
\n
\n \n \n See on \n \n

{date}

\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-03/page.tsx", "type": "registry:page", "target": "app/testimonials-03/page.tsx", "content": "\"use client\"\n\nimport { Quote, Star } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst testimonials = [\n {\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n quote:\n \"The attention to detail and user experience is exceptional. This has transformed how we approach design decisions in our team.\",\n rating: 5,\n },\n {\n name: \"Michael Chen\",\n role: \"Tech Lead\",\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n quote:\n \"Outstanding component library that saves us countless hours. The quality and customization options are exactly what we needed.\",\n rating: 5,\n },\n {\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n quote:\n \"A game-changer for rapid prototyping and production builds. The documentation is clear and the components are production-ready.\",\n rating: 5,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n Loved by Developers & Designers\n

\n

\n Join thousands of professionals who trust our components for their\n projects\n

\n
\n\n
\n
\n

1,679,700+

\n

Active Users

\n
\n \n
\n

4.9/5

\n

Average Rating

\n
\n \n
\n

50K+

\n

Companies

\n
\n
\n\n
\n {testimonials.map((testimonial, index) => (\n \n \n
\n {Array.from({ length: testimonial.rating }).map((_, i) => (\n \n ))}\n
\n\n \n\n
\n {testimonial.quote}\n
\n\n
\n \n \n \n {testimonial.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n
\n

\n {testimonial.name}\n

\n

\n {testimonial.role}\n

\n
\n
\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-04/page.tsx", "type": "registry:page", "target": "app/testimonials-04/page.tsx", "content": "\"use client\"\n\nimport { Quote, Star } from \"lucide-react\"\n\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n quote:\n \"The attention to detail and component quality is outstanding. These UI blocks have significantly accelerated our design workflow and improved consistency across our products.\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Michael Chen\",\n role: \"Tech Lead at Stripe\",\n quote:\n \"Exceptional component library with excellent documentation. The customization options and TypeScript support make it perfect for enterprise applications. Highly recommend!\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n quote:\n \"A game-changer for rapid prototyping and production. The components are production-ready, well-tested, and the design system is incredibly cohesive. Love it!\",\n rating: 5,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n What Our Users Say\n

\n

\n Trusted by thousands of developers and designers worldwide\n

\n
\n\n
\n {TESTIMONIALS.map(({ name, image, role, quote, rating }, key) => (\n \n \n
\n \n
\n \n
\n
\n\n

{name}

\n

{role}

\n\n
\n {Array.from({ length: 5 }).map((_, i) => (\n \n ))}\n
\n\n
\n "{quote}"\n
\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-05/page.tsx", "type": "registry:page", "target": "app/testimonials-05/page.tsx", "content": "\"use client\"\n\nimport { Quote, Star } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n quote:\n \"The component library has transformed our design process. The quality and attention to detail in every component is exceptional.\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Michael Chen\",\n role: \"Tech Lead at Stripe\",\n quote:\n \"Outstanding documentation and TypeScript support. These components integrate seamlessly into our enterprise applications.\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n quote:\n \"Production-ready components with excellent customization. The design system is cohesive and well-thought-out.\",\n rating: 5,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n Trusted by Professionals\n

\n

\n Hear what developers and designers say about our component library\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, role, quote, rating }, key) => (\n \n \n
\n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n
\n \n
\n
\n\n

\n {name}\n

\n

{role}

\n\n
\n {Array.from({ length: 5 }).map((_, i) => (\n \n ))}\n
\n\n
\n "{quote}"\n
\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-06/page.tsx", "type": "registry:page", "target": "app/testimonials-06/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n \n
\n \n
\n \n

\n Client Success Story\n

\n

\n Transforming Our Design System\n

\n
\n "This component library has revolutionized how we build\n products at scale. The quality, consistency, and developer\n experience are exceptional. We've reduced our\n design-to-development time by 60% and our entire team loves\n working with these components."\n
\n
\n \n \n AM\n \n
\n

Alexandra Martinez

\n

\n Head of Design, Spotify\n

\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-07/page.tsx", "type": "registry:page", "target": "app/testimonials-07/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\n\nconst TESTIMONIALS = [\n {\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n quote:\n \"The attention to detail and component quality is outstanding. These UI blocks have significantly accelerated our design workflow and improved consistency across our products.\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Michael Chen\",\n role: \"Tech Lead at Stripe\",\n quote:\n \"Exceptional component library with excellent documentation. The customization options and TypeScript support make it perfect for enterprise applications. Highly recommend!\",\n },\n {\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n quote:\n \"A game-changer for rapid prototyping and production. The components are production-ready, well-tested, and the design system is incredibly cohesive. Love it!\",\n },\n]\n\nexport default function TestimonialsBlock() {\n const [selectedTestimonial, setSelectedTestimonial] = React.useState(0)\n\n return (\n
\n
\n
\n

What Developers Say

\n

\n {TESTIMONIALS[selectedTestimonial].quote}\n

\n
\n

\n {TESTIMONIALS[selectedTestimonial].name}\n

\n

\n {TESTIMONIALS[selectedTestimonial].role}\n

\n
\n
\n {TESTIMONIALS.map((testimonial, index) => (\n
\n setSelectedTestimonial(index)}\n >\n \n \n {testimonial.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n
\n ))}\n
\n
\n
\n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-08/page.tsx", "type": "registry:page", "target": "app/testimonials-08/page.tsx", "content": "\"use client\"\n\nimport { Quote, Star } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image:\n \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Sarah Johnson\",\n role: \"Product Designer\",\n quote:\n \"These components have transformed our design workflow. The quality and attention to detail are exceptional, making it easy to build beautiful interfaces quickly.\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Michael Chen\",\n role: \"Tech Lead at Stripe\",\n quote:\n \"Outstanding component library with excellent TypeScript support. The documentation is clear and the components integrate seamlessly into our enterprise applications.\",\n rating: 5,\n },\n {\n image:\n \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Emma Rodriguez\",\n role: \"Frontend Developer\",\n quote:\n \"Production-ready components that save countless hours. The customization options are fantastic and the design system is incredibly cohesive. Highly recommend!\",\n rating: 5,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n What Developers Say\n

\n

\n Join thousands of developers building exceptional products with our\n component library\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, role, quote, rating }, key) => (\n \n \n
\n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n
\n \n
\n
\n\n

{name}

\n

{role}

\n\n
\n {Array.from({ length: 5 }).map((_, i) => (\n \n ))}\n
\n\n
\n "{quote}"\n
\n
\n \n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-09/page.tsx", "type": "registry:page", "target": "app/testimonials-09/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n \n
\n \n
\n \n

\n Customer Story\n

\n

\n Revolutionary component library for modern design\n

\n
\n "This component library has transformed how our design team\n works. The attention to detail, seamless integration, and\n production-ready components have accelerated our development\n workflow by 10x."\n
\n
\n \n \n SP\n \n
\n

\n Sarah Johnson\n

\n

\n Design Director, Spotify\n

\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-10/page.tsx", "type": "registry:page", "target": "app/testimonials-10/page.tsx", "content": "\"use client\"\n\nimport { ArrowRight, Sparkles } from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image: \"https://v3.material-tailwind.com/logo/spotify.svg\",\n name: \"Alexandra Martinez\",\n role: \"Head of Design\",\n quote:\n \"This component library has revolutionized our design system. The quality and consistency have dramatically improved our product development workflow.\",\n },\n {\n image: \"https://v3.material-tailwind.com/logo/netflix.svg\",\n name: \"David Kim\",\n role: \"Engineering Lead\",\n quote:\n \"Outstanding components with excellent TypeScript support. The documentation is thorough and implementation is seamless across our platforms.\",\n },\n {\n image: \"https://v3.material-tailwind.com/logo/coinbase.svg\",\n name: \"Marcus Johnson\",\n role: \"Product Director\",\n quote:\n \"A game-changer for our development team. These production-ready components have reduced our time-to-market by 50% while maintaining exceptional quality.\",\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n \n \n Testimonials\n \n

\n Trusted by Industry Leaders\n

\n

\n See how leading companies are building exceptional products with our\n component library\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, quote, role }, key) => (\n \n \n \n
\n "{quote}"\n
\n
\n

{name}

\n

{role}

\n
\n \n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-11/page.tsx", "type": "registry:page", "target": "app/testimonials-11/page.tsx", "content": "\"use client\"\n\nimport { Star } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Lucian Eurel\",\n date: \"Posted on 27 February\",\n quote:\n \"Success is not final, failure is not fatal: it is the courage to continue that counts.\",\n rating: 4,\n isHighlighted: false,\n },\n {\n image: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Lucian Eurel\",\n date: \"Posted on 28 February\",\n quote:\n \"If you have the opportunity to play this game of life you need to appreciate every moment.\",\n rating: 4,\n isHighlighted: true,\n },\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Mathew Glock\",\n date: \"Posted on 29 February\",\n quote:\n \"Artist is a term applied to a person who engages in an activity deemed to be an art.\",\n rating: 5,\n isHighlighted: false,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n Think about us\n

\n

\n That's the main thing people are controlled by! Thoughts -\n their perception of themselves!\n

\n
\n
\n {TESTIMONIALS.map(\n ({ name, image, date, quote, rating, isHighlighted }, key) => (\n \n \n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n \n {name}\n

\n \n {date}\n

\n \n "{quote}"\n \n
\n {Array.from({ length: 5 }).map((_, i) => (\n \n ))}\n
\n
\n \n )\n )}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-12/page.tsx", "type": "registry:page", "target": "app/testimonials-12/page.tsx", "content": "\"use client\"\n\nimport { Card, CardContent, CardFooter } from \"@/components/ui/card\"\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n The heartfelt testimonials of our community\n

\n

\n From life-enhancing gadgets to unparalleled customer support, and\n transformative learning opportunities.\n

\n
\n
\n \n \n
\n "The team went above and beyond to ensure my issue was\n resolved quickly and efficiently. Truly outstanding!"\n
\n
\n \n
\n

Jessica Devis

\n

\n Full Stack Developer @Netflix\n

\n
\n \n
\n
\n \n \n
\n "It have broadened my horizons and helped me advance my\n career. The community is incredibly supportive."\n
\n
\n \n
\n

Marcell Glock

\n

\n Graphic Designer, @Coinbase\n

\n
\n \n
\n
\n \n \n
\n "Its intuitive design and powerful features make it\n indispensable. I can't imagine going back to life before\n it!"\n
\n
\n \n
\n

Emma Roberts

\n

\n Chief Executive @Spotify\n

\n
\n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-13/page.tsx", "type": "registry:page", "target": "app/testimonials-13/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n \n \n
\n \n
\n "We're not always in the position that we want to be\n at. We're constantly growing. We're constantly making\n mistakes. We're constantly trying to express ourselves and\n actualize our dreams. "\n
\n
\n

Marcell Glock

\n

Chief Executive, Spotify

\n
\n
\n
\n \n \n MG\n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-14/page.tsx", "type": "registry:page", "target": "app/testimonials-14/page.tsx", "content": "\"use client\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Jessica Devis\",\n role: \"CEO @ Marketing Digital LTD\",\n quote:\n \"The connections you make at Web Summit are unparalleled, we met users all over the world.\",\n },\n {\n image: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Mary Joshiash\",\n role: \"Marketing @ Apple INC\",\n quote:\n \"Web Summit will increase your appetite, your inspiration, your skills, your motivation and your network.\",\n },\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Marcell Glock\",\n role: \"CFO @ Apple INC\",\n quote:\n \"The pessimist complains about the wind; the optimist expects it to change; the realist adjusts the sails.\",\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n

\n Think about us\n

\n

\n That's the main thing people are controlled by! Thoughts -\n their perception of themselves!\n

\n
\n
\n {TESTIMONIALS.map(({ name, image, role, quote }, key) => (\n \n \n \n \n \n {name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")}\n \n \n

{name}

\n

{role}

\n
\n "{quote}"\n
\n
\n
\n ))}\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-15/page.tsx", "type": "registry:page", "target": "app/testimonials-15/page.tsx", "content": "\"use client\"\n\nimport { Plus, Quote, Star } from \"lucide-react\"\n\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst TESTIMONIALS = [\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Lucian Eurel\",\n role: \"CEO Discord\",\n quote:\n \"Web Summit will increase your appetite, your inspiration, your skills, your motivation and your network.\",\n rating: 4,\n },\n {\n image: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n name: \"Linde Michel\",\n role: \"CFO Slack\",\n quote:\n \"Do not go where the path may lead, go instead where there is no path and leave a trail. You will succeed on it.\",\n rating: 4,\n },\n {\n image: \"https://v3.material-tailwind.com/man-profile-2.jpg\",\n name: \"Misha Stam\",\n role: \"COO Dribbble\",\n quote:\n \"The pessimist complains about the wind; the optimist expects it to change; the realist adjusts the sails.\",\n rating: 5,\n },\n]\n\nexport default function TestimonialsBlock() {\n return (\n
\n
\n
\n {TESTIMONIALS.map(({ name, image, role, quote, rating }, key) => (\n \n \n
\n \n
\n \n
\n
\n\n

{name}

\n

{role}

\n\n
\n "{quote}"\n
\n\n
\n {Array.from({ length: 5 }).map((_, i) => (\n \n ))}\n
\n
\n \n ))}\n \n \n
\n
\n \n
\n

\n Add Testimonial\n

\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-16/page.tsx", "type": "registry:page", "target": "app/testimonials-16/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst SLIDES = [\n {\n image: \"https://images.unsplash.com/photo-1641906840000-4b88f1d44de6?auto=format&fit=crop&q=80&w=400&h=400\",\n companyLogo: \"https://v3.material-tailwind.com/logo/netflix.svg\",\n name: \"Linde Michel\",\n role: \"Social Media Executive, Netflix\",\n quote:\n \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams.\",\n },\n {\n image: \"https://images.unsplash.com/photo-1716662318479-a9c0f1cd1a0e?auto=format&fit=crop&q=80&w=400&h=400\",\n companyLogo: \"https://v3.material-tailwind.com/logo/coinbase.svg\",\n name: \"John Down\",\n role: \"Visionary, Coinbase\",\n quote:\n \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams.\",\n },\n {\n image: \"https://images.unsplash.com/photo-1623853434105-8e7a72898180?auto=format&fit=crop&q=80&w=400&h=400\",\n companyLogo: \"https://v3.material-tailwind.com/logo/spotify.svg\",\n name: \"Marcell Glock\",\n role: \"Chief Executive, Spotify\",\n quote:\n \"We're not always in the position that we want to be at. We're constantly growing. We're constantly making mistakes. We're constantly trying to express ourselves and actualize our dreams.\",\n },\n]\n\nexport default function TestimonialsBlock() {\n const [currentSlide, setCurrentSlide] = React.useState(0)\n\n const nextSlide = () => {\n setCurrentSlide((prev) => (prev + 1) % SLIDES.length)\n }\n\n const prevSlide = () => {\n setCurrentSlide((prev) => (prev - 1 + SLIDES.length) % SLIDES.length)\n }\n\n return (\n
\n
\n
\n \n
\n "{SLIDES[currentSlide].quote}"\n
\n

\n {SLIDES[currentSlide].name}\n

\n

\n {SLIDES[currentSlide].role}\n

\n
\n\n
\n {SLIDES.map((slide, index) => (\n setCurrentSlide(index)}\n className={`h-8 w-8 rounded object-cover object-center transition-opacity ${\n index === currentSlide ? \"opacity-100\" : \"opacity-50\"\n }`}\n >\n \n \n ))}\n
\n\n
\n
\n )\n}\n" }, { "path": "blocks/testimonials-17/page.tsx", "type": "registry:page", "target": "app/testimonials-17/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight, Quote } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\n\nconst SLIDES = [\n {\n image: \"https://v3.material-tailwind.com/logo/netflix.svg\",\n name: \"Louis Miriam\",\n role: \"COO @ Netflix\",\n quote:\n \"Knowledge is either from direct experience or from verifiable, falsifiable science. There is knowledge that is transmitted but not verifiable / falsifiable. They're slowed down by their perception of themselves.\",\n },\n {\n image: \"https://v3.material-tailwind.com/logo/coinbase.svg\",\n name: \"John Down\",\n role: \"CEO @ Coinbase\",\n quote:\n \"Knowledge is either from direct experience or from verifiable, falsifiable science. There is knowledge that is transmitted but not verifiable / falsifiable. They're slowed down by their perception of themselves.\",\n },\n]\n\nexport default function TestimonialsBlock() {\n const [currentSlide, setCurrentSlide] = React.useState(0)\n\n const nextSlide = () => {\n setCurrentSlide((prev) => (prev + 1) % SLIDES.length)\n }\n\n const prevSlide = () => {\n setCurrentSlide((prev) => (prev - 1 + SLIDES.length) % SLIDES.length)\n }\n\n return (\n
\n
\n \n \n\n \n
\n \n
\n "{SLIDES[currentSlide].quote}"\n
\n
\n

\n {SLIDES[currentSlide].name}\n

\n \n

\n {SLIDES[currentSlide].role}\n

\n
\n
\n\n
\n
\n \n
\n
\n
\n\n
\n {SLIDES.map((_, index) => (\n setCurrentSlide(index)}\n aria-label={`Go to slide ${index + 1}`}\n className={`h-2 rounded-full transition-all ${\n index === currentSlide\n ? \"w-8 bg-white\"\n : \"w-2 bg-white/50 hover:bg-white/75\"\n }`}\n />\n ))}\n
\n\n \n \n \n \n \n \n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-01/page.tsx", "type": "registry:page", "target": "app/modals-01/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { TriangleAlert, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n
\n
\n \n \n \n Reset Settings\n \n \n

\n Are you sure you want to reset all settings to their default\n values? This action cannot be undone.\n

\n
\n
\n\n
\n
\n \n
\n \n \n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-02/page.tsx", "type": "registry:page", "target": "app/modals-02/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst NOTIFICATION = [\"Email\", \"SMS\", \"Push Notification\"]\nconst TOOLS = [\"React\", \"Material Tailwind\", \"TailwindCSS\", \"Next.js\"]\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n Edit Profile\n

\n Update your profile information below.\n

\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n

\n Interested in the following technologies\n

\n

\n Choose the frameworks you work on\n

\n
\n {TOOLS.map((tool) => (\n
\n \n \n {tool}\n \n
\n ))}\n
\n
\n\n
\n

Notification preferences

\n

\n Select where you want to be notified\n

\n \n {NOTIFICATION.map((notify) => (\n
\n \n \n {notify}\n \n
\n ))}\n
\n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-03/page.tsx", "type": "registry:page", "target": "app/modals-03/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, Pencil, X } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Input } from \"@/components/ui/input\"\n\ninterface UserProps {\n name: string\n img: string\n email: string\n}\n\nfunction User({ name, img, email }: UserProps) {\n const [selected, setSelected] = React.useState(\"Can View\")\n\n return (\n
\n
\n \n \n {name.charAt(0)}\n \n
\n

{name}

\n

{email}

\n
\n
\n \n \n \n \n \n setSelected(\"Can View\")}>\n Can View\n \n setSelected(\"Can Edit\")}>\n Can Edit\n \n \n \n
\n )\n}\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Share with New Members\n \n

\n Welcome new members to your team! Use this modal to seamlessly add\n individuals to your dashboard, enabling collaboration and\n enhancing productivity.\n

\n
\n\n
\n \n \n \n Copy Link\n \n \n\n
\n \n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-04/page.tsx", "type": "registry:page", "target": "app/modals-04/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Trash, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Update Product Modal\n \n

\n Edit product features and save it.\n

\n
\n\n
\n {[...new Array(3)].map((_, i) => (\n \n \n \n \n \n
\n ))}\n
\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n \n \n \n )\n}\n" }, { "path": "blocks/modals-05/page.tsx", "type": "registry:page", "target": "app/modals-05/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { CloudUpload, Trash, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\nconst IMAGES = [\n {\n name: \"cover-1.jpg\",\n size: \"140 KB\",\n },\n {\n name: \"cover-2.jpg\",\n size: \"288 KB\",\n },\n]\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n Upload Files\n

\n Easily upload files to your account with just a few clicks.\n

\n
\n\n
\n \n \n \n \n \n\n
\n {IMAGES.map(({ name, size }) => (\n \n \n
\n \n
\n

{name}

\n

{size}

\n
\n
\n \n \n \n
\n
\n ))}\n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-06/page.tsx", "type": "registry:page", "target": "app/modals-06/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Unlock, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n
\n
\n \n \n \n Publish Capsule Collection\n \n \n

\n This action will expose your private capsule collection to\n public viewing across all fashion storefronts.\n

\n
\n
\n\n \n \n
\n \n Collection\n \n fall-winter-vault\n
\n
\n Views\n 0\n
\n
\n Likes\n 0\n
\n
\n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-07/page.tsx", "type": "registry:page", "target": "app/modals-07/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Visibility Settings\n \n \n

\n This collection is currently restricted to internal collaborators.\n You can modify who can view or access it from this setting.\n

\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-08/page.tsx", "type": "registry:page", "target": "app/modals-08/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { AlertTriangle, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Disable Collection Lock Rules\n \n \n

\n Removing edit rules will allow unrestricted changes to your seasonal\n campaign folders and product groups.\n

\n\n \n \n \n \n Access Restrictions Will Be Removed\n \n \n \n

\n Disabling these rules unlocks direct edits to sensitive assets\n and might affect internal syncs.\n

\n
\n
\n\n
\n

This will impact:

\n
    \n
  • \n \n Designer review checkpoints\n
  • \n
  • \n \n Version freeze policies\n
  • \n
\n
\n\n

\n Note: 0 edit lock rules currently active\n

\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-09/page.tsx", "type": "registry:page", "target": "app/modals-09/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { AlertTriangle, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Transfer Showroom Ownership\n \n \n

\n Switch control of this fashion showroom space to another user or\n organization.\n

\n\n
\n
\n \n \n
\n\n
\n \n \n
\n\n \n \n
\n \n

\n Transferring ownership will revoke your access to draft\n sets, unpublished campaigns, and internal analytics.\n

\n
\n
\n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-10/page.tsx", "type": "registry:page", "target": "app/modals-10/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { AlertCircle, X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Permanently Remove Archive\n \n \n

\n Erasing this fashion vault will wipe its data across your platform\n and collaborators.\n

\n\n \n \n \n \n Review Before Deleting\n \n \n \n

\n Once removed, associated content (lookbooks, notes, edits) will\n be lost forever.\n

\n
\n
\n\n
\n

This action will:

\n
    \n
  • \n \n Deletes all digital outfits and metadata\n
  • \n
  • \n \n Disconnects synced creative briefs\n
  • \n
  • \n \n No change to billing or usage limits\n
  • \n
\n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/modals-11/page.tsx", "type": "registry:page", "target": "app/modals-11/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nexport default function ModalsBlock() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n
\n \n \n \n \n \n setIsOpen(false)}\n className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\"\n >\n \n Close\n \n \n \n Erase Fashion Vault\n \n \n

\n Type the full collection handle to confirm irreversible deletion of\n this vault.\n

\n\n
\n
\n \n \n
\n\n
\n setIsOpen(false)}\n >\n Cancel\n \n \n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/account-basic-info-01/page.tsx", "type": "registry:page", "target": "app/account-basic-info/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport {\n Briefcase,\n CalendarIcon,\n Globe,\n GraduationCap,\n Mail,\n MapPin,\n Phone,\n User,\n} from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Calendar } from \"@/components/ui/calendar\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nexport default function AccountBasicInfo01() {\n const [birthDate, setBirthDate] = React.useState()\n\n return (\n
\n \n
\n

\n Personal Information\n

\n

\n Manage your personal details and profile information. This\n information will be visible to other users on the platform.\n

\n
\n\n
\n {/* Basic Details Section */}\n
\n
\n

Basic Details

\n
\n
\n \n \n First Name\n \n \n
\n
\n \n \n
\n
\n
\n\n {/* Professional Information */}\n
\n

\n Professional Information\n

\n
\n
\n \n \n
\n\n
\n \n \n \n \n \n {birthDate ? format(birthDate, \"PPP\") : \"Select a date\"}\n \n \n \n \n \n \n
\n\n
\n \n \n Profession\n \n \n
\n\n
\n \n \n Education\n \n \n
\n
\n
\n\n {/* Contact Information */}\n
\n

Contact Information

\n
\n
\n \n \n
\n
\n \n \n Confirm Email\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n\n {/* Additional Information */}\n
\n

\n Additional Information\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n\n
\n \n \n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/account-2fa-01/page.tsx", "type": "registry:page", "target": "app/account-2fa/page.tsx", "content": "\"use client\"\n\nimport {\n AlertCircle,\n CheckCircle2,\n KeyRound,\n MessageSquare,\n Shield,\n Smartphone,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\n\nconst TwoFactorMethods = [\n {\n title: \"Security Keys\",\n description:\n \"Physical security keys provide the highest level of protection by requiring a hardware device for authentication.\",\n value: \"No security keys configured\",\n action: \"Add\",\n icon: KeyRound,\n isConfigured: false,\n recommended: true,\n },\n {\n title: \"Authenticator App\",\n description:\n \"Generate time-based one-time passwords (TOTP) using apps like Google Authenticator or Authy.\",\n value: \"Not configured\",\n action: \"Setup\",\n icon: Smartphone,\n isConfigured: false,\n recommended: true,\n },\n {\n title: \"SMS Number\",\n description:\n \"Receive verification codes via text message to your registered mobile number.\",\n value: \"+1 (555) 123-4567\",\n action: \"Edit\",\n icon: MessageSquare,\n isConfigured: true,\n recommended: false,\n },\n]\n\nexport default function Account2FA01() {\n return (\n
\n \n
\n
\n
\n \n
\n
\n

\n Two-Factor Authentication\n

\n

\n Add an extra layer of security to your account\n

\n
\n
\n \n \n Enabled\n \n
\n\n
\n {TwoFactorMethods.map((method, index) => {\n const Icon = method.icon\n return (\n \n
\n \n \n
\n
\n
\n

{method.title}

\n {method.recommended && (\n \n Recommended\n \n )}\n
\n

\n {method.description}\n

\n \n {method.isConfigured && (\n \n )}\n {method.value}\n

\n
\n
\n \n {method.action}\n \n
\n )\n })}\n \n\n
\n
\n \n
\n

Recovery Codes

\n

\n Generate backup codes that can be used if you lose access to\n your 2FA methods. Store them securely in a safe place.\n

\n \n
\n
\n\n
\n \n \n
\n
\n \n \n )\n}\n" }, { "path": "blocks/account-change-password-01/page.tsx", "type": "registry:page", "target": "app/account-change-password/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckCircle2, Eye, EyeOff, Lock, Shield, XCircle } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\nfunction PasswordField({\n id,\n label,\n ...props\n}: {\n id: string\n label: string\n} & React.InputHTMLAttributes) {\n const [showPassword, setShowPassword] = React.useState(false)\n\n return (\n
\n \n
\n \n setShowPassword(!showPassword)}\n >\n {showPassword ? (\n \n ) : (\n \n )}\n \n {showPassword ? \"Hide password\" : \"Show password\"}\n \n \n
\n
\n )\n}\n\nconst PASSWORD_REQUIREMENTS = [\n {\n label: \"At least 8 characters long\",\n regex: /.{8,}/,\n },\n {\n label: \"One uppercase letter (A-Z)\",\n regex: /[A-Z]/,\n },\n {\n label: \"One lowercase letter (a-z)\",\n regex: /[a-z]/,\n },\n {\n label: \"One number (0-9)\",\n regex: /[0-9]/,\n },\n {\n label: \"One special character (!@#$%^&*)\",\n regex: /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/,\n },\n]\n\nexport default function AccountChangePassword01() {\n const [newPassword, setNewPassword] = React.useState(\"\")\n\n return (\n
\n \n
\n
\n
\n \n
\n
\n

\n Change Password\n

\n

\n Update your password to keep your account secure\n

\n
\n
\n
\n\n
\n
\n
e.preventDefault()}>\n \n setNewPassword(e.target.value)}\n value={newPassword}\n />\n \n
\n \n \n
\n \n
\n\n
\n
\n

\n \n Password Requirements\n

\n

\n Your password must meet the following criteria for enhanced\n security:\n

\n
    \n {PASSWORD_REQUIREMENTS.map((req, index) => {\n const meetsRequirement = req.regex.test(newPassword)\n return (\n
  • \n {meetsRequirement ? (\n \n ) : (\n \n )}\n \n {req.label}\n \n
  • \n )\n })}\n
\n
\n\n
\n

\n Security Best Practices\n

\n
    \n
  • \n \n Change your password regularly (every 90 days)\n
  • \n
  • \n \n Never share your password with anyone\n
  • \n
  • \n \n Use a unique password for each account\n
  • \n
  • \n \n Consider using a password manager\n
  • \n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/account-notifications-01/page.tsx", "type": "registry:page", "target": "app/account-notifications/page.tsx", "content": "\"use client\"\n\nimport { Bell, Mail, MessageSquare, Smartphone } from \"lucide-react\"\n\nimport { Card } from \"@/components/ui/card\"\nimport { Label } from \"@/components/ui/label\"\nimport { Switch } from \"@/components/ui/switch\"\n\nconst TABLE_HEAD = [\n { label: \"Activity\", icon: Bell },\n { label: \"Email\", icon: Mail },\n { label: \"Push\", icon: Smartphone },\n { label: \"SMS\", icon: MessageSquare },\n]\n\nconst NOTIFICATIONS = [\n {\n title: \"Mentions\",\n description: \"Notify when another user mentions you in a comment\",\n category: \"Social\",\n email: true,\n push: false,\n sms: true,\n },\n {\n title: \"Comments\",\n description: \"Notify when another user comments on your item\",\n category: \"Social\",\n email: true,\n push: false,\n sms: true,\n },\n {\n title: \"New Follower\",\n description: \"Notify when someone starts following you\",\n category: \"Social\",\n email: false,\n push: true,\n sms: false,\n },\n {\n title: \"Login Activity\",\n description: \"Alert when logging in from a new device or location\",\n category: \"Security\",\n email: true,\n push: true,\n sms: true,\n },\n {\n title: \"Password Changed\",\n description: \"Immediate notification when password is updated\",\n category: \"Security\",\n email: true,\n push: true,\n sms: true,\n },\n {\n title: \"Product Updates\",\n description: \"Get notified about new features and improvements\",\n category: \"Product\",\n email: true,\n push: false,\n sms: false,\n },\n]\n\nexport default function AccountNotifications01() {\n return (\n
\n \n
\n

\n Notification Preferences\n

\n

\n Customize how you receive notifications. These settings apply to all\n activities you're monitoring across the platform.\n

\n
\n\n
\n \n \n \n {TABLE_HEAD.map((head, i) => {\n const Icon = head.icon\n return (\n \n \n \n {head.label}\n \n \n )\n })}\n \n \n \n {NOTIFICATIONS.map((notification, index) => {\n const isLast = index === NOTIFICATIONS.length - 1\n const classes = isLast ? \"py-6\" : \"border-border border-b py-6\"\n\n return (\n \n \n \n \n \n \n )\n })}\n \n
\n
\n
\n

{notification.title}

\n \n {notification.category}\n \n
\n

\n {notification.description}\n

\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n\n
\n
\n \n
\n

\n About Notification Delivery\n

\n

\n Email notifications are sent instantly. Push notifications\n require the mobile app. SMS notifications may incur carrier\n charges. You can change these settings at any time.\n

\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/account-sessions-01/page.tsx", "type": "registry:page", "target": "app/account-sessions/page.tsx", "content": "\"use client\"\n\nimport {\n Clock,\n Computer,\n Globe,\n ShieldCheck,\n Smartphone,\n X,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\n\nconst ACTIVE_SESSIONS = [\n {\n id: 1,\n type: \"Laptop\",\n icon: Computer,\n location: \"New York, USA\",\n coordinates: \"40.7128° N, 74.0060° W\",\n isCurrent: true,\n lastActive: \"2 hours ago\",\n browser: \"Chrome 114.0\",\n os: \"macOS 13.4\",\n },\n {\n id: 2,\n type: \"Smartphone\",\n icon: Smartphone,\n location: \"Florida, USA\",\n coordinates: \"27.9944° N, 81.7603° W\",\n isCurrent: false,\n lastActive: \"Yesterday at 3:45 PM\",\n browser: \"Safari 16.5\",\n os: \"iOS 16.5\",\n },\n {\n id: 3,\n type: \"Desktop\",\n icon: Computer,\n location: \"Tokyo, Japan\",\n coordinates: \"35.6895° N, 139.6917° E\",\n isCurrent: false,\n lastActive: \"3 days ago\",\n browser: \"Firefox 112.0\",\n os: \"Windows 11\",\n },\n]\n\nexport default function AccountSessions01() {\n return (\n
\n \n
\n
\n
\n \n
\n
\n

\n Active Sessions\n

\n

\n Manage and monitor devices that have access to your account\n

\n
\n
\n
\n\n
\n {ACTIVE_SESSIONS.map((session, index) => {\n const Icon = session.icon\n const isLast = index === ACTIVE_SESSIONS.length - 1\n\n return (\n \n
\n \n \n
\n\n
\n
\n

{session.type} Session

\n {session.isCurrent && (\n \n Current Session\n \n )}\n
\n\n
\n
\n \n {session.location}\n
\n
\n \n Last active: {session.lastActive}\n
\n
\n {session.browser} on {session.os}\n
\n
\n
\n
\n\n
\n {!session.isCurrent && (\n \n )}\n
\n
\n )\n })}\n \n\n
\n
\n \n
\n

Security Tip

\n

\n If you notice any suspicious activity, immediately remove the\n session and change your account password. Enable two-factor\n authentication for additional security.\n

\n
\n
\n
\n \n \n )\n}\n" }, { "path": "blocks/account-avatar-upload-01/page.tsx", "type": "registry:page", "target": "app/account-avatar-upload/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n CheckCircle2,\n Pencil,\n Trash2,\n Upload,\n User,\n XCircle,\n} from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Label } from \"@/components/ui/label\"\nimport { Switch } from \"@/components/ui/switch\"\n\nexport default function AccountAvatarUpload01() {\n const [status, setStatus] = React.useState(\"Online\")\n const [avatarPreview, setAvatarPreview] = React.useState(null)\n\n const handleFileUpload = (event: React.ChangeEvent) => {\n const file = event.target.files?.[0]\n if (file) {\n const reader = new FileReader()\n reader.onloadend = () => {\n setAvatarPreview(reader.result as string)\n }\n reader.readAsDataURL(file)\n }\n }\n\n const handleRemoveAvatar = () => {\n setAvatarPreview(null)\n }\n\n return (\n
\n \n
\n
\n
\n \n
\n
\n

\n Profile Picture\n

\n

\n Update your profile picture and personal information\n

\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n \n \n \n \n
\n \n
\n \n \n
\n\n
\n

Select and Upload Image

\n

\n .svg, .png, .jpg (size 400x400px)\n

\n
\n
\n\n
\n \n {avatarPreview && (\n \n )}\n
\n
\n\n
\n \n
\n \n setStatus((cur) => (cur === \"Online\" ? \"Offline\" : \"Online\"))\n }\n />\n \n {status === \"Online\" ? (\n \n ) : (\n \n )}\n {status}\n \n
\n
\n
\n\n
\n
\n \n
\n

Profile Picture Tips

\n

\n Choose a high-quality, professional image that clearly shows\n your face. Recommended image size is 400x400 pixels. Only .svg,\n .png, and .jpg formats are supported.\n

\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/account-integrations-01/page.tsx", "type": "registry:page", "target": "app/account-integrations/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Check,\n ChevronDown,\n Copy,\n ExternalLink,\n Github,\n MessageCircle,\n Shield,\n} from \"lucide-react\"\n\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Label } from \"@/components/ui/label\"\nimport { Switch } from \"@/components/ui/switch\"\n\nconst INTEGRATIONS = [\n {\n id: \"github\",\n name: \"GitHub\",\n icon: Github,\n category: \"Development\",\n description:\n \"Connect your GitHub account to sync repositories and track contributions.\",\n isConfigured: false,\n connectedEmail: null,\n verificationCode: null,\n },\n {\n id: \"spotify\",\n name: \"Spotify\",\n icon: MessageCircle, // Replaced Spotify icon with MessageCircle\n category: \"Music\",\n description:\n \"Link your Spotify account to share playlists and sync listening activity.\",\n isConfigured: true,\n connectedEmail: \"emma@mail.com\",\n verificationCode: \"1172913\",\n },\n {\n id: \"discord\",\n name: \"Discord\",\n icon: MessageCircle,\n category: \"Communication\",\n description:\n \"Integrate your Discord account to manage server connections and notifications.\",\n isConfigured: false,\n connectedEmail: null,\n verificationCode: null,\n },\n]\n\nexport default function AccountIntegrations01() {\n const [activeIntegrations, setActiveIntegrations] = React.useState<\n Record\n >(\n INTEGRATIONS.reduce(\n (acc, integration) => {\n acc[integration.id] = integration.isConfigured\n return acc\n },\n {} as Record\n )\n )\n const [copiedCode, setCopiedCode] = React.useState(null)\n\n const toggleIntegration = (id: string) => {\n setActiveIntegrations((prev) => ({\n ...prev,\n [id]: !prev[id],\n }))\n }\n\n const copyVerificationCode = (code: string) => {\n navigator.clipboard.writeText(code)\n setCopiedCode(code)\n setTimeout(() => setCopiedCode(null), 2000)\n }\n\n return (\n
\n \n
\n
\n
\n \n
\n
\n

\n Third-Party Integrations\n

\n

\n Manage and configure connections to external services and\n platforms\n

\n
\n
\n
\n\n \n {INTEGRATIONS.map((integration) => {\n const Icon = integration.icon\n const isActive = activeIntegrations[integration.id]\n\n return (\n \n
\n
\n
\n \n
\n
\n
\n

{integration.name}

\n \n {integration.category}\n \n
\n

\n {integration.description}\n

\n
\n
\n
\n
\n \n toggleIntegration(integration.id)\n }\n />\n \n {isActive ? \"Enabled\" : \"Enable\"}\n \n
\n \n View More\n \n
\n
\n \n {!isActive ? (\n
\n

\n You haven't added your {integration.name} account\n or you aren't authorized. Click "Connect"\n to initiate the integration process.\n

\n \n
\n ) : integration.connectedEmail ? (\n
\n \n
\n
\n

Verification Code

\n

\n Use this code to complete the integration\n

\n
\n
\n \n {integration.verificationCode}\n \n \n copyVerificationCode(\n integration.verificationCode!\n )\n }\n >\n {copiedCode === integration.verificationCode ? (\n \n ) : (\n \n )}\n {copiedCode === integration.verificationCode\n ? \"Copied\"\n : \"Copy\"}\n \n
\n
\n
\n \n
\n
\n

Connected Account

\n

\n Manage your linked {integration.name} account\n

\n
\n
\n \n {integration.connectedEmail}\n \n \n
\n
\n
\n
\n ) : null}\n
\n \n )\n })}\n
\n\n
\n
\n \n
\n

Integration Security

\n

\n Ensure you trust the applications you connect. Review and manage\n third-party access to your account regularly. You can revoke\n access at any time by disabling the integration.\n

\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/ai-chat-streaming-01/page.tsx", "type": "registry:page", "target": "app/ai-chat-streaming/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Brain, Loader2, Send } from \"lucide-react\"\n\nimport { Avatar, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\nconst AI_PROVIDERS = [\n { value: \"openai\", label: \"OpenAI\" },\n { value: \"anthropic\", label: \"Anthropic\" },\n { value: \"google\", label: \"Google Gemini\" },\n { value: \"cohere\", label: \"Cohere\" },\n { value: \"mistral\", label: \"Mistral AI\" },\n]\n\ninterface Message {\n id: string\n role: \"user\" | \"assistant\"\n content: string\n thinking?: string\n isStreaming?: boolean\n}\n\nexport default function AIChatStreamingBlock() {\n const [messages, setMessages] = React.useState([\n {\n id: \"1\",\n role: \"assistant\",\n content:\n \"Hello! I'm your AI assistant with streaming and thinking capabilities. How can I help you today?\",\n },\n ])\n const [input, setInput] = React.useState(\"\")\n const [isLoading, setIsLoading] = React.useState(false)\n const [provider, setProvider] = React.useState(\"openai\")\n const [apiKey, setApiKey] = React.useState(\"\")\n const [showThinking, setShowThinking] = React.useState(false)\n const scrollAreaRef = React.useRef(null)\n\n const simulateStreaming = async (text: string) => {\n const words = text.split(\" \")\n let currentText = \"\"\n\n const messageId = Date.now().toString()\n setMessages((prev) => [\n ...prev,\n {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n thinking: showThinking\n ? \"Analyzing your question and formulating a comprehensive response...\"\n : undefined,\n isStreaming: true,\n },\n ])\n\n for (let i = 0; i < words.length; i++) {\n currentText += (i > 0 ? \" \" : \"\") + words[i]\n await new Promise((resolve) => setTimeout(resolve, 50))\n\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === messageId\n ? {\n ...msg,\n content: currentText,\n isStreaming: i < words.length - 1,\n }\n : msg\n )\n )\n }\n }\n\n const handleSend = async () => {\n if (!input.trim() || isLoading) return\n\n const userMessage: Message = {\n id: Date.now().toString(),\n role: \"user\",\n content: input.trim(),\n }\n\n setMessages((prev) => [...prev, userMessage])\n setInput(\"\")\n setIsLoading(true)\n\n // Simulate AI response\n const responses = [\n \"That's an interesting question. Based on the AI provider you've selected, I can process this with advanced natural language understanding. Let me break this down for you with a detailed analysis.\",\n \"I understand what you're asking. Using the configured API, I can provide you with accurate information. The key aspects to consider are context, relevance, and accuracy in the response.\",\n \"Great question! With streaming enabled, you can see my response in real-time as I process your query. This creates a more interactive and engaging experience for users.\",\n ]\n\n const randomResponse =\n responses[Math.floor(Math.random() * responses.length)]\n await simulateStreaming(randomResponse)\n setIsLoading(false)\n }\n\n React.useEffect(() => {\n if (scrollAreaRef.current) {\n scrollAreaRef.current.scrollTop = scrollAreaRef.current.scrollHeight\n }\n }, [messages])\n\n return (\n
\n \n \n \n \n AI Chat with Streaming and Thinking\n \n
\n
\n \n \n
\n
\n \n setApiKey(e.target.value)}\n />\n
\n
\n
\n setShowThinking(e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n \n
\n
\n \n \n
\n {messages.map((message) => (\n \n {message.role === \"assistant\" && (\n \n \n AI\n \n \n )}\n \n {message.thinking && (\n
\n

\n \n {message.thinking}\n

\n
\n )}\n \n

\n {message.content}\n {message.isStreaming && (\n \n )}\n

\n
\n
\n {message.role === \"user\" && (\n \n U\n \n )}\n \n ))}\n {isLoading &&\n messages[messages.length - 1]?.role !== \"assistant\" && (\n
\n \n \n AI\n \n \n
\n \n Thinking...\n
\n
\n )}\n \n \n {\n e.preventDefault()\n handleSend()\n }}\n className=\"flex gap-2\"\n >\n setInput(e.target.value)}\n disabled={isLoading || !apiKey}\n />\n \n \n \n \n {!apiKey && (\n

\n Please enter your API key to start chatting\n

\n )}\n \n \n \n )\n}\n" }, { "path": "blocks/ai-image-generator-01/page.tsx", "type": "registry:page", "target": "app/ai-image-generator/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Download,\n ImageIcon,\n Loader2,\n Move,\n RotateCw,\n Upload,\n Wand2,\n ZoomIn,\n ZoomOut,\n} from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Slider } from \"@/components/ui/slider\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst AI_PROVIDERS = [\n { value: \"openai\", label: \"OpenAI DALL-E\" },\n { value: \"stability\", label: \"Stability AI\" },\n { value: \"midjourney\", label: \"Midjourney\" },\n { value: \"google\", label: \"Google Imagen\" },\n { value: \"anthropic\", label: \"Anthropic\" },\n]\n\nconst IMAGE_SIZES = [\n { value: \"1024x1024\", label: \"Square (1024x1024)\" },\n { value: \"1024x1792\", label: \"Portrait (1024x1792)\" },\n { value: \"1792x1024\", label: \"Landscape (1792x1024)\" },\n]\n\nexport default function AIImageGeneratorBlock() {\n const [prompt, setPrompt] = React.useState(\"\")\n const [provider, setProvider] = React.useState(\"openai\")\n const [apiKey, setApiKey] = React.useState(\"\")\n const [imageSize, setImageSize] = React.useState(\"1024x1024\")\n const [isGenerating, setIsGenerating] = React.useState(false)\n const [uploadedImage, setUploadedImage] = React.useState(null)\n const [generatedImage, setGeneratedImage] = React.useState(\n null\n )\n const [brightness, setBrightness] = React.useState([100])\n const [contrast, setContrast] = React.useState([100])\n const [saturation, setSaturation] = React.useState([100])\n const fileInputRef = React.useRef(null)\n\n const handleFileUpload = (event: React.ChangeEvent) => {\n const file = event.target.files?.[0]\n if (file) {\n const reader = new FileReader()\n reader.onload = (e) => {\n setUploadedImage(e.target?.result as string)\n }\n reader.readAsDataURL(file)\n }\n }\n\n const handleGenerate = async () => {\n if (!prompt.trim() || !apiKey) return\n\n setIsGenerating(true)\n\n // Simulate image generation\n await new Promise((resolve) => setTimeout(resolve, 3000))\n\n // Use a placeholder image service\n const seed = Math.floor(Math.random() * 1000)\n const [width, height] = imageSize.split(\"x\")\n setGeneratedImage(`https://picsum.photos/seed/${seed}/${width}/${height}`)\n\n setIsGenerating(false)\n }\n\n const handleDownload = () => {\n if (!generatedImage) return\n const link = document.createElement(\"a\")\n link.href = generatedImage\n link.download = \"ai-generated-image.png\"\n link.click()\n }\n\n const resetEditor = () => {\n setBrightness([100])\n setContrast([100])\n setSaturation([100])\n }\n\n const imageStyle = {\n filter: `brightness(${brightness[0]}%) contrast(${contrast[0]}%) saturate(${saturation[0]}%)`,\n }\n\n return (\n
\n \n \n \n \n AI Image Generator with Editor\n \n
\n
\n \n \n
\n
\n \n setApiKey(e.target.value)}\n />\n
\n
\n \n \n
\n
\n
\n \n \n \n Generate\n Edit & Upload\n \n\n \n
\n \n setPrompt(e.target.value)}\n rows={4}\n disabled={!apiKey}\n />\n
\n\n \n {isGenerating ? (\n <>\n \n Generating Image...\n \n ) : (\n <>\n \n Generate Image\n \n )}\n \n\n {generatedImage && (\n
\n
\n \n
\n
\n \n \n \n Regenerate\n \n
\n
\n )}\n\n {!apiKey && (\n

\n Please enter your API key to start generating images\n

\n )}\n
\n\n \n
\n
\n \n
\n \n fileInputRef.current?.click()}\n >\n \n Browse\n \n
\n
\n\n {(uploadedImage || generatedImage) && (\n
\n
\n \n
\n\n \n \n Image Editor\n \n \n
\n
\n \n \n {brightness[0]}%\n \n
\n \n
\n\n
\n
\n \n \n {contrast[0]}%\n \n
\n \n
\n\n
\n
\n \n \n {saturation[0]}%\n \n
\n \n
\n\n
\n \n Reset\n \n \n
\n
\n
\n
\n )}\n\n {!uploadedImage && !generatedImage && (\n
\n \n

\n Upload an image or generate one to start editing\n

\n
\n )}\n
\n
\n
\n
\n
\n
\n )\n}\n" }, { "path": "blocks/ai-video-generator-01/page.tsx", "type": "registry:page", "target": "app/ai-video-generator/page.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Clock,\n Download,\n FileVideo,\n Film,\n Loader2,\n Pause,\n Play,\n Sparkles,\n Video,\n} from \"lucide-react\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Progress } from \"@/components/ui/progress\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\nconst AI_PROVIDERS = [\n { value: \"runway\", label: \"Runway Gen-3\" },\n { value: \"pika\", label: \"Pika Labs\" },\n { value: \"stability\", label: \"Stability AI Video\" },\n { value: \"google\", label: \"Google Veo\" },\n { value: \"openai\", label: \"OpenAI Sora\" },\n]\n\nconst VIDEO_DURATIONS = [\n { value: \"3\", label: \"3 seconds\" },\n { value: \"5\", label: \"5 seconds\" },\n { value: \"10\", label: \"10 seconds\" },\n { value: \"15\", label: \"15 seconds\" },\n]\n\nconst VIDEO_STYLES = [\n { value: \"realistic\", label: \"Realistic\" },\n { value: \"cinematic\", label: \"Cinematic\" },\n { value: \"animated\", label: \"Animated\" },\n { value: \"artistic\", label: \"Artistic\" },\n { value: \"abstract\", label: \"Abstract\" },\n]\n\ninterface GeneratedVideo {\n id: string\n prompt: string\n url: string\n thumbnail: string\n duration: string\n style: string\n timestamp: Date\n}\n\nexport default function AIVideoGeneratorBlock() {\n const [prompt, setPrompt] = React.useState(\"\")\n const [provider, setProvider] = React.useState(\"runway\")\n const [apiKey, setApiKey] = React.useState(\"\")\n const [duration, setDuration] = React.useState(\"5\")\n const [style, setStyle] = React.useState(\"realistic\")\n const [isGenerating, setIsGenerating] = React.useState(false)\n const [progress, setProgress] = React.useState(0)\n const [generatedVideos, setGeneratedVideos] = React.useState<\n GeneratedVideo[]\n >([])\n const [selectedVideo, setSelectedVideo] =\n React.useState(null)\n const [isPlaying, setIsPlaying] = React.useState(false)\n const videoRef = React.useRef(null)\n\n const handleGenerate = async () => {\n if (!prompt.trim() || !apiKey) return\n\n setIsGenerating(true)\n setProgress(0)\n\n // Simulate video generation progress\n const interval = setInterval(() => {\n setProgress((prev) => {\n if (prev >= 100) {\n clearInterval(interval)\n return 100\n }\n return prev + 5\n })\n }, 300)\n\n // Simulate video generation\n await new Promise((resolve) => setTimeout(resolve, 6000))\n\n const newVideo: GeneratedVideo = {\n id: Date.now().toString(),\n prompt: prompt,\n url: \"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\",\n thumbnail: `https://picsum.photos/seed/${Math.floor(Math.random() * 1000)}/640/360`,\n duration: duration,\n style: style,\n timestamp: new Date(),\n }\n\n setGeneratedVideos((prev) => [newVideo, ...prev])\n setSelectedVideo(newVideo)\n setIsGenerating(false)\n setProgress(0)\n }\n\n const togglePlayPause = () => {\n if (!videoRef.current) return\n\n if (isPlaying) {\n videoRef.current.pause()\n } else {\n videoRef.current.play()\n }\n setIsPlaying(!isPlaying)\n }\n\n const handleDownload = () => {\n if (!selectedVideo) return\n const link = document.createElement(\"a\")\n link.href = selectedVideo.url\n link.download = `ai-video-${selectedVideo.id}.mp4`\n link.click()\n }\n\n return (\n
\n \n \n \n \n
\n
\n \n \n
\n
\n \n setApiKey(e.target.value)}\n />\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n setPrompt(e.target.value)}\n rows={4}\n disabled={!apiKey || isGenerating}\n />\n
\n\n \n {isGenerating ? (\n <>\n \n Generating Video...\n \n ) : (\n <>\n \n Generate Video\n \n )}\n \n\n {isGenerating && (\n \n \n
\n
\n \n Processing video generation...\n \n {progress}%\n
\n \n
\n
\n
\n )}\n\n {selectedVideo && (\n \n \n
\n
\n Preview\n

\n {selectedVideo.prompt}\n

\n
\n
\n \n \n {selectedVideo.duration}s\n \n \n {selectedVideo.style}\n \n
\n
\n
\n \n
\n setIsPlaying(true)}\n onPause={() => setIsPlaying(false)}\n />\n
\n \n {isPlaying ? (\n \n ) : (\n \n )}\n \n
\n
\n
\n \n \n \n Generate New\n \n
\n
\n
\n )}\n\n {!apiKey && (\n \n \n \n

\n Please enter your API key to start generating videos\n

\n
\n
\n )}\n
\n\n
\n \n \n Generated Videos\n \n \n {generatedVideos.length === 0 ? (\n
\n No videos generated yet\n
\n ) : (\n generatedVideos.map((video) => (\n setSelectedVideo(video)}\n >\n \n
\n \n
\n \n
\n
\n

{video.prompt}

\n
\n \n \n {video.duration}s\n \n
\n
\n
\n ))\n )}\n \n \n\n \n \n Tips\n \n \n

• Be specific and descriptive in your prompts

\n

• Describe camera movements and angles

\n

• Mention lighting and atmosphere

\n

• Specify the mood and style you want

\n

• Keep prompts under 500 characters

\n
\n
\n
\n
\n
\n
\n
\n )\n}\n" } ] }