@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
package/README.md CHANGED
@@ -1,25 +1,24 @@
1
1
  # @xenterprises/nuxt-x-marketing
2
2
 
3
- `@xenterprises/nuxt-x-marketing` is a Nuxt.js layer designed specifically for creating marketing-centric sites. It provides a customizable layout and structure for marketing components such as headers, footers, and social links, allowing you to quickly set up a cohesive, branded marketing site.
3
+ A comprehensive Nuxt layer for building marketing websites with 33+ pre-built components. Features dark mode support, responsive design, accessibility, and seamless integration with Nuxt UI.
4
4
 
5
5
  ## Features
6
6
 
7
- - **Customizable UI**: Configure primary UI elements such as colors, container layouts, and screen width.
8
- - **Header & Footer Configuration**: Easily manage header and footer elements, including logos, navigation links, and social media icons.
9
- - **Project-specific Branding**: Define project-specific settings such as project name, logos, and links for both the header and footer.
10
- - **Flexible Navigation and Social Links**: Add buttons, links, and social media icons to header and footer sections.
7
+ - **33+ Marketing Components** - Hero, Features, Pricing, Testimonials, Blog, and more
8
+ - **Dark Mode Support** - All components support light and dark themes
9
+ - **Responsive Design** - Mobile-first approach with tablet and desktop breakpoints
10
+ - **Accessible** - WCAG 2.0 AA compliant with proper ARIA attributes
11
+ - **Customizable** - Props-based configuration with slot overrides
12
+ - **Nuxt UI Integration** - Built on top of Nuxt UI v4 components
13
+ - **Animations** - Scroll-triggered fade-in animations and parallax effects
11
14
 
12
15
  ## Installation
13
16
 
14
- 1. **Install the package via npm**:
15
-
16
17
  ```bash
17
18
  npm install @xenterprises/nuxt-x-marketing
18
19
  ```
19
20
 
20
- 2. **Add the Layer to Your Nuxt Config**
21
-
22
- In your `nuxt.config.js` or `nuxt.config.ts` file, import the `@xenterprises/nuxt-x-marketing` layer:
21
+ Add the layer to your `nuxt.config.js`:
23
22
 
24
23
  ```javascript
25
24
  export default defineNuxtConfig({
@@ -27,204 +26,840 @@ export default defineNuxtConfig({
27
26
  });
28
27
  ```
29
28
 
