@xenterprises/nuxt-x-marketing 1.0.3 → 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 (62) 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/package.json +1 -1
  8. package/.claude/settings.local.json +0 -8
  9. package/.nuxtrc +0 -1
  10. package/.playground/app.config.ts +0 -74
  11. package/.playground/app.vue +0 -269
  12. package/.playground/components/AppFooter.vue +0 -103
  13. package/.playground/components/AppHeader.vue +0 -41
  14. package/.playground/components/CodeExample.vue +0 -70
  15. package/.playground/components/ComponentPlayground.vue +0 -117
  16. package/.playground/components/DocsHeader.vue +0 -19
  17. package/.playground/layouts/default.vue +0 -15
  18. package/.playground/layouts/docs-layout.vue +0 -161
  19. package/.playground/layouts/docs.vue +0 -11
  20. package/.playground/nuxt.config.ts +0 -17
  21. package/.playground/pages/blog/author.vue +0 -145
  22. package/.playground/pages/blog/card.vue +0 -149
  23. package/.playground/pages/blog/cta.vue +0 -131
  24. package/.playground/pages/blog/detail.vue +0 -471
  25. package/.playground/pages/blog/list.vue +0 -261
  26. package/.playground/pages/blog/navigation.vue +0 -228
  27. package/.playground/pages/blog/sidebar.vue +0 -279
  28. package/.playground/pages/config.vue +0 -289
  29. package/.playground/pages/content/comparison.vue +0 -253
  30. package/.playground/pages/content/cta.vue +0 -245
  31. package/.playground/pages/content/features.vue +0 -217
  32. package/.playground/pages/content/newsletter-section.vue +0 -260
  33. package/.playground/pages/content/newsletter.vue +0 -200
  34. package/.playground/pages/content/pricing.vue +0 -335
  35. package/.playground/pages/content/testimonials.vue +0 -188
  36. package/.playground/pages/hero.vue +0 -257
  37. package/.playground/pages/index.vue +0 -381
  38. package/.playground/pages/layout/footer.vue +0 -210
  39. package/.playground/pages/layout/legal-footer.vue +0 -121
  40. package/.playground/pages/layout/navbar.vue +0 -285
  41. package/.playground/pages/layout/section.vue +0 -266
  42. package/.playground/pages/layout/x-legal.vue +0 -199
  43. package/.playground/pages/modals/feature-modal.vue +0 -320
  44. package/.playground/pages/modals/image-lightbox.vue +0 -277
  45. package/.playground/pages/modals/video-modal.vue +0 -222
  46. package/.playground/pages/notifications/announcement-bar.vue +0 -164
  47. package/.playground/pages/notifications/cookie-banner.vue +0 -210
  48. package/.playground/pages/notifications/cookie-toast.vue +0 -143
  49. package/.playground/pages/notifications/gdpr.vue +0 -276
  50. package/.playground/pages/notifications/social-proof-toast.vue +0 -515
  51. package/.playground/pages/ui/badge.vue +0 -161
  52. package/.playground/pages/ui/bg-pattern.vue +0 -177
  53. package/.playground/pages/ui/glass-card.vue +0 -179
  54. package/.playground/pages/ui/glow-divider.vue +0 -179
  55. package/.playground/pages/ui/promo-card.vue +0 -259
  56. package/.playground/pages/ui/section-stitch.vue +0 -411
  57. package/.playground/pages/utilities/back-to-top.vue +0 -153
  58. package/.playground/pages/utilities/popup-chat.vue +0 -224
  59. package/componentList.json +0 -2129
  60. package/screenshots/playground-home.png +0 -0
  61. package/tsconfig.json +0 -3
  62. /package/app/composables/{useXBlog.ts → useXBlog.js} +0 -0
