Why Choose Velora UI?
-- Built for modern React applications with developer experience and accessibility in mind. -
++ Built for + Modern React + Applications +
+ ++ With developer experience and accessibility in mind, we've created the most comprehensive component library for your next project. +
++ Trusted by Developers Worldwide +
++ Join thousands of developers building amazing applications +
+
- Ready to Build Something Amazing?
+
+ {/* Animated gradient background */}
+
+
+
+ {/* Floating elements */}
+
+
+
+
+
+ {/* Grid pattern overlay */}
+
+
+
+
+ {/* Badge */}
+
+
+
+ Ready to Launch?
+
+
+
+ {/* Main heading */}
+
+
+ Ready to Build
+
+ Something Amazing?
+
-
- Join thousands of developers who are already building beautiful
- interfaces with Velora UI.
+
+
+ Join thousands of developers who are already building beautiful, accessible, and performant interfaces with Velora UI.
-
- } size="lg" asChild>
- Start Building
+ {/* Stats */}
+
+ {stats.map((stat, index) => (
+
+
+
+
+
+ {stat.value}
+
+
+ {stat.label}
+
+
+ ))}
+
+
+ {/* CTA Buttons */}
+
+
- } size="lg" variant="outline" asChild>
-
- Star on GitHub
+
+
+
+ {/* Additional info */}
+
+
+
+
+ Free & Open Source
+
+
+
+ MIT License
+
+
+
+ Active Community
+
+
+
+ Regular Updates
+
+
+
+ {/* Trust badges */}
+
+
+
+ TypeScript Support
+
+
+
+ WCAG 2.1 AA
+
+
+
+ Tree Shakable
+
+
+
+
+ {/* Decorative elements */}
+
+
+
+
+ {/* Bottom gradient fade */}
+
);
}
diff --git a/components/sections/features.tsx b/components/sections/features.tsx
index 35fc440..c4597b1 100644
--- a/components/sections/features.tsx
+++ b/components/sections/features.tsx
@@ -1,72 +1,267 @@
+"use client"
+
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
+import { Palette, Code2, Zap, Shield, Sparkles, Play, Copy, Check } from "lucide-react"
+import { useState } from "react"
export function Features() {
+ const [copiedDemo, setCopiedDemo] = useState(false)
+ const [activeDemo, setActiveDemo] = useState("primary")
+
+ const handleCopyDemo = () => {
+ navigator.clipboard.writeText(``)
+ setCopiedDemo(true)
+ setTimeout(() => setCopiedDemo(false), 2000)
+ }
+
+ const buttonVariants = [
+ { name: "primary", label: "Primary" },
+ { name: "secondary", label: "Secondary" },
+ { name: "outline", label: "Outline" },
+ { name: "ghost", label: "Ghost" },
+ ]
+
return (
-
-
-
- Everything You Need
-
- A comprehensive set of components and utilities to build any interface.
+
+ {/* Background elements */}
+
+
+
+
+
+
+
+
+ Everything You Need
+
+
+
+ Premium Features
+
+ Built for Developers
+
+
+
+ A comprehensive set of components and utilities to build any interface with speed and precision.
-
-
-
-
- Component Showcase
- Live Demo
+
+ {/* Interactive Component Showcase */}
+
+
+
+
+
+
+
+
+
+ Interactive Showcase
+
+
+ Live Demo
+
+
- Interactive examples of our components in action
+
+ Experience our components in action with real-time interactions
+
-
-
-
-
-
-
+
+
+ {/* Button Demo */}
+
+
+ {buttonVariants.map((variant) => (
+
+ ))}
+
+
+ {/* Code display */}
+
+
+
+
+
+
+
+
+
+
+
+ <Button{" "}
+ variant
+ =
+ "{activeDemo}"
+ >
+ Click me!
+ </Button>
+
+
+
-
- Card Component
-
- This is an example of our Card component with proper spacing and typography.
-
+
+ {/* Feature cards mini demo */}
+
+
+
+ TypeScript
+ Full type safety
+
+
+
+ Fast
+ Optimized bundle
+
-
-
- Dark Mode Support
- Seamless dark mode with system preference detection
+ {/* Dark Mode & Theming */}
+
+
+
+
+
+
+
+
+
+ Dark Mode & Theming
+
+ Customizable
+
+
+
+
+ Seamless dark mode with system preference detection and custom themes
+
-
+
+
-
- Theme
- Auto
+
+ Theme Mode
+ Auto
-
-
- Light Mode
+
+
+
+
+
+
+ Light Mode
+
+
+
-
- Dark Mode
+
+
+
+
+
+ Dark Mode
+
+
+
+
+ {/* Color palette preview */}
+
+ {['bg-blue-500', 'bg-purple-500', 'bg-pink-500', 'bg-green-500', 'bg-yellow-500', 'bg-red-500'].map((color, i) => (
+
+ ))}
+
+
+ {/* Feature grid */}
+
+ {[
+ {
+ icon: Palette,
+ title: "Beautiful Design",
+ description: "Carefully crafted components with modern design principles and attention to detail.",
+ gradient: "from-blue-500 to-cyan-500",
+ delay: "0"
+ },
+ {
+ icon: Zap,
+ title: "Developer Experience",
+ description: "Built with TypeScript, excellent IntelliSense, and comprehensive documentation.",
+ gradient: "from-yellow-500 to-orange-500",
+ delay: "100"
+ },
+ {
+ icon: Shield,
+ title: "Accessibility First",
+ description: "WCAG compliant components with proper ARIA attributes and keyboard navigation.",
+ gradient: "from-green-500 to-emerald-500",
+ delay: "200"
+ },
+ {
+ icon: Code2,
+ title: "Customizable",
+ description: "Easily customize components with CSS variables and Tailwind CSS utilities.",
+ gradient: "from-purple-500 to-pink-500",
+ delay: "300"
+ },
+ ].map((feature, index) => (
+
+
+
+
+
+
+
+
+ {feature.title}
+
+
+
+
+
+ {feature.description}
+
+
+
+ {/* Shimmer effect */}
+
+
+ ))}
+
)
diff --git a/components/sections/hero.tsx b/components/sections/hero.tsx
index 8f763bc..9004eee 100644
--- a/components/sections/hero.tsx
+++ b/components/sections/hero.tsx
@@ -1,47 +1,146 @@
+"use client"
+
import Link from "next/link";
import { Button } from "@/components/ui/button";
-import { ArrowRight, Github } from "lucide-react";
+import { ArrowRight, Github, Sparkles, Zap } from "lucide-react";
+import { FloatingElements, ParticleField } from "@/components/ui/floating-elements";
export function Hero() {
return (
-
-
-
-
-
-
- Build Beautiful UIs with{" "}
- Velora
+
+ {/* Animated gradient background */}
+
+
+
+ {/* Floating elements and particles */}
+
+
+
+ {/* Grid pattern overlay */}
+
+
+
+
+ {/* Badge */}
+
+
+
+
+ ✨ New v2.0 Released
+
+
+
+
+
+ {/* Main heading */}
+
+
+ Build Beautiful
+
+ UIs with Velora
+
-
+
A modern, accessible, and customizable React component library
built with Tailwind CSS. Ship faster with pre-built components
that look great out of the box.
-
- } size="lg" asChild>
- Get Started
+ {/* CTA Buttons */}
+
+
- } size="lg" variant="outline" asChild>
-
+
+
-
-
-
-
- {`import { Button } from '@velora/ui'
+ {/* Stats */}
+
+ {[
+ { label: "Components", value: "50+" },
+ { label: "Downloads", value: "100K+" },
+ { label: "GitHub Stars", value: "2.5K+" },
+ { label: "Contributors", value: "25+" }
+ ].map((stat, index) => (
+
+ {stat.value}
+ {stat.label}
+
+ ))}
+
+
+ {/* Code preview */}
+
+
+ {/* Glow effect */}
+
+
+ {/* Code block */}
+
+
+
+
+
+
+
+
+
+ import{" "}
+ {"{ Button }"}{" "}
+ from{" "}
+ '@velora/ui'
+ {"\n\n"}
+ function{" "}
+ App
+ () {"{"}
+ {"\n "}
+ return{" "}
+ <Button{" "}
+ variant
+ =
+ "primary"
+ >
+ {"\n "}Hello Velora! ✨
+ {"\n "}
+ </Button>
+ {"\n"}
+ {"}"}
+
+
+
+ {/* Shimmer effect */}
+
+
+
+
-function App() {
- return
-}`}
-
-
+ {/* Scroll indicator */}
+
+
+
diff --git a/components/sections/testimonials.tsx b/components/sections/testimonials.tsx
index b815450..81a6012 100644
--- a/components/sections/testimonials.tsx
+++ b/components/sections/testimonials.tsx
@@ -1,68 +1,294 @@
+"use client"
+
import { Card, CardContent } from "@/components/ui/card"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+import { Button } from "@/components/ui/button"
+import { ChevronLeft, ChevronRight, Star, Quote, Sparkles } from "lucide-react"
+import { useState, useEffect } from "react"
export function Testimonials() {
+ const [currentIndex, setCurrentIndex] = useState(0)
+ const [isAutoPlaying, setIsAutoPlaying] = useState(true)
+
const testimonials = [
{
content:
- "Velora UI has transformed how we build interfaces. The components are beautiful, accessible, and incredibly easy to customize.",
+ "Velora UI has transformed how we build interfaces. The components are beautiful, accessible, and incredibly easy to customize. Our development speed increased by 300%!",
author: "Sarah Chen",
role: "Frontend Lead",
company: "TechCorp",
avatar: "/placeholder.svg?height=40&width=40",
+ rating: 5,
+ gradient: "from-blue-500 to-cyan-500"
},
{
content:
- "The developer experience is outstanding. TypeScript support and documentation make it a joy to work with.",
+ "The developer experience is outstanding. TypeScript support and documentation make it a joy to work with. Best component library I've ever used!",
author: "Marcus Johnson",
role: "Senior Developer",
company: "StartupXYZ",
avatar: "/placeholder.svg?height=40&width=40",
+ rating: 5,
+ gradient: "from-purple-500 to-pink-500"
},
{
content:
- "Finally, a component library that doesn't compromise on accessibility. Our users love the improved experience.",
+ "Finally, a component library that doesn't compromise on accessibility. Our users love the improved experience and we've seen engagement increase significantly.",
author: "Emily Rodriguez",
role: "UX Engineer",
company: "DesignStudio",
avatar: "/placeholder.svg?height=40&width=40",
+ rating: 5,
+ gradient: "from-green-500 to-emerald-500"
+ },
+ {
+ content:
+ "The customization options are endless. We were able to match our brand perfectly while maintaining the high quality and accessibility standards.",
+ author: "David Kim",
+ role: "Lead Designer",
+ company: "CreativeAgency",
+ avatar: "/placeholder.svg?height=40&width=40",
+ rating: 5,
+ gradient: "from-orange-500 to-red-500"
+ },
+ {
+ content:
+ "Integration was seamless and the performance is incredible. Our bundle size actually decreased while adding more features. Highly recommended!",
+ author: "Lisa Wang",
+ role: "Tech Lead",
+ company: "InnovateLab",
+ avatar: "/placeholder.svg?height=40&width=40",
+ rating: 5,
+ gradient: "from-indigo-500 to-purple-500"
},
]
+ const nextTestimonial = () => {
+ setCurrentIndex((prev) => (prev + 1) % testimonials.length)
+ }
+
+ const prevTestimonial = () => {
+ setCurrentIndex((prev) => (prev - 1 + testimonials.length) % testimonials.length)
+ }
+
+ const goToTestimonial = (index: number) => {
+ setCurrentIndex(index)
+ }
+
+ // Auto-play functionality
+ useEffect(() => {
+ if (!isAutoPlaying) return
+
+ const interval = setInterval(() => {
+ nextTestimonial()
+ }, 5000)
+
+ return () => clearInterval(interval)
+ }, [isAutoPlaying, currentIndex])
+
+ const handleMouseEnter = () => setIsAutoPlaying(false)
+ const handleMouseLeave = () => setIsAutoPlaying(true)
+
return (
-
-
-
- Loved by Developers
- See what developers are saying about Velora UI.
+
+ {/* Background elements */}
+
+
+ {/* Animated background shapes */}
+
+
+
+
+ {/* Header */}
+
+
+
+
+ 5.0 Rating
+
+
+
+
+
+ Loved by
+
+ Developers Worldwide
+
+
+
+ See what developers are saying about their experience with Velora UI.
+
+
+
+
+ {/* Main testimonial carousel */}
+
+
+ {/* Main testimonial card */}
+
+
+
+
+
+
+ {/* Quote icon */}
+
+
+
+
+ {/* Rating stars */}
+
+ {Array.from({ length: testimonials[currentIndex].rating }).map((_, i) => (
+
+ ))}
+
+
+ {/* Testimonial content */}
+
+ "{testimonials[currentIndex].content}"
+
+
+ {/* Author info */}
+
+
+
+
+ {testimonials[currentIndex].author
+ .split(" ")
+ .map((n) => n[0])
+ .join("")}
+
+
+
+
+
+ {testimonials[currentIndex].author}
+
+
+ {testimonials[currentIndex].role} at {testimonials[currentIndex].company}
+
+
+
+
+
+
+ {/* Shimmer effect */}
+
+
+
+
+ {/* Navigation buttons */}
+
+
+
+
+
+ {/* Dots indicator */}
+
+ {testimonials.map((_, index) => (
+
-
- {testimonials.map((testimonial, index) => (
-
-
- "{testimonial.content}"
+ {/* Mini testimonials grid */}
+
+ {testimonials.slice(0, 3).map((testimonial, index) => (
+ goToTestimonial(index)}
+ >
+
+
+
+
+ {Array.from({ length: testimonial.rating }).map((_, i) => (
+
+ ))}
+
+
+
+ "{testimonial.content}"
+
+
-
-
-
+
+
+
{testimonial.author
.split(" ")
.map((n) => n[0])
.join("")}
+
- {testimonial.author}
-
- {testimonial.role} at {testimonial.company}
+ {testimonial.author}
+
+ {testimonial.role}
+
+ {/* Shimmer effect */}
+
))}
+
+ {/* Trust indicators */}
+
+
+
+
+ Trusted by 10K+ developers
+
+
+
+
+ 4.9/5 average rating
+
+
+
)
diff --git a/components/ui/floating-elements.tsx b/components/ui/floating-elements.tsx
new file mode 100644
index 0000000..82b825a
--- /dev/null
+++ b/components/ui/floating-elements.tsx
@@ -0,0 +1,84 @@
+"use client"
+
+import React from 'react'
+
+export function FloatingElements() {
+ return (
+
+ {/* Large floating shapes */}
+
+
+
+
+ {/* Medium floating shapes */}
+
+
+
+ {/* Small accent shapes */}
+
+
+
+ {/* Geometric shapes */}
+
+
+
+ {/* Animated particles */}
+
+ {Array.from({ length: 20 }).map((_, i) => (
+
+ ))}
+
+
+ )
+}
+
+export function ParticleField() {
+ return (
+
+
+ {/* Glowing orbs */}
+ {Array.from({ length: 8 }).map((_, i) => (
+
+ ))}
+
+ {/* Floating dots */}
+ {Array.from({ length: 15 }).map((_, i) => (
+
+ ))}
+
+
+ )
+}
\ No newline at end of file
diff --git a/components/ui/scroll-animations.tsx b/components/ui/scroll-animations.tsx
new file mode 100644
index 0000000..95d58dc
--- /dev/null
+++ b/components/ui/scroll-animations.tsx
@@ -0,0 +1,166 @@
+"use client"
+
+import { useEffect, useRef, useState } from 'react'
+
+// Hook for scroll-triggered animations
+export function useScrollAnimation(threshold = 0.1) {
+ const [isVisible, setIsVisible] = useState(false)
+ const elementRef = useRef(null)
+
+ useEffect(() => {
+ const observer = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting) {
+ setIsVisible(true)
+ // Once visible, stop observing to prevent re-triggering
+ observer.unobserve(entry.target)
+ }
+ },
+ { threshold }
+ )
+
+ const currentElement = elementRef.current
+ if (currentElement) {
+ observer.observe(currentElement)
+ }
+
+ return () => {
+ if (currentElement) {
+ observer.unobserve(currentElement)
+ }
+ }
+ }, [threshold])
+
+ return { elementRef, isVisible }
+}
+
+// Scroll reveal component
+interface ScrollRevealProps {
+ children: React.ReactNode
+ className?: string
+ animation?: 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'slide-in-left' | 'slide-in-right' | 'scale-in'
+ delay?: number
+ threshold?: number
+}
+
+export function ScrollReveal({
+ children,
+ className = '',
+ animation = 'fade-in-up',
+ delay = 0,
+ threshold = 0.1
+}: ScrollRevealProps) {
+ const { elementRef, isVisible } = useScrollAnimation(threshold)
+
+ return (
+
+ {children}
+
+ )
+}
+
+// Staggered children animation
+interface StaggeredAnimationProps {
+ children: React.ReactNode[]
+ className?: string
+ staggerDelay?: number
+ animation?: 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'slide-in-left' | 'slide-in-right' | 'scale-in'
+}
+
+export function StaggeredAnimation({
+ children,
+ className = '',
+ staggerDelay = 100,
+ animation = 'fade-in-up'
+}: StaggeredAnimationProps) {
+ const { elementRef, isVisible } = useScrollAnimation()
+
+ return (
+
+ {children.map((child, index) => (
+
+ {child}
+
+ ))}
+
+ )
+}
+
+// Parallax scroll effect
+interface ParallaxProps {
+ children: React.ReactNode
+ speed?: number
+ className?: string
+}
+
+export function Parallax({ children, speed = 0.5, className = '' }: ParallaxProps) {
+ const elementRef = useRef(null)
+ const [offset, setOffset] = useState(0)
+
+ useEffect(() => {
+ const handleScroll = () => {
+ if (!elementRef.current) return
+
+ const rect = elementRef.current.getBoundingClientRect()
+ const scrolled = window.pageYOffset
+ const rate = scrolled * -speed
+
+ if (rect.top <= window.innerHeight && rect.bottom >= 0) {
+ setOffset(rate)
+ }
+ }
+
+ window.addEventListener('scroll', handleScroll)
+ return () => window.removeEventListener('scroll', handleScroll)
+ }, [speed])
+
+ return (
+
+ {children}
+
+ )
+}
+
+// Smooth scroll to element
+export function useSmoothScroll() {
+ const scrollTo = (elementId: string, offset = 0) => {
+ const element = document.getElementById(elementId)
+ if (!element) return
+
+ const targetPosition = element.offsetTop - offset
+ window.scrollTo({
+ top: targetPosition,
+ behavior: 'smooth'
+ })
+ }
+
+ return { scrollTo }
+}
\ No newline at end of file
diff --git a/tailwind.config.js b/tailwind.config.js
index c3828f8..b466757 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -57,7 +57,119 @@ module.exports = {
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
+ animation: {
+ "fade-in": "fadeIn 0.6s ease-out forwards",
+ "fade-in-up": "fadeInUp 0.6s ease-out forwards",
+ "fade-in-down": "fadeInDown 0.6s ease-out forwards",
+ "slide-in-left": "slideInLeft 0.6s ease-out forwards",
+ "slide-in-right": "slideInRight 0.6s ease-out forwards",
+ "scale-in": "scaleIn 0.6s ease-out forwards",
+ "bounce-gentle": "bounceGentle 2s ease-in-out infinite",
+ "float": "float 6s ease-in-out infinite",
+ "glow": "glow 2s ease-in-out infinite alternate",
+ "gradient-x": "gradientX 15s ease infinite",
+ "gradient-y": "gradientY 15s ease infinite",
+ "gradient-xy": "gradientXY 15s ease infinite",
+ "shimmer": "shimmer 2.5s linear infinite",
+ "pulse-glow": "pulseGlow 2s ease-in-out infinite",
+ "rotate-slow": "rotateSlow 20s linear infinite",
+ "wiggle": "wiggle 1s ease-in-out infinite",
+ },
+ keyframes: {
+ fadeIn: {
+ "0%": { opacity: "0" },
+ "100%": { opacity: "1" },
+ },
+ fadeInUp: {
+ "0%": { opacity: "0", transform: "translateY(30px)" },
+ "100%": { opacity: "1", transform: "translateY(0)" },
+ },
+ fadeInDown: {
+ "0%": { opacity: "0", transform: "translateY(-30px)" },
+ "100%": { opacity: "1", transform: "translateY(0)" },
+ },
+ slideInLeft: {
+ "0%": { opacity: "0", transform: "translateX(-30px)" },
+ "100%": { opacity: "1", transform: "translateX(0)" },
+ },
+ slideInRight: {
+ "0%": { opacity: "0", transform: "translateX(30px)" },
+ "100%": { opacity: "1", transform: "translateX(0)" },
+ },
+ scaleIn: {
+ "0%": { opacity: "0", transform: "scale(0.9)" },
+ "100%": { opacity: "1", transform: "scale(1)" },
+ },
+ bounceGentle: {
+ "0%, 100%": { transform: "translateY(0)" },
+ "50%": { transform: "translateY(-10px)" },
+ },
+ float: {
+ "0%, 100%": { transform: "translateY(0px)" },
+ "50%": { transform: "translateY(-20px)" },
+ },
+ glow: {
+ "0%": { boxShadow: "0 0 20px rgba(59, 130, 246, 0.5)" },
+ "100%": { boxShadow: "0 0 30px rgba(59, 130, 246, 0.8)" },
+ },
+ gradientX: {
+ "0%, 100%": {
+ "background-size": "200% 200%",
+ "background-position": "left center",
+ },
+ "50%": {
+ "background-size": "200% 200%",
+ "background-position": "right center",
+ },
+ },
+ gradientY: {
+ "0%, 100%": {
+ "background-size": "200% 200%",
+ "background-position": "center top",
+ },
+ "50%": {
+ "background-size": "200% 200%",
+ "background-position": "center bottom",
+ },
+ },
+ gradientXY: {
+ "0%, 100%": {
+ "background-size": "400% 400%",
+ "background-position": "left center",
+ },
+ "50%": {
+ "background-size": "400% 400%",
+ "background-position": "right center",
+ },
+ },
+ shimmer: {
+ "0%": { transform: "translateX(-100%)" },
+ "100%": { transform: "translateX(100%)" },
+ },
+ pulseGlow: {
+ "0%, 100%": {
+ opacity: "1",
+ boxShadow: "0 0 20px rgba(59, 130, 246, 0.4)"
+ },
+ "50%": {
+ opacity: "0.8",
+ boxShadow: "0 0 40px rgba(59, 130, 246, 0.8)"
+ },
+ },
+ rotateSlow: {
+ "0%": { transform: "rotate(0deg)" },
+ "100%": { transform: "rotate(360deg)" },
+ },
+ wiggle: {
+ "0%, 100%": { transform: "rotate(-3deg)" },
+ "50%": { transform: "rotate(3deg)" },
+ },
+ },
+ backgroundImage: {
+ 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
+ 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
+ },
},
},
- plugins: [],
+ plugins: [require("tailwindcss-animate")],
}
+ Ready to Build + + Something Amazing? +
-- Join thousands of developers who are already building beautiful - interfaces with Velora UI. + +
+ Join thousands of developers who are already building beautiful, accessible, and performant interfaces with Velora UI.
Everything You Need
-
- A comprehensive set of components and utilities to build any interface.
+
+ A comprehensive set of components and utilities to build any interface with speed and precision.
- This is an example of our Card component with proper spacing and typography.
- Full type safety Optimized bundle
+
A modern, accessible, and customizable React component library
built with Tailwind CSS. Ship faster with pre-built components
that look great out of the box.
See what developers are saying about Velora UI.
+ See what developers are saying about their experience with Velora UI.
+
+ Premium Features
+
+
+
+ Built for Developers
+
+ <Button{" "}
+ variant
+ =
+ "{activeDemo}"
+ >
+ Click me!
+ </Button>
+
+ Card Component
- TypeScript
+ Fast
+
- Build Beautiful UIs with{" "}
- Velora
+
+ Build Beautiful
+
+ UIs with Velora
+
-
-
+ {/* Scroll indicator */}
+
- {`import { Button } from '@velora/ui'
+ {/* Stats */}
+
-
+
+
+ {/* Shimmer effect */}
+
+
+ import{" "}
+ {"{ Button }"}{" "}
+ from{" "}
+ '@velora/ui'
+ {"\n\n"}
+ function{" "}
+ App
+ () {"{"}
+ {"\n "}
+ return{" "}
+ <Button{" "}
+ variant
+ =
+ "primary"
+ >
+ {"\n "}Hello Velora! ✨
+ {"\n "}
+ </Button>
+ {"\n"}
+ {"}"}
+
+ Loved by Developers
-
+ Loved by
+
+
+
+ Developers Worldwide
+
+
+ "{testimonials[currentIndex].content}"
+
+
+ {/* Author info */}
+ "{testimonial.content}"
+ {/* Mini testimonials grid */}
+
+ "{testimonial.content}"
+
+