@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.
Files changed (64) hide show
  1. package/README.md +130 -11
  2. package/app/components/X/Mark/CodeBlock/index.vue +19 -7
  3. package/app/components/X/Mark/Divider/Glow.vue +25 -19
  4. package/app/components/X/Mark/Section/Stitch.vue +45 -31
  5. package/app/composables/{useParallax.ts → useParallax.js} +6 -7
  6. package/app/composables/{useScrollReveal.ts → useScrollReveal.js} +4 -4
  7. package/nuxt.config.ts +1 -11
  8. package/package.json +1 -1
  9. package/.claude/settings.local.json +0 -23
  10. package/.nuxtrc +0 -1
  11. package/.playground/app.config.ts +0 -74
  12. package/.playground/app.vue +0 -269
  13. package/.playground/components/AppFooter.vue +0 -103
  14. package/.playground/components/AppHeader.vue +0 -41
  15. package/.playground/components/CodeExample.vue +0 -70
  16. package/.playground/components/ComponentPlayground.vue +0 -117
  17. package/.playground/components/DocsHeader.vue +0 -19
  18. package/.playground/layouts/default.vue +0 -15
  19. package/.playground/layouts/docs-layout.vue +0 -161
  20. package/.playground/layouts/docs.vue +0 -11
  21. package/.playground/nuxt.config.ts +0 -5
  22. package/.playground/package-lock.json +0 -6
  23. package/.playground/pages/blog/author.vue +0 -145
  24. package/.playground/pages/blog/card.vue +0 -149
  25. package/.playground/pages/blog/cta.vue +0 -131
  26. package/.playground/pages/blog/detail.vue +0 -471
  27. package/.playground/pages/blog/list.vue +0 -261
  28. package/.playground/pages/blog/navigation.vue +0 -228
  29. package/.playground/pages/blog/sidebar.vue +0 -279
  30. package/.playground/pages/config.vue +0 -289
  31. package/.playground/pages/content/comparison.vue +0 -253
  32. package/.playground/pages/content/cta.vue +0 -245
  33. package/.playground/pages/content/features.vue +0 -217
  34. package/.playground/pages/content/newsletter-section.vue +0 -260
  35. package/.playground/pages/content/newsletter.vue +0 -200
  36. package/.playground/pages/content/pricing.vue +0 -335
  37. package/.playground/pages/content/testimonials.vue +0 -188
  38. package/.playground/pages/hero.vue +0 -257
  39. package/.playground/pages/index.vue +0 -381
  40. package/.playground/pages/layout/footer.vue +0 -210
  41. package/.playground/pages/layout/legal-footer.vue +0 -121
  42. package/.playground/pages/layout/navbar.vue +0 -285
  43. package/.playground/pages/layout/section.vue +0 -266
  44. package/.playground/pages/layout/x-legal.vue +0 -199
  45. package/.playground/pages/modals/feature-modal.vue +0 -320
  46. package/.playground/pages/modals/image-lightbox.vue +0 -277
  47. package/.playground/pages/modals/video-modal.vue +0 -222
  48. package/.playground/pages/notifications/announcement-bar.vue +0 -164
  49. package/.playground/pages/notifications/cookie-banner.vue +0 -210
  50. package/.playground/pages/notifications/cookie-toast.vue +0 -143
  51. package/.playground/pages/notifications/gdpr.vue +0 -276
  52. package/.playground/pages/notifications/social-proof-toast.vue +0 -515
  53. package/.playground/pages/ui/badge.vue +0 -161
  54. package/.playground/pages/ui/bg-pattern.vue +0 -177
  55. package/.playground/pages/ui/glass-card.vue +0 -179
  56. package/.playground/pages/ui/glow-divider.vue +0 -179
  57. package/.playground/pages/ui/promo-card.vue +0 -259
  58. package/.playground/pages/ui/section-stitch.vue +0 -411
  59. package/.playground/pages/utilities/back-to-top.vue +0 -153
  60. package/.playground/pages/utilities/popup-chat.vue +0 -224
  61. package/componentList.json +0 -2129
  62. package/screenshots/playground-home.png +0 -0
  63. package/tsconfig.json +0 -3
  64. /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>