30
- 3. **Configure Your Project Settings**
29
+ ## Quick Start
30
+
31
+ ### Basic App Layout
32
+
33
+ Create your `app.vue` with Navbar, Newsletter, and Footer:
34
+
35
+ ```vue
36
+ <template>
37
+ <div class="min-h-screen flex flex-col">
38
+ <XMarkNavbar
39
+ :links="navLinks"
40
+ :logo-light="'/logo-white.svg'"
41
+ :logo-dark="'/logo-dark.svg'"
42
+ logo-alt="Company"
43
+ >
44
+ <template #actions>
45
+ <UButton variant="ghost" color="neutral">Sign In</UButton>
46
+ <UButton color="primary">Get Started</UButton>
47
+ </template>
48
+ </XMarkNavbar>
49
+
50
+ <main class="flex-grow">
51
+ <NuxtPage />
52
+ </main>
53
+
54
+ <XMarkSection bg="subtle" padding="lg">
55
+ <XMarkNewsletter
56
+ title="Stay in the loop"
57
+ description="Get the latest updates delivered to your inbox."
58
+ @submit="handleNewsletterSubmit"
59
+ />
60
+ </XMarkSection>
61
+
62
+ <XMarkFooter
63
+ :logo="'/logo-dark.svg'"
64
+ description="Building the future of modern software."
65
+ :social="socialLinks"
66
+ :columns="footerColumns"
67
+ :legal-links="legalLinks"
68
+ />
69
+ </div>
70
+ </template>
71
+
72
+ <script setup>
73
+ const navLinks = [
74
+ { label: "Features", to: "/#features" },
75
+ { label: "Pricing", to: "/pricing" },
76
+ { label: "Blog", to: "/blog" },
77
+ ];
78
+
79
+ const socialLinks = [
80
+ { name: "Twitter", href: "https://twitter.com", icon: "i-lucide-twitter" },
81
+ { name: "GitHub", href: "https://github.com", icon: "i-lucide-github" },
82
+ ];
83
+
84
+ const footerColumns = [
85
+ {
86
+ title: "Product",
87
+ links: [
88
+ { label: "Features", to: "/#features" },
89
+ { label: "Pricing", to: "/pricing" },
90
+ ],
91
+ },
92
+ {
93
+ title: "Company",
94
+ links: [
95
+ { label: "About", to: "/about" },
96
+ { label: "Blog", to: "/blog" },
97
+ ],
98
+ },
99
+ ];
31
100
 
32
- Add configuration settings in your `app.config.ts` or `app.config.js` file to set up branding, navigation, and other customizable options.
101
+ const legalLinks = [
102
+ { label: "Privacy Policy", to: "/privacy" },
103
+ { label: "Terms of Service", to: "/terms" },
104
+ ];
33
105
 
34
- ```javascript
35
- export default defineAppConfig({
36
- ui: {
37
- primary: "sky",
38
- header: {
39
- container: "max-w-screen-2xl container mx-auto",
40
- },
106
+ const handleNewsletterSubmit = (email) => {
107
+ console.log("Newsletter signup:", email);
108
+ };
109
+ </script>
110
+ ```
111
+
112
+ ### Example Landing Page
113
+
114
+ ```vue
115
+ <template>
116
+ <div>
117
+ <!-- Hero -->
118
+ <XMarkHero
119
+ image-src="https://images.unsplash.com/photo-1551434678-e076c223a692"
120
+ eyebrow="Welcome to the future"
121
+ title="Build something amazing today"
122
+ subtitle="The modern platform for teams who want to ship faster."
123
+ align="left"
124
+ overlay="gradient"
125
+ >
126
+ <template #actions>
127
+ <UButton size="xl" color="white">Get Started Free</UButton>
128
+ <UButton size="xl" variant="outline" color="white">Watch Demo</UButton>
129
+ </template>
130
+ </XMarkHero>
131
+
132
+ <!-- Features -->
133
+ <XMarkSection id="features" bg="default" padding="xl">
134
+ <header class="text-center max-w-3xl mx-auto mb-16">
135
+ <h2 class="xText-headline">Everything you need to succeed</h2>
136
+ <p class="mt-4 text-lg text-neutral-600">
137
+ Powerful tools designed to help you build, launch, and grow.
138
+ </p>
139
+ </header>
140
+ <XMarkFeatures :features="features" layout="grid" :columns="3" />
141
+ </XMarkSection>
142
+
143
+ <!-- Testimonials -->
144
+ <XMarkSection bg="subtle" padding="xl">
145
+ <header class="text-center max-w-3xl mx-auto mb-16">
146
+ <h2 class="xText-headline">Loved by teams worldwide</h2>
147
+ </header>
148
+ <XMarkTestimonials :testimonials="testimonials" layout="grid" />
149
+ </XMarkSection>
150
+
151
+ <!-- Pricing -->
152
+ <XMarkSection bg="default" padding="xl">
153
+ <header class="text-center max-w-3xl mx-auto mb-16">
154
+ <h2 class="xText-headline">Simple, transparent pricing</h2>
155
+ </header>
156
+ <XMarkPricing :plans="pricingPlans" />
157
+ </XMarkSection>
158
+ </div>
159
+ </template>
160
+
161
+ <script setup>
162
+ const features = [
163
+ {
164
+ icon: "i-lucide-zap",
165
+ title: "Lightning Fast",
166
+ description: "Built for speed with optimized performance.",
41
167
  },
42
- xMarketing: {
43
- name: "X Enterprises",
44
- config: {
45
- markerProjectId: "project-1234",
168
+ {
169
+ icon: "i-lucide-shield-check",
170
+ title: "Secure by Default",
171
+ description: "Enterprise-grade security with SOC 2 compliance.",
172
+ },
173
+ {
174
+ icon: "i-lucide-users",
175
+ title: "Team Collaboration",
176
+ description: "Real-time collaboration tools for modern teams.",
177
+ },
178
+ ];
179
+
180
+ const testimonials = [
181
+ {
182
+ quote: "This platform transformed how our team works.",
183
+ name: "Sarah Chen",
184
+ title: "CTO",
185
+ company: "TechStart",
186
+ avatar: "https://randomuser.me/api/portraits/women/44.jpg",
187
+ },
188
+ ];
189
+
190
+ const pricingPlans = [
191
+ {
192
+ name: "Starter",
193
+ price: "$19",
194
+ period: "month",
195
+ features: ["Up to 5 team members", "Basic analytics", "Email support"],
196
+ cta: "Start Free Trial",
197
+ },
198
+ {
199
+ name: "Pro",
200
+ price: "$49",
201
+ period: "month",
202
+ features: ["Up to 25 team members", "Advanced analytics", "Priority support"],
203
+ cta: "Start Free Trial",
204
+ popular: true,
205
+ },
206
+ ];
207
+ </script>
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Components
213
+
214
+ ### Core Layout
215
+
216
+ #### XMarkNavbar
217
+
218
+ Fixed navigation header with transparent-to-solid scroll transition.
219
+
220
+ ```vue
221
+ <XMarkNavbar
222
+ :links="[{ label: 'Features', to: '/#features' }]"
223
+ logo-light="/logo-white.svg"
224
+ logo-dark="/logo-dark.svg"
225
+ logo-alt="Company"
226
+ :transparent="true"
227
+ :scroll-threshold="100"
228
+ >
229
+ <template #actions>
230
+ <UButton variant="ghost">Sign In</UButton>
231
+ <UButton color="primary">Get Started</UButton>
232
+ </template>
233
+ </XMarkNavbar>
234
+ ```
235
+
236
+ | Prop | Type | Default | Description |
237
+ |------|------|---------|-------------|
238
+ | `links` | `Array` | `[]` | Navigation links `{ label, to }` |
239
+ | `logoLight` | `String` | required | Logo for transparent state |
240
+ | `logoDark` | `String` | required | Logo for solid state |
241
+ | `logoAlt` | `String` | `'Logo'` | Logo alt text |
242
+ | `transparent` | `Boolean` | `true` | Start transparent over hero |
243
+ | `scrollThreshold` | `Number` | `100` | Pixels before transition |
244
+
245
+ #### XMarkSection
246
+
247
+ Section wrapper with background variants and optional patterns.
248
+
249
+ ```vue
250
+ <XMarkSection bg="subtle" padding="xl" pattern="dots">
251
+ <h2>Section Content</h2>
252
+ </XMarkSection>
253
+ ```
254
+
255
+ | Prop | Type | Default | Description |
256
+ |------|------|---------|-------------|
257
+ | `bg` | `String` | `'default'` | `default`, `subtle`, `elevated`, `bold`, `transparent` |
258
+ | `padding` | `String` | `'lg'` | `none`, `sm`, `md`, `lg`, `xl` |
259
+ | `container` | `String` | `'lg'` | `sm`, `md`, `lg`, `xl`, `full`, `none` |
260
+ | `pattern` | `String` | `''` | `dots`, `grid`, `diagonal`, `topography`, `circuit`, `waves` |
261
+ | `patternOpacity` | `Number` | `0.05` | Pattern opacity (0-1) |
262
+ | `bgImage` | `String` | `''` | Background image URL |
263
+ | `parallax` | `Boolean` | `false` | Enable parallax on bg image |
264
+
265
+ #### XMarkFooter
266
+
267
+ Full footer with brand, link columns, social icons, and newsletter.
268
+
269
+ ```vue
270
+ <XMarkFooter
271
+ logo="/logo.svg"
272
+ logo-alt="Company"
273
+ description="Building the future of modern software."
274
+ :social="[{ name: 'Twitter', href: 'https://twitter.com', icon: 'i-lucide-twitter' }]"
275
+ :columns="[{ title: 'Product', links: [{ label: 'Features', to: '/features' }] }]"
276
+ :legal-links="[{ label: 'Privacy', to: '/privacy' }]"
277
+ :show-newsletter="true"
278
+ @newsletter-submit="handleSubmit"
279
+ />
280
+ ```
281
+
282
+ | Prop | Type | Default | Description |
283
+ |------|------|---------|-------------|
284
+ | `logo` | `String` | `''` | Logo image URL |
285
+ | `description` | `String` | `''` | Brand description |
286
+ | `social` | `Array` | `[]` | Social links `{ name, href, icon }` |
287
+ | `columns` | `Array` | `[]` | Link columns `{ title, links: [{ label, to }] }` |
288
+ | `legalLinks` | `Array` | `[]` | Legal links `{ label, to }` |
289
+ | `copyright` | `String` | auto | Copyright text |
290
+ | `showNewsletter` | `Boolean` | `false` | Show newsletter section |
291
+
292
+ #### XMarkLegalFooter
293
+
294
+ Minimal footer with copyright and legal links only.
295
+
296
+ ```vue
297
+ <XMarkLegalFooter
298
+ company-name="X Enterprises"
299
+ :links="[{ label: 'Privacy', to: '/privacy' }]"
300
+ />
301
+ ```
302
+
303
+ ---
304
+
305
+ ### Hero & Landing
306
+
307
+ #### XMarkHero
308
+
309
+ Full-screen hero with image/video background and overlay.
310
+
311
+ ```vue
312
+ <XMarkHero
313
+ image-src="https://example.com/hero.jpg"
314
+ video-src="https://example.com/hero.mp4"
315
+ eyebrow="Welcome"
316
+ title="Build something amazing"
317
+ subtitle="The modern platform for teams."
318
+ align="left"
319
+ vertical-align="center"
320
+ overlay="gradient"
321
+ :show-scroll-indicator="true"
322
+ >
323
+ <template #actions>
324
+ <UButton size="xl" color="white">Get Started</UButton>
325
+ </template>
326
+ </XMarkHero>
327
+ ```
328
+
329
+ | Prop | Type | Default | Description |
330
+ |------|------|---------|-------------|
331
+ | `imageSrc` | `String` | `''` | Background image URL |
332
+ | `videoSrc` | `String` | `''` | Background video URL |
333
+ | `eyebrow` | `String` | `''` | Small text above title |
334
+ | `title` | `String` | required | Main headline |
335
+ | `subtitle` | `String` | `''` | Supporting text |
336
+ | `align` | `String` | `'left'` | `left`, `center`, `right` |
337
+ | `verticalAlign` | `String` | `'center'` | `center`, `bottom` |
338
+ | `overlay` | `String` | `'gradient'` | `light`, `heavy`, `gradient`, `none` |
339
+ | `showScrollIndicator` | `Boolean` | `true` | Show scroll arrow |
340
+
341
+ ---
342
+
343
+ ### Content Sections
344
+
345
+ #### XMarkFeatures
346
+
347
+ Feature grid with icons, images, and optional links.
348
+
349
+ ```vue
350
+ <XMarkFeatures
351
+ :features="[
352
+ { icon: 'i-lucide-zap', title: 'Fast', description: 'Lightning fast performance.' },
353
+ { icon: 'i-lucide-shield', title: 'Secure', description: 'Enterprise security.' },
354
+ ]"
355
+ layout="grid"
356
+ :columns="3"
357
+ />
358
+ ```
359
+
360
+ | Prop | Type | Default | Description |
361
+ |------|------|---------|-------------|
362
+ | `features` | `Array` | required | Features `{ icon?, image?, title, description, link? }` |
363
+ | `layout` | `String` | `'grid'` | `grid`, `list`, `alternating` |
364
+ | `columns` | `Number` | `3` | Grid columns (2, 3, or 4) |
365
+
366
+ #### XMarkTestimonials
367
+
368
+ Testimonial cards in grid or carousel layout.
369
+
370
+ ```vue
371
+ <XMarkTestimonials
372
+ :testimonials="[
373
+ {
374
+ quote: 'Amazing product!',
375
+ name: 'John Doe',
376
+ title: 'CEO',
377
+ company: 'Acme Inc',
378
+ avatar: 'https://example.com/avatar.jpg',
46
379
  },
47
- header: {
48
- logo: {
49
- src: "/images/logo.png",
50
- alt: "X Enterprises",
51
- },
52
- nav: {
53
- buttons: [{ label: "Contact Us", to: "/contact" }],
54
- links: [{ label: "About", to: "/about" }],
55
- },
380
+ ]"
381
+ layout="grid"
382
+ />
383
+ ```
384
+
385
+ #### XMarkPricing
386
+
387
+ Pricing cards with billing toggle and popular badge.
388
+
389
+ ```vue
390
+ <XMarkPricing
391
+ :plans="[
392
+ {
393
+ name: 'Starter',
394
+ price: '$19',
395
+ period: 'month',
396
+ description: 'Perfect for small teams.',
397
+ features: ['5 team members', 'Basic analytics'],
398
+ cta: 'Start Free Trial',
56
399
  },
57
- footer: {
58
- logo: {
59
- src: "/images/footer-logo.png",
60
- alt: "X Enterprises Footer Logo",
61
- },
62
- bg: {
63
- color: "#f3f3f3",
64
- img: {
65
- src: "/images/footer-bg.png",
66
- alt: "Footer Background Image",
67
- },
68
- },
69
- body: "© 2024 X Enterprises. All rights reserved.",
70
- socials: [
71
- {
72
- name: "Facebook",
73
- url: "https://facebook.com",
74
- icon: "facebook-icon",
75
- },
76
- ],
77
- columns: [
78
- {
79
- headerLabel: "Company",
80
- links: [{ label: "About Us", to: "/about" }],
81
- },
400
+ {
401
+ name: 'Pro',
402
+ price: '$49',
403
+ period: 'month',
404
+ features: ['25 team members', 'Advanced analytics'],
405
+ cta: 'Start Free Trial',
406
+ popular: true,
407
+ },
408
+ ]"
409
+ :show-billing-toggle="true"
410
+ :yearly-discount="20"
411
+ @select="handlePlanSelect"
412
+ />
413
+ ```
414
+
415
+ | Prop | Type | Default | Description |
416
+ |------|------|---------|-------------|
417
+ | `plans` | `Array` | required | Pricing plans |
418
+ | `highlighted` | `String` | `''` | Plan name to highlight |
419
+ | `showBillingToggle` | `Boolean` | `false` | Show monthly/yearly toggle |
420
+ | `yearlyDiscount` | `Number` | `20` | Yearly discount percentage |
421
+
422
+ #### XMarkComparison
423
+
424
+ Feature comparison table across plans.
425
+
426
+ ```vue
427
+ <XMarkComparison
428
+ :plans="['Starter', 'Pro', 'Enterprise']"
429
+ :highlighted="'Pro'"
430
+ :feature-groups="[
431
+ {
432
+ name: 'Core Features',
433
+ features: [
434
+ { name: 'Users', values: ['5', '25', 'Unlimited'] },
435
+ { name: 'Storage', values: ['1GB', '10GB', 'Unlimited'] },
82
436
  ],
83
437
  },
84
- },
85
- });
438
+ ]"
439
+ />
86
440
  ```
87
441
 
88
- 4. **Run Your Nuxt Application**
442
+ #### XMarkNewsletter
89
443
 
90
- Start your Nuxt application to see `@xenterprises/nuxt-x-marketing` in action:
444
+ Email signup form with variants.
91
445
 
92
- ```bash
93
- npm run dev
446
+ ```vue
447
+ <XMarkNewsletter
448
+ title="Subscribe to our newsletter"
449
+ description="Get the latest updates."
450
+ :button="{ label: 'Subscribe' }"
451
+ placeholder="Enter your email"
452
+ variant="default"
453
+ @submit="handleSubmit"
454
+ />
455
+ ```
456
+
457
+ | Prop | Type | Default | Description |
458
+ |------|------|---------|-------------|
459
+ | `title` | `String` | `'Subscribe...'` | Form title |
460
+ | `description` | `String` | `''` | Form description |
461
+ | `button` | `Object` | `{ label: 'Subscribe' }` | Button config { label, color? } |
462
+ | `variant` | `String` | `'default'` | `default`, `minimal`, `inline` |
463
+
464
+ ---
465
+
466
+ ### Blog Components
467
+
468
+ #### XMarkBlogCard
469
+
470
+ Blog post card with image, title, excerpt, and author.
471
+
472
+ ```vue
473
+ <XMarkBlogCard
474
+ :post="{
475
+ title: 'Getting Started with Nuxt',
476
+ slug: 'getting-started',
477
+ excerpt: 'Learn how to build modern web apps.',
478
+ image: '/blog/cover.jpg',
479
+ date: '2024-01-15',
480
+ author: { name: 'John Doe', avatar: '/avatars/john.jpg' },
481
+ category: 'Tutorial',
482
+ }"
483
+ variant="default"
484
+ />
94
485
  ```
95
486
 
96
- ## Configuration Options
487
+ #### XMarkBlogList
97
488
 
98
- The following options are available for customization in the `xMarketing` layer configuration:
489
+ Blog listing grid with optional featured post.
99
490
 
100
- ### UI
491
+ ```vue
492
+ <XMarkBlogList
493
+ :posts="posts"
494
+ :columns="3"
495
+ :show-featured="true"
496
+ />
497
+ ```
101
498
 
102
- Configure general UI settings for the app layout.
499
+ #### XMarkBlogDetail
103
500
 
104
- ```javascript
105
- ui: {
106
- primary: "sky", // Primary color theme
107
- header: {
108
- container: "max-w-screen-2xl container mx-auto" // Maximum screen width for container
109
- }
110
- }
501
+ Full blog post view with author, share buttons, and navigation.
502
+
503
+ ```vue
504
+ <XMarkBlogDetail
505
+ :post="post"
506
+ :author="author"
507
+ :related-posts="relatedPosts"
508
+ />
111
509
  ```
112
510
 
113
- ### xMarketing
511
+ #### XMarkBlogSidebar
114
512
 
115
- Define the core marketing elements for your project under `xMarketing`.
513
+ Blog sidebar with search, categories, tags, and recent posts.
116
514
 
117
- ```javascript
118
- xMarketing: {
119
- name: "X Enterprises", // Project name to display
120
- config: {
121
- markerProjectId: "", // Placeholder for your project ID if needed
122
- },
515
+ ```vue
516
+ <XMarkBlogSidebar
517
+ :categories="['Tutorials', 'News', 'Updates']"
518
+ :tags="['vue', 'nuxt', 'javascript']"
519
+ :recent-posts="recentPosts"
520
+ :show-search="true"
521
+ @search="handleSearch"
522
+ @category-click="handleCategoryClick"
523
+ />
123
524
  ```
124
525
 
125
- #### Header Configuration
526
+ #### XMarkBlogAuthor
527
+
528
+ Author bio with social links.
529
+
530
+ ```vue
531
+ <XMarkBlogAuthor
532
+ :author="{
533
+ name: 'John Doe',
534
+ title: 'Senior Developer',
535
+ avatar: '/avatars/john.jpg',
536
+ bio: 'Passionate about building great software.',
537
+ social: { twitter: 'https://twitter.com/johndoe' },
538
+ }"
539
+ variant="full"
540
+ />
541
+ ```
126
542
 
127
- Set up the header, including logo and navigation elements.
543
+ | Prop | Type | Default | Description |
544
+ |------|------|---------|-------------|
545
+ | `author` | `Object` | required | Author data |
546
+ | `variant` | `String` | `'inline'` | `inline`, `sm`, `full`, `card` |
128
547
 
129
- ```javascript
130
- header: {
131
- logo: {
132
- src: "", // Source URL of the logo
133
- alt: "", // Alt text for the logo
134
- },
135
- nav: {
136
- buttons: [], // Array of buttons with `label` and `to` attributes
137
- links: [], // Array of navigation links with `label` and `to` attributes
138
- },
139
- }
548
+ #### XMarkBlogNavigation
549
+
550
+ Previous/next post navigation.
551
+
552
+ ```vue
553
+ <XMarkBlogNavigation
554
+ :previous="{ title: 'Previous Post', slug: 'prev-post' }"
555
+ :next="{ title: 'Next Post', slug: 'next-post' }"
556
+ base-path="/blog"
557
+ />
140
558
  ```
141
559
 
142
- #### Footer Configuration
560
+ #### XMarkBlogCTA
143
561
 
144
- Define the footer layout, logo, background, and social links.
562
+ In-article newsletter signup.
145
563
 
146
- ```javascript
147
- footer: {
148
- logo: {
149
- src: "", // Footer logo URL
150
- alt: "", // Footer logo alt text
151
- },
152
- bg: {
153
- color: "", // Background color for the footer
154
- img: {
155
- src: "", // Background image URL for the footer
156
- alt: "", // Alt text for the background image
157
- },
158
- },
159
- body: "", // Optional text for the footer
160
- socials: [], // Array of social media objects with `name`, `url`, and `icon`
161
- columns: [], // Footer columns with links
162
- }
564
+ ```vue
565
+ <XMarkBlogCTA
566
+ title="Enjoyed this article?"
567
+ description="Subscribe for more content."
568
+ variant="featured"
569
+ @submit="handleSubmit"
570
+ />
571
+ ```
572
+
573
+ ---
574
+
575
+ ### UI Elements
576
+
577
+ #### XMarkBadge
578
+
579
+ Trust and feature badges with presets.
580
+
581
+ ```vue
582
+ <XMarkBadge preset="no-credit-card" variant="subtle" />
583
+ <XMarkBadge preset="cancel-anytime" />
584
+ <XMarkBadge icon="i-lucide-star" label="5-star rated" />
585
+ ```
586
+
587
+ | Prop | Type | Default | Description |
588
+ |------|------|---------|-------------|
589
+ | `preset` | `String` | `''` | `no-credit-card`, `cancel-anytime`, `money-back`, `free-trial`, `secure` |
590
+ | `icon` | `String` | `''` | Custom icon (if no preset) |
591
+ | `label` | `String` | `''` | Custom label (if no preset) |
592
+ | `variant` | `String` | `'default'` | `default`, `subtle`, `outline` |
593
+
594
+ #### XMarkGlassCard
595
+
596
+ Glassmorphism card with blur effect.
597
+
598
+ ```vue
599
+ <XMarkGlassCard :blur="10" :opacity="0.1">
600
+ <h3>Card Content</h3>
601
+ </XMarkGlassCard>
602
+ ```
603
+
604
+ #### XMarkPromoCard
605
+
606
+ Promotional card with image and CTA.
607
+
608
+ ```vue
609
+ <XMarkPromoCard
610
+ title="Special Offer"
611
+ description="Get 50% off your first month."
612
+ image="/promo.jpg"
613
+ cta-text="Claim Offer"
614
+ cta-link="/pricing"
615
+ />
616
+ ```
617
+
618
+ #### XMarkGlowDivider
619
+
620
+ Glowing section divider.
621
+
622
+ ```vue
623
+ <XMarkGlowDivider color="primary" :intensity="0.5" />
624
+ ```
625
+
626
+ #### XMarkPatternBg
627
+
628
+ SVG background patterns.
629
+
630
+ ```vue
631
+ <XMarkPatternBg pattern="dots" :opacity="0.05" />
632
+ ```
633
+
634
+ | Prop | Type | Default | Description |
635
+ |------|------|---------|-------------|
636
+ | `pattern` | `String` | `'dots'` | `dots`, `grid`, `diagonal`, `topography`, `circuit`, `waves` |
637
+ | `opacity` | `Number` | `0.05` | Pattern opacity |
638
+
639
+ #### XMarkSectionStitch
640
+
641
+ Section divider shapes.
642
+
643
+ ```vue
644
+ <XMarkSectionStitch shape="wave" position="top" :flip="false" />
645
+ ```
646
+
647
+ | Prop | Type | Default | Description |
648
+ |------|------|---------|-------------|
649
+ | `shape` | `String` | `'wave'` | `angle`, `wave`, `curve`, `triangle`, `zigzag` |
650
+ | `position` | `String` | `'bottom'` | `top`, `bottom` |
651
+ | `flip` | `Boolean` | `false` | Flip horizontally |
652
+
653
+ ---
654
+
655
+ ### Modals & Overlays
656
+
657
+ #### XMarkVideoModal
658
+
659
+ Video lightbox supporting YouTube, Vimeo, and direct URLs.
660
+
661
+ ```vue
662
+ <XMarkVideoModal
663
+ v-model="showVideo"
664
+ url="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
665
+ title="Product Demo"
666
+ />
667
+ ```
668
+
669
+ #### XMarkImageLightbox
670
+
671
+ Image gallery lightbox with keyboard navigation.
672
+
673
+ ```vue
674
+ <XMarkImageLightbox
675
+ v-model="showLightbox"
676
+ :images="[
677
+ { src: '/gallery/1.jpg', alt: 'Image 1', caption: 'First image' },
678
+ { src: '/gallery/2.jpg', alt: 'Image 2' },
679
+ ]"
680
+ :start-index="0"
681
+ />
682
+ ```
683
+
684
+ #### XMarkFeatureModal
685
+
686
+ Feature detail modal.
687
+
688
+ ```vue
689
+ <XMarkFeatureModal
690
+ v-model="showFeature"
691
+ :feature="{
692
+ icon: 'i-lucide-zap',
693
+ title: 'Lightning Fast',
694
+ description: 'Detailed description...',
695
+ image: '/features/speed.jpg',
696
+ }"
697
+ />
698
+ ```
699
+
700
+ ---
701
+
702
+ ### Notifications & Banners
703
+
704
+ #### XMarkAnnouncementBar
705
+
706
+ Dismissible top announcement banner.
707
+
708
+ ```vue
709
+ <XMarkAnnouncementBar
710
+ message="New feature available!"
711
+ link-text="Learn more"
712
+ link-url="/features"
713
+ variant="primary"
714
+ :dismissible="true"
715
+ @dismiss="handleDismiss"
716
+ />
717
+ ```
718
+
719
+ | Prop | Type | Default | Description |
720
+ |------|------|---------|-------------|
721
+ | `message` | `String` | required | Announcement text |
722
+ | `linkText` | `String` | `''` | Optional link text |
723
+ | `linkUrl` | `String` | `''` | Optional link URL |
724
+ | `variant` | `String` | `'primary'` | `primary`, `neutral`, `success`, `warning`, `error` |
725
+ | `dismissible` | `Boolean` | `true` | Show dismiss button |
726
+
727
+ #### XMarkCookieBanner
728
+
729
+ Cookie consent banner.
730
+
731
+ ```vue
732
+ <XMarkCookieBanner
733
+ message="We use cookies to improve your experience."
734
+ accept-text="Accept All"
735
+ decline-text="Decline"
736
+ :show-preferences="true"
737
+ @accept="handleAccept"
738
+ @decline="handleDecline"
739
+ @preferences="handlePreferences"
740
+ />
741
+ ```
742
+
743
+ #### XMarkCookieToast
744
+
745
+ Cookie toast notification.
746
+
747
+ ```vue
748
+ <XMarkCookieToast
749
+ message="We use cookies"
750
+ @accept="handleAccept"
751
+ />
163
752
  ```
164
753
 
165
- ### Example Configuration
754
+ #### XMarkGDPR
166
755
 
167
- Below is an example configuration for `xMarketing`:
756
+ GDPR cookie preference modal.
757
+
758
+ ```vue
759
+ <XMarkGDPR
760
+ v-model="showGDPR"
761
+ :categories="[
762
+ { id: 'necessary', name: 'Necessary', description: 'Required for the site to work.', required: true },
763
+ { id: 'analytics', name: 'Analytics', description: 'Help us improve.', default: false },
764
+ ]"
765
+ @save="handleSavePreferences"
766
+ />
767
+ ```
768
+
769
+ #### XMarkSocialProofToast
770
+
771
+ Social proof notification toasts.
772
+
773
+ ```vue
774
+ <XMarkSocialProofToast
775
+ :notifications="[
776
+ { name: 'John', location: 'New York', action: 'signed up', time: '2 minutes ago' },
777
+ ]"
778
+ :interval="5000"
779
+ position="bottom-left"
780
+ />
781
+ ```
782
+
783
+ ---
784
+
785
+ ### Utilities
786
+
787
+ #### XMarkBackToTop
788
+
789
+ Scroll to top button.
790
+
791
+ ```vue
792
+ <XMarkBackToTop :show-after="300" :smooth="true" />
793
+ ```
794
+
795
+ #### XMarkPopupChat
796
+
797
+ Chat widget trigger.
798
+
799
+ ```vue
800
+ <XMarkPopupChat
801
+ provider="intercom"
802
+ :config="{ app_id: 'your-app-id' }"
803
+ />
804
+ ```
805
+
806
+ ---
807
+
808
+ ## Configuration
809
+
810
+ Configure the layer in your `app.config.js`:
168
811
 
169
812
  ```javascript
