@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,210 @@
1
+ <template>
2
+ <div>
3
+ <!-- Hero Section -->
4
+ <XMarkHero
5
+ image-src="https://images.unsplash.com/photo-1551434678-e076c223a692?w=1920&q=80"
6
+ eyebrow="Welcome to the future"
7
+ title="Build something amazing today"
8
+ subtitle="The modern platform for teams who want to ship faster, collaborate better, and scale effortlessly."
9
+ align="left"
10
+ overlay="gradient"
11
+ >
12
+ <template #actions>
13
+ <UButton size="xl" color="white">
14
+ Get Started Free
15
+ </UButton>
16
+ <UButton size="xl" variant="outline" color="white">
17
+ Watch Demo
18
+ </UButton>
19
+ </template>
20
+ </XMarkHero>
21
+
22
+ <!-- Features Section -->
23
+ <XMarkSection id="features" bg="default" padding="xl">
24
+ <header class="text-center max-w-3xl mx-auto mb-16">
25
+ <p class="xText-eyebrow text-primary-500 mb-4">Features</p>
26
+ <h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
27
+ Everything you need to succeed
28
+ </h2>
29
+ <p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400">
30
+ Powerful tools designed to help you build, launch, and grow your product.
31
+ </p>
32
+ </header>
33
+
34
+ <XMarkFeatures
35
+ :features="features"
36
+ layout="grid"
37
+ :columns="3"
38
+ />
39
+ </XMarkSection>
40
+
41
+ <!-- Testimonials Section -->
42
+ <XMarkSection bg="subtle" padding="xl">
43
+ <header class="text-center max-w-3xl mx-auto mb-16">
44
+ <p class="xText-eyebrow text-primary-500 mb-4">Testimonials</p>
45
+ <h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
46
+ Loved by teams worldwide
47
+ </h2>
48
+ </header>
49
+
50
+ <XMarkTestimonials
51
+ :testimonials="testimonials"
52
+ layout="grid"
53
+ />
54
+ </XMarkSection>
55
+
56
+ <!-- Pricing Section -->
57
+ <XMarkSection bg="default" padding="xl">
58
+ <header class="text-center max-w-3xl mx-auto mb-16">
59
+ <p class="xText-eyebrow text-primary-500 mb-4">Pricing</p>
60
+ <h2 class="xText-headline text-neutral-900 dark:text-white xText-balance">
61
+ Simple, transparent pricing
62
+ </h2>
63
+ <p class="mt-4 text-lg text-neutral-600 dark:text-neutral-400">
64
+ Choose the plan that works best for your team.
65
+ </p>
66
+ </header>
67
+
68
+ <XMarkPricing
69
+ :plans="pricingPlans"
70
+ />
71
+ </XMarkSection>
72
+
73
+ <!-- CTA Section -->
74
+ <XMarkSection bg="bold" padding="xl">
75
+ <div class="text-center max-w-3xl mx-auto">
76
+ <h2 class="xText-headline xText-balance">
77
+ Ready to get started?
78
+ </h2>
79
+ <p class="mt-4 text-lg opacity-80">
80
+ Join thousands of teams already using our platform.
81
+ </p>
82
+ <div class="mt-8 flex flex-wrap justify-center gap-4">
83
+ <UButton size="xl" color="white">
84
+ Start Free Trial
85
+ </UButton>
86
+ <UButton size="xl" variant="outline" color="white">
87
+ Contact Sales
88
+ </UButton>
89
+ </div>
90
+ <div class="mt-6 flex flex-wrap justify-center gap-4">
91
+ <XMarkBadge preset="no-credit-card" variant="subtle" />
92
+ <XMarkBadge preset="cancel-anytime" variant="subtle" />
93
+ </div>
94
+ </div>
95
+ </XMarkSection>
96
+ </div>
97
+ </template>
98
+
99
+ <script setup>
100
+ useSeoMeta({
101
+ title: "Modern Platform for Teams",
102
+ description: "Build, launch, and grow your product with our powerful platform.",
103
+ });
104
+
105
+ // Features data
106
+ const features = [
107
+ {
108
+ icon: "i-lucide-zap",
109
+ title: "Lightning Fast",
110
+ description: "Built for speed with optimized performance at every level.",
111
+ },
112
+ {
113
+ icon: "i-lucide-shield-check",
114
+ title: "Secure by Default",
115
+ description: "Enterprise-grade security with SOC 2 compliance.",
116
+ },
117
+ {
118
+ icon: "i-lucide-users",
119
+ title: "Team Collaboration",
120
+ description: "Real-time collaboration tools for modern teams.",
121
+ },
122
+ {
123
+ icon: "i-lucide-bar-chart-3",
124
+ title: "Analytics",
125
+ description: "Deep insights into your product's performance.",
126
+ },
127
+ {
128
+ icon: "i-lucide-puzzle",
129
+ title: "Integrations",
130
+ description: "Connect with 100+ tools your team already uses.",
131
+ },
132
+ {
133
+ icon: "i-lucide-headphones",
134
+ title: "24/7 Support",
135
+ description: "Expert support whenever you need it.",
136
+ },
137
+ ];
138
+
139
+ // Testimonials data
140
+ const testimonials = [
141
+ {
142
+ quote: "This platform transformed how our team works. We shipped 3x faster within the first month.",
143
+ name: "Sarah Chen",
144
+ title: "CTO",
145
+ company: "TechStart",
146
+ avatar: "https://randomuser.me/api/portraits/women/44.jpg",
147
+ },
148
+ {
149
+ quote: "The best investment we've made. The ROI was visible within weeks.",
150
+ name: "Marcus Johnson",
151
+ title: "Founder",
152
+ company: "ScaleUp",
153
+ avatar: "https://randomuser.me/api/portraits/men/32.jpg",
154
+ },
155
+ {
156
+ quote: "Finally, a platform that understands what modern teams need. Highly recommended.",
157
+ name: "Emily Park",
158
+ title: "Product Lead",
159
+ company: "InnovateCo",
160
+ avatar: "https://randomuser.me/api/portraits/women/68.jpg",
161
+ },
162
+ ];
163
+
164
+ // Pricing plans data
165
+ const pricingPlans = [
166
+ {
167
+ name: "Starter",
168
+ description: "Perfect for small teams getting started.",
169
+ price: "$19",
170
+ period: "month",
171
+ features: [
172
+ "Up to 5 team members",
173
+ "Basic analytics",
174
+ "Email support",
175
+ "1GB storage",
176
+ ],
177
+ cta: "Start Free Trial",
178
+ },
179
+ {
180
+ name: "Pro",
181
+ description: "For growing teams that need more power.",
182
+ price: "$49",
183
+ period: "month",
184
+ features: [
185
+ "Up to 25 team members",
186
+ "Advanced analytics",
187
+ "Priority support",
188
+ "10GB storage",
189
+ "Custom integrations",
190
+ ],
191
+ cta: "Start Free Trial",
192
+ popular: true,
193
+ },
194
+ {
195
+ name: "Enterprise",
196
+ description: "For large organizations with custom needs.",
197
+ price: "Custom",
198
+ period: "",
199
+ features: [
200
+ "Unlimited team members",
201
+ "Enterprise analytics",
202
+ "Dedicated support",
203
+ "Unlimited storage",
204
+ "Custom integrations",
205
+ "SLA guarantee",
206
+ ],
207
+ cta: "Contact Sales",
208
+ },
209
+ ];
210
+ </script>
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Marketing Client Plugin
3
+ * Auto-initializes scroll reveal and parallax animations globally
4
+ *
5
+ * From spec-prompt.md specification
6
+ */
7
+ export default defineNuxtPlugin(() => {
8
+ // Initialize scroll reveal globally
9
+ useScrollReveal();
10
+
11
+ // Initialize parallax globally
12
+ useParallax();
13
+ });
@@ -0,0 +1,268 @@
1
+ /**
2
+ * nuxt-x-marketing TypeScript Interfaces
3
+ *
4
+ * Standardized data structures for marketing components.
5
+ * Use these interfaces when passing data to components.
6
+ */
7
+
8
+ // =============================================================================
9
+ // Core Prop Types
10
+ // =============================================================================
11
+
12
+ /**
13
+ * Standard image prop object
14
+ * @example { src: '/hero.jpg', alt: 'Hero image' }
15
+ */
16
+ export interface ImageProp {
17
+ /** Image URL (required) */
18
+ src: string
19
+ /** Alt text for accessibility */
20
+ alt?: string
21
+ }
22
+
23
+ /**
24
+ * Standard video prop object
25
+ * @example { src: '/demo.mp4', poster: '/poster.jpg' }
26
+ */
27
+ export interface VideoProp {
28
+ /** Video URL (required) */
29
+ src: string
30
+ /** Poster image URL */
31
+ poster?: string
32
+ }
33
+
34
+ /**
35
+ * Standard button prop object (matches Nuxt UI conventions)
36
+ * @example { label: 'Get Started', color: 'primary', to: '/signup' }
37
+ */
38
+ export interface ButtonProp {
39
+ /** Button text (required) */
40
+ label: string
41
+ /** Button color: primary, secondary, neutral, success, warning, error */
42
+ color?: 'primary' | 'secondary' | 'neutral' | 'success' | 'warning' | 'error' | 'white'
43
+ /** Button variant: solid, outline, ghost, subtle, link */
44
+ variant?: 'solid' | 'outline' | 'ghost' | 'subtle' | 'link'
45
+ /** Navigation target (NuxtLink) */
46
+ to?: string
47
+ /** External link (uses <a> instead) */
48
+ href?: string
49
+ /** Icon name (Heroicons/Lucide format) */
50
+ icon?: string
51
+ /** Size: xs, sm, md, lg, xl */
52
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
53
+ }
54
+
55
+ /**
56
+ * Standard logo prop object
57
+ * @example { src: '/logo.svg', srcDark: '/logo-dark.svg', alt: 'Company' }
58
+ */
59
+ export interface LogoProp {
60
+ /** Light mode logo URL (required) */
61
+ src: string
62
+ /** Dark mode logo URL (optional, falls back to src) */
63
+ srcDark?: string
64
+ /** Alt text */
65
+ alt?: string
66
+ }
67
+
68
+ // =============================================================================
69
+ // Content Types
70
+ // =============================================================================
71
+
72
+ /**
73
+ * Blog post author
74
+ */
75
+ export interface Author {
76
+ /** Author name */
77
+ name: string
78
+ /** Author title/role */
79
+ title?: string
80
+ /** Avatar image URL */
81
+ avatar?: string
82
+ /** Short bio */
83
+ bio?: string
84
+ /** Social media links */
85
+ social?: {
86
+ twitter?: string
87
+ linkedin?: string
88
+ github?: string
89
+ [key: string]: string | undefined
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Blog post object
95
+ * @example
96
+ * {
97
+ * title: 'Getting Started',
98
+ * slug: 'getting-started',
99
+ * img: { src: '/blog/cover.jpg', alt: 'Cover' },
100
+ * date: '2024-01-15',
101
+ * author: { name: 'Jane Doe', avatar: '/avatars/jane.jpg' }
102
+ * }
103
+ */
104
+ export interface BlogPost {
105
+ /** Post title */
106
+ title: string
107
+ /** URL slug */
108
+ slug: string
109
+ /** Featured image (new object format) */
110
+ img?: ImageProp
111
+ /** Post excerpt/summary */
112
+ excerpt?: string
113
+ /** Full post description */
114
+ description?: string
115
+ /** Publication date (ISO string or Date) */
116
+ date?: string | Date
117
+ /** Reading time (e.g., "5 min read") */
118
+ readingTime?: string | number
119
+ /** Category name */
120
+ category?: string
121
+ /** Array of tags */
122
+ tags?: string[]
123
+ /** Post author */
124
+ author?: Author
125
+ /** Whether post is published */
126
+ published?: boolean
127
+ }
128
+
129
+ /**
130
+ * Feature item for Features component
131
+ * @example
132
+ * {
133
+ * icon: 'i-lucide-rocket',
134
+ * title: 'Fast',
135
+ * description: 'Lightning fast performance',
136
+ * img: { src: '/features/fast.jpg' }
137
+ * }
138
+ */
139
+ export interface Feature {
140
+ /** Icon name (Heroicons/Lucide format) */
141
+ icon?: string
142
+ /** Feature title */
143
+ title: string
144
+ /** Feature description */
145
+ description?: string
146
+ /** Feature image (new object format) */
147
+ img?: ImageProp
148
+ /** Link URL */
149
+ link?: string
150
+ }
151
+
152
+ /**
153
+ * Pricing plan for Pricing components
154
+ * @example
155
+ * {
156
+ * name: 'Pro',
157
+ * price: { monthly: '$29', yearly: '$279' },
158
+ * features: ['Unlimited projects', 'Priority support'],
159
+ * button: { label: 'Get Pro' },
160
+ * popular: true
161
+ * }
162
+ */
163
+ export interface PricingPlan {
164
+ /** Plan name */
165
+ name: string
166
+ /** Plan description */
167
+ description?: string
168
+ /** Price (string or object for monthly/yearly) */
169
+ price: string | { monthly: string; yearly: string }
170
+ /** Billing period text (e.g., "/month") */
171
+ period?: string
172
+ /** List of feature strings */
173
+ features: string[]
174
+ /** CTA button (new object format) */
175
+ button?: ButtonProp
176
+ /** Mark as popular/highlighted */
177
+ popular?: boolean
178
+ }
179
+
180
+ /**
181
+ * Testimonial for Testimonials component
182
+ * @example
183
+ * {
184
+ * quote: 'Amazing product!',
185
+ * name: 'John Doe',
186
+ * title: 'CEO',
187
+ * company: 'Acme Inc',
188
+ * avatar: '/testimonials/john.jpg',
189
+ * rating: 5
190
+ * }
191
+ */
192
+ export interface Testimonial {
193
+ /** Testimonial quote text */
194
+ quote: string
195
+ /** Person's name */
196
+ name: string
197
+ /** Job title */
198
+ title?: string
199
+ /** Company name */
200
+ company?: string
201
+ /** Avatar image URL */
202
+ avatar?: string
203
+ /** Company logo URL */
204
+ logo?: string
205
+ /** Star rating (1-5) */
206
+ rating?: 1 | 2 | 3 | 4 | 5
207
+ }
208
+
209
+ /**
210
+ * Navigation link item
211
+ */
212
+ export interface NavLink {
213
+ /** Link label */
214
+ label: string
215
+ /** Link URL */
216
+ to?: string
217
+ /** External link */
218
+ href?: string
219
+ /** Icon name */
220
+ icon?: string
221
+ /** Child links (dropdown) */
222
+ children?: NavLink[]
223
+ }
224
+
225
+ /**
226
+ * Footer link column
227
+ */
228
+ export interface FooterColumn {
229
+ /** Column title */
230
+ title: string
231
+ /** Links in this column */
232
+ links: NavLink[]
233
+ }
234
+
235
+ /**
236
+ * Social media link
237
+ */
238
+ export interface SocialLink {
239
+ /** Platform name (twitter, linkedin, github, etc.) */
240
+ platform: string
241
+ /** Profile URL */
242
+ url: string
243
+ /** Icon name (optional, defaults to platform icon) */
244
+ icon?: string
245
+ }
246
+
247
+ // =============================================================================
248
+ // Component Size Scale
249
+ // =============================================================================
250
+
251
+ /**
252
+ * Standard size scale used across components
253
+ */
254
+ export type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
255
+
256
+ // =============================================================================
257
+ // Layout Types
258
+ // =============================================================================
259
+
260
+ /**
261
+ * Section background variants
262
+ */
263
+ export type SectionBackground = 'default' | 'subtle' | 'bold' | 'gradient' | 'pattern'
264
+
265
+ /**
266
+ * Section padding options
267
+ */
268
+ export type SectionPadding = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'