@@ -1,515 +0,0 @@
1
- <template>
2
- <div class="min-h-screen">
3
- <div
4
- class="bg-white dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-800 px-8 py-6"
5
- >
6
- <h1 class="text-2xl font-bold text-neutral-900 dark:text-white">
7
- Social Proof Toast
8
- </h1>
9
- <p class="mt-2 text-neutral-600 dark:text-neutral-400">
10
- Automated notifications showing recent customer activity.
11
- </p>
12
- </div>
13
-
14
- <div class="p-8 space-y-12">
15
- <!-- Demo -->
16
- <section>
17
- <h2 class="text-lg font-semibold mb-4">Live Demo</h2>
18
- <p class="text-sm text-neutral-500 mb-4">
19
- The social proof notifications will cycle through automatically.
20
- Select placement, type, and click Start Demo.
21
- </p>
22
- <div class="flex flex-wrap items-center gap-3">
23
- <UButton @click="startDemo">Start Demo</UButton>
24
- <UButton color="neutral" variant="outline" @click="stopDemo"
25
- >Stop Demo</UButton
26
- >
27
- <div class="flex items-center gap-2 ml-4">
28
- <span class="text-sm text-neutral-500">Placement:</span>
29
- <UButtonGroup>
30
- <UButton
31
- size="sm"
32
- :variant="demoPlacement === 'bottomLeft' ? 'solid' : 'outline'"
33
- @click="demoPlacement = 'bottomLeft'"
34
- >Bottom Left</UButton
35
- >
36
- <UButton
37
- size="sm"
38
- :variant="demoPlacement === 'bottomRight' ? 'solid' : 'outline'"
39
- @click="demoPlacement = 'bottomRight'"
40
- >Bottom Right</UButton
41
- >
42
- <UButton
43
- size="sm"
44
- :variant="demoPlacement === 'topLeft' ? 'solid' : 'outline'"
45
- @click="demoPlacement = 'topLeft'"
46
- >Top Left</UButton
47
- >
48
- <UButton
49
- size="sm"
50
- :variant="demoPlacement === 'topRight' ? 'solid' : 'outline'"
51
- @click="demoPlacement = 'topRight'"
52
- >Top Right</UButton
53
- >
54
- </UButtonGroup>
55
- </div>
56
- <div class="flex items-center gap-2 ml-4">
57
- <span class="text-sm text-neutral-500">Type:</span>
58
- <UButtonGroup>
59
- <UButton
60
- size="sm"
61
- :variant="demoType === 'success' ? 'solid' : 'outline'"
62
- @click="demoType = 'success'"
63
- >Success</UButton
64
- >
65
- <UButton
66
- size="sm"
67
- :variant="demoType === 'error' ? 'solid' : 'outline'"
68
- @click="demoType = 'error'"
69
- >Error</UButton
70
- >
71
- <UButton
72
- size="sm"
73
- :variant="demoType === 'warning' ? 'solid' : 'outline'"
74
- @click="demoType = 'warning'"
75
- >Warning</UButton
76
- >
77
- <UButton
78
- size="sm"
79
- :variant="demoType === 'info' ? 'solid' : 'outline'"
80
- @click="demoType = 'info'"
81
- >Info</UButton
82
- >
83
- </UButtonGroup>
84
- </div>
85
- </div>
86
- </section>
87
-
88
- <!-- Type Examples -->
89
- <section>
90
- <h2 class="text-lg font-semibold mb-4">Toast Types</h2>
91
- <div class="grid md:grid-cols-2 gap-4">
92
- <!-- Success -->
93
- <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-6">
94
- <h3 class="font-medium mb-4 text-green-600 dark:text-green-400">
95
- Success
96
- </h3>
97
- <div
98
- class="bg-white dark:bg-neutral-900 rounded-xl shadow-lg border border-neutral-200 dark:border-neutral-700 p-4 flex items-center gap-3"
99
- >
100
- <img
101
- src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop"
102
- alt="Customer"
103
- class="w-10 h-10 rounded-full object-cover"
104
- />
105
- <div class="flex-1">
106
- <p class="text-sm text-neutral-900 dark:text-white">
107
- <span class="font-medium">Sarah M.</span>
108
- just purchased Pro Plan
109
- </p>
110
- <p class="text-xs text-neutral-500 mt-0.5">2 minutes ago</p>
111
- </div>
112
- <UIcon
113
- name="i-lucide-badge-check"
114
- class="w-5 h-5 text-green-500 flex-shrink-0"
115
- />
116
- </div>
117
- </div>
118
-
119
- <!-- Error -->
120
- <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-6">
121
- <h3 class="font-medium mb-4 text-red-600 dark:text-red-400">
122
- Error
123
- </h3>
124
- <div
125
- class="bg-white dark:bg-neutral-900 rounded-xl shadow-lg border border-neutral-200 dark:border-neutral-700 p-4 flex items-center gap-3"
126
- >
127
- <div
128
- class="w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"
129
- >
130
- <span class="text-primary-600 dark:text-primary-400 font-medium"
131
- >J</span
132
- >
133
- </div>
134
- <div class="flex-1">
135
- <p class="text-sm text-neutral-900 dark:text-white">
136
- <span class="font-medium">John D.</span>
137
- payment failed
138
- </p>
139
- <p class="text-xs text-neutral-500 mt-0.5">5 minutes ago</p>
140
- </div>
141
- <UIcon
142
- name="i-lucide-x-circle"
143
- class="w-5 h-5 text-red-500 flex-shrink-0"
144
- />
145
- </div>
146
- </div>
147
-
148
- <!-- Warning -->
149
- <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-6">
150
- <h3 class="font-medium mb-4 text-yellow-600 dark:text-yellow-400">
151
- Warning
152
- </h3>
153
- <div
154
- class="bg-white dark:bg-neutral-900 rounded-xl shadow-lg border border-neutral-200 dark:border-neutral-700 p-4 flex items-center gap-3"
155
- >
156
- <div
157
- class="w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"
158
- >
159
- <span class="text-primary-600 dark:text-primary-400 font-medium"
160
- >E</span
161
- >
162
- </div>
163
- <div class="flex-1">
164
- <p class="text-sm text-neutral-900 dark:text-white">
165
- <span class="font-medium">Emily R.</span>
166
- subscription expiring soon
167
- </p>
168
- <p class="text-xs text-neutral-500 mt-0.5">10 minutes ago</p>
169
- </div>
170
- <UIcon
171
- name="i-lucide-alert-triangle"
172
- class="w-5 h-5 text-yellow-500 flex-shrink-0"
173
- />
174
- </div>
175
- </div>
176
-
177
- <!-- Info -->
178
- <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-6">
179
- <h3 class="font-medium mb-4 text-blue-600 dark:text-blue-400">
180
- Info
181
- </h3>
182
- <div
183
- class="bg-white dark:bg-neutral-900 rounded-xl shadow-lg border border-neutral-200 dark:border-neutral-700 p-4 flex items-center gap-3"
184
- >
185
- <img
186
- src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop"
187
- alt="Customer"
188
- class="w-10 h-10 rounded-full object-cover"
189
- />
190
- <div class="flex-1">
191
- <p class="text-sm text-neutral-900 dark:text-white">
192
- <span class="font-medium">James W.</span>
193
- viewed pricing page
194
- </p>
195
- <p class="text-xs text-neutral-500 mt-0.5">1 minute ago</p>
196
- </div>
197
- <UIcon
198
- name="i-lucide-info"
199
- class="w-5 h-5 text-blue-500 flex-shrink-0"
200
- />
201
- </div>
202
- </div>
203
- </div>
204
- </section>
205
-
206
- <!-- Configuration -->
207
- <section>
208
- <h2 class="text-lg font-semibold mb-4">Timing Configuration</h2>
209
- <div class="grid md:grid-cols-3 gap-4">
210
- <div class="p-4 rounded-lg bg-neutral-100 dark:bg-neutral-800">
211
- <h3 class="font-medium mb-1">Initial Delay</h3>
212
- <p class="text-sm text-neutral-500">
213
- Wait before first notification
214
- </p>
215
- <p class="mt-2 font-mono text-sm">5000ms (5 seconds)</p>
216
- </div>
217
- <div class="p-4 rounded-lg bg-neutral-100 dark:bg-neutral-800">
218
- <h3 class="font-medium mb-1">Display Duration</h3>
219
- <p class="text-sm text-neutral-500">How long each shows</p>
220
- <p class="mt-2 font-mono text-sm">3000ms (3 seconds)</p>
221
- </div>
222
- <div class="p-4 rounded-lg bg-neutral-100 dark:bg-neutral-800">
223
- <h3 class="font-medium mb-1">Interval</h3>
224
- <p class="text-sm text-neutral-500">Time between notifications</p>
225
- <p class="mt-2 font-mono text-sm">4000ms (4 seconds)</p>
226
- </div>
227
- </div>
228
- </section>
229
-
230
- <!-- Props -->
231
- <section>
232
- <h2 class="text-lg font-semibold mb-4">Props</h2>
233
- <table class="w-full text-sm">
234
- <thead>
235
- <tr class="border-b border-neutral-200 dark:border-neutral-700">
236
- <th class="text-left py-3 px-4">Prop</th>
237
- <th class="text-left py-3 px-4">Type</th>
238
- <th class="text-left py-3 px-4">Default</th>
239
- <th class="text-left py-3 px-4">Description</th>
240
- </tr>
241
- </thead>
242
- <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
243
- <tr>
244
- <td class="py-3 px-4 font-mono text-xs">notifications</td>
245
- <td class="py-3 px-4">Array</td>
246
- <td class="py-3 px-4">required</td>
247
- <td class="py-3 px-4">Array of notification objects</td>
248
- </tr>
249
- <tr>
250
- <td class="py-3 px-4 font-mono text-xs">interval</td>
251
- <td class="py-3 px-4">Number</td>
252
- <td class="py-3 px-4">4000</td>
253
- <td class="py-3 px-4">Time between notifications (ms)</td>
254
- </tr>
255
- <tr>
256
- <td class="py-3 px-4 font-mono text-xs">initialDelay</td>
257
- <td class="py-3 px-4">Number</td>
258
- <td class="py-3 px-4">5000</td>
259
- <td class="py-3 px-4">Delay before first notification (ms)</td>
260
- </tr>
261
- <tr>
262
- <td class="py-3 px-4 font-mono text-xs">displayDuration</td>
263
- <td class="py-3 px-4">Number</td>
264
- <td class="py-3 px-4">3000</td>
265
- <td class="py-3 px-4">How long each notification shows (ms)</td>
266
- </tr>
267
- <tr>
268
- <td class="py-3 px-4 font-mono text-xs">placement</td>
269
- <td class="py-3 px-4">String</td>
270
- <td class="py-3 px-4">topRight</td>
271
- <td class="py-3 px-4">
272
- topLeft, topRight, bottomLeft, bottomRight
273
- </td>
274
- </tr>
275
- <tr>
276
- <td class="py-3 px-4 font-mono text-xs">type</td>
277
- <td class="py-3 px-4">String</td>
278
- <td class="py-3 px-4">success</td>
279
- <td class="py-3 px-4">success, error, warning, info</td>
280
- </tr>
281
- <tr>
282
- <td class="py-3 px-4 font-mono text-xs">showIcon</td>
283
- <td class="py-3 px-4">Boolean</td>
284
- <td class="py-3 px-4">true</td>
285
- <td class="py-3 px-4">Whether to show the status icon</td>
286
- </tr>
287
- </tbody>
288
- </table>
289
- </section>
290
-
291
- <!-- Notification Structure -->
292
- <section>
293
- <h2 class="text-lg font-semibold mb-4">
294
- Notification Object Structure
295
- </h2>
296
- <pre
297
- class="bg-neutral-100 dark:bg-neutral-800 p-4 rounded-lg text-sm overflow-x-auto"
298
- ><code>notifications: [
299
- {
300
- name: 'Sarah M.', // Customer name (required)
301
- action: 'just purchased Pro Plan', // Action text (required)
302
- time: '2 minutes ago', // Time string (required)
303
- avatar: 'https://...' // Optional avatar URL
304
- },
305
- // ... more notifications
306
- ]</code></pre>
307
- </section>
308
-
309
- <!-- Sample Data -->
310
- <section>
311
- <h2 class="text-lg font-semibold mb-4">Sample Notifications</h2>
312
- <div class="grid md:grid-cols-2 gap-4">
313
- <div
314
- v-for="notification in notifications"
315
- :key="notification.name"
316
- class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700 flex items-center gap-3"
317
- >
318
- <img
319
- v-if="notification.avatar"
320
- :src="notification.avatar"
321
- :alt="notification.name"
322
- class="w-10 h-10 rounded-full object-cover"
323
- />
324
- <div
325
- v-else
326
- class="w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"
327
- >
328
- <span class="text-primary-600 dark:text-primary-400 font-medium">
329
- {{ notification.name.charAt(0) }}
330
- </span>
331
- </div>
332
- <div class="flex-1">
333
- <p class="text-sm">
334
- <span class="font-medium">{{ notification.name }}</span>
335
- {{ notification.action }}
336
- </p>
337
- <p class="text-xs text-neutral-500">{{ notification.time }}</p>
338
- </div>
339
- </div>
340
- </div>
341
- </section>
342
-
343
- <!-- Usage Tips -->
344
- <section>
345
- <h2 class="text-lg font-semibold mb-4">Usage Tips</h2>
346
- <ul class="space-y-3 text-neutral-600 dark:text-neutral-400">
347
- <li class="flex gap-2">
348
- <UIcon
349
- name="i-lucide-lightbulb"
350
- class="w-5 h-5 text-yellow-500 flex-shrink-0"
351
- />
352
- <span
353
- >Use real customer data or realistic fake data for
354
- authenticity</span
355
- >
356
- </li>
357
- <li class="flex gap-2">
358
- <UIcon
359
- name="i-lucide-lightbulb"
360
- class="w-5 h-5 text-yellow-500 flex-shrink-0"
361
- />
362
- <span>Keep action text short and focused on conversions</span>
363
- </li>
364
- <li class="flex gap-2">
365
- <UIcon
366
- name="i-lucide-lightbulb"
367
- class="w-5 h-5 text-yellow-500 flex-shrink-0"
368
- />
369
- <span>Use recent-sounding times ("2 minutes ago") for urgency</span>
370
- </li>
371
- <li class="flex gap-2">
372
- <UIcon
373
- name="i-lucide-lightbulb"
374
- class="w-5 h-5 text-yellow-500 flex-shrink-0"
375
- />
376
- <span>Include diverse customer names and avatars</span>
377
- </li>
378
- </ul>
379
- </section>
380
-
381
- <!-- Code Example -->
382
- <section>
383
- <h2 class="text-lg font-semibold mb-4">Code Example</h2>
384
- <CodeExample title="Social Proof Toast Usage" :code="codeExample" />
385
- </section>
386
-
387
- <!-- Type Examples Code -->
388
- <section>
389
- <h2 class="text-lg font-semibold mb-4">Type Examples</h2>
390
- <CodeExample title="Different Toast Types" :code="typeExamplesCode" />
391
- </section>
392
- </div>
393
-
394
- <!-- Actual Component -->
395
- <XMarkSocialProofToast
396
- v-if="demoActive"
397
- :notifications="notifications"
398
- :interval="4000"
399
- :initial-delay="1000"
400
- :display-duration="3000"
401
- :placement="demoPlacement"
402
- :type="demoType"
403
- />
404
- </div>
405
- </template>
406
-
407
- <script setup>
408
- const codeExample = `<XMarkSocialProofToast
409
- :notifications="notifications"
410
- :interval="4000"
411
- :initial-delay="5000"
412
- :display-duration="3000"
413
- type="success"
414
- />
415
-
416
- <script setup>
417
- const notifications = [
418
- {
419
- name: 'Sarah M.',
420
- action: 'just purchased Pro Plan',
421
- time: '2 minutes ago',
422
- avatar: 'https://...'
423
- },
424
- {
425
- name: 'James W.',
426
- action: 'signed up for a free trial',
427
- time: '5 minutes ago',
428
- avatar: 'https://...'
429
- },
430
- {
431
- name: 'Emily R.',
432
- action: 'upgraded to Enterprise',
433
- time: '8 minutes ago'
434
- }
435
- ]
436
- <\/script>`;
437
-
438
- const typeExamplesCode = `<!-- Success (default) -->
439
- <XMarkSocialProofToast
440
- :notifications="notifications"
441
- type="success"
442
- />
443
-
444
- <!-- Error -->
445
- <XMarkSocialProofToast
446
- :notifications="notifications"
447
- type="error"
448
- />
449
-
450
- <!-- Warning -->
451
- <XMarkSocialProofToast
452
- :notifications="notifications"
453
- type="warning"
454
- />
455
-
456
- <!-- Info -->
457
- <XMarkSocialProofToast
458
- :notifications="notifications"
459
- type="info"
460
- />
461
-
462
- <!-- Hide icon -->
463
- <XMarkSocialProofToast
464
- :notifications="notifications"
465
- :show-icon="false"
466
- />`;
467
-
468
- const demoActive = ref(false);
469
- const demoPlacement = ref("bottomLeft");
470
- const demoType = ref("success");
471
-
472
- const notifications = [
473
- {
474
- name: "Sarah M.",
475
- action: "just purchased Pro Plan",
476
- time: "2 minutes ago",
477
- avatar:
478
- "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop",
479
- },
480
- {
481
- name: "James W.",
482
- action: "signed up for a free trial",
483
- time: "5 minutes ago",
484
- avatar:
485
- "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop",
486
- },
487
- {
488
- name: "Emily R.",
489
- action: "upgraded to Enterprise",
490
- time: "8 minutes ago",
491
- avatar:
492
- "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop",
493
- },
494
- {
495
- name: "Michael T.",
496
- action: "just made a purchase",
497
- time: "12 minutes ago",
498
- },
499
- {
500
- name: "Lisa K.",
501
- action: "joined the newsletter",
502
- time: "15 minutes ago",
503
- avatar:
504
- "https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=100&h=100&fit=crop",
505
- },
506
- ];
507
-
508
- const startDemo = () => {
509
- demoActive.value = true;
510
- };
511
-
512
- const stopDemo = () => {
513
- demoActive.value = false;
514
- };
515
- </script>
@@ -1,161 +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">Badge</h1>
5
- <p class="mt-2 text-neutral-600 dark:text-neutral-400">Trust indicators and feature badges with preset icons.</p>
6
- </div>
7
-
8
- <div class="p-8 space-y-12">
9
- <!-- Presets -->
10
- <section>
11
- <h2 class="text-lg font-semibold mb-4">Preset Badges</h2>
12
- <p class="text-sm text-neutral-500 mb-4">Built-in presets for common trust indicators</p>
13
- <div class="flex flex-wrap gap-4">
14
- <XMarkSocialProofBadge preset="no-credit-card" />
15
- <XMarkSocialProofBadge preset="cancel-anytime" />
16
- <XMarkSocialProofBadge preset="free-trial" />
17
- <XMarkSocialProofBadge preset="secure" />
18
- <XMarkSocialProofBadge preset="support" />
19
- <XMarkSocialProofBadge preset="setup" />
20
- <XMarkSocialProofBadge preset="gdpr" />
21
- <XMarkSocialProofBadge preset="money-back" />
22
- </div>
23
- </section>
24
-
25
- <!-- Variants -->
26
- <section>
27
- <h2 class="text-lg font-semibold mb-4">Style Variants</h2>
28
- <p class="text-sm text-neutral-500 mb-4">Default, subtle, outline, text, and text-muted styles</p>
29
- <div class="flex flex-wrap items-center gap-4">
30
- <XMarkSocialProofBadge preset="secure" variant="default" />
31
- <XMarkSocialProofBadge preset="secure" variant="subtle" />
32
- <XMarkSocialProofBadge preset="secure" variant="outline" />
33
- <XMarkSocialProofBadge preset="secure" variant="text" />
34
- <XMarkSocialProofBadge preset="secure" variant="text-muted" />
35
- </div>
36
- </section>
37
-
38
- <!-- Custom Badges -->
39
- <section>
40
- <h2 class="text-lg font-semibold mb-4">Custom Badges</h2>
41
- <p class="text-sm text-neutral-500 mb-4">Create custom badges with any icon and label</p>
42
- <div class="flex flex-wrap gap-4">
43
- <XMarkSocialProofBadge icon="i-lucide-sparkles" label="AI-Powered" />
44
- <XMarkSocialProofBadge icon="i-lucide-globe" label="Available Worldwide" variant="subtle" />
45
- <XMarkSocialProofBadge icon="i-lucide-rocket" label="Fast Setup" variant="outline" />
46
- </div>
47
- </section>
48
-
49
- <!-- Usage Example -->
50
- <section>
51
- <h2 class="text-lg font-semibold mb-4">Usage in Hero</h2>
52
- <p class="text-sm text-neutral-500 mb-4">Common placement below CTA buttons</p>
53
- <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-8">
54
- <div class="text-center space-y-6">
55
- <h3 class="text-2xl font-bold">Start Your Free Trial</h3>
56
- <UButton size="lg" color="primary">Get Started</UButton>
57
- <div class="flex justify-center gap-4 flex-wrap">
58
- <XMarkSocialProofBadge preset="no-credit-card" variant="subtle" />
59
- <XMarkSocialProofBadge preset="cancel-anytime" variant="subtle" />
60
- </div>
61
- </div>
62
- </div>
63
- </section>
64
-
65
- <!-- Props -->
66
- <section>
67
- <h2 class="text-lg font-semibold mb-4">Props</h2>
68
- <div class="overflow-x-auto">
69
- <table class="w-full text-sm">
70
- <thead>
71
- <tr class="border-b border-neutral-200 dark:border-neutral-700">
72
- <th class="text-left py-3 px-4 font-medium">Prop</th>
73
- <th class="text-left py-3 px-4 font-medium">Type</th>
74
- <th class="text-left py-3 px-4 font-medium">Default</th>
75
- <th class="text-left py-3 px-4 font-medium">Description</th>
76
- </tr>
77
- </thead>
78
- <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
79
- <tr>
80
- <td class="py-3 px-4 font-mono text-xs">preset</td>
81
- <td class="py-3 px-4">String</td>
82
- <td class="py-3 px-4">''</td>
83
- <td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">no-credit-card, cancel-anytime, free-trial, secure, support, setup, gdpr, money-back</td>
84
- </tr>
85
- <tr>
86
- <td class="py-3 px-4 font-mono text-xs">icon</td>
87
- <td class="py-3 px-4">String</td>
88
- <td class="py-3 px-4">''</td>
89
- <td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Custom icon name (if not using preset)</td>
90
- </tr>
91
- <tr>
92
- <td class="py-3 px-4 font-mono text-xs">label</td>
93
- <td class="py-3 px-4">String</td>
94
- <td class="py-3 px-4">''</td>
95
- <td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">Custom label text (if not using preset)</td>
96
- </tr>
97
- <tr>
98
- <td class="py-3 px-4 font-mono text-xs">variant</td>
99
- <td class="py-3 px-4">String</td>
100
- <td class="py-3 px-4">'default'</td>
101
- <td class="py-3 px-4 text-neutral-600 dark:text-neutral-400">default, subtle, outline, text, text-muted</td>
102
- </tr>
103
- </tbody>
104
- </table>
105
- </div>
106
- </section>
107
-
108
- <!-- Available Presets -->
109
- <section>
110
- <h2 class="text-lg font-semibold mb-4">Available Presets</h2>
111
- <table class="w-full text-sm">
112
- <thead>
113
- <tr class="border-b border-neutral-200 dark:border-neutral-700">
114
- <th class="text-left py-3 px-4">Preset</th>
115
- <th class="text-left py-3 px-4">Icon</th>
116
- <th class="text-left py-3 px-4">Label</th>
117
- </tr>
118
- </thead>
119
- <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
120
- <tr><td class="py-3 px-4 font-mono text-xs">no-credit-card</td><td class="py-3 px-4">i-lucide-credit-card</td><td class="py-3 px-4">No credit card required</td></tr>
121
- <tr><td class="py-3 px-4 font-mono text-xs">cancel-anytime</td><td class="py-3 px-4">i-lucide-x-circle</td><td class="py-3 px-4">Cancel anytime</td></tr>
122
- <tr><td class="py-3 px-4 font-mono text-xs">free-trial</td><td class="py-3 px-4">i-lucide-gift</td><td class="py-3 px-4">Free 14-day trial</td></tr>
123
- <tr><td class="py-3 px-4 font-mono text-xs">secure</td><td class="py-3 px-4">i-lucide-shield-check</td><td class="py-3 px-4">Bank-level security</td></tr>
124
- <tr><td class="py-3 px-4 font-mono text-xs">support</td><td class="py-3 px-4">i-lucide-message-circle</td><td class="py-3 px-4">24/7 support</td></tr>
125
- <tr><td class="py-3 px-4 font-mono text-xs">setup</td><td class="py-3 px-4">i-lucide-zap</td><td class="py-3 px-4">Setup in minutes</td></tr>
126
- <tr><td class="py-3 px-4 font-mono text-xs">gdpr</td><td class="py-3 px-4">i-lucide-lock</td><td class="py-3 px-4">GDPR compliant</td></tr>
127
- <tr><td class="py-3 px-4 font-mono text-xs">money-back</td><td class="py-3 px-4">i-lucide-undo-2</td><td class="py-3 px-4">30-day money back</td></tr>
128
- </tbody>
129
- </table>
130
- </section>
131
-
132
- <!-- Code Example -->
133
- <section>
134
- <h2 class="text-lg font-semibold mb-4">Code Example</h2>
135
- <CodeExample title="Badge Usage" :code="codeExample" />
136
- </section>
137
- </div>
138
- </div>
139
- </template>
140
-
141
- <script setup>
142
- const codeExample = `<!-- Using presets -->
143
- <XMarkSocialProofBadge preset="no-credit-card" />
144
- <XMarkSocialProofBadge preset="secure" variant="subtle" />
145
-
146
- <!-- Custom badge -->
147
- <XMarkSocialProofBadge
148
- icon="i-lucide-sparkles"
149
- label="AI-Powered"
150
- variant="outline"
151
- />
152
-
153
- <!-- Text variant (minimal) -->
154
- <XMarkSocialProofBadge preset="gdpr" variant="text" />
155
-
156
- <!-- Common usage below CTA -->
157
- <div class="flex justify-center gap-4">
158
- <XMarkSocialProofBadge preset="no-credit-card" variant="subtle" />
159
- <XMarkSocialProofBadge preset="cancel-anytime" variant="subtle" />
160
- </div>`
161
- </script>