@xenterprises/nuxt-x-marketing 0.0.23 → 1.0.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 (115) hide show
  1. package/.claude/settings.local.json +22 -0
  2. package/.playground/app.config.ts +44 -45
  3. package/.playground/app.vue +263 -0
  4. package/.playground/components/AppFooter.vue +103 -0
  5. package/.playground/components/AppHeader.vue +41 -0
  6. package/.playground/components/CodeExample.vue +70 -0
  7. package/.playground/components/ComponentPlayground.vue +117 -0
  8. package/.playground/components/DocsHeader.vue +19 -0
  9. package/.playground/layouts/default.vue +13 -3
  10. package/.playground/layouts/docs-layout.vue +161 -0
  11. package/.playground/layouts/docs.vue +11 -0
  12. package/.playground/package-lock.json +6 -0
  13. package/.playground/pages/blog/author.vue +145 -0
  14. package/.playground/pages/blog/card.vue +149 -0
  15. package/.playground/pages/blog/cta.vue +131 -0
  16. package/.playground/pages/blog/detail.vue +379 -0
  17. package/.playground/pages/blog/list.vue +261 -0
  18. package/.playground/pages/blog/navigation.vue +228 -0
  19. package/.playground/pages/blog/sidebar.vue +279 -0
  20. package/.playground/pages/config.vue +289 -0
  21. package/.playground/pages/content/comparison.vue +253 -0
  22. package/.playground/pages/content/cta.vue +245 -0
  23. package/.playground/pages/content/features.vue +217 -0
  24. package/.playground/pages/content/newsletter-section.vue +260 -0
  25. package/.playground/pages/content/newsletter.vue +200 -0
  26. package/.playground/pages/content/pricing.vue +335 -0
  27. package/.playground/pages/content/testimonials.vue +188 -0
  28. package/.playground/pages/hero.vue +257 -0
  29. package/.playground/pages/index.vue +379 -2
  30. package/.playground/pages/layout/footer.vue +210 -0
  31. package/.playground/pages/layout/legal-footer.vue +121 -0
  32. package/.playground/pages/layout/navbar.vue +285 -0
  33. package/.playground/pages/layout/section.vue +266 -0
  34. package/.playground/pages/layout/x-legal.vue +199 -0
  35. package/.playground/pages/modals/feature-modal.vue +320 -0
  36. package/.playground/pages/modals/image-lightbox.vue +277 -0
  37. package/.playground/pages/modals/video-modal.vue +222 -0
  38. package/.playground/pages/notifications/announcement-bar.vue +164 -0
  39. package/.playground/pages/notifications/cookie-banner.vue +210 -0
  40. package/.playground/pages/notifications/cookie-toast.vue +143 -0
  41. package/.playground/pages/notifications/gdpr.vue +276 -0
  42. package/.playground/pages/notifications/social-proof-toast.vue +255 -0
  43. package/.playground/pages/ui/badge.vue +161 -0
  44. package/.playground/pages/ui/bg-pattern.vue +177 -0
  45. package/.playground/pages/ui/glass-card.vue +179 -0
  46. package/.playground/pages/ui/glow-divider.vue +179 -0
  47. package/.playground/pages/ui/promo-card.vue +259 -0
  48. package/.playground/pages/ui/section-stitch.vue +411 -0
  49. package/.playground/pages/utilities/back-to-top.vue +153 -0
  50. package/.playground/pages/utilities/popup-chat.vue +224 -0
  51. package/README.md +799 -164
  52. package/app/app.config.ts +88 -2
  53. package/app/app.vue +106 -11
  54. package/app/assets/css/x-marketing.css +668 -0
  55. package/app/components/X/Footer/XLegal/index.vue +63 -26
  56. package/app/components/X/Footer/index.vue +89 -89
  57. package/app/components/X/Header/App.vue +63 -0
  58. package/app/components/X/Mark/Blog/Author.vue +170 -0
  59. package/app/components/X/Mark/Blog/CTANewsletter.vue +197 -0
  60. package/app/components/X/Mark/Blog/Card.vue +117 -0
  61. package/app/components/X/Mark/Blog/Detail.vue +240 -0
  62. package/app/components/X/Mark/Blog/List.vue +156 -0
  63. package/app/components/X/Mark/Blog/Navigation.vue +100 -0
  64. package/app/components/X/Mark/Blog/Sidebar.vue +160 -0
  65. package/app/components/X/Mark/Button/BackToTop.vue +99 -0
  66. package/app/components/X/Mark/CTA/index.vue +294 -0
  67. package/app/components/X/Mark/Card/Glass.vue +64 -0
  68. package/app/components/X/Mark/Card/Promo.vue +164 -0
  69. package/app/components/X/Mark/Divider/Glow.vue +113 -0
  70. package/app/components/X/Mark/Features/index.vue +194 -0
  71. package/app/components/X/Mark/Hero/index.vue +217 -0
  72. package/app/components/X/Mark/Layout/AnnouncementBar.vue +139 -0
  73. package/app/components/X/Mark/Layout/Footer.vue +160 -0
  74. package/app/components/X/Mark/Layout/FooterLegal.vue +42 -0
  75. package/app/components/X/Mark/Layout/Navbar.vue +267 -0
  76. package/app/components/X/Mark/Modal/Chat.vue +151 -0
  77. package/app/components/X/Mark/Modal/Feature.vue +197 -0
  78. package/app/components/X/Mark/Modal/Image.vue +226 -0
  79. package/app/components/X/Mark/Modal/Video.vue +203 -0
  80. package/app/components/X/Mark/Modal/index.vue +133 -0
  81. package/app/components/X/Mark/Newsletter/Form.vue +174 -0
  82. package/app/components/X/Mark/Pattern/Bg.vue +86 -0
  83. package/app/components/X/Mark/Pricing/Comparison.vue +126 -0
  84. package/app/components/X/Mark/Pricing/Plans.vue +181 -0
  85. package/app/components/X/Mark/Privacy/CookieBanner.vue +112 -0
  86. package/app/components/X/Mark/Privacy/CookieToast.vue +43 -0
  87. package/app/components/X/Mark/Privacy/GDPR.vue +245 -0
  88. package/app/components/X/Mark/Section/Newsletter.vue +183 -0
  89. package/app/components/X/Mark/Section/Stitch.vue +156 -0
  90. package/app/components/X/Mark/Section/index.vue +151 -0
  91. package/app/components/X/Mark/SocialProof/Badge.vue +102 -0
  92. package/app/components/X/Mark/SocialProof/Testimonials.vue +326 -0
  93. package/app/components/X/Mark/SocialProof/Toast.vue +136 -0
  94. package/app/components/X/Mark/_archive/Pattern/Background.vue +83 -0
  95. package/app/components/X/Mark/_archive/Pattern/CheckBg.vue +35 -0
  96. package/app/components/X/Mark/_archive/Pattern/CircuitBg.vue +41 -0
  97. package/app/components/X/Mark/_archive/Pattern/DotsBg.vue +35 -0
  98. package/app/components/X/Mark/_archive/Pattern/GlowDivider.vue +86 -0
  99. package/app/components/X/Mark/_archive/Pattern/HexBg.vue +35 -0
  100. package/app/components/X/Mark/_archive/Pattern/PlaidBg.vue +47 -0
  101. package/app/components/X/Mark/_archive/Pattern/SectionStitch.vue +168 -0
  102. package/app/components/X/Mark/_archive/Pattern/WaveBg.vue +41 -0
  103. package/app/components/X/_archive/Newsletter/Form.vue +123 -0
  104. package/app/components/X/_archive/Newsletter/Section.vue +131 -0
  105. package/app/composables/useParallax.ts +124 -0
  106. package/app/composables/useScrollReveal.ts +92 -0
  107. package/app/pages/index.vue +210 -0
  108. package/app/plugins/marketing.client.ts +13 -0
  109. package/app/types/marketing.d.ts +268 -0
  110. package/componentList.json +511 -0
  111. package/nuxt.config.ts +6 -13
  112. package/package.json +21 -9
  113. package/.editorconfig +0 -12
  114. package/app/assets/css/main.css +0 -2
  115. package/app/components/X/Marketing/Sections/EmailSubscription/index.vue +0 -129