170
813
  export default defineAppConfig({
171
- ui: {
172
- primary: "sky",
173
- header: {
174
- container: "max-w-screen-2xl container mx-auto",
175
- },
176
- },
177
814
  xMarketing: {
178
815
  name: "X Enterprises",
179
816
  config: {
180
- markerProjectId: "project-1234",
181
- },
182
- header: {
183
- logo: {
184
- src: "/images/logo.png",
185
- alt: "X Enterprises",
186
- },
187
- nav: {
188
- buttons: [{ label: "Contact Us", to: "/contact" }],
189
- links: [{ label: "About", to: "/about" }],
190
- },
191
- },
192
- footer: {
193
- logo: {
194
- src: "/images/footer-logo.png",
195
- alt: "X Enterprises Footer Logo",
196
- },
197
- bg: {
198
- color: "#f3f3f3",
199
- img: {
200
- src: "/images/footer-bg.png",
201
- alt: "Footer Background Image",
202
- },
203
- },
204
- body: "© 2024 X Enterprises. All rights reserved.",
205
- socials: [
206
- {
207
- name: "Facebook",
208
- url: "https://facebook.com",
209
- icon: "facebook-icon",
210
- },
211
- ],
212
- columns: [
213
- {
214
- headerLabel: "Company",
215
- links: [{ label: "About Us", to: "/about" }],
216
- },
217
- ],
817
+ markerProjectId: "your-marker-project-id", // Optional: Marker.io integration
218
818
  },
219
819
  },
220
820
  });
