@xenterprises/nuxt-x-marketing 1.0.2 → 1.1.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/README.md +130 -11
- package/app/components/X/Mark/CodeBlock/index.vue +19 -7
- package/app/components/X/Mark/Divider/Glow.vue +25 -19
- package/app/components/X/Mark/Section/Stitch.vue +45 -31
- package/app/composables/{useParallax.ts → useParallax.js} +6 -7
- package/app/composables/{useScrollReveal.ts → useScrollReveal.js} +4 -4
- package/nuxt.config.ts +1 -11
- package/package.json +1 -1
- package/.claude/settings.local.json +0 -23
- package/.nuxtrc +0 -1
- package/.playground/app.config.ts +0 -74
- package/.playground/app.vue +0 -269
- package/.playground/components/AppFooter.vue +0 -103
- package/.playground/components/AppHeader.vue +0 -41
- package/.playground/components/CodeExample.vue +0 -70
- package/.playground/components/ComponentPlayground.vue +0 -117
- package/.playground/components/DocsHeader.vue +0 -19
- package/.playground/layouts/default.vue +0 -15
- package/.playground/layouts/docs-layout.vue +0 -161
- package/.playground/layouts/docs.vue +0 -11
- package/.playground/nuxt.config.ts +0 -5
- package/.playground/package-lock.json +0 -6
- package/.playground/pages/blog/author.vue +0 -145
- package/.playground/pages/blog/card.vue +0 -149
- package/.playground/pages/blog/cta.vue +0 -131
- package/.playground/pages/blog/detail.vue +0 -471
- package/.playground/pages/blog/list.vue +0 -261
- package/.playground/pages/blog/navigation.vue +0 -228
- package/.playground/pages/blog/sidebar.vue +0 -279
- package/.playground/pages/config.vue +0 -289
- package/.playground/pages/content/comparison.vue +0 -253
- package/.playground/pages/content/cta.vue +0 -245
- package/.playground/pages/content/features.vue +0 -217
- package/.playground/pages/content/newsletter-section.vue +0 -260
- package/.playground/pages/content/newsletter.vue +0 -200
- package/.playground/pages/content/pricing.vue +0 -335
- package/.playground/pages/content/testimonials.vue +0 -188
- package/.playground/pages/hero.vue +0 -257
- package/.playground/pages/index.vue +0 -381
- package/.playground/pages/layout/footer.vue +0 -210
- package/.playground/pages/layout/legal-footer.vue +0 -121
- package/.playground/pages/layout/navbar.vue +0 -285
- package/.playground/pages/layout/section.vue +0 -266
- package/.playground/pages/layout/x-legal.vue +0 -199
- package/.playground/pages/modals/feature-modal.vue +0 -320
- package/.playground/pages/modals/image-lightbox.vue +0 -277
- package/.playground/pages/modals/video-modal.vue +0 -222
- package/.playground/pages/notifications/announcement-bar.vue +0 -164
- package/.playground/pages/notifications/cookie-banner.vue +0 -210
- package/.playground/pages/notifications/cookie-toast.vue +0 -143
- package/.playground/pages/notifications/gdpr.vue +0 -276
- package/.playground/pages/notifications/social-proof-toast.vue +0 -515
- package/.playground/pages/ui/badge.vue +0 -161
- package/.playground/pages/ui/bg-pattern.vue +0 -177
- package/.playground/pages/ui/glass-card.vue +0 -179
- package/.playground/pages/ui/glow-divider.vue +0 -179
- package/.playground/pages/ui/promo-card.vue +0 -259
- package/.playground/pages/ui/section-stitch.vue +0 -411
- package/.playground/pages/utilities/back-to-top.vue +0 -153
- package/.playground/pages/utilities/popup-chat.vue +0 -224
- package/componentList.json +0 -2129
- package/screenshots/playground-home.png +0 -0
- package/tsconfig.json +0 -3
- /package/app/composables/{useXBlog.ts → useXBlog.js} +0 -0
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<!-- Page Header -->
|
|
4
|
-
<div class="bg-white dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-800 px-8 py-6">
|
|
5
|
-
<h1 class="text-2xl font-bold text-neutral-900 dark:text-white">Hero</h1>
|
|
6
|
-
<p class="mt-2 text-neutral-600 dark:text-neutral-400">
|
|
7
|
-
Full-screen hero section with video/image backgrounds, overlays, and call-to-action buttons.
|
|
8
|
-
</p>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<!-- Hero Variants -->
|
|
12
|
-
<div class="space-y-16 pb-16">
|
|
13
|
-
<!-- Image Background - Center Aligned -->
|
|
14
|
-
<section>
|
|
15
|
-
<div class="px-8 py-6 bg-neutral-50 dark:bg-neutral-800/50">
|
|
16
|
-
<h2 class="text-lg font-semibold">Image Background - Center Aligned</h2>
|
|
17
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">With gradient overlay and scroll indicator</p>
|
|
18
|
-
</div>
|
|
19
|
-
<XMarkHero
|
|
20
|
-
eyebrow="Introducing"
|
|
21
|
-
title="Build Beautiful Landing Pages"
|
|
22
|
-
subtitle="Create stunning marketing pages with our collection of 33 production-ready components. Designed for conversion and built with modern technologies."
|
|
23
|
-
:buttons="[{ label: 'Get Started', color: 'primary' }, { label: 'Learn More', variant: 'outline', color: 'white' }]"
|
|
24
|
-
:img="{ src: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=1920&h=1080&fit=crop&q=80', alt: 'Team working' }"
|
|
25
|
-
overlay="gradient"
|
|
26
|
-
align="center"
|
|
27
|
-
:has-scroll-indicator="true"
|
|
28
|
-
/>
|
|
29
|
-
</section>
|
|
30
|
-
|
|
31
|
-
<!-- Image Background - Left Aligned -->
|
|
32
|
-
<section>
|
|
33
|
-
<div class="px-8 py-6 bg-neutral-50 dark:bg-neutral-800/50">
|
|
34
|
-
<h2 class="text-lg font-semibold">Image Background - Left Aligned</h2>
|
|
35
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">Classic layout with content on the left</p>
|
|
36
|
-
</div>
|
|
37
|
-
<XMarkHero
|
|
38
|
-
eyebrow="Premium Quality"
|
|
39
|
-
title="Enterprise-Ready Components"
|
|
40
|
-
subtitle="Battle-tested in production. Built with accessibility and performance in mind."
|
|
41
|
-
:buttons="[{ label: 'View Documentation', color: 'primary' }, { label: 'Browse Components', variant: 'outline', color: 'white' }]"
|
|
42
|
-
:img="{ src: 'https://images.unsplash.com/photo-1551434678-e076c223a692?w=1920&h=1080&fit=crop&q=80', alt: 'Office workspace' }"
|
|
43
|
-
overlay="gradient"
|
|
44
|
-
align="left"
|
|
45
|
-
:has-scroll-indicator="false"
|
|
46
|
-
/>
|
|
47
|
-
</section>
|
|
48
|
-
|
|
49
|
-
<!-- Heavy Overlay -->
|
|
50
|
-
<section>
|
|
51
|
-
<div class="px-8 py-6 bg-neutral-50 dark:bg-neutral-800/50">
|
|
52
|
-
<h2 class="text-lg font-semibold">Heavy Overlay</h2>
|
|
53
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">Darker overlay for better text readability</p>
|
|
54
|
-
</div>
|
|
55
|
-
<XMarkHero
|
|
56
|
-
eyebrow="Dark Mode"
|
|
57
|
-
title="Perfect Contrast Every Time"
|
|
58
|
-
subtitle="Heavy overlay ensures your text is always readable, regardless of the background image."
|
|
59
|
-
:buttons="[{ label: 'Try It Now', color: 'primary' }]"
|
|
60
|
-
:img="{ src: 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1920&h=1080&fit=crop&q=80', alt: 'Analytics dashboard' }"
|
|
61
|
-
overlay="heavy"
|
|
62
|
-
align="center"
|
|
63
|
-
:has-scroll-indicator="false"
|
|
64
|
-
/>
|
|
65
|
-
</section>
|
|
66
|
-
|
|
67
|
-
<!-- Light Overlay -->
|
|
68
|
-
<section>
|
|
69
|
-
<div class="px-8 py-6 bg-neutral-50 dark:bg-neutral-800/50">
|
|
70
|
-
<h2 class="text-lg font-semibold">Light Overlay</h2>
|
|
71
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">Subtle overlay that lets the background shine</p>
|
|
72
|
-
</div>
|
|
73
|
-
<XMarkHero
|
|
74
|
-
eyebrow="Minimal"
|
|
75
|
-
title="Let Your Images Speak"
|
|
76
|
-
subtitle="Light overlay for when you want the background to be the star of the show."
|
|
77
|
-
:buttons="[{ label: 'Explore', color: 'primary' }]"
|
|
78
|
-
:img="{ src: 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=1920&h=1080&fit=crop&q=80', alt: 'Modern office' }"
|
|
79
|
-
overlay="light"
|
|
80
|
-
align="center"
|
|
81
|
-
:has-scroll-indicator="false"
|
|
82
|
-
/>
|
|
83
|
-
</section>
|
|
84
|
-
|
|
85
|
-
<!-- Bottom Aligned Content -->
|
|
86
|
-
<section>
|
|
87
|
-
<div class="px-8 py-6 bg-neutral-50 dark:bg-neutral-800/50">
|
|
88
|
-
<h2 class="text-lg font-semibold">Bottom Aligned Content</h2>
|
|
89
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">Content positioned at the bottom of the hero</p>
|
|
90
|
-
</div>
|
|
91
|
-
<XMarkHero
|
|
92
|
-
eyebrow="Coming Soon"
|
|
93
|
-
title="Next Generation Platform"
|
|
94
|
-
subtitle="Be the first to experience our revolutionary new product."
|
|
95
|
-
:buttons="[{ label: 'Join Waitlist', color: 'primary' }]"
|
|
96
|
-
:img="{ src: 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=1920&h=1080&fit=crop&q=80', alt: 'Earth from space' }"
|
|
97
|
-
overlay="gradient"
|
|
98
|
-
align="left"
|
|
99
|
-
vertical-align="bottom"
|
|
100
|
-
:has-scroll-indicator="false"
|
|
101
|
-
/>
|
|
102
|
-
</section>
|
|
103
|
-
|
|
104
|
-
<!-- Props Documentation -->
|
|
105
|
-
<section class="px-8">
|
|
106
|
-
<h2 class="text-lg font-semibold mb-6">Props</h2>
|
|
107
|
-
<div class="overflow-x-auto">
|
|
108
|
-
<table class="w-full text-sm">
|
|
109
|
-
<thead>
|
|
110
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
111
|
-
<th class="text-left py-3 px-4 font-medium">Prop</th>
|
|
112
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
113
|
-
<th class="text-left py-3 px-4 font-medium">Default</th>
|
|
114
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
115
|
-
</tr>
|
|
116
|
-
</thead>
|
|
117
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
118
|
-
<tr>
|
|
119
|
-
<td class="py-3 px-4 font-mono text-xs">img</td>
|
|
120
|
-
<td class="py-3 px-4">Object</td>
|
|
121
|
-
<td class="py-3 px-4">null</td>
|
|
122
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">{ src, alt? } - Background image</td>
|
|
123
|
-
</tr>
|
|
124
|
-
<tr>
|
|
125
|
-
<td class="py-3 px-4 font-mono text-xs">video</td>
|
|
126
|
-
<td class="py-3 px-4">Object</td>
|
|
127
|
-
<td class="py-3 px-4">null</td>
|
|
128
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">{ src, poster? } - Background video</td>
|
|
129
|
-
</tr>
|
|
130
|
-
<tr>
|
|
131
|
-
<td class="py-3 px-4 font-mono text-xs">overlay</td>
|
|
132
|
-
<td class="py-3 px-4">String</td>
|
|
133
|
-
<td class="py-3 px-4">'gradient'</td>
|
|
134
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">light, heavy, gradient, none</td>
|
|
135
|
-
</tr>
|
|
136
|
-
<tr>
|
|
137
|
-
<td class="py-3 px-4 font-mono text-xs">eyebrow</td>
|
|
138
|
-
<td class="py-3 px-4">String</td>
|
|
139
|
-
<td class="py-3 px-4">''</td>
|
|
140
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Small text above title</td>
|
|
141
|
-
</tr>
|
|
142
|
-
<tr>
|
|
143
|
-
<td class="py-3 px-4 font-mono text-xs">title</td>
|
|
144
|
-
<td class="py-3 px-4">String</td>
|
|
145
|
-
<td class="py-3 px-4">required</td>
|
|
146
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Main headline</td>
|
|
147
|
-
</tr>
|
|
148
|
-
<tr>
|
|
149
|
-
<td class="py-3 px-4 font-mono text-xs">subtitle</td>
|
|
150
|
-
<td class="py-3 px-4">String</td>
|
|
151
|
-
<td class="py-3 px-4">''</td>
|
|
152
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Supporting text</td>
|
|
153
|
-
</tr>
|
|
154
|
-
<tr>
|
|
155
|
-
<td class="py-3 px-4 font-mono text-xs">buttons</td>
|
|
156
|
-
<td class="py-3 px-4">Array</td>
|
|
157
|
-
<td class="py-3 px-4">[]</td>
|
|
158
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">[{ label, color?, variant?, to?, icon? }]</td>
|
|
159
|
-
</tr>
|
|
160
|
-
<tr>
|
|
161
|
-
<td class="py-3 px-4 font-mono text-xs">align</td>
|
|
162
|
-
<td class="py-3 px-4">String</td>
|
|
163
|
-
<td class="py-3 px-4">'left'</td>
|
|
164
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">left, center, right</td>
|
|
165
|
-
</tr>
|
|
166
|
-
<tr>
|
|
167
|
-
<td class="py-3 px-4 font-mono text-xs">verticalAlign</td>
|
|
168
|
-
<td class="py-3 px-4">String</td>
|
|
169
|
-
<td class="py-3 px-4">'center'</td>
|
|
170
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">center, bottom</td>
|
|
171
|
-
</tr>
|
|
172
|
-
<tr>
|
|
173
|
-
<td class="py-3 px-4 font-mono text-xs">hasScrollIndicator</td>
|
|
174
|
-
<td class="py-3 px-4">Boolean</td>
|
|
175
|
-
<td class="py-3 px-4">true</td>
|
|
176
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Show bouncing scroll arrow</td>
|
|
177
|
-
</tr>
|
|
178
|
-
</tbody>
|
|
179
|
-
</table>
|
|
180
|
-
</div>
|
|
181
|
-
</section>
|
|
182
|
-
|
|
183
|
-
<!-- Slots -->
|
|
184
|
-
<section class="px-8">
|
|
185
|
-
<h2 class="text-lg font-semibold mb-4">Slots</h2>
|
|
186
|
-
<div class="space-y-4">
|
|
187
|
-
<div class="p-4 bg-neutral-50 dark:bg-neutral-800/50 rounded-lg">
|
|
188
|
-
<p class="font-mono text-sm text-primary-500">#background</p>
|
|
189
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400 mt-1">Custom background content (replaces image/video)</p>
|
|
190
|
-
</div>
|
|
191
|
-
<div class="p-4 bg-neutral-50 dark:bg-neutral-800/50 rounded-lg">
|
|
192
|
-
<p class="font-mono text-sm text-primary-500">#title</p>
|
|
193
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400 mt-1">Custom title content with additional elements</p>
|
|
194
|
-
</div>
|
|
195
|
-
<div class="p-4 bg-neutral-50 dark:bg-neutral-800/50 rounded-lg">
|
|
196
|
-
<p class="font-mono text-sm text-primary-500">#subtitle</p>
|
|
197
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400 mt-1">Custom subtitle content</p>
|
|
198
|
-
</div>
|
|
199
|
-
<div class="p-4 bg-neutral-50 dark:bg-neutral-800/50 rounded-lg">
|
|
200
|
-
<p class="font-mono text-sm text-primary-500">#actions</p>
|
|
201
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400 mt-1">Custom CTA buttons section</p>
|
|
202
|
-
</div>
|
|
203
|
-
</div>
|
|
204
|
-
</section>
|
|
205
|
-
|
|
206
|
-
<!-- Code Example -->
|
|
207
|
-
<section class="px-8">
|
|
208
|
-
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
209
|
-
<CodeExample title="Hero Usage" :code="codeExample" />
|
|
210
|
-
</section>
|
|
211
|
-
</div>
|
|
212
|
-
</div>
|
|
213
|
-
</template>
|
|
214
|
-
|
|
215
|
-
<script setup>
|
|
216
|
-
// Initialize scroll reveal animations
|
|
217
|
-
useScrollReveal()
|
|
218
|
-
|
|
219
|
-
const codeExample = `<!-- Basic hero with image background -->
|
|
220
|
-
<XMarkHero
|
|
221
|
-
eyebrow="Introducing"
|
|
222
|
-
title="Build Beautiful Landing Pages"
|
|
223
|
-
subtitle="Create stunning marketing pages with our components."
|
|
224
|
-
:buttons="[
|
|
225
|
-
{ label: 'Get Started', color: 'primary' },
|
|
226
|
-
{ label: 'Learn More', variant: 'outline', color: 'white' }
|
|
227
|
-
]"
|
|
228
|
-
:img="{ src: '/hero-bg.jpg', alt: 'Hero background' }"
|
|
229
|
-
overlay="gradient"
|
|
230
|
-
align="center"
|
|
231
|
-
:has-scroll-indicator="true"
|
|
232
|
-
/>
|
|
233
|
-
|
|
234
|
-
<!-- With video background -->
|
|
235
|
-
<XMarkHero
|
|
236
|
-
title="Watch It In Action"
|
|
237
|
-
subtitle="See how our platform works."
|
|
238
|
-
:buttons="[{ label: 'Try Free' }]"
|
|
239
|
-
:video="{ src: '/demo.mp4', poster: '/poster.jpg' }"
|
|
240
|
-
overlay="heavy"
|
|
241
|
-
/>
|
|
242
|
-
|
|
243
|
-
<!-- Custom content with slots -->
|
|
244
|
-
<XMarkHero
|
|
245
|
-
:img="{ src: '/hero.jpg' }"
|
|
246
|
-
overlay="gradient"
|
|
247
|
-
>
|
|
248
|
-
<template #title>
|
|
249
|
-
<h1>Custom <span class="text-primary-400">Title</span></h1>
|
|
250
|
-
</template>
|
|
251
|
-
<template #actions>
|
|
252
|
-
<div class="flex gap-4">
|
|
253
|
-
<UButton size="xl">Custom CTA</UButton>
|
|
254
|
-
</div>
|
|
255
|
-
</template>
|
|
256
|
-
</XMarkHero>`
|
|
257
|
-
</script>
|
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<!-- Navbar - uses appConfig.xMarketing.header for backwards compatibility with XHeaderNav -->
|
|
4
|
-
<XMarkLayoutNavbar />
|
|
5
|
-
|
|
6
|
-
<main>
|
|
7
|
-
<!-- Hero -->
|
|
8
|
-
<XMarkHero
|
|
9
|
-
eyebrow="nuxt-x-marketing"
|
|
10
|
-
title="38 Production-Ready Marketing Components"
|
|
11
|
-
subtitle="A comprehensive collection of beautifully designed marketing components built with Nuxt UI v4 and Tailwind CSS. Perfect for landing pages, marketing sites, and SaaS products."
|
|
12
|
-
:buttons="[
|
|
13
|
-
{ label: 'Browse Components', color: 'primary' },
|
|
14
|
-
{ label: 'View on GitHub', variant: 'outline', color: 'white' }
|
|
15
|
-
]"
|
|
16
|
-
:img="{ src: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=1920&h=1080&fit=crop&q=80', alt: 'Team working' }"
|
|
17
|
-
overlay="gradient"
|
|
18
|
-
align="center"
|
|
19
|
-
:has-scroll-indicator="true"
|
|
20
|
-
/>
|
|
21
|
-
|
|
22
|
-
<!-- Features Section -->
|
|
23
|
-
<XMarkSection id="features" bg="subtle">
|
|
24
|
-
<div class="text-center mb-12">
|
|
25
|
-
<p class="xText-eyebrow text-primary-500 mb-4">Features</p>
|
|
26
|
-
<h2 class="xText-headline">Everything you need to build</h2>
|
|
27
|
-
<p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400 max-w-2xl mx-auto">
|
|
28
|
-
33 carefully crafted components covering layout, content, blog, UI elements, modals, notifications, and utilities.
|
|
29
|
-
</p>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<XMarkFeatures
|
|
33
|
-
:features="features"
|
|
34
|
-
:columns="3"
|
|
35
|
-
layout="grid"
|
|
36
|
-
/>
|
|
37
|
-
</XMarkSection>
|
|
38
|
-
|
|
39
|
-
<!-- Testimonials Section -->
|
|
40
|
-
<XMarkSection>
|
|
41
|
-
<div class="text-center mb-12">
|
|
42
|
-
<p class="xText-eyebrow text-primary-500 mb-4">Testimonials</p>
|
|
43
|
-
<h2 class="xText-headline">Loved by teams worldwide</h2>
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<XMarkSocialProofTestimonials
|
|
47
|
-
:testimonials="testimonials"
|
|
48
|
-
layout="featured"
|
|
49
|
-
:has-stars="true"
|
|
50
|
-
/>
|
|
51
|
-
</XMarkSection>
|
|
52
|
-
|
|
53
|
-
<!-- Pricing Section -->
|
|
54
|
-
<XMarkSection bg="subtle">
|
|
55
|
-
<div class="text-center mb-12">
|
|
56
|
-
<p class="xText-eyebrow text-primary-500 mb-4">Pricing</p>
|
|
57
|
-
<h2 class="xText-headline">Simple, transparent pricing</h2>
|
|
58
|
-
<p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400 max-w-2xl mx-auto">
|
|
59
|
-
Choose the plan that works best for you.
|
|
60
|
-
</p>
|
|
61
|
-
|
|
62
|
-
<!-- Billing Toggle -->
|
|
63
|
-
<div class="flex items-center justify-center gap-3 mt-8">
|
|
64
|
-
<span :class="!isYearly ? 'text-neutral-900 dark:text-white font-medium' : 'text-neutral-500'">Monthly</span>
|
|
65
|
-
<USwitch v-model="isYearly" />
|
|
66
|
-
<span :class="isYearly ? 'text-neutral-900 dark:text-white font-medium' : 'text-neutral-500'">
|
|
67
|
-
Yearly
|
|
68
|
-
<UBadge color="success" variant="subtle" size="xs" class="ml-1">Save 20%</UBadge>
|
|
69
|
-
</span>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
|
-
<UPricingPlans :plans="computedPricingPlans" compact scale />
|
|
74
|
-
</XMarkSection>
|
|
75
|
-
|
|
76
|
-
<!-- Comparison Section -->
|
|
77
|
-
<XMarkSection>
|
|
78
|
-
<div class="text-center mb-12">
|
|
79
|
-
<p class="xText-eyebrow text-primary-500 mb-4">Comparison</p>
|
|
80
|
-
<h2 class="xText-headline">Compare plans</h2>
|
|
81
|
-
</div>
|
|
82
|
-
|
|
83
|
-
<UPricingTable :tiers="pricingTiers" :sections="pricingSections" />
|
|
84
|
-
</XMarkSection>
|
|
85
|
-
|
|
86
|
-
<!-- Newsletter Section -->
|
|
87
|
-
<XMarkSectionNewsletter
|
|
88
|
-
title="Stay in the loop"
|
|
89
|
-
description="Get notified when we release new components and updates."
|
|
90
|
-
:button="{ label: 'Subscribe' }"
|
|
91
|
-
pattern="dots"
|
|
92
|
-
:pattern-opacity="0.08"
|
|
93
|
-
@submit="(email) => console.log('Newsletter signup:', email)"
|
|
94
|
-
/>
|
|
95
|
-
|
|
96
|
-
<!-- CTA Section -->
|
|
97
|
-
<XMarkSection bg="bold">
|
|
98
|
-
<div class="text-center">
|
|
99
|
-
<h2 class="xText-headline text-white mb-4">Ready to get started?</h2>
|
|
100
|
-
<p class="text-lg text-white/80 max-w-2xl mx-auto mb-8">
|
|
101
|
-
Join thousands of developers building amazing marketing sites with our components.
|
|
102
|
-
</p>
|
|
103
|
-
<div class="flex flex-wrap justify-center gap-4 mb-6">
|
|
104
|
-
<UButton size="lg" color="white">Get Started Free</UButton>
|
|
105
|
-
<UButton size="lg" variant="outline" color="white">Talk to Sales</UButton>
|
|
106
|
-
</div>
|
|
107
|
-
<div class="flex justify-center gap-6">
|
|
108
|
-
<XMarkSocialProofBadge preset="no-credit-card" variant="subtle" />
|
|
109
|
-
<XMarkSocialProofBadge preset="cancel-anytime" variant="subtle" />
|
|
110
|
-
</div>
|
|
111
|
-
</div>
|
|
112
|
-
</XMarkSection>
|
|
113
|
-
|
|
114
|
-
<!-- Blog Cards Section -->
|
|
115
|
-
<XMarkSection>
|
|
116
|
-
<div class="text-center mb-12">
|
|
117
|
-
<p class="xText-eyebrow text-primary-500 mb-4">Blog</p>
|
|
118
|
-
<h2 class="xText-headline">Latest articles</h2>
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
<div class="grid md:grid-cols-3 gap-8">
|
|
122
|
-
<XMarkBlogCard
|
|
123
|
-
v-for="post in blogPosts"
|
|
124
|
-
:key="post.slug"
|
|
125
|
-
:post="post"
|
|
126
|
-
/>
|
|
127
|
-
</div>
|
|
128
|
-
</XMarkSection>
|
|
129
|
-
</main>
|
|
130
|
-
|
|
131
|
-
<!-- Footer -->
|
|
132
|
-
<XXFooter />
|
|
133
|
-
<XXLegal />
|
|
134
|
-
</div>
|
|
135
|
-
</template>
|
|
136
|
-
|
|
137
|
-
<script setup>
|
|
138
|
-
// Initialize scroll reveal animations
|
|
139
|
-
useScrollReveal()
|
|
140
|
-
|
|
141
|
-
// Navigation is configured via app.config.ts -> xMarketing.header
|
|
142
|
-
|
|
143
|
-
// Features
|
|
144
|
-
const features = [
|
|
145
|
-
{
|
|
146
|
-
icon: 'i-lucide-layout',
|
|
147
|
-
title: 'Layout Components',
|
|
148
|
-
description: 'Navbar, Footer, Section wrappers with multiple background variants.',
|
|
149
|
-
link: { label: 'View layouts', to: '/layout/navbar' }
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
icon: 'i-lucide-image',
|
|
153
|
-
title: 'Hero Sections',
|
|
154
|
-
description: 'Full-screen heroes with video/image backgrounds, overlays, and CTAs.',
|
|
155
|
-
link: { label: 'Explore heroes', to: '/hero' }
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
icon: 'i-lucide-layout-grid',
|
|
159
|
-
title: 'Content Sections',
|
|
160
|
-
description: 'Features, Testimonials, Pricing, Comparison, and Newsletter components.',
|
|
161
|
-
link: { label: 'Browse content', to: '/content/features' }
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
icon: 'i-lucide-newspaper',
|
|
165
|
-
title: 'Blog Components',
|
|
166
|
-
description: 'Cards, Lists, Detail views, Sidebars, Author bios, and Navigation.',
|
|
167
|
-
link: { label: 'See blog components', to: '/blog/card' }
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
icon: 'i-lucide-palette',
|
|
171
|
-
title: 'UI Elements',
|
|
172
|
-
description: 'Badges, Glass Cards, Promo Cards, Dividers, Patterns, and Stitches.',
|
|
173
|
-
link: { label: 'View UI elements', to: '/ui/badge' }
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
icon: 'i-lucide-bell',
|
|
177
|
-
title: 'Notifications',
|
|
178
|
-
description: 'Announcement bars, Cookie banners, GDPR modals, and Social proof toasts.',
|
|
179
|
-
link: { label: 'See notifications', to: '/notifications/announcement-bar' }
|
|
180
|
-
}
|
|
181
|
-
]
|
|
182
|
-
|
|
183
|
-
// Testimonials
|
|
184
|
-
const testimonials = [
|
|
185
|
-
{
|
|
186
|
-
quote: 'These components saved us weeks of development time. The quality and attention to detail is outstanding.',
|
|
187
|
-
name: 'Sarah Chen',
|
|
188
|
-
title: 'CTO',
|
|
189
|
-
company: 'TechCorp',
|
|
190
|
-
avatar: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop',
|
|
191
|
-
rating: 5
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
quote: 'The best marketing component library I\'ve used. Beautifully designed and easy to customize.',
|
|
195
|
-
name: 'Michael Torres',
|
|
196
|
-
title: 'Lead Developer',
|
|
197
|
-
company: 'StartupXYZ',
|
|
198
|
-
avatar: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=100&h=100&fit=crop',
|
|
199
|
-
rating: 5
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
quote: 'Perfect for building marketing sites quickly. The dark mode support is excellent.',
|
|
203
|
-
name: 'Emma Williams',
|
|
204
|
-
title: 'Designer',
|
|
205
|
-
company: 'Creative Agency',
|
|
206
|
-
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop',
|
|
207
|
-
rating: 5
|
|
208
|
-
}
|
|
209
|
-
]
|
|
210
|
-
|
|
211
|
-
// Billing Toggle
|
|
212
|
-
const isYearly = ref(false)
|
|
213
|
-
|
|
214
|
-
// Pricing Plans for UPricingPlans
|
|
215
|
-
const pricingPlansData = [
|
|
216
|
-
{
|
|
217
|
-
title: 'Starter',
|
|
218
|
-
description: 'For personal projects',
|
|
219
|
-
monthlyPrice: '$0',
|
|
220
|
-
yearlyPrice: '$0',
|
|
221
|
-
features: [
|
|
222
|
-
'10 components',
|
|
223
|
-
'Basic support',
|
|
224
|
-
'Community access',
|
|
225
|
-
'MIT license'
|
|
226
|
-
],
|
|
227
|
-
button: {
|
|
228
|
-
label: 'Get Started',
|
|
229
|
-
variant: 'outline',
|
|
230
|
-
color: 'neutral'
|
|
231
|
-
}
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
title: 'Pro',
|
|
235
|
-
description: 'For professional teams',
|
|
236
|
-
monthlyPrice: '$29',
|
|
237
|
-
yearlyPrice: '$279',
|
|
238
|
-
scale: true,
|
|
239
|
-
highlight: true,
|
|
240
|
-
badge: 'Most Popular',
|
|
241
|
-
features: [
|
|
242
|
-
'All 38 components',
|
|
243
|
-
'Priority support',
|
|
244
|
-
'Figma files',
|
|
245
|
-
'Updates for 1 year',
|
|
246
|
-
'Private Discord'
|
|
247
|
-
],
|
|
248
|
-
button: {
|
|
249
|
-
label: 'Get Pro'
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
title: 'Enterprise',
|
|
254
|
-
description: 'For large organizations',
|
|
255
|
-
monthlyPrice: '$99',
|
|
256
|
-
yearlyPrice: '$949',
|
|
257
|
-
features: [
|
|
258
|
-
'Everything in Pro',
|
|
259
|
-
'Custom components',
|
|
260
|
-
'Dedicated support',
|
|
261
|
-
'SLA guarantee',
|
|
262
|
-
'White-label license'
|
|
263
|
-
],
|
|
264
|
-
button: {
|
|
265
|
-
label: 'Contact Sales',
|
|
266
|
-
variant: 'outline',
|
|
267
|
-
color: 'neutral'
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
]
|
|
271
|
-
|
|
272
|
-
const computedPricingPlans = computed(() => {
|
|
273
|
-
return pricingPlansData.map(plan => ({
|
|
274
|
-
...plan,
|
|
275
|
-
price: isYearly.value ? plan.yearlyPrice : plan.monthlyPrice,
|
|
276
|
-
billingCycle: isYearly.value ? '/year' : '/month'
|
|
277
|
-
}))
|
|
278
|
-
})
|
|
279
|
-
|
|
280
|
-
// Pricing Tiers for UPricingTable
|
|
281
|
-
const pricingTiers = [
|
|
282
|
-
{
|
|
283
|
-
id: 'starter',
|
|
284
|
-
title: 'Starter',
|
|
285
|
-
description: 'For personal projects',
|
|
286
|
-
price: '$0',
|
|
287
|
-
billingCycle: '/month',
|
|
288
|
-
button: { label: 'Get Started', variant: 'subtle' }
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
id: 'pro',
|
|
292
|
-
title: 'Pro',
|
|
293
|
-
description: 'For professional teams',
|
|
294
|
-
price: '$29',
|
|
295
|
-
billingCycle: '/month',
|
|
296
|
-
highlight: true,
|
|
297
|
-
button: { label: 'Get Pro' }
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
id: 'enterprise',
|
|
301
|
-
title: 'Enterprise',
|
|
302
|
-
description: 'For large organizations',
|
|
303
|
-
price: '$99',
|
|
304
|
-
billingCycle: '/month',
|
|
305
|
-
button: { label: 'Contact Sales', color: 'neutral' }
|
|
306
|
-
}
|
|
307
|
-
]
|
|
308
|
-
|
|
309
|
-
// Pricing Sections for UPricingTable
|
|
310
|
-
const pricingSections = [
|
|
311
|
-
{
|
|
312
|
-
title: 'Features',
|
|
313
|
-
features: [
|
|
314
|
-
{ title: 'Number of components', tiers: { starter: '10', pro: '33', enterprise: 'Unlimited' } },
|
|
315
|
-
{ title: 'GitHub repository access', tiers: { starter: true, pro: true, enterprise: true } },
|
|
316
|
-
{ title: 'Updates', tiers: { starter: 'Patch & minor', pro: 'All updates', enterprise: 'All updates' } },
|
|
317
|
-
{ title: 'Support', tiers: { starter: 'Community', pro: 'Priority', enterprise: '24/7' } }
|
|
318
|
-
]
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
title: 'Extras',
|
|
322
|
-
features: [
|
|
323
|
-
{ title: 'Figma files', tiers: { starter: false, pro: true, enterprise: true } },
|
|
324
|
-
{ title: 'Custom components', tiers: { starter: false, pro: false, enterprise: true } },
|
|
325
|
-
{ title: 'White-label license', tiers: { starter: false, pro: false, enterprise: true } },
|
|
326
|
-
{ title: 'SLA guarantee', tiers: { starter: false, pro: false, enterprise: true } }
|
|
327
|
-
]
|
|
328
|
-
}
|
|
329
|
-
]
|
|
330
|
-
|
|
331
|
-
// Blog Posts
|
|
332
|
-
const blogPosts = [
|
|
333
|
-
{
|
|
334
|
-
title: 'Getting Started with nuxt-x-marketing',
|
|
335
|
-
excerpt: 'Learn how to install and configure the component library in your Nuxt project.',
|
|
336
|
-
img: {
|
|
337
|
-
src: 'https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=400&h=300&fit=crop',
|
|
338
|
-
alt: 'Getting Started with nuxt-x-marketing'
|
|
339
|
-
},
|
|
340
|
-
slug: '/blog/getting-started',
|
|
341
|
-
date: '2024-01-15',
|
|
342
|
-
author: {
|
|
343
|
-
name: 'Sarah Chen',
|
|
344
|
-
avatar: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=50&h=50&fit=crop'
|
|
345
|
-
},
|
|
346
|
-
category: 'Tutorial'
|
|
347
|
-
},
|
|
348
|
-
{
|
|
349
|
-
title: 'Building a Landing Page in 10 Minutes',
|
|
350
|
-
excerpt: 'A step-by-step guide to creating a beautiful landing page with our components.',
|
|
351
|
-
img: {
|
|
352
|
-
src: 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=400&h=300&fit=crop',
|
|
353
|
-
alt: 'Building a Landing Page in 10 Minutes'
|
|
354
|
-
},
|
|
355
|
-
slug: '/blog/landing-page-tutorial',
|
|
356
|
-
date: '2024-01-10',
|
|
357
|
-
author: {
|
|
358
|
-
name: 'Michael Torres',
|
|
359
|
-
avatar: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=50&h=50&fit=crop'
|
|
360
|
-
},
|
|
361
|
-
category: 'Guide'
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
title: 'Dark Mode Best Practices',
|
|
365
|
-
excerpt: 'Tips and tricks for implementing beautiful dark mode in your marketing site.',
|
|
366
|
-
img: {
|
|
367
|
-
src: 'https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=400&h=300&fit=crop',
|
|
368
|
-
alt: 'Dark Mode Best Practices'
|
|
369
|
-
},
|
|
370
|
-
slug: '/blog/dark-mode',
|
|
371
|
-
date: '2024-01-05',
|
|
372
|
-
author: {
|
|
373
|
-
name: 'Emma Williams',
|
|
374
|
-
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=50&h=50&fit=crop'
|
|
375
|
-
},
|
|
376
|
-
category: 'Design'
|
|
377
|
-
}
|
|
378
|
-
]
|
|
379
|
-
|
|
380
|
-
// Footer is configured via app.config.ts -> xMarketing.footer
|
|
381
|
-
</script>
|