@@ -0,0 +1,179 @@
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">Glass Card</h1>
5
+ <p class="mt-2 text-neutral-600 dark:text-neutral-400">Glassmorphism card with frosted background effect.</p>
6
+ </div>
7
+
8
+ <div class="p-8 space-y-12">
9
+ <!-- Basic -->
10
+ <section class="bg-gradient-to-br from-primary-500 to-primary-700 rounded-2xl p-12">
11
+ <h2 class="text-lg font-semibold mb-4 text-white">Basic Card</h2>
12
+ <div class="max-w-md">
13
+ <XMarkCardGlass title="Glass Effect" subtitle="Frosted glass aesthetic">
14
+ <p class="text-gray-600 dark:text-gray-300">
15
+ This card uses backdrop blur and semi-transparent backgrounds for a modern glass effect.
16
+ </p>
17
+ </XMarkCardGlass>
18
+ </div>
19
+ </section>
20
+
21
+ <!-- Size Options -->
22
+ <section class="bg-gradient-to-br from-neutral-800 to-neutral-900 rounded-2xl p-12">
23
+ <h2 class="text-lg font-semibold mb-6 text-white">Size Options</h2>
24
+ <p class="text-sm text-neutral-400 mb-8">Different padding sizes for various use cases. Each card contains the same content to show the padding difference.</p>
25
+ <div class="space-y-6">
26
+ <div class="flex flex-wrap items-start gap-6">
27
+ <div class="text-center">
28
+ <p class="text-xs text-neutral-400 mb-2 font-mono">size="xs" (p-3)</p>
29
+ <XMarkCardGlass title="Extra Small" size="xs">
30
+ <p class="text-sm text-gray-300">Compact cards for tight spaces, sidebars, or dense layouts.</p>
31
+ </XMarkCardGlass>
32
+ </div>
33
+ <div class="text-center">
34
+ <p class="text-xs text-neutral-400 mb-2 font-mono">size="sm" (p-4)</p>
35
+ <XMarkCardGlass title="Small" size="sm">
36
+ <p class="text-sm text-gray-300">Compact cards for tight spaces, sidebars, or dense layouts.</p>
37
+ </XMarkCardGlass>
38
+ </div>
39
+ <div class="text-center">
40
+ <p class="text-xs text-neutral-400 mb-2 font-mono">size="md" (p-6)</p>
41
+ <XMarkCardGlass title="Medium" size="md">
42
+ <p class="text-sm text-gray-300">Compact cards for tight spaces, sidebars, or dense layouts.</p>
43
+ </XMarkCardGlass>
44
+ </div>
45
+ </div>
46
+ <div class="flex flex-wrap items-start gap-6">
47
+ <div class="text-center">
48
+ <p class="text-xs text-neutral-400 mb-2 font-mono">size="lg" (p-8)</p>
49
+ <XMarkCardGlass title="Large" size="lg">
50
+ <p class="text-sm text-gray-300">Compact cards for tight spaces, sidebars, or dense layouts.</p>
51
+ </XMarkCardGlass>
52
+ </div>
53
+ <div class="text-center">
54
+ <p class="text-xs text-neutral-400 mb-2 font-mono">size="xl" (p-10)</p>
55
+ <XMarkCardGlass title="Extra Large" size="xl">
56
+ <p class="text-sm text-gray-300">Compact cards for tight spaces, sidebars, or dense layouts.</p>
57
+ </XMarkCardGlass>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </section>
62
+
63
+ <!-- With Glow -->
64
+ <section class="bg-gradient-to-br from-indigo-900 via-purple-900 to-pink-900 rounded-2xl p-12">
65
+ <h2 class="text-lg font-semibold mb-4 text-white">With Glow Border</h2>
66
+ <div class="grid md:grid-cols-2 gap-6">
67
+ <XMarkCardGlass title="Standard Card">
68
+ <p class="text-gray-300">Without glow effect</p>
69
+ </XMarkCardGlass>
70
+ <XMarkCardGlass title="Glow Card" :glow="true">
71
+ <p class="text-gray-300">With animated glow border</p>
72
+ </XMarkCardGlass>
73
+ </div>
74
+ </section>
75
+
76
+ <!-- With Slots -->
77
+ <section class="bg-gradient-to-br from-cyan-600 to-blue-700 rounded-2xl p-12">
78
+ <h2 class="text-lg font-semibold mb-4 text-white">Using Slots</h2>
79
+ <div class="max-w-md">
80
+ <XMarkCardGlass>
81
+ <template #header>
82
+ <div class="flex items-center gap-3">
83
+ <div class="w-10 h-10 rounded-full bg-white/20 flex items-center justify-center">
84
+ <UIcon name="i-lucide-star" class="w-5 h-5 text-white" />
85
+ </div>
86
+ <div>
87
+ <h3 class="font-semibold text-white">Custom Header</h3>
88
+ <p class="text-sm text-white/70">Using the header slot</p>
89
+ </div>
90
+ </div>
91
+ </template>
92
+ <p class="text-gray-200">
93
+ Custom header content with icon and text layout.
94
+ </p>
95
+ <template #footer>
96
+ <div class="flex justify-between items-center">
97
+ <span class="text-sm text-white/60">Footer slot</span>
98
+ <UButton size="sm" color="white" variant="outline">Action</UButton>
99
+ </div>
100
+ </template>
101
+ </XMarkCardGlass>
102
+ </div>
103
+ </section>
104
+
105
+ <!-- Props -->
106
+ <section>
107
+ <h2 class="text-lg font-semibold mb-4">Props</h2>
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">Prop</th>
112
+ <th class="text-left py-3 px-4">Type</th>
113
+ <th class="text-left py-3 px-4">Default</th>
114
+ <th class="text-left py-3 px-4">Description</th>
115
+ </tr>
116
+ </thead>
117
+ <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
118
+ <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">''</td><td class="py-3 px-4">Card title</td></tr>
119
+ <tr><td class="py-3 px-4 font-mono text-xs">subtitle</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4">Card subtitle</td></tr>
120
+ <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">xs, sm, md, lg, xl</td></tr>
121
+ <tr><td class="py-3 px-4 font-mono text-xs">glow</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">false</td><td class="py-3 px-4">Add animated glow border</td></tr>
122
+ </tbody>
123
+ </table>
124
+ </section>
125
+
126
+ <!-- Slots -->
127
+ <section>
128
+ <h2 class="text-lg font-semibold mb-4">Slots</h2>
129
+ <table class="w-full text-sm">
130
+ <thead>
131
+ <tr class="border-b border-neutral-200 dark:border-neutral-700">
132
+ <th class="text-left py-3 px-4">Slot</th>
133
+ <th class="text-left py-3 px-4">Description</th>
134
+ </tr>
135
+ </thead>
136
+ <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
137
+ <tr><td class="py-3 px-4 font-mono text-xs">default</td><td class="py-3 px-4">Main card content</td></tr>
138
+ <tr><td class="py-3 px-4 font-mono text-xs">header</td><td class="py-3 px-4">Custom header (overrides title/subtitle)</td></tr>
139
+ <tr><td class="py-3 px-4 font-mono text-xs">footer</td><td class="py-3 px-4">Footer with border separator</td></tr>
140
+ </tbody>
141
+ </table>
142
+ </section>
143
+
144
+ <!-- Code Example -->
145
+ <section>
146
+ <h2 class="text-lg font-semibold mb-4">Code Example</h2>
147
+ <CodeExample title="Glass Card Usage" :code="codeExample" />
148
+ </section>
149
+ </div>
150
+ </div>
151
+ </template>
152
+
153
+ <script setup>
154
+ const codeExample = `<!-- Basic glass card -->
155
+ <XMarkCardGlass title="Features" subtitle="What we offer">
156
+ <p>Your content here...</p>
157
+ </XMarkCardGlass>
158
+
159
+ <!-- With glow effect -->
160
+ <XMarkCardGlass title="Premium" :glow="true" size="lg">
161
+ <p>Highlighted card with animated glow border</p>
162
+ </XMarkCardGlass>
163
+
164
+ <!-- Using slots for custom layout -->
165
+ <XMarkCardGlass>
166
+ <template #header>
167
+ <div class="flex items-center gap-3">
168
+ <UIcon name="i-lucide-star" class="w-5 h-5" />
169
+ <h3 class="font-semibold">Custom Header</h3>
170
+ </div>
171
+ </template>
172
+
173
+ <p>Main content goes here</p>
174
+
175
+ <template #footer>
176
+ <UButton size="sm">Action</UButton>
177
+ </template>
178
+ </XMarkCardGlass>`
179
+ </script>
@@ -0,0 +1,179 @@
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">Glow Divider</h1>
5
+ <p class="mt-2 text-neutral-600 dark:text-neutral-400">Horizontal divider with layered glow effect.</p>
6
+ </div>
7
+
8
+ <div class="p-8 space-y-12">
9
+ <!-- Basic -->
10
+ <section>
11
+ <h2 class="text-lg font-semibold mb-4">Basic Divider</h2>
12
+ <div class="bg-neutral-900 rounded-lg p-8">
13
+ <p class="text-neutral-400 mb-4">Content above divider</p>
14
+ <XMarkDividerGlow />
15
+ <p class="text-neutral-400 mt-4">Content below divider</p>
16
+ </div>
17
+ </section>
18
+
19
+ <!-- Color Options -->
20
+ <section>
21
+ <h2 class="text-lg font-semibold mb-4">Color Options</h2>
22
+ <div class="space-y-8">
23
+ <div class="bg-neutral-900 rounded-lg p-8">
24
+ <p class="text-white mb-2 text-sm">Primary (default)</p>
25
+ <XMarkDividerGlow color="primary" spacing="py-4" />
26
+ </div>
27
+ <div class="bg-neutral-900 rounded-lg p-8">
28
+ <p class="text-white mb-2 text-sm">Cyan</p>
29
+ <XMarkDividerGlow color="cyan" spacing="py-4" />
30
+ </div>
31
+ <div class="bg-neutral-900 rounded-lg p-8">
32
+ <p class="text-white mb-2 text-sm">Blue</p>
33
+ <XMarkDividerGlow color="blue" spacing="py-4" />
34
+ </div>
35
+ <div class="bg-neutral-900 rounded-lg p-8">
36
+ <p class="text-white mb-2 text-sm">Purple</p>
37
+ <XMarkDividerGlow color="purple" spacing="py-4" />
38
+ </div>
39
+ <div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-8">
40
+ <p class="text-neutral-600 dark:text-neutral-400 mb-2 text-sm">Neutral</p>
41
+ <XMarkDividerGlow color="neutral" spacing="py-4" />
42
+ </div>
43
+ <div class="bg-neutral-900 rounded-lg p-8">
44
+ <p class="text-white mb-2 text-sm">White</p>
45
+ <XMarkDividerGlow color="white" spacing="py-4" />
46
+ </div>
47
+ </div>
48
+ </section>
49
+
50
+ <!-- Intensity -->
51
+ <section>
52
+ <h2 class="text-lg font-semibold mb-4">Glow Intensity</h2>
53
+ <div class="bg-neutral-900 rounded-lg p-8 space-y-8">
54
+ <div>
55
+ <p class="text-white mb-2 text-sm">None (line only)</p>
56
+ <XMarkDividerGlow intensity="none" spacing="py-4" />
57
+ </div>
58
+ <div>
59
+ <p class="text-white mb-2 text-sm">Subtle</p>
60
+ <XMarkDividerGlow intensity="subtle" spacing="py-4" />
61
+ </div>
62
+ <div>
63
+ <p class="text-white mb-2 text-sm">Medium (default)</p>
64
+ <XMarkDividerGlow intensity="medium" spacing="py-4" />
65
+ </div>
66
+ <div>
67
+ <p class="text-white mb-2 text-sm">Strong</p>
68
+ <XMarkDividerGlow intensity="strong" spacing="py-4" />
69
+ </div>
70
+ </div>
71
+ </section>
72
+
73
+ <!-- Height -->
74
+ <section>
75
+ <h2 class="text-lg font-semibold mb-4">Line Height</h2>
76
+ <div class="bg-neutral-900 rounded-lg p-8 space-y-8">
77
+ <div>
78
+ <p class="text-white mb-2 text-sm">Thin (1px)</p>
79
+ <XMarkDividerGlow height="thin" spacing="py-4" />
80
+ </div>
81
+ <div>
82
+ <p class="text-white mb-2 text-sm">Default (2px)</p>
83
+ <XMarkDividerGlow height="default" spacing="py-4" />
84
+ </div>
85
+ <div>
86
+ <p class="text-white mb-2 text-sm">Thick (4px)</p>
87
+ <XMarkDividerGlow height="thick" spacing="py-4" />
88
+ </div>
89
+ </div>
90
+ </section>
91
+
92
+ <!-- Spacing -->
93
+ <section>
94
+ <h2 class="text-lg font-semibold mb-4">Vertical Spacing</h2>
95
+ <div class="bg-neutral-900 rounded-lg p-8">
96
+ <p class="text-neutral-400">Small spacing (py-4)</p>
97
+ <XMarkDividerGlow spacing="py-4" />
98
+ <p class="text-neutral-400">Medium spacing (py-8)</p>
99
+ <XMarkDividerGlow spacing="py-8" />
100
+ <p class="text-neutral-400">Large spacing (py-16)</p>
101
+ <XMarkDividerGlow spacing="py-16" />
102
+ <p class="text-neutral-400">End</p>
103
+ </div>
104
+ </section>
105
+
106
+ <!-- Combined Example -->
107
+ <section>
108
+ <h2 class="text-lg font-semibold mb-4">Combined Example</h2>
109
+ <div class="bg-neutral-900 rounded-lg p-8">
110
+ <p class="text-white text-center text-lg mb-2">Section Title</p>
111
+ <p class="text-neutral-400 text-center text-sm">Some descriptive content here</p>
112
+ <XMarkDividerGlow color="cyan" intensity="strong" height="thick" spacing="py-12" />
113
+ <p class="text-neutral-400 text-center text-sm">Next section content</p>
114
+ </div>
115
+ </section>
116
+
117
+ <!-- Props -->
118
+ <section>
119
+ <h2 class="text-lg font-semibold mb-4">Props</h2>
120
+ <table class="w-full text-sm">
121
+ <thead>
122
+ <tr class="border-b border-neutral-200 dark:border-neutral-700">
123
+ <th class="text-left py-3 px-4">Prop</th>
124
+ <th class="text-left py-3 px-4">Type</th>
125
+ <th class="text-left py-3 px-4">Default</th>
126
+ <th class="text-left py-3 px-4">Description</th>
127
+ </tr>
128
+ </thead>
129
+ <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
130
+ <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">primary</td><td class="py-3 px-4">Any Tailwind color, white, or neutral</td></tr>
131
+ <tr><td class="py-3 px-4 font-mono text-xs">spacing</td><td class="py-3 px-4">String</td><td class="py-3 px-4">py-16</td><td class="py-3 px-4">Tailwind padding class (e.g., py-8)</td></tr>
132
+ <tr><td class="py-3 px-4 font-mono text-xs">intensity</td><td class="py-3 px-4">String</td><td class="py-3 px-4">medium</td><td class="py-3 px-4">none, subtle, medium, strong</td></tr>
133
+ <tr><td class="py-3 px-4 font-mono text-xs">height</td><td class="py-3 px-4">String</td><td class="py-3 px-4">default</td><td class="py-3 px-4">thin (1px), default (2px), thick (4px)</td></tr>
134
+ </tbody>
135
+ </table>
136
+ </section>
137
+
138
+ <!-- Code Example -->
139
+ <section>
140
+ <h2 class="text-lg font-semibold mb-4">Code Example</h2>
141
+ <CodeExample title="Glow Divider Usage" :code="codeExample" />
142
+ </section>
143
+ </div>
144
+ </div>
145
+ </template>
146
+
147
+ <script setup>
148
+ const codeExample = `<!-- Basic divider with glow -->
149
+ <XMarkDividerGlow />
150
+
151
+ <!-- Different colors -->
152
+ <XMarkDividerGlow color="primary" />
153
+ <XMarkDividerGlow color="cyan" />
154
+ <XMarkDividerGlow color="white" />
155
+ <XMarkDividerGlow color="neutral" />
156
+
157
+ <!-- Intensity levels -->
158
+ <XMarkDividerGlow intensity="none" />
159
+ <XMarkDividerGlow intensity="subtle" />
160
+ <XMarkDividerGlow intensity="medium" />
161
+ <XMarkDividerGlow intensity="strong" />
162
+
163
+ <!-- Line height -->
164
+ <XMarkDividerGlow height="thin" />
165
+ <XMarkDividerGlow height="default" />
166
+ <XMarkDividerGlow height="thick" />
167
+
168
+ <!-- Custom spacing (padding) -->
169
+ <XMarkDividerGlow spacing="py-8" />
170
+ <XMarkDividerGlow spacing="py-24" />
171
+
172
+ <!-- Combined -->
173
+ <XMarkDividerGlow
174
+ color="cyan"
175
+ intensity="strong"
176
+ height="thick"
177
+ spacing="py-12"
178
+ />`
179
+ </script>
@@ -0,0 +1,259 @@
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">Promo Card</h1>
5
+ <p class="mt-2 text-neutral-600 dark:text-neutral-400">Story-style promotional cards with background images.</p>
6
+ </div>
7
+
8
+ <div class="p-8 space-y-12">
9
+ <!-- Basic Grid -->
10
+ <section>
11
+ <h2 class="text-lg font-semibold mb-4">Promo Card Grid</h2>
12
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
13
+ <XMarkCardPromo
14
+ v-for="card in promoCards"
15
+ :key="card.title"
16
+ :img="{ src: card.image }"
17
+ :title="card.title"
18
+ :badge="card.badge"
19
+ >
20
+ {{ card.description }}
21
+ </XMarkCardPromo>
22
+ </div>
23
+ </section>
24
+
25
+ <!-- Alignment Options -->
26
+ <section>
27
+ <h2 class="text-lg font-semibold mb-4">Content Alignment</h2>
28
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
29
+ <XMarkCardPromo
30
+ :img="{ src: 'https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=400&h=600&fit=crop' }"
31
+ title="Bottom Left"
32
+ align="bottomLeft"
33
+ />
34
+ <XMarkCardPromo
35
+ :img="{ src: 'https://images.unsplash.com/photo-1579546929518-9e396f3cc809?w=400&h=600&fit=crop' }"
36
+ title="Bottom Right"
37
+ align="bottomRight"
38
+ />
39
+ <XMarkCardPromo
40
+ :img="{ src: 'https://images.unsplash.com/photo-1557682268-e3955ed5d83f?w=400&h=600&fit=crop' }"
41
+ title="Bottom Center"
42
+ align="bottomCenter"
43
+ />
44
+ <XMarkCardPromo
45
+ :img="{ src: 'https://images.unsplash.com/photo-1557682224-5b8590cd9ec5?w=400&h=600&fit=crop' }"
46
+ title="Top Left"
47
+ badge="NEW"
48
+ align="topLeft"
49
+ />
50
+ </div>
51
+ </section>
52
+
53
+ <!-- Overlay Styles -->
54
+ <section>
55
+ <h2 class="text-lg font-semibold mb-4">Overlay Styles</h2>
56
+ <div class="grid grid-cols-3 gap-4">
57
+ <XMarkCardPromo
58
+ :img="{ src: 'https://images.unsplash.com/photo-1533134486753-c833f0ed4866?w=400&h=600&fit=crop' }"
59
+ title="Light Overlay"
60
+ overlay="light"
61
+ >
62
+ 30% opacity
63
+ </XMarkCardPromo>
64
+ <XMarkCardPromo
65
+ :img="{ src: 'https://images.unsplash.com/photo-1533134486753-c833f0ed4866?w=400&h=600&fit=crop' }"
66
+ title="Gradient Overlay"
67
+ overlay="gradient"
68
+ >
69
+ Default gradient
70
+ </XMarkCardPromo>
71
+ <XMarkCardPromo
72
+ :img="{ src: 'https://images.unsplash.com/photo-1533134486753-c833f0ed4866?w=400&h=600&fit=crop' }"
73
+ title="Heavy Overlay"
74
+ overlay="heavy"
75
+ >
76
+ 60% opacity
77
+ </XMarkCardPromo>
78
+ </div>
79
+ </section>
80
+
81
+ <!-- With CTA Button -->
82
+ <section>
83
+ <h2 class="text-lg font-semibold mb-4">With CTA Button</h2>
84
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
85
+ <XMarkCardPromo
86
+ :img="{ src: 'https://images.unsplash.com/photo-1614850523459-c2f4c699c52e?w=400&h=600&fit=crop' }"
87
+ title="Summer Sale"
88
+ badge="50% OFF"
89
+ :button="{ label: 'Shop Now', color: 'white' }"
90
+ >
91
+ Limited time offer
92
+ </XMarkCardPromo>
93
+ <XMarkCardPromo
94
+ :img="{ src: 'https://images.unsplash.com/photo-1614850523296-d8c1af93d400?w=400&h=600&fit=crop' }"
95
+ title="New Collection"
96
+ :button="{ label: 'Explore', variant: 'outline', color: 'white' }"
97
+ >
98
+ Fresh arrivals
99
+ </XMarkCardPromo>
100
+ </div>
101
+ </section>
102
+
103
+ <!-- Title Sizes -->
104
+ <section>
105
+ <h2 class="text-lg font-semibold mb-4">Title Sizes</h2>
106
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
107
+ <XMarkCardPromo
108
+ :img="{ src: 'https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=400&h=600&fit=crop' }"
109
+ title="Small Title"
110
+ title-size="lg"
111
+ />
112
+ <XMarkCardPromo
113
+ :img="{ src: 'https://images.unsplash.com/photo-1579546929518-9e396f3cc809?w=400&h=600&fit=crop' }"
114
+ title="Default XL"
115
+ title-size="xl"
116
+ />
117
+ <XMarkCardPromo
118
+ :img="{ src: 'https://images.unsplash.com/photo-1557682268-e3955ed5d83f?w=400&h=600&fit=crop' }"
119
+ title="Large 3XL"
120
+ title-size="3xl"
121
+ />
122
+ <XMarkCardPromo
123
+ :img="{ src: 'https://images.unsplash.com/photo-1557682224-5b8590cd9ec5?w=400&h=600&fit=crop' }"
124
+ title="Hero 5XL"
125
+ title-size="5xl"
126
+ />
127
+ </div>
128
+ </section>
129
+
130
+ <!-- As Links -->
131
+ <section>
132
+ <h2 class="text-lg font-semibold mb-4">As Navigation Links</h2>
133
+ <p class="text-sm text-neutral-500 mb-4">Use the `to` prop to make cards navigable with NuxtLink</p>
134
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
135
+ <XMarkCardPromo
136
+ to="/blog"
137
+ :img="{ src: 'https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=400&h=600&fit=crop' }"
138
+ title="Blog"
139
+ badge="NEW"
140
+ :button="{ label: 'Read More' }"
141
+ >
142
+ Latest articles
143
+ </XMarkCardPromo>
144
+ <XMarkCardPromo
145
+ to="/docs"
146
+ :img="{ src: 'https://images.unsplash.com/photo-1456513080510-7bf3a84b82f8?w=400&h=600&fit=crop' }"
147
+ title="Documentation"
148
+ :button="{ label: 'Get Started' }"
149
+ >
150
+ Learn the basics
151
+ </XMarkCardPromo>
152
+ </div>
153
+ </section>
154
+
155
+ <!-- Props -->
156
+ <section>
157
+ <h2 class="text-lg font-semibold mb-4">Props</h2>
158
+ <table class="w-full text-sm">
159
+ <thead>
160
+ <tr class="border-b border-neutral-200 dark:border-neutral-700">
161
+ <th class="text-left py-3 px-4">Prop</th>
162
+ <th class="text-left py-3 px-4">Type</th>
163
+ <th class="text-left py-3 px-4">Default</th>
164
+ <th class="text-left py-3 px-4">Description</th>
165
+ </tr>
166
+ </thead>
167
+ <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
168
+ <tr><td class="py-3 px-4 font-mono text-xs">to</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4">Navigation URL (uses NuxtLink)</td></tr>
169
+ <tr><td class="py-3 px-4 font-mono text-xs">img</td><td class="py-3 px-4">Object</td><td class="py-3 px-4">required</td><td class="py-3 px-4">{ src: string, alt?: string }</td></tr>
170
+ <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">Card title</td></tr>
171
+ <tr><td class="py-3 px-4 font-mono text-xs">badge</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4">Optional badge text</td></tr>
172
+ <tr><td class="py-3 px-4 font-mono text-xs">button</td><td class="py-3 px-4">Object</td><td class="py-3 px-4">null</td><td class="py-3 px-4">{ label: string, color?: string, variant?: string }</td></tr>
173
+ <tr><td class="py-3 px-4 font-mono text-xs">align</td><td class="py-3 px-4">String</td><td class="py-3 px-4">bottomLeft</td><td class="py-3 px-4">bottomLeft, bottomRight, bottomCenter, topLeft</td></tr>
174
+ <tr><td class="py-3 px-4 font-mono text-xs">overlay</td><td class="py-3 px-4">String</td><td class="py-3 px-4">gradient</td><td class="py-3 px-4">light, heavy, gradient</td></tr>
175
+ <tr><td class="py-3 px-4 font-mono text-xs">hoverable</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">true</td><td class="py-3 px-4">Enable lift on hover</td></tr>
176
+ <tr><td class="py-3 px-4 font-mono text-xs">titleSize</td><td class="py-3 px-4">String</td><td class="py-3 px-4">xl</td><td class="py-3 px-4">xs, sm, base, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl, 7xl, 8xl</td></tr>
177
+ </tbody>
178
+ </table>
179
+ </section>
180
+
181
+ <!-- Code Example -->
182
+ <section>
183
+ <h2 class="text-lg font-semibold mb-4">Code Example</h2>
184
+ <CodeExample title="Promo Card Usage" :code="codeExample" />
185
+ </section>
186
+ </div>
187
+ </div>
188
+ </template>
189
+
190
+ <script setup>
191
+ const codeExample = `<!-- Basic promo card -->
192
+ <XMarkCardPromo
193
+ :img="{ src: 'https://images.unsplash.com/photo-...' }"
194
+ title="Summer Sale"
195
+ badge="50% OFF"
196
+ >
197
+ Limited time offer
198
+ </XMarkCardPromo>
199
+
200
+ <!-- With large title -->
201
+ <XMarkCardPromo
202
+ :img="{ src: 'https://images.unsplash.com/photo-...' }"
203
+ title="Big Impact"
204
+ title-size="5xl"
205
+ />
206
+
207
+ <!-- With CTA button -->
208
+ <XMarkCardPromo
209
+ :img="{ src: 'https://images.unsplash.com/photo-...' }"
210
+ title="New Collection"
211
+ :button="{ label: 'Shop Now' }"
212
+ overlay="gradient"
213
+ />
214
+
215
+ <!-- As navigation link -->
216
+ <XMarkCardPromo
217
+ to="/products"
218
+ :img="{ src: 'https://images.unsplash.com/photo-...', alt: 'Products' }"
219
+ title="Browse Products"
220
+ :button="{ label: 'View All' }"
221
+ />
222
+
223
+ <!-- Grid layout -->
224
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
225
+ <XMarkCardPromo
226
+ v-for="card in cards"
227
+ :key="card.title"
228
+ :to="card.url"
229
+ :img="{ src: card.image, alt: card.title }"
230
+ :title="card.title"
231
+ :badge="card.badge"
232
+ />
233
+ </div>`
234
+
235
+ const promoCards = [
236
+ {
237
+ image: 'https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=400&h=600&fit=crop',
238
+ title: 'Design',
239
+ badge: 'NEW',
240
+ description: 'Modern aesthetics'
241
+ },
242
+ {
243
+ image: 'https://images.unsplash.com/photo-1620641788421-7a1c342ea42e?w=400&h=600&fit=crop',
244
+ title: 'Development',
245
+ description: 'Clean code'
246
+ },
247
+ {
248
+ image: 'https://images.unsplash.com/photo-1618172193763-c511deb635ca?w=400&h=600&fit=crop',
249
+ title: 'Marketing',
250
+ badge: 'HOT',
251
+ description: 'Growth focused'
252
+ },
253
+ {
254
+ image: 'https://images.unsplash.com/photo-1618336753974-aae8e04506aa?w=400&h=600&fit=crop',
255
+ title: 'Analytics',
256
+ description: 'Data driven'
257
+ }
258
+ ]
259
+ </script>