221
821
  ```
222
822
 
223
- ### Additional Notes
823
+ ---
824
+
825
+ ## Testing
826
+
827
+ ### Unit Tests
828
+
829
+ Run unit tests with Vitest:
830
+
831
+ ```bash
832
+ npm run test:unit
833
+ ```
834
+
835
+ ### E2E Tests
836
+
837
+ Run end-to-end tests with Playwright:
838
+
839
+ ```bash
840
+ npm run test:e2e
841
+ ```
842
+
843
+ ---
844
+
845
+ ## CSS Classes
846
+
847
+ The layer provides utility classes for consistent styling:
848
+
849
+ | Class | Description |
850
+ |-------|-------------|
851
+ | `xText-display` | Large display heading |
852
+ | `xText-headline` | Section headline |
853
+ | `xText-title` | Card/feature title |
854
+ | `xText-eyebrow` | Small uppercase label |
855
+ | `xText-balance` | Text wrap balance |
856
+ | `xFadeUp` | Scroll-triggered fade-in animation |
857
+ | `xHover-zoom` | Zoom on hover effect |
858
+ | `xParallax` | Parallax scroll effect |
859
+ | `xGlass` | Glassmorphism effect |
224
860
 
225
- - **Icons for Socials**: Icons should be referenced by name and sourced from your project’s icon library.
226
- - **Responsive Layouts**: Use `container` and `max-w-screen` utilities for responsive designs.
861
+ ---
227
862
 
228
863
  ## License
229
864
 
230
- This project is open-source and can be modified as per your project requirements.
865
+ MIT License - see LICENSE file for details.