@xenterprises/nuxt-x-marketing 0.0.23 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +22 -0
- package/.playground/app.config.ts +44 -45
- package/.playground/app.vue +263 -0
- package/.playground/components/AppFooter.vue +103 -0
- package/.playground/components/AppHeader.vue +41 -0
- package/.playground/components/CodeExample.vue +70 -0
- package/.playground/components/ComponentPlayground.vue +117 -0
- package/.playground/components/DocsHeader.vue +19 -0
- package/.playground/layouts/default.vue +13 -3
- package/.playground/layouts/docs-layout.vue +161 -0
- package/.playground/layouts/docs.vue +11 -0
- package/.playground/package-lock.json +6 -0
- package/.playground/pages/blog/author.vue +145 -0
- package/.playground/pages/blog/card.vue +149 -0
- package/.playground/pages/blog/cta.vue +131 -0
- package/.playground/pages/blog/detail.vue +379 -0
- package/.playground/pages/blog/list.vue +261 -0
- package/.playground/pages/blog/navigation.vue +228 -0
- package/.playground/pages/blog/sidebar.vue +279 -0
- package/.playground/pages/config.vue +289 -0
- package/.playground/pages/content/comparison.vue +253 -0
- package/.playground/pages/content/cta.vue +245 -0
- package/.playground/pages/content/features.vue +217 -0
- package/.playground/pages/content/newsletter-section.vue +260 -0
- package/.playground/pages/content/newsletter.vue +200 -0
- package/.playground/pages/content/pricing.vue +335 -0
- package/.playground/pages/content/testimonials.vue +188 -0
- package/.playground/pages/hero.vue +257 -0
- package/.playground/pages/index.vue +379 -2
- package/.playground/pages/layout/footer.vue +210 -0
- package/.playground/pages/layout/legal-footer.vue +121 -0
- package/.playground/pages/layout/navbar.vue +285 -0
- package/.playground/pages/layout/section.vue +266 -0
- package/.playground/pages/layout/x-legal.vue +199 -0
- package/.playground/pages/modals/feature-modal.vue +320 -0
- package/.playground/pages/modals/image-lightbox.vue +277 -0
- package/.playground/pages/modals/video-modal.vue +222 -0
- package/.playground/pages/notifications/announcement-bar.vue +164 -0
- package/.playground/pages/notifications/cookie-banner.vue +210 -0
- package/.playground/pages/notifications/cookie-toast.vue +143 -0
- package/.playground/pages/notifications/gdpr.vue +276 -0
- package/.playground/pages/notifications/social-proof-toast.vue +255 -0
- package/.playground/pages/ui/badge.vue +161 -0
- package/.playground/pages/ui/bg-pattern.vue +177 -0
- package/.playground/pages/ui/glass-card.vue +179 -0
- package/.playground/pages/ui/glow-divider.vue +179 -0
- package/.playground/pages/ui/promo-card.vue +259 -0
- package/.playground/pages/ui/section-stitch.vue +411 -0
- package/.playground/pages/utilities/back-to-top.vue +153 -0
- package/.playground/pages/utilities/popup-chat.vue +224 -0
- package/README.md +799 -164
- package/app/app.config.ts +88 -2
- package/app/app.vue +106 -11
- package/app/assets/css/x-marketing.css +668 -0
- package/app/components/X/Footer/XLegal/index.vue +63 -26
- package/app/components/X/Footer/index.vue +89 -89
- package/app/components/X/Header/App.vue +63 -0
- package/app/components/X/Mark/Blog/Author.vue +170 -0
- package/app/components/X/Mark/Blog/CTANewsletter.vue +197 -0
- package/app/components/X/Mark/Blog/Card.vue +117 -0
- package/app/components/X/Mark/Blog/Detail.vue +240 -0
- package/app/components/X/Mark/Blog/List.vue +156 -0
- package/app/components/X/Mark/Blog/Navigation.vue +100 -0
- package/app/components/X/Mark/Blog/Sidebar.vue +160 -0
- package/app/components/X/Mark/Button/BackToTop.vue +99 -0
- package/app/components/X/Mark/CTA/index.vue +294 -0
- package/app/components/X/Mark/Card/Glass.vue +64 -0
- package/app/components/X/Mark/Card/Promo.vue +164 -0
- package/app/components/X/Mark/Divider/Glow.vue +113 -0
- package/app/components/X/Mark/Features/index.vue +194 -0
- package/app/components/X/Mark/Hero/index.vue +217 -0
- package/app/components/X/Mark/Layout/AnnouncementBar.vue +139 -0
- package/app/components/X/Mark/Layout/Footer.vue +160 -0
- package/app/components/X/Mark/Layout/FooterLegal.vue +42 -0
- package/app/components/X/Mark/Layout/Navbar.vue +267 -0
- package/app/components/X/Mark/Modal/Chat.vue +151 -0
- package/app/components/X/Mark/Modal/Feature.vue +197 -0
- package/app/components/X/Mark/Modal/Image.vue +226 -0
- package/app/components/X/Mark/Modal/Video.vue +203 -0
- package/app/components/X/Mark/Modal/index.vue +133 -0
- package/app/components/X/Mark/Newsletter/Form.vue +174 -0
- package/app/components/X/Mark/Pattern/Bg.vue +86 -0
- package/app/components/X/Mark/Pricing/Comparison.vue +126 -0
- package/app/components/X/Mark/Pricing/Plans.vue +181 -0
- package/app/components/X/Mark/Privacy/CookieBanner.vue +112 -0
- package/app/components/X/Mark/Privacy/CookieToast.vue +43 -0
- package/app/components/X/Mark/Privacy/GDPR.vue +245 -0
- package/app/components/X/Mark/Section/Newsletter.vue +183 -0
- package/app/components/X/Mark/Section/Stitch.vue +156 -0
- package/app/components/X/Mark/Section/index.vue +151 -0
- package/app/components/X/Mark/SocialProof/Badge.vue +102 -0
- package/app/components/X/Mark/SocialProof/Testimonials.vue +326 -0
- package/app/components/X/Mark/SocialProof/Toast.vue +136 -0
- package/app/components/X/Mark/_archive/Pattern/Background.vue +83 -0
- package/app/components/X/Mark/_archive/Pattern/CheckBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/CircuitBg.vue +41 -0
- package/app/components/X/Mark/_archive/Pattern/DotsBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/GlowDivider.vue +86 -0
- package/app/components/X/Mark/_archive/Pattern/HexBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/PlaidBg.vue +47 -0
- package/app/components/X/Mark/_archive/Pattern/SectionStitch.vue +168 -0
- package/app/components/X/Mark/_archive/Pattern/WaveBg.vue +41 -0
- package/app/components/X/_archive/Newsletter/Form.vue +123 -0
- package/app/components/X/_archive/Newsletter/Section.vue +131 -0
- package/app/composables/useParallax.ts +124 -0
- package/app/composables/useScrollReveal.ts +92 -0
- package/app/pages/index.vue +210 -0
- package/app/plugins/marketing.client.ts +13 -0
- package/app/types/marketing.d.ts +268 -0
- package/componentList.json +511 -0
- package/nuxt.config.ts +6 -13
- package/package.json +21 -9
- package/.editorconfig +0 -12
- package/app/assets/css/main.css +0 -2
- package/app/components/X/Marketing/Sections/EmailSubscription/index.vue +0 -129
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<!-- Hero Section -->
|
|
4
|
+
<XMarkHero
|
|
5
|
+
image-src="https://images.unsplash.com/photo-1551434678-e076c223a692?w=1920&q=80"
|
|
6
|
+
eyebrow="Welcome to the future"
|
|
7
|
+
title="Build something amazing today"
|
|
8
|
+
subtitle="The modern platform for teams who want to ship faster, collaborate better, and scale effortlessly."
|
|
9
|
+
align="left"
|
|
10
|
+
overlay="gradient"
|
|
11
|
+
>
|
|
12
|
+
<template #actions>
|
|
13
|
+
<UButton size="xl" color="white">
|
|
14
|
+
Get Started Free
|
|
15
|
+
</UButton>
|
|
16
|
+
<UButton size="xl" variant="outline" color="white">
|
|
17
|
+
Watch Demo
|
|
18
|
+
</UButton>
|
|
19
|
+
</template>
|
|
20
|
+
</XMarkHero>
|
|
21
|
+
|
|
22
|
+
<!-- Features Section -->
|
|
23
|
+
<XMarkSection id="features" bg="default" padding="xl">
|
|
24
|
+
<header class="text-center max-w-3xl mx-auto mb-16">
|
|
25
|
+
<p class="xText-eyebrow text-primary-500 mb-4">Features</p>
|
|
26
|
+
<h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
|
|
27
|
+
Everything you need to succeed
|
|
28
|
+
</h2>
|
|
29
|
+
<p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400">
|
|
30
|
+
Powerful tools designed to help you build, launch, and grow your product.
|
|
31
|
+
</p>
|
|
32
|
+
</header>
|
|
33
|
+
|
|
34
|
+
<XMarkFeatures
|
|
35
|
+
:features="features"
|
|
36
|
+
layout="grid"
|
|
37
|
+
:columns="3"
|
|
38
|
+
/>
|
|
39
|
+
</XMarkSection>
|
|
40
|
+
|
|
41
|
+
<!-- Testimonials Section -->
|
|
42
|
+
<XMarkSection bg="subtle" padding="xl">
|
|
43
|
+
<header class="text-center max-w-3xl mx-auto mb-16">
|
|
44
|
+
<p class="xText-eyebrow text-primary-500 mb-4">Testimonials</p>
|
|
45
|
+
<h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
|
|
46
|
+
Loved by teams worldwide
|
|
47
|
+
</h2>
|
|
48
|
+
</header>
|
|
49
|
+
|
|
50
|
+
<XMarkTestimonials
|
|
51
|
+
:testimonials="testimonials"
|
|
52
|
+
layout="grid"
|
|
53
|
+
/>
|
|
54
|
+
</XMarkSection>
|
|
55
|
+
|
|
56
|
+
<!-- Pricing Section -->
|
|
57
|
+
<XMarkSection bg="default" padding="xl">
|
|
58
|
+
<header class="text-center max-w-3xl mx-auto mb-16">
|
|
59
|
+
<p class="xText-eyebrow text-primary-500 mb-4">Pricing</p>
|
|
60
|
+
<h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
|
|
61
|
+
Simple, transparent pricing
|
|
62
|
+
</h2>
|
|
63
|
+
<p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400">
|
|
64
|
+
Choose the plan that works best for your team.
|
|
65
|
+
</p>
|
|
66
|
+
</header>
|
|
67
|
+
|
|
68
|
+
<XMarkPricing
|
|
69
|
+
:plans="pricingPlans"
|
|
70
|
+
/>
|
|
71
|
+
</XMarkSection>
|
|
72
|
+
|
|
73
|
+
<!-- CTA Section -->
|
|
74
|
+
<XMarkSection bg="bold" padding="xl">
|
|
75
|
+
<div class="text-center max-w-3xl mx-auto">
|
|
76
|
+
<h2 class="xText-headline xText-balance">
|
|
77
|
+
Ready to get started?
|
|
78
|
+
</h2>
|
|
79
|
+
<p class="mt-4 text-lg opacity-80">
|
|
80
|
+
Join thousands of teams already using our platform.
|
|
81
|
+
</p>
|
|
82
|
+
<div class="mt-8 flex flex-wrap justify-center gap-4">
|
|
83
|
+
<UButton size="xl" color="white">
|
|
84
|
+
Start Free Trial
|
|
85
|
+
</UButton>
|
|
86
|
+
<UButton size="xl" variant="outline" color="white">
|
|
87
|
+
Contact Sales
|
|
88
|
+
</UButton>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="mt-6 flex flex-wrap justify-center gap-4">
|
|
91
|
+
<XMarkBadge preset="no-credit-card" variant="subtle" />
|
|
92
|
+
<XMarkBadge preset="cancel-anytime" variant="subtle" />
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</XMarkSection>
|
|
96
|
+
</div>
|
|
97
|
+
</template>
|
|
98
|
+
|
|
99
|
+
<script setup>
|
|
100
|
+
useSeoMeta({
|
|
101
|
+
title: "Modern Platform for Teams",
|
|
102
|
+
description: "Build, launch, and grow your product with our powerful platform.",
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Features data
|
|
106
|
+
const features = [
|
|
107
|
+
{
|
|
108
|
+
icon: "i-lucide-zap",
|
|
109
|
+
title: "Lightning Fast",
|
|
110
|
+
description: "Built for speed with optimized performance at every level.",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
icon: "i-lucide-shield-check",
|
|
114
|
+
title: "Secure by Default",
|
|
115
|
+
description: "Enterprise-grade security with SOC 2 compliance.",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
icon: "i-lucide-users",
|
|
119
|
+
title: "Team Collaboration",
|
|
120
|
+
description: "Real-time collaboration tools for modern teams.",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
icon: "i-lucide-bar-chart-3",
|
|
124
|
+
title: "Analytics",
|
|
125
|
+
description: "Deep insights into your product's performance.",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
icon: "i-lucide-puzzle",
|
|
129
|
+
title: "Integrations",
|
|
130
|
+
description: "Connect with 100+ tools your team already uses.",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
icon: "i-lucide-headphones",
|
|
134
|
+
title: "24/7 Support",
|
|
135
|
+
description: "Expert support whenever you need it.",
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
|
|
139
|
+
// Testimonials data
|
|
140
|
+
const testimonials = [
|
|
141
|
+
{
|
|
142
|
+
quote: "This platform transformed how our team works. We shipped 3x faster within the first month.",
|
|
143
|
+
name: "Sarah Chen",
|
|
144
|
+
title: "CTO",
|
|
145
|
+
company: "TechStart",
|
|
146
|
+
avatar: "https://randomuser.me/api/portraits/women/44.jpg",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
quote: "The best investment we've made. The ROI was visible within weeks.",
|
|
150
|
+
name: "Marcus Johnson",
|
|
151
|
+
title: "Founder",
|
|
152
|
+
company: "ScaleUp",
|
|
153
|
+
avatar: "https://randomuser.me/api/portraits/men/32.jpg",
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
quote: "Finally, a platform that understands what modern teams need. Highly recommended.",
|
|
157
|
+
name: "Emily Park",
|
|
158
|
+
title: "Product Lead",
|
|
159
|
+
company: "InnovateCo",
|
|
160
|
+
avatar: "https://randomuser.me/api/portraits/women/68.jpg",
|
|
161
|
+
},
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
// Pricing plans data
|
|
165
|
+
const pricingPlans = [
|
|
166
|
+
{
|
|
167
|
+
name: "Starter",
|
|
168
|
+
description: "Perfect for small teams getting started.",
|
|
169
|
+
price: "$19",
|
|
170
|
+
period: "month",
|
|
171
|
+
features: [
|
|
172
|
+
"Up to 5 team members",
|
|
173
|
+
"Basic analytics",
|
|
174
|
+
"Email support",
|
|
175
|
+
"1GB storage",
|
|
176
|
+
],
|
|
177
|
+
cta: "Start Free Trial",
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: "Pro",
|
|
181
|
+
description: "For growing teams that need more power.",
|
|
182
|
+
price: "$49",
|
|
183
|
+
period: "month",
|
|
184
|
+
features: [
|
|
185
|
+
"Up to 25 team members",
|
|
186
|
+
"Advanced analytics",
|
|
187
|
+
"Priority support",
|
|
188
|
+
"10GB storage",
|
|
189
|
+
"Custom integrations",
|
|
190
|
+
],
|
|
191
|
+
cta: "Start Free Trial",
|
|
192
|
+
popular: true,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: "Enterprise",
|
|
196
|
+
description: "For large organizations with custom needs.",
|
|
197
|
+
price: "Custom",
|
|
198
|
+
period: "",
|
|
199
|
+
features: [
|
|
200
|
+
"Unlimited team members",
|
|
201
|
+
"Enterprise analytics",
|
|
202
|
+
"Dedicated support",
|
|
203
|
+
"Unlimited storage",
|
|
204
|
+
"Custom integrations",
|
|
205
|
+
"SLA guarantee",
|
|
206
|
+
],
|
|
207
|
+
cta: "Contact Sales",
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
</script>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marketing Client Plugin
|
|
3
|
+
* Auto-initializes scroll reveal and parallax animations globally
|
|
4
|
+
*
|
|
5
|
+
* From spec-prompt.md specification
|
|
6
|
+
*/
|
|
7
|
+
export default defineNuxtPlugin(() => {
|
|
8
|
+
// Initialize scroll reveal globally
|
|
9
|
+
useScrollReveal();
|
|
10
|
+
|
|
11
|
+
// Initialize parallax globally
|
|
12
|
+
useParallax();
|
|
13
|
+
});
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nuxt-x-marketing TypeScript Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Standardized data structures for marketing components.
|
|
5
|
+
* Use these interfaces when passing data to components.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Core Prop Types
|
|
10
|
+
// =============================================================================
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Standard image prop object
|
|
14
|
+
* @example { src: '/hero.jpg', alt: 'Hero image' }
|
|
15
|
+
*/
|
|
16
|
+
export interface ImageProp {
|
|
17
|
+
/** Image URL (required) */
|
|
18
|
+
src: string
|
|
19
|
+
/** Alt text for accessibility */
|
|
20
|
+
alt?: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Standard video prop object
|
|
25
|
+
* @example { src: '/demo.mp4', poster: '/poster.jpg' }
|
|
26
|
+
*/
|
|
27
|
+
export interface VideoProp {
|
|
28
|
+
/** Video URL (required) */
|
|
29
|
+
src: string
|
|
30
|
+
/** Poster image URL */
|
|
31
|
+
poster?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Standard button prop object (matches Nuxt UI conventions)
|
|
36
|
+
* @example { label: 'Get Started', color: 'primary', to: '/signup' }
|
|
37
|
+
*/
|
|
38
|
+
export interface ButtonProp {
|
|
39
|
+
/** Button text (required) */
|
|
40
|
+
label: string
|
|
41
|
+
/** Button color: primary, secondary, neutral, success, warning, error */
|
|
42
|
+
color?: 'primary' | 'secondary' | 'neutral' | 'success' | 'warning' | 'error' | 'white'
|
|
43
|
+
/** Button variant: solid, outline, ghost, subtle, link */
|
|
44
|
+
variant?: 'solid' | 'outline' | 'ghost' | 'subtle' | 'link'
|
|
45
|
+
/** Navigation target (NuxtLink) */
|
|
46
|
+
to?: string
|
|
47
|
+
/** External link (uses <a> instead) */
|
|
48
|
+
href?: string
|
|
49
|
+
/** Icon name (Heroicons/Lucide format) */
|
|
50
|
+
icon?: string
|
|
51
|
+
/** Size: xs, sm, md, lg, xl */
|
|
52
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Standard logo prop object
|
|
57
|
+
* @example { src: '/logo.svg', srcDark: '/logo-dark.svg', alt: 'Company' }
|
|
58
|
+
*/
|
|
59
|
+
export interface LogoProp {
|
|
60
|
+
/** Light mode logo URL (required) */
|
|
61
|
+
src: string
|
|
62
|
+
/** Dark mode logo URL (optional, falls back to src) */
|
|
63
|
+
srcDark?: string
|
|
64
|
+
/** Alt text */
|
|
65
|
+
alt?: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// =============================================================================
|
|
69
|
+
// Content Types
|
|
70
|
+
// =============================================================================
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Blog post author
|
|
74
|
+
*/
|
|
75
|
+
export interface Author {
|
|
76
|
+
/** Author name */
|
|
77
|
+
name: string
|
|
78
|
+
/** Author title/role */
|
|
79
|
+
title?: string
|
|
80
|
+
/** Avatar image URL */
|
|
81
|
+
avatar?: string
|
|
82
|
+
/** Short bio */
|
|
83
|
+
bio?: string
|
|
84
|
+
/** Social media links */
|
|
85
|
+
social?: {
|
|
86
|
+
twitter?: string
|
|
87
|
+
linkedin?: string
|
|
88
|
+
github?: string
|
|
89
|
+
[key: string]: string | undefined
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Blog post object
|
|
95
|
+
* @example
|
|
96
|
+
* {
|
|
97
|
+
* title: 'Getting Started',
|
|
98
|
+
* slug: 'getting-started',
|
|
99
|
+
* img: { src: '/blog/cover.jpg', alt: 'Cover' },
|
|
100
|
+
* date: '2024-01-15',
|
|
101
|
+
* author: { name: 'Jane Doe', avatar: '/avatars/jane.jpg' }
|
|
102
|
+
* }
|
|
103
|
+
*/
|
|
104
|
+
export interface BlogPost {
|
|
105
|
+
/** Post title */
|
|
106
|
+
title: string
|
|
107
|
+
/** URL slug */
|
|
108
|
+
slug: string
|
|
109
|
+
/** Featured image (new object format) */
|
|
110
|
+
img?: ImageProp
|
|
111
|
+
/** Post excerpt/summary */
|
|
112
|
+
excerpt?: string
|
|
113
|
+
/** Full post description */
|
|
114
|
+
description?: string
|
|
115
|
+
/** Publication date (ISO string or Date) */
|
|
116
|
+
date?: string | Date
|
|
117
|
+
/** Reading time (e.g., "5 min read") */
|
|
118
|
+
readingTime?: string | number
|
|
119
|
+
/** Category name */
|
|
120
|
+
category?: string
|
|
121
|
+
/** Array of tags */
|
|
122
|
+
tags?: string[]
|
|
123
|
+
/** Post author */
|
|
124
|
+
author?: Author
|
|
125
|
+
/** Whether post is published */
|
|
126
|
+
published?: boolean
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Feature item for Features component
|
|
131
|
+
* @example
|
|
132
|
+
* {
|
|
133
|
+
* icon: 'i-lucide-rocket',
|
|
134
|
+
* title: 'Fast',
|
|
135
|
+
* description: 'Lightning fast performance',
|
|
136
|
+
* img: { src: '/features/fast.jpg' }
|
|
137
|
+
* }
|
|
138
|
+
*/
|
|
139
|
+
export interface Feature {
|
|
140
|
+
/** Icon name (Heroicons/Lucide format) */
|
|
141
|
+
icon?: string
|
|
142
|
+
/** Feature title */
|
|
143
|
+
title: string
|
|
144
|
+
/** Feature description */
|
|
145
|
+
description?: string
|
|
146
|
+
/** Feature image (new object format) */
|
|
147
|
+
img?: ImageProp
|
|
148
|
+
/** Link URL */
|
|
149
|
+
link?: string
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Pricing plan for Pricing components
|
|
154
|
+
* @example
|
|
155
|
+
* {
|
|
156
|
+
* name: 'Pro',
|
|
157
|
+
* price: { monthly: '$29', yearly: '$279' },
|
|
158
|
+
* features: ['Unlimited projects', 'Priority support'],
|
|
159
|
+
* button: { label: 'Get Pro' },
|
|
160
|
+
* popular: true
|
|
161
|
+
* }
|
|
162
|
+
*/
|
|
163
|
+
export interface PricingPlan {
|
|
164
|
+
/** Plan name */
|
|
165
|
+
name: string
|
|
166
|
+
/** Plan description */
|
|
167
|
+
description?: string
|
|
168
|
+
/** Price (string or object for monthly/yearly) */
|
|
169
|
+
price: string | { monthly: string; yearly: string }
|
|
170
|
+
/** Billing period text (e.g., "/month") */
|
|
171
|
+
period?: string
|
|
172
|
+
/** List of feature strings */
|
|
173
|
+
features: string[]
|
|
174
|
+
/** CTA button (new object format) */
|
|
175
|
+
button?: ButtonProp
|
|
176
|
+
/** Mark as popular/highlighted */
|
|
177
|
+
popular?: boolean
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Testimonial for Testimonials component
|
|
182
|
+
* @example
|
|
183
|
+
* {
|
|
184
|
+
* quote: 'Amazing product!',
|
|
185
|
+
* name: 'John Doe',
|
|
186
|
+
* title: 'CEO',
|
|
187
|
+
* company: 'Acme Inc',
|
|
188
|
+
* avatar: '/testimonials/john.jpg',
|
|
189
|
+
* rating: 5
|
|
190
|
+
* }
|
|
191
|
+
*/
|
|
192
|
+
export interface Testimonial {
|
|
193
|
+
/** Testimonial quote text */
|
|
194
|
+
quote: string
|
|
195
|
+
/** Person's name */
|
|
196
|
+
name: string
|
|
197
|
+
/** Job title */
|
|
198
|
+
title?: string
|
|
199
|
+
/** Company name */
|
|
200
|
+
company?: string
|
|
201
|
+
/** Avatar image URL */
|
|
202
|
+
avatar?: string
|
|
203
|
+
/** Company logo URL */
|
|
204
|
+
logo?: string
|
|
205
|
+
/** Star rating (1-5) */
|
|
206
|
+
rating?: 1 | 2 | 3 | 4 | 5
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Navigation link item
|
|
211
|
+
*/
|
|
212
|
+
export interface NavLink {
|
|
213
|
+
/** Link label */
|
|
214
|
+
label: string
|
|
215
|
+
/** Link URL */
|
|
216
|
+
to?: string
|
|
217
|
+
/** External link */
|
|
218
|
+
href?: string
|
|
219
|
+
/** Icon name */
|
|
220
|
+
icon?: string
|
|
221
|
+
/** Child links (dropdown) */
|
|
222
|
+
children?: NavLink[]
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Footer link column
|
|
227
|
+
*/
|
|
228
|
+
export interface FooterColumn {
|
|
229
|
+
/** Column title */
|
|
230
|
+
title: string
|
|
231
|
+
/** Links in this column */
|
|
232
|
+
links: NavLink[]
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Social media link
|
|
237
|
+
*/
|
|
238
|
+
export interface SocialLink {
|
|
239
|
+
/** Platform name (twitter, linkedin, github, etc.) */
|
|
240
|
+
platform: string
|
|
241
|
+
/** Profile URL */
|
|
242
|
+
url: string
|
|
243
|
+
/** Icon name (optional, defaults to platform icon) */
|
|
244
|
+
icon?: string
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// =============================================================================
|
|
248
|
+
// Component Size Scale
|
|
249
|
+
// =============================================================================
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Standard size scale used across components
|
|
253
|
+
*/
|
|
254
|
+
export type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
|
|
255
|
+
|
|
256
|
+
// =============================================================================
|
|
257
|
+
// Layout Types
|
|
258
|
+
// =============================================================================
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Section background variants
|
|
262
|
+
*/
|
|
263
|
+
export type SectionBackground = 'default' | 'subtle' | 'bold' | 'gradient' | 'pattern'
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Section padding options
|
|
267
|
+
*/
|
|
268
|
+
export type SectionPadding = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'
|