@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,253 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="min-h-screen">
|
|
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">Pricing Comparison</h1>
|
|
6
|
-
<p class="mt-2 text-neutral-600 dark:text-neutral-400">
|
|
7
|
-
Feature comparison table with social proof badges for pricing plans.
|
|
8
|
-
</p>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<!-- Demo Content -->
|
|
12
|
-
<div class="space-y-0">
|
|
13
|
-
<!-- Basic Comparison with Badges -->
|
|
14
|
-
<XMarkSection bg="default">
|
|
15
|
-
<div class="text-center mb-12">
|
|
16
|
-
<span class="inline-block px-3 py-1 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 text-xs font-medium mb-4">Feature Comparison</span>
|
|
17
|
-
<h2 class="xText-headline">Compare Plans</h2>
|
|
18
|
-
<p class="mt-4 text-neutral-600 dark:text-neutral-400">Feature comparison with trust badges below</p>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<XMarkPricingComparison
|
|
22
|
-
:plans="plans"
|
|
23
|
-
:feature-groups="featureGroups"
|
|
24
|
-
:badges="['no-credit-card', 'cancel-anytime', 'money-back']"
|
|
25
|
-
/>
|
|
26
|
-
</XMarkSection>
|
|
27
|
-
|
|
28
|
-
<!-- With Highlighted Plan and Badges at Top -->
|
|
29
|
-
<XMarkSection bg="subtle">
|
|
30
|
-
<div class="text-center mb-12">
|
|
31
|
-
<span class="inline-block px-3 py-1 rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 text-xs font-medium mb-4">Badges Top</span>
|
|
32
|
-
<h2 class="xText-headline">With Badges Above</h2>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<XMarkPricingComparison
|
|
36
|
-
:plans="plansHighlighted"
|
|
37
|
-
:feature-groups="featureGroups"
|
|
38
|
-
:badges="['free-trial', 'secure']"
|
|
39
|
-
badges-position="top"
|
|
40
|
-
/>
|
|
41
|
-
</XMarkSection>
|
|
42
|
-
|
|
43
|
-
<!-- Props Documentation -->
|
|
44
|
-
<XMarkSection bg="default">
|
|
45
|
-
<h2 class="text-lg font-semibold mb-6">XMarkPricingComparison Props</h2>
|
|
46
|
-
<div class="overflow-x-auto">
|
|
47
|
-
<table class="w-full text-sm">
|
|
48
|
-
<thead>
|
|
49
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
50
|
-
<th class="text-left py-3 px-4 font-medium">Prop</th>
|
|
51
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
52
|
-
<th class="text-left py-3 px-4 font-medium">Default</th>
|
|
53
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
54
|
-
</tr>
|
|
55
|
-
</thead>
|
|
56
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
57
|
-
<tr>
|
|
58
|
-
<td class="py-3 px-4 font-mono text-xs">plans</td>
|
|
59
|
-
<td class="py-3 px-4">Array</td>
|
|
60
|
-
<td class="py-3 px-4">required</td>
|
|
61
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Array of { id, name, price?, highlighted?, button? }</td>
|
|
62
|
-
</tr>
|
|
63
|
-
<tr>
|
|
64
|
-
<td class="py-3 px-4 font-mono text-xs">featureGroups</td>
|
|
65
|
-
<td class="py-3 px-4">Array</td>
|
|
66
|
-
<td class="py-3 px-4">required</td>
|
|
67
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Array of feature groups with features</td>
|
|
68
|
-
</tr>
|
|
69
|
-
<tr>
|
|
70
|
-
<td class="py-3 px-4 font-mono text-xs">caption</td>
|
|
71
|
-
<td class="py-3 px-4">String</td>
|
|
72
|
-
<td class="py-3 px-4">undefined</td>
|
|
73
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Caption displayed above the table</td>
|
|
74
|
-
</tr>
|
|
75
|
-
<tr>
|
|
76
|
-
<td class="py-3 px-4 font-mono text-xs">badges</td>
|
|
77
|
-
<td class="py-3 px-4">Array</td>
|
|
78
|
-
<td class="py-3 px-4">[]</td>
|
|
79
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Social proof badge presets or custom</td>
|
|
80
|
-
</tr>
|
|
81
|
-
<tr>
|
|
82
|
-
<td class="py-3 px-4 font-mono text-xs">badgesPosition</td>
|
|
83
|
-
<td class="py-3 px-4">String</td>
|
|
84
|
-
<td class="py-3 px-4">'bottom'</td>
|
|
85
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">'top' or 'bottom'</td>
|
|
86
|
-
</tr>
|
|
87
|
-
<tr>
|
|
88
|
-
<td class="py-3 px-4 font-mono text-xs">badgesAlign</td>
|
|
89
|
-
<td class="py-3 px-4">String</td>
|
|
90
|
-
<td class="py-3 px-4">'center'</td>
|
|
91
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">'left', 'center', or 'right'</td>
|
|
92
|
-
</tr>
|
|
93
|
-
</tbody>
|
|
94
|
-
</table>
|
|
95
|
-
</div>
|
|
96
|
-
</XMarkSection>
|
|
97
|
-
|
|
98
|
-
<!-- Data Structure -->
|
|
99
|
-
<XMarkSection bg="subtle">
|
|
100
|
-
<h2 class="text-lg font-semibold mb-4">Data Structure</h2>
|
|
101
|
-
<div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-4 text-sm font-mono overflow-x-auto">
|
|
102
|
-
<pre>// Plans
|
|
103
|
-
[
|
|
104
|
-
{
|
|
105
|
-
id: 'free',
|
|
106
|
-
name: 'Free',
|
|
107
|
-
price: '$0',
|
|
108
|
-
highlighted: false,
|
|
109
|
-
button: { label: 'Get Started' }
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
id: 'pro',
|
|
113
|
-
name: 'Pro',
|
|
114
|
-
price: '$29',
|
|
115
|
-
highlighted: true,
|
|
116
|
-
button: { label: 'Buy Now' }
|
|
117
|
-
}
|
|
118
|
-
]
|
|
119
|
-
|
|
120
|
-
// Feature Groups
|
|
121
|
-
[
|
|
122
|
-
{
|
|
123
|
-
name: 'Features',
|
|
124
|
-
features: [
|
|
125
|
-
{
|
|
126
|
-
name: 'Projects',
|
|
127
|
-
values: { free: '3', pro: 'Unlimited' }
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
name: 'API Access',
|
|
131
|
-
values: { free: false, pro: true }
|
|
132
|
-
}
|
|
133
|
-
]
|
|
134
|
-
}
|
|
135
|
-
]</pre>
|
|
136
|
-
</div>
|
|
137
|
-
</XMarkSection>
|
|
138
|
-
|
|
139
|
-
<!-- Code Example -->
|
|
140
|
-
<XMarkSection bg="default">
|
|
141
|
-
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
142
|
-
<CodeExample title="Comparison Table Usage" :code="codeExample" />
|
|
143
|
-
</XMarkSection>
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
</template>
|
|
147
|
-
|
|
148
|
-
<script setup>
|
|
149
|
-
// Initialize scroll reveal animations
|
|
150
|
-
useScrollReveal()
|
|
151
|
-
|
|
152
|
-
const codeExample = `<XMarkPricingComparison
|
|
153
|
-
:plans="[
|
|
154
|
-
{ id: 'free', name: 'Free', price: '$0', button: { label: 'Get Started' } },
|
|
155
|
-
{ id: 'pro', name: 'Pro', price: '$29', highlighted: true, button: { label: 'Buy Now' } },
|
|
156
|
-
{ id: 'enterprise', name: 'Enterprise', price: 'Custom', button: { label: 'Contact' } }
|
|
157
|
-
]"
|
|
158
|
-
:feature-groups="[
|
|
159
|
-
{
|
|
160
|
-
name: 'Features',
|
|
161
|
-
features: [
|
|
162
|
-
{ name: 'Projects', values: { free: '3', pro: 'Unlimited', enterprise: 'Unlimited' } },
|
|
163
|
-
{ name: 'Storage', values: { free: '1 GB', pro: '50 GB', enterprise: 'Unlimited' } },
|
|
164
|
-
{ name: 'API Access', values: { free: false, pro: true, enterprise: true } }
|
|
165
|
-
]
|
|
166
|
-
}
|
|
167
|
-
]"
|
|
168
|
-
:badges="['no-credit-card', 'cancel-anytime']"
|
|
169
|
-
@select="handlePlanSelect"
|
|
170
|
-
/>`
|
|
171
|
-
|
|
172
|
-
const plans = [
|
|
173
|
-
{
|
|
174
|
-
id: 'free',
|
|
175
|
-
name: 'Free',
|
|
176
|
-
price: '$0',
|
|
177
|
-
button: { label: 'Get Started' }
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
id: 'pro',
|
|
181
|
-
name: 'Pro',
|
|
182
|
-
price: '$29',
|
|
183
|
-
button: { label: 'Buy Now' }
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
id: 'enterprise',
|
|
187
|
-
name: 'Enterprise',
|
|
188
|
-
price: 'Custom',
|
|
189
|
-
button: { label: 'Contact Sales' }
|
|
190
|
-
}
|
|
191
|
-
]
|
|
192
|
-
|
|
193
|
-
const plansHighlighted = [
|
|
194
|
-
{
|
|
195
|
-
id: 'free',
|
|
196
|
-
name: 'Free',
|
|
197
|
-
price: '$0',
|
|
198
|
-
button: { label: 'Get Started' }
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
id: 'pro',
|
|
202
|
-
name: 'Pro',
|
|
203
|
-
price: '$29',
|
|
204
|
-
highlighted: true,
|
|
205
|
-
button: { label: 'Buy Now' }
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
id: 'enterprise',
|
|
209
|
-
name: 'Enterprise',
|
|
210
|
-
price: 'Custom',
|
|
211
|
-
button: { label: 'Contact Sales' }
|
|
212
|
-
}
|
|
213
|
-
]
|
|
214
|
-
|
|
215
|
-
const featureGroups = [
|
|
216
|
-
{
|
|
217
|
-
name: 'Features',
|
|
218
|
-
features: [
|
|
219
|
-
{ name: 'Projects', values: { free: '3', pro: 'Unlimited', enterprise: 'Unlimited' } },
|
|
220
|
-
{ name: 'Storage', values: { free: '1 GB', pro: '50 GB', enterprise: 'Unlimited' } },
|
|
221
|
-
{ name: 'Team Members', values: { free: '1', pro: '10', enterprise: 'Unlimited' } },
|
|
222
|
-
{ name: 'GitHub repository access', values: { free: true, pro: true, enterprise: true } },
|
|
223
|
-
{ name: 'Updates', values: { free: 'Patch & minor', pro: 'All updates', enterprise: 'All updates' } }
|
|
224
|
-
]
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
name: 'Collaboration',
|
|
228
|
-
features: [
|
|
229
|
-
{ name: 'Real-time Editing', values: { free: false, pro: true, enterprise: true } },
|
|
230
|
-
{ name: 'Comments', values: { free: true, pro: true, enterprise: true } },
|
|
231
|
-
{ name: 'Version History', values: { free: '7 days', pro: '90 days', enterprise: 'Unlimited' } }
|
|
232
|
-
]
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
name: 'Support',
|
|
236
|
-
features: [
|
|
237
|
-
{ name: 'Email Support', values: { free: true, pro: true, enterprise: true } },
|
|
238
|
-
{ name: 'Priority Support', values: { free: false, pro: true, enterprise: true } },
|
|
239
|
-
{ name: 'Dedicated Manager', values: { free: false, pro: false, enterprise: true } },
|
|
240
|
-
{ name: '24/7 Support', values: { free: false, pro: false, enterprise: true } }
|
|
241
|
-
]
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
name: 'Security',
|
|
245
|
-
features: [
|
|
246
|
-
{ name: 'API Access', values: { free: false, pro: true, enterprise: true } },
|
|
247
|
-
{ name: 'Custom Integrations', values: { free: false, pro: false, enterprise: true } },
|
|
248
|
-
{ name: 'SSO/SAML', values: { free: false, pro: false, enterprise: true } },
|
|
249
|
-
{ name: 'Audit logs', values: { free: false, pro: true, enterprise: true } }
|
|
250
|
-
]
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
</script>
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="min-h-screen">
|
|
3
|
-
<div class="bg-white dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-800 px-8 py-6">
|
|
4
|
-
<h1 class="text-2xl font-bold text-neutral-900 dark:text-white">CTA</h1>
|
|
5
|
-
<p class="mt-2 text-neutral-600 dark:text-neutral-400">Flexible call-to-action component for promotions and conversions.</p>
|
|
6
|
-
</div>
|
|
7
|
-
|
|
8
|
-
<div class="p-8 space-y-16">
|
|
9
|
-
<div class="space-y-12">
|
|
10
|
-
<!-- Default Layout -->
|
|
11
|
-
<section>
|
|
12
|
-
<h3 class="text-lg font-semibold mb-4">Default Layout (Side by Side)</h3>
|
|
13
|
-
<XMarkCTA
|
|
14
|
-
title="Ready to get started?"
|
|
15
|
-
description="Join thousands of developers building with our components."
|
|
16
|
-
:buttons="[
|
|
17
|
-
{ label: 'Get Started Free', to: '#' },
|
|
18
|
-
{ label: 'Learn More', to: '#' }
|
|
19
|
-
]"
|
|
20
|
-
/>
|
|
21
|
-
</section>
|
|
22
|
-
|
|
23
|
-
<!-- Centered Layout - Bold -->
|
|
24
|
-
<section>
|
|
25
|
-
<h3 class="text-lg font-semibold mb-4">Centered Layout (Bold)</h3>
|
|
26
|
-
<XMarkCTA
|
|
27
|
-
eyebrow="Limited Time Offer"
|
|
28
|
-
title="Get 50% off your first year"
|
|
29
|
-
description="Use code LAUNCH50 at checkout. Offer ends soon."
|
|
30
|
-
variant="centered"
|
|
31
|
-
bg="bold"
|
|
32
|
-
size="lg"
|
|
33
|
-
:buttons="[
|
|
34
|
-
{ label: 'Claim Discount', variant: 'solid' },
|
|
35
|
-
{ label: 'View Plans', variant: 'outline' }
|
|
36
|
-
]"
|
|
37
|
-
/>
|
|
38
|
-
</section>
|
|
39
|
-
|
|
40
|
-
<!-- With Icon -->
|
|
41
|
-
<section>
|
|
42
|
-
<h3 class="text-lg font-semibold mb-4">With Icon</h3>
|
|
43
|
-
<XMarkCTA
|
|
44
|
-
icon="i-lucide-rocket"
|
|
45
|
-
title="Launch your project today"
|
|
46
|
-
description="Everything you need to build, deploy, and scale."
|
|
47
|
-
:buttons="[{ label: 'Start Building', to: '#' }]"
|
|
48
|
-
/>
|
|
49
|
-
</section>
|
|
50
|
-
|
|
51
|
-
<!-- Gradient Background -->
|
|
52
|
-
<section>
|
|
53
|
-
<h3 class="text-lg font-semibold mb-4">Gradient Background</h3>
|
|
54
|
-
<XMarkCTA
|
|
55
|
-
icon="i-lucide-sparkles"
|
|
56
|
-
title="Introducing AI-powered features"
|
|
57
|
-
description="Supercharge your workflow with intelligent automation."
|
|
58
|
-
variant="stacked"
|
|
59
|
-
bg="gradient"
|
|
60
|
-
:buttons="[
|
|
61
|
-
{ label: 'Try AI Features' },
|
|
62
|
-
{ label: 'Watch Demo', variant: 'ghost' }
|
|
63
|
-
]"
|
|
64
|
-
/>
|
|
65
|
-
</section>
|
|
66
|
-
|
|
67
|
-
<!-- With Pattern -->
|
|
68
|
-
<section>
|
|
69
|
-
<h3 class="text-lg font-semibold mb-4">With Pattern</h3>
|
|
70
|
-
<XMarkCTA
|
|
71
|
-
title="Join our community"
|
|
72
|
-
description="Connect with thousands of developers worldwide."
|
|
73
|
-
variant="centered"
|
|
74
|
-
:bg="{ variant: 'bold', pattern: 'dots', patternOpacity: 0.1 }"
|
|
75
|
-
:buttons="[
|
|
76
|
-
{ label: 'Join Now' },
|
|
77
|
-
{ label: 'Learn More', variant: 'outline' }
|
|
78
|
-
]"
|
|
79
|
-
/>
|
|
80
|
-
</section>
|
|
81
|
-
|
|
82
|
-
<!-- With Background Image -->
|
|
83
|
-
<section>
|
|
84
|
-
<h3 class="text-lg font-semibold mb-4">With Background Image</h3>
|
|
85
|
-
<XMarkCTA
|
|
86
|
-
eyebrow="New Feature"
|
|
87
|
-
title="Take your business global"
|
|
88
|
-
description="Expand to new markets with our international tools."
|
|
89
|
-
variant="centered"
|
|
90
|
-
size="lg"
|
|
91
|
-
:bg="{
|
|
92
|
-
image: 'https://images.unsplash.com/photo-1557683316-973673baf926?w=1200&h=400&fit=crop',
|
|
93
|
-
imageOverlay: 'heavy'
|
|
94
|
-
}"
|
|
95
|
-
:buttons="[
|
|
96
|
-
{ label: 'Get Started' },
|
|
97
|
-
{ label: 'See Demo', variant: 'outline' }
|
|
98
|
-
]"
|
|
99
|
-
/>
|
|
100
|
-
</section>
|
|
101
|
-
|
|
102
|
-
<!-- Inline Layout -->
|
|
103
|
-
<section>
|
|
104
|
-
<h3 class="text-lg font-semibold mb-4">Inline Layout</h3>
|
|
105
|
-
<XMarkCTA
|
|
106
|
-
title="Need help getting started?"
|
|
107
|
-
variant="inline"
|
|
108
|
-
:buttons="[{ label: 'Contact Sales', to: '#' }]"
|
|
109
|
-
/>
|
|
110
|
-
</section>
|
|
111
|
-
|
|
112
|
-
<!-- Custom Color -->
|
|
113
|
-
<section>
|
|
114
|
-
<h3 class="text-lg font-semibold mb-4">Custom Color</h3>
|
|
115
|
-
<XMarkCTA
|
|
116
|
-
title="Special announcement"
|
|
117
|
-
description="We're launching something exciting very soon."
|
|
118
|
-
variant="centered"
|
|
119
|
-
:bg="{ color: 'bg-emerald-600', variant: 'bold' }"
|
|
120
|
-
:buttons="[
|
|
121
|
-
{ label: 'Notify Me' },
|
|
122
|
-
{ label: 'Learn More', variant: 'outline' }
|
|
123
|
-
]"
|
|
124
|
-
/>
|
|
125
|
-
</section>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
<!-- Props Documentation -->
|
|
129
|
-
<div class="border-t border-neutral-200 dark:border-neutral-800 pt-16">
|
|
130
|
-
<h2 class="text-lg font-semibold mb-6">Props</h2>
|
|
131
|
-
<div class="overflow-x-auto">
|
|
132
|
-
<table class="w-full text-sm">
|
|
133
|
-
<thead>
|
|
134
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
135
|
-
<th class="text-left py-3 px-4 font-medium">Prop</th>
|
|
136
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
137
|
-
<th class="text-left py-3 px-4 font-medium">Default</th>
|
|
138
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
139
|
-
</tr>
|
|
140
|
-
</thead>
|
|
141
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
142
|
-
<tr><td class="py-3 px-4 font-mono text-xs">title</td><td class="py-3 px-4">String</td><td class="py-3 px-4">required</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">CTA heading</td></tr>
|
|
143
|
-
<tr><td class="py-3 px-4 font-mono text-xs">description</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Supporting text</td></tr>
|
|
144
|
-
<tr><td class="py-3 px-4 font-mono text-xs">eyebrow</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Small text above title</td></tr>
|
|
145
|
-
<tr><td class="py-3 px-4 font-mono text-xs">icon</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Icon name (Lucide)</td></tr>
|
|
146
|
-
<tr><td class="py-3 px-4 font-mono text-xs">buttons</td><td class="py-3 px-4">Array</td><td class="py-3 px-4">[]</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">[{ label, to?, variant?, icon? }]</td></tr>
|
|
147
|
-
<tr><td class="py-3 px-4 font-mono text-xs">variant</td><td class="py-3 px-4">String</td><td class="py-3 px-4">'default'</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">default, centered, inline, stacked</td></tr>
|
|
148
|
-
<tr><td class="py-3 px-4 font-mono text-xs">bg</td><td class="py-3 px-4">String | Object</td><td class="py-3 px-4">'subtle'</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Background config (see below)</td></tr>
|
|
149
|
-
<tr><td class="py-3 px-4 font-mono text-xs">size</td><td class="py-3 px-4">String</td><td class="py-3 px-4">'md'</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">sm, md, lg</td></tr>
|
|
150
|
-
</tbody>
|
|
151
|
-
</table>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<h2 class="text-lg font-semibold mt-12 mb-4">Background Options (bg prop)</h2>
|
|
155
|
-
<div class="overflow-x-auto">
|
|
156
|
-
<table class="w-full text-sm">
|
|
157
|
-
<thead>
|
|
158
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
159
|
-
<th class="text-left py-3 px-4 font-medium">Property</th>
|
|
160
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
161
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
162
|
-
</tr>
|
|
163
|
-
</thead>
|
|
164
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
165
|
-
<tr><td class="py-3 px-4 font-mono text-xs">variant</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">subtle, bold, gradient, none</td></tr>
|
|
166
|
-
<tr><td class="py-3 px-4 font-mono text-xs">color</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Custom Tailwind classes (overrides variant)</td></tr>
|
|
167
|
-
<tr><td class="py-3 px-4 font-mono text-xs">image</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Background image URL</td></tr>
|
|
168
|
-
<tr><td class="py-3 px-4 font-mono text-xs">imageAlt</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Background image alt text</td></tr>
|
|
169
|
-
<tr><td class="py-3 px-4 font-mono text-xs">imageOverlay</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">light, heavy, gradient</td></tr>
|
|
170
|
-
<tr><td class="py-3 px-4 font-mono text-xs">imagePosition</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Tailwind object-position class</td></tr>
|
|
171
|
-
<tr><td class="py-3 px-4 font-mono text-xs">pattern</td><td class="py-3 px-4">String</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">dots, grid, diagonal, topography, circuit, waves</td></tr>
|
|
172
|
-
<tr><td class="py-3 px-4 font-mono text-xs">patternOpacity</td><td class="py-3 px-4">Number</td><td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Pattern opacity (0-1)</td></tr>
|
|
173
|
-
</tbody>
|
|
174
|
-
</table>
|
|
175
|
-
</div>
|
|
176
|
-
|
|
177
|
-
<h2 class="text-lg font-semibold mt-12 mb-4">Button Styling</h2>
|
|
178
|
-
<div class="p-4 bg-neutral-50 dark:bg-neutral-800/50 rounded-lg space-y-2">
|
|
179
|
-
<p class="text-sm text-neutral-600 dark:text-neutral-400">
|
|
180
|
-
Buttons are automatically styled based on the <code class="text-primary-500">bg</code> prop:
|
|
181
|
-
</p>
|
|
182
|
-
<ul class="text-sm text-neutral-600 dark:text-neutral-400 list-disc list-inside space-y-1">
|
|
183
|
-
<li><strong>subtle/none:</strong> Primary color for first button, neutral for others</li>
|
|
184
|
-
<li><strong>bold/gradient/image:</strong> White solid button for primary, transparent outline/ghost for secondary</li>
|
|
185
|
-
</ul>
|
|
186
|
-
</div>
|
|
187
|
-
</div>
|
|
188
|
-
|
|
189
|
-
<!-- Code Example -->
|
|
190
|
-
<section>
|
|
191
|
-
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
192
|
-
<CodeExample title="CTA Usage" :code="codeExample" />
|
|
193
|
-
</section>
|
|
194
|
-
</div>
|
|
195
|
-
</div>
|
|
196
|
-
</template>
|
|
197
|
-
|
|
198
|
-
<script setup>
|
|
199
|
-
const codeExample = `<!-- Simple string shorthand -->
|
|
200
|
-
<XMarkCTA
|
|
201
|
-
title="Ready to get started?"
|
|
202
|
-
description="Join thousands of developers."
|
|
203
|
-
bg="subtle"
|
|
204
|
-
:buttons="[{ label: 'Get Started' }]"
|
|
205
|
-
/>
|
|
206
|
-
|
|
207
|
-
<!-- Bold centered CTA -->
|
|
208
|
-
<XMarkCTA
|
|
209
|
-
eyebrow="Limited Offer"
|
|
210
|
-
title="Get 50% off"
|
|
211
|
-
variant="centered"
|
|
212
|
-
bg="bold"
|
|
213
|
-
size="lg"
|
|
214
|
-
:buttons="[
|
|
215
|
-
{ label: 'Claim Now' },
|
|
216
|
-
{ label: 'View Plans', variant: 'outline' }
|
|
217
|
-
]"
|
|
218
|
-
/>
|
|
219
|
-
|
|
220
|
-
<!-- With pattern -->
|
|
221
|
-
<XMarkCTA
|
|
222
|
-
title="Join our community"
|
|
223
|
-
variant="centered"
|
|
224
|
-
:bg="{ variant: 'bold', pattern: 'dots', patternOpacity: 0.1 }"
|
|
225
|
-
:buttons="[{ label: 'Join Now' }]"
|
|
226
|
-
/>
|
|
227
|
-
|
|
228
|
-
<!-- With background image -->
|
|
229
|
-
<XMarkCTA
|
|
230
|
-
title="Take your business global"
|
|
231
|
-
variant="centered"
|
|
232
|
-
:bg="{
|
|
233
|
-
image: '/images/bg.jpg',
|
|
234
|
-
imageOverlay: 'heavy'
|
|
235
|
-
}"
|
|
236
|
-
:buttons="[{ label: 'Get Started' }]"
|
|
237
|
-
/>
|
|
238
|
-
|
|
239
|
-
<!-- Custom color -->
|
|
240
|
-
<XMarkCTA
|
|
241
|
-
title="Special announcement"
|
|
242
|
-
:bg="{ color: 'bg-emerald-600', variant: 'bold' }"
|
|
243
|
-
:buttons="[{ label: 'Learn More' }]"
|
|
244
|
-
/>`
|
|
245
|
-
</script>
|