@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,335 +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 Plans</h1>
|
|
6
|
-
<p class="mt-2 text-neutral-600 dark:text-neutral-400">
|
|
7
|
-
Pricing cards with monthly/yearly toggle, social proof badges, and highlighted plans.
|
|
8
|
-
</p>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<!-- Demo Content -->
|
|
12
|
-
<div class="space-y-0">
|
|
13
|
-
<!-- Scaled Center Plan -->
|
|
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">Scale</span>
|
|
17
|
-
<h2 class="xText-headline">Scaled Center Plan</h2>
|
|
18
|
-
<p class="mt-4 text-neutral-600 dark:text-neutral-400">Center plan is scaled up to draw attention (scale and compact are mutually exclusive)</p>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<XMarkPricingPlans
|
|
22
|
-
:plans="computedPlans"
|
|
23
|
-
:has-billing-toggle="true"
|
|
24
|
-
:yearly-discount="20"
|
|
25
|
-
:badges="['no-credit-card', 'cancel-anytime', 'money-back']"
|
|
26
|
-
scale
|
|
27
|
-
/>
|
|
28
|
-
</XMarkSection>
|
|
29
|
-
|
|
30
|
-
<!-- Scaled with Badges at Top -->
|
|
31
|
-
<XMarkSection bg="subtle">
|
|
32
|
-
<div class="text-center mb-12">
|
|
33
|
-
<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>
|
|
34
|
-
<h2 class="xText-headline">Scaled with Badges Above</h2>
|
|
35
|
-
<p class="mt-4 text-neutral-600 dark:text-neutral-400">Highlighted plan is scaled with badges positioned above</p>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<XMarkPricingPlans
|
|
39
|
-
:plans="simplePlans"
|
|
40
|
-
highlighted="Professional"
|
|
41
|
-
:badges="['free-trial', 'secure']"
|
|
42
|
-
badges-position="top"
|
|
43
|
-
scale
|
|
44
|
-
/>
|
|
45
|
-
</XMarkSection>
|
|
46
|
-
|
|
47
|
-
<!-- Two Plans - Scaled -->
|
|
48
|
-
<XMarkSection bg="default">
|
|
49
|
-
<div class="text-center mb-12">
|
|
50
|
-
<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">Two Plans</span>
|
|
51
|
-
<h2 class="xText-headline">Scaled Two-Plan Layout</h2>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<XMarkPricingPlans
|
|
55
|
-
:plans="twoPlans"
|
|
56
|
-
highlighted="Premium"
|
|
57
|
-
:badges="['setup', 'support']"
|
|
58
|
-
scale
|
|
59
|
-
/>
|
|
60
|
-
</XMarkSection>
|
|
61
|
-
|
|
62
|
-
<!-- Props Documentation -->
|
|
63
|
-
<XMarkSection bg="subtle">
|
|
64
|
-
<h2 class="text-lg font-semibold mb-6">XMarkPricingPlans Props</h2>
|
|
65
|
-
<div class="overflow-x-auto">
|
|
66
|
-
<table class="w-full text-sm">
|
|
67
|
-
<thead>
|
|
68
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
69
|
-
<th class="text-left py-3 px-4 font-medium">Prop</th>
|
|
70
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
71
|
-
<th class="text-left py-3 px-4 font-medium">Default</th>
|
|
72
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
73
|
-
</tr>
|
|
74
|
-
</thead>
|
|
75
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
76
|
-
<tr>
|
|
77
|
-
<td class="py-3 px-4 font-mono text-xs">plans</td>
|
|
78
|
-
<td class="py-3 px-4">Array</td>
|
|
79
|
-
<td class="py-3 px-4">required</td>
|
|
80
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Array of plan objects</td>
|
|
81
|
-
</tr>
|
|
82
|
-
<tr>
|
|
83
|
-
<td class="py-3 px-4 font-mono text-xs">highlighted</td>
|
|
84
|
-
<td class="py-3 px-4">String</td>
|
|
85
|
-
<td class="py-3 px-4">''</td>
|
|
86
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Plan name to highlight</td>
|
|
87
|
-
</tr>
|
|
88
|
-
<tr>
|
|
89
|
-
<td class="py-3 px-4 font-mono text-xs">hasBillingToggle</td>
|
|
90
|
-
<td class="py-3 px-4">Boolean</td>
|
|
91
|
-
<td class="py-3 px-4">false</td>
|
|
92
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Has monthly/yearly toggle</td>
|
|
93
|
-
</tr>
|
|
94
|
-
<tr>
|
|
95
|
-
<td class="py-3 px-4 font-mono text-xs">yearlyDiscount</td>
|
|
96
|
-
<td class="py-3 px-4">Number</td>
|
|
97
|
-
<td class="py-3 px-4">20</td>
|
|
98
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Yearly discount percentage</td>
|
|
99
|
-
</tr>
|
|
100
|
-
<tr>
|
|
101
|
-
<td class="py-3 px-4 font-mono text-xs">scale</td>
|
|
102
|
-
<td class="py-3 px-4">Boolean</td>
|
|
103
|
-
<td class="py-3 px-4">false</td>
|
|
104
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Scale highlighted plan (mutually exclusive with compact)</td>
|
|
105
|
-
</tr>
|
|
106
|
-
<tr>
|
|
107
|
-
<td class="py-3 px-4 font-mono text-xs">compact</td>
|
|
108
|
-
<td class="py-3 px-4">Boolean</td>
|
|
109
|
-
<td class="py-3 px-4">true</td>
|
|
110
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">No gap between plans (mutually exclusive with scale)</td>
|
|
111
|
-
</tr>
|
|
112
|
-
<tr>
|
|
113
|
-
<td class="py-3 px-4 font-mono text-xs">badges</td>
|
|
114
|
-
<td class="py-3 px-4">Array</td>
|
|
115
|
-
<td class="py-3 px-4">[]</td>
|
|
116
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Social proof badge presets or custom</td>
|
|
117
|
-
</tr>
|
|
118
|
-
<tr>
|
|
119
|
-
<td class="py-3 px-4 font-mono text-xs">badgesPosition</td>
|
|
120
|
-
<td class="py-3 px-4">String</td>
|
|
121
|
-
<td class="py-3 px-4">'bottom'</td>
|
|
122
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">'top' or 'bottom'</td>
|
|
123
|
-
</tr>
|
|
124
|
-
<tr>
|
|
125
|
-
<td class="py-3 px-4 font-mono text-xs">badgesAlign</td>
|
|
126
|
-
<td class="py-3 px-4">String</td>
|
|
127
|
-
<td class="py-3 px-4">'center'</td>
|
|
128
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">'left', 'center', or 'right'</td>
|
|
129
|
-
</tr>
|
|
130
|
-
</tbody>
|
|
131
|
-
</table>
|
|
132
|
-
</div>
|
|
133
|
-
</XMarkSection>
|
|
134
|
-
|
|
135
|
-
<!-- Badge Presets -->
|
|
136
|
-
<XMarkSection bg="default">
|
|
137
|
-
<h2 class="text-lg font-semibold mb-4">Available Badge Presets</h2>
|
|
138
|
-
<div class="grid md:grid-cols-4 gap-4">
|
|
139
|
-
<div v-for="preset in badgePresets" :key="preset" class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-4">
|
|
140
|
-
<XMarkSocialProofBadge :preset="preset" variant="text" />
|
|
141
|
-
<code class="block mt-2 text-xs text-neutral-500">'{{ preset }}'</code>
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
</XMarkSection>
|
|
145
|
-
|
|
146
|
-
<!-- Plan Structure -->
|
|
147
|
-
<XMarkSection bg="subtle">
|
|
148
|
-
<h2 class="text-lg font-semibold mb-4">Plan Data Structure</h2>
|
|
149
|
-
<div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-4 text-sm font-mono overflow-x-auto">
|
|
150
|
-
<pre>{
|
|
151
|
-
name: "Pro",
|
|
152
|
-
description: "For professional teams",
|
|
153
|
-
price: "$29" | { monthly: "$29", yearly: "$279" },
|
|
154
|
-
period: "/month", // Optional, defaults to billing period
|
|
155
|
-
popular: true, // Shows "Most Popular" badge
|
|
156
|
-
features: [
|
|
157
|
-
"All features",
|
|
158
|
-
"Priority support",
|
|
159
|
-
"Custom integrations"
|
|
160
|
-
],
|
|
161
|
-
button: {
|
|
162
|
-
label: "Get Pro"
|
|
163
|
-
}
|
|
164
|
-
}</pre>
|
|
165
|
-
</div>
|
|
166
|
-
</XMarkSection>
|
|
167
|
-
|
|
168
|
-
<!-- Code Example -->
|
|
169
|
-
<XMarkSection bg="default">
|
|
170
|
-
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
171
|
-
<CodeExample title="Pricing Usage" :code="codeExample" />
|
|
172
|
-
</XMarkSection>
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
</template>
|
|
176
|
-
|
|
177
|
-
<script setup>
|
|
178
|
-
import { highlight } from '#ui/utils/fuse'
|
|
179
|
-
|
|
180
|
-
// Initialize scroll reveal animations
|
|
181
|
-
useScrollReveal()
|
|
182
|
-
|
|
183
|
-
const badgePresets = [
|
|
184
|
-
'no-credit-card',
|
|
185
|
-
'cancel-anytime',
|
|
186
|
-
'free-trial',
|
|
187
|
-
'secure',
|
|
188
|
-
'money-back',
|
|
189
|
-
'support',
|
|
190
|
-
'setup',
|
|
191
|
-
'gdpr'
|
|
192
|
-
]
|
|
193
|
-
|
|
194
|
-
const codeExample = `<!-- Scaled center plan (scale enlarges the highlighted plan) -->
|
|
195
|
-
<XMarkPricingPlans
|
|
196
|
-
:plans="plans"
|
|
197
|
-
:has-billing-toggle="true"
|
|
198
|
-
:yearly-discount="20"
|
|
199
|
-
:badges="['no-credit-card', 'cancel-anytime', 'money-back']"
|
|
200
|
-
scale
|
|
201
|
-
@select="handleSelect"
|
|
202
|
-
/>
|
|
203
|
-
|
|
204
|
-
<!-- Compact layout (no gaps between plans) -->
|
|
205
|
-
<XMarkPricingPlans
|
|
206
|
-
:plans="plans"
|
|
207
|
-
highlighted="Pro"
|
|
208
|
-
:badges="['free-trial', 'secure']"
|
|
209
|
-
badges-position="top"
|
|
210
|
-
compact
|
|
211
|
-
/>
|
|
212
|
-
|
|
213
|
-
<!-- Note: scale and compact are mutually exclusive -->
|
|
214
|
-
|
|
215
|
-
<!-- Plan data structure -->
|
|
216
|
-
const plans = [
|
|
217
|
-
{
|
|
218
|
-
name: 'Starter',
|
|
219
|
-
description: 'For personal projects',
|
|
220
|
-
price: { monthly: '$0', yearly: '$0' },
|
|
221
|
-
features: ['10 components', 'Basic support'],
|
|
222
|
-
button: { label: 'Get Started' }
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
name: 'Pro',
|
|
226
|
-
description: 'For professional teams',
|
|
227
|
-
price: { monthly: '$29', yearly: '$279' },
|
|
228
|
-
popular: true,
|
|
229
|
-
features: ['All components', 'Priority support'],
|
|
230
|
-
button: { label: 'Get Pro' }
|
|
231
|
-
}
|
|
232
|
-
]`
|
|
233
|
-
|
|
234
|
-
const plansData = [
|
|
235
|
-
{
|
|
236
|
-
name: 'Starter',
|
|
237
|
-
description: 'For personal projects',
|
|
238
|
-
price: { monthly: '$0', yearly: '$0' },
|
|
239
|
-
features: [
|
|
240
|
-
'10 components',
|
|
241
|
-
'Basic support',
|
|
242
|
-
'Community access',
|
|
243
|
-
'MIT license'
|
|
244
|
-
],
|
|
245
|
-
button: {
|
|
246
|
-
label: 'Get Started'
|
|
247
|
-
}
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
name: 'Pro',
|
|
251
|
-
description: 'For professional teams',
|
|
252
|
-
price: { monthly: '$29', yearly: '$279' },
|
|
253
|
-
popular: true,
|
|
254
|
-
scale: true,
|
|
255
|
-
highlight: true,
|
|
256
|
-
features: [
|
|
257
|
-
'All 33 components',
|
|
258
|
-
'Priority support',
|
|
259
|
-
'Figma files',
|
|
260
|
-
'Updates for 1 year',
|
|
261
|
-
'Private Discord'
|
|
262
|
-
],
|
|
263
|
-
button: {
|
|
264
|
-
label: 'Get Pro'
|
|
265
|
-
}
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
name: 'Enterprise',
|
|
269
|
-
description: 'For large organizations',
|
|
270
|
-
price: { monthly: '$99', yearly: '$949' },
|
|
271
|
-
features: [
|
|
272
|
-
'Everything in Pro',
|
|
273
|
-
'Custom components',
|
|
274
|
-
'Dedicated support',
|
|
275
|
-
'SLA guarantee',
|
|
276
|
-
'White-label license'
|
|
277
|
-
],
|
|
278
|
-
button: {
|
|
279
|
-
label: 'Contact Sales'
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
]
|
|
283
|
-
|
|
284
|
-
const computedPlans = computed(() => {
|
|
285
|
-
return plansData
|
|
286
|
-
})
|
|
287
|
-
|
|
288
|
-
const simplePlans = [
|
|
289
|
-
{
|
|
290
|
-
name: 'Basic',
|
|
291
|
-
description: 'Essential features',
|
|
292
|
-
price: '$9',
|
|
293
|
-
period: '/month',
|
|
294
|
-
features: ['5 projects', 'Basic analytics', 'Email support'],
|
|
295
|
-
button: { label: 'Start Free Trial' }
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
name: 'Professional',
|
|
299
|
-
description: 'Advanced features',
|
|
300
|
-
price: '$29',
|
|
301
|
-
period: '/month',
|
|
302
|
-
popular: true,
|
|
303
|
-
features: ['Unlimited projects', 'Advanced analytics', 'Priority support', 'API access'],
|
|
304
|
-
button: { label: 'Get Started' }
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
name: 'Business',
|
|
308
|
-
description: 'Enterprise scale',
|
|
309
|
-
price: '$99',
|
|
310
|
-
period: '/month',
|
|
311
|
-
features: ['Everything in Pro', 'Custom integrations', 'Dedicated manager', 'SLA'],
|
|
312
|
-
button: { label: 'Contact Us' }
|
|
313
|
-
}
|
|
314
|
-
]
|
|
315
|
-
|
|
316
|
-
const twoPlans = [
|
|
317
|
-
{
|
|
318
|
-
name: 'Free',
|
|
319
|
-
description: 'Get started',
|
|
320
|
-
price: '$0',
|
|
321
|
-
period: '/forever',
|
|
322
|
-
features: ['Basic features', 'Community support', '1 project'],
|
|
323
|
-
button: { label: 'Sign Up Free' }
|
|
324
|
-
},
|
|
325
|
-
{
|
|
326
|
-
name: 'Premium',
|
|
327
|
-
description: 'Full access',
|
|
328
|
-
price: '$49',
|
|
329
|
-
period: '/month',
|
|
330
|
-
popular: true,
|
|
331
|
-
features: ['All features', 'Priority support', 'Unlimited projects', 'Custom branding'],
|
|
332
|
-
button: { label: 'Go Premium' }
|
|
333
|
-
}
|
|
334
|
-
]
|
|
335
|
-
</script>
|
|
@@ -1,188 +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">Testimonials</h1>
|
|
6
|
-
<p class="mt-2 text-neutral-600 dark:text-neutral-400">
|
|
7
|
-
Customer testimonials in featured, grid, and carousel layouts.
|
|
8
|
-
</p>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<!-- Demo Content -->
|
|
12
|
-
<div class="space-y-0">
|
|
13
|
-
<!-- Featured Layout -->
|
|
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">layout="featured"</span>
|
|
17
|
-
<h2 class="xText-headline">Featured Testimonial</h2>
|
|
18
|
-
<p class="mt-4 text-neutral-600 dark:text-neutral-400">Single prominent testimonial with navigation dots</p>
|
|
19
|
-
</div>
|
|
20
|
-
<XMarkSocialProofTestimonials
|
|
21
|
-
:testimonials="testimonials"
|
|
22
|
-
layout="featured"
|
|
23
|
-
:has-stars="true"
|
|
24
|
-
/>
|
|
25
|
-
</XMarkSection>
|
|
26
|
-
|
|
27
|
-
<!-- Grid Layout -->
|
|
28
|
-
<XMarkSection bg="subtle">
|
|
29
|
-
<div class="text-center mb-12">
|
|
30
|
-
<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">layout="grid"</span>
|
|
31
|
-
<h2 class="xText-headline">Grid Layout</h2>
|
|
32
|
-
<p class="mt-4 text-neutral-600 dark:text-neutral-400">Multiple testimonials in a responsive grid</p>
|
|
33
|
-
</div>
|
|
34
|
-
<XMarkSocialProofTestimonials
|
|
35
|
-
:testimonials="testimonials"
|
|
36
|
-
layout="grid"
|
|
37
|
-
:has-stars="true"
|
|
38
|
-
/>
|
|
39
|
-
</XMarkSection>
|
|
40
|
-
|
|
41
|
-
<!-- Without Stars -->
|
|
42
|
-
<XMarkSection bg="default">
|
|
43
|
-
<div class="text-center mb-12">
|
|
44
|
-
<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">hasStars="false"</span>
|
|
45
|
-
<h2 class="xText-headline">Without Star Ratings</h2>
|
|
46
|
-
</div>
|
|
47
|
-
<XMarkSocialProofTestimonials
|
|
48
|
-
:testimonials="testimonials"
|
|
49
|
-
layout="grid"
|
|
50
|
-
:has-stars="false"
|
|
51
|
-
/>
|
|
52
|
-
</XMarkSection>
|
|
53
|
-
|
|
54
|
-
<!-- Props Documentation -->
|
|
55
|
-
<XMarkSection bg="subtle">
|
|
56
|
-
<h2 class="text-lg font-semibold mb-6">Props</h2>
|
|
57
|
-
<div class="overflow-x-auto">
|
|
58
|
-
<table class="w-full text-sm">
|
|
59
|
-
<thead>
|
|
60
|
-
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
61
|
-
<th class="text-left py-3 px-4 font-medium">Prop</th>
|
|
62
|
-
<th class="text-left py-3 px-4 font-medium">Type</th>
|
|
63
|
-
<th class="text-left py-3 px-4 font-medium">Default</th>
|
|
64
|
-
<th class="text-left py-3 px-4 font-medium">Description</th>
|
|
65
|
-
</tr>
|
|
66
|
-
</thead>
|
|
67
|
-
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
68
|
-
<tr>
|
|
69
|
-
<td class="py-3 px-4 font-mono text-xs">testimonials</td>
|
|
70
|
-
<td class="py-3 px-4">Array</td>
|
|
71
|
-
<td class="py-3 px-4">required</td>
|
|
72
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Array of { quote, name, title, company, avatar, logo, rating }</td>
|
|
73
|
-
</tr>
|
|
74
|
-
<tr>
|
|
75
|
-
<td class="py-3 px-4 font-mono text-xs">layout</td>
|
|
76
|
-
<td class="py-3 px-4">String</td>
|
|
77
|
-
<td class="py-3 px-4">'featured'</td>
|
|
78
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">featured, grid, carousel</td>
|
|
79
|
-
</tr>
|
|
80
|
-
<tr>
|
|
81
|
-
<td class="py-3 px-4 font-mono text-xs">hasStars</td>
|
|
82
|
-
<td class="py-3 px-4">Boolean</td>
|
|
83
|
-
<td class="py-3 px-4">true</td>
|
|
84
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Show star rating</td>
|
|
85
|
-
</tr>
|
|
86
|
-
<tr>
|
|
87
|
-
<td class="py-3 px-4 font-mono text-xs">autoplay</td>
|
|
88
|
-
<td class="py-3 px-4">Boolean</td>
|
|
89
|
-
<td class="py-3 px-4">true</td>
|
|
90
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Auto-rotate (featured/carousel layouts)</td>
|
|
91
|
-
</tr>
|
|
92
|
-
<tr>
|
|
93
|
-
<td class="py-3 px-4 font-mono text-xs">interval</td>
|
|
94
|
-
<td class="py-3 px-4">Number</td>
|
|
95
|
-
<td class="py-3 px-4">5000</td>
|
|
96
|
-
<td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Autoplay interval in ms</td>
|
|
97
|
-
</tr>
|
|
98
|
-
</tbody>
|
|
99
|
-
</table>
|
|
100
|
-
</div>
|
|
101
|
-
</XMarkSection>
|
|
102
|
-
|
|
103
|
-
<!-- Data Structure -->
|
|
104
|
-
<XMarkSection bg="default">
|
|
105
|
-
<h2 class="text-lg font-semibold mb-4">Data Structure</h2>
|
|
106
|
-
<div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-4 text-sm font-mono overflow-x-auto">
|
|
107
|
-
<pre>{
|
|
108
|
-
quote: "This is the testimonial text...",
|
|
109
|
-
name: "John Doe",
|
|
110
|
-
title: "CEO",
|
|
111
|
-
company: "Acme Inc",
|
|
112
|
-
avatar: "https://...",
|
|
113
|
-
logo: "https://...", // Optional company logo
|
|
114
|
-
rating: 5 // 1-5 for star rating
|
|
115
|
-
}</pre>
|
|
116
|
-
</div>
|
|
117
|
-
</XMarkSection>
|
|
118
|
-
|
|
119
|
-
<!-- Code Example -->
|
|
120
|
-
<XMarkSection bg="subtle">
|
|
121
|
-
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
122
|
-
<CodeExample title="Testimonials Usage" :code="codeExample" />
|
|
123
|
-
</XMarkSection>
|
|
124
|
-
</div>
|
|
125
|
-
</div>
|
|
126
|
-
</template>
|
|
127
|
-
|
|
128
|
-
<script setup>
|
|
129
|
-
// Initialize scroll reveal animations
|
|
130
|
-
useScrollReveal()
|
|
131
|
-
|
|
132
|
-
const codeExample = `<XMarkSocialProofTestimonials
|
|
133
|
-
:testimonials="[
|
|
134
|
-
{
|
|
135
|
-
quote: 'These components saved us weeks of development.',
|
|
136
|
-
name: 'Sarah Chen',
|
|
137
|
-
title: 'CTO',
|
|
138
|
-
company: 'TechCorp',
|
|
139
|
-
avatar: 'https://...',
|
|
140
|
-
rating: 5
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
quote: 'The best marketing component library.',
|
|
144
|
-
name: 'Michael Torres',
|
|
145
|
-
title: 'Lead Developer',
|
|
146
|
-
company: 'StartupXYZ',
|
|
147
|
-
avatar: 'https://...',
|
|
148
|
-
rating: 5
|
|
149
|
-
}
|
|
150
|
-
]"
|
|
151
|
-
layout="featured"
|
|
152
|
-
:has-stars="true"
|
|
153
|
-
/>
|
|
154
|
-
|
|
155
|
-
<!-- Grid layout -->
|
|
156
|
-
<XMarkSocialProofTestimonials
|
|
157
|
-
:testimonials="testimonials"
|
|
158
|
-
layout="grid"
|
|
159
|
-
:has-stars="false"
|
|
160
|
-
/>`
|
|
161
|
-
|
|
162
|
-
const testimonials = [
|
|
163
|
-
{
|
|
164
|
-
quote: 'These components saved us weeks of development time. The quality and attention to detail is outstanding. Highly recommended for any marketing project.',
|
|
165
|
-
name: 'Sarah Chen',
|
|
166
|
-
title: 'CTO',
|
|
167
|
-
company: 'TechCorp',
|
|
168
|
-
avatar: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop',
|
|
169
|
-
rating: 5
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
quote: 'The best marketing component library I\'ve used. Beautifully designed and easy to customize. Our team was able to launch our new site in record time.',
|
|
173
|
-
name: 'Michael Torres',
|
|
174
|
-
title: 'Lead Developer',
|
|
175
|
-
company: 'StartupXYZ',
|
|
176
|
-
avatar: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=100&h=100&fit=crop',
|
|
177
|
-
rating: 5
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
quote: 'Perfect for building marketing sites quickly. The dark mode support is excellent and the accessibility features are top-notch.',
|
|
181
|
-
name: 'Emma Williams',
|
|
182
|
-
title: 'Designer',
|
|
183
|
-
company: 'Creative Agency',
|
|
184
|
-
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop',
|
|
185
|
-
rating: 5
|
|
186
|
-
}
|
|
187
|
-
]
|
|
188
|
-
</script>
|