@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.
- package/.claude/settings.local.json +22 -0
- package/.playground/app.config.ts +44 -45
- package/.playground/app.vue +263 -0
- package/.playground/components/AppFooter.vue +103 -0
- package/.playground/components/AppHeader.vue +41 -0
- package/.playground/components/CodeExample.vue +70 -0
- package/.playground/components/ComponentPlayground.vue +117 -0
- package/.playground/components/DocsHeader.vue +19 -0
- package/.playground/layouts/default.vue +13 -3
- package/.playground/layouts/docs-layout.vue +161 -0
- package/.playground/layouts/docs.vue +11 -0
- package/.playground/package-lock.json +6 -0
- package/.playground/pages/blog/author.vue +145 -0
- package/.playground/pages/blog/card.vue +149 -0
- package/.playground/pages/blog/cta.vue +131 -0
- package/.playground/pages/blog/detail.vue +379 -0
- package/.playground/pages/blog/list.vue +261 -0
- package/.playground/pages/blog/navigation.vue +228 -0
- package/.playground/pages/blog/sidebar.vue +279 -0
- package/.playground/pages/config.vue +289 -0
- package/.playground/pages/content/comparison.vue +253 -0
- package/.playground/pages/content/cta.vue +245 -0
- package/.playground/pages/content/features.vue +217 -0
- package/.playground/pages/content/newsletter-section.vue +260 -0
- package/.playground/pages/content/newsletter.vue +200 -0
- package/.playground/pages/content/pricing.vue +335 -0
- package/.playground/pages/content/testimonials.vue +188 -0
- package/.playground/pages/hero.vue +257 -0
- package/.playground/pages/index.vue +379 -2
- package/.playground/pages/layout/footer.vue +210 -0
- package/.playground/pages/layout/legal-footer.vue +121 -0
- package/.playground/pages/layout/navbar.vue +285 -0
- package/.playground/pages/layout/section.vue +266 -0
- package/.playground/pages/layout/x-legal.vue +199 -0
- package/.playground/pages/modals/feature-modal.vue +320 -0
- package/.playground/pages/modals/image-lightbox.vue +277 -0
- package/.playground/pages/modals/video-modal.vue +222 -0
- package/.playground/pages/notifications/announcement-bar.vue +164 -0
- package/.playground/pages/notifications/cookie-banner.vue +210 -0
- package/.playground/pages/notifications/cookie-toast.vue +143 -0
- package/.playground/pages/notifications/gdpr.vue +276 -0
- package/.playground/pages/notifications/social-proof-toast.vue +255 -0
- package/.playground/pages/ui/badge.vue +161 -0
- package/.playground/pages/ui/bg-pattern.vue +177 -0
- package/.playground/pages/ui/glass-card.vue +179 -0
- package/.playground/pages/ui/glow-divider.vue +179 -0
- package/.playground/pages/ui/promo-card.vue +259 -0
- package/.playground/pages/ui/section-stitch.vue +411 -0
- package/.playground/pages/utilities/back-to-top.vue +153 -0
- package/.playground/pages/utilities/popup-chat.vue +224 -0
- package/README.md +799 -164
- package/app/app.config.ts +88 -2
- package/app/app.vue +106 -11
- package/app/assets/css/x-marketing.css +668 -0
- package/app/components/X/Footer/XLegal/index.vue +63 -26
- package/app/components/X/Footer/index.vue +89 -89
- package/app/components/X/Header/App.vue +63 -0
- package/app/components/X/Mark/Blog/Author.vue +170 -0
- package/app/components/X/Mark/Blog/CTANewsletter.vue +197 -0
- package/app/components/X/Mark/Blog/Card.vue +117 -0
- package/app/components/X/Mark/Blog/Detail.vue +240 -0
- package/app/components/X/Mark/Blog/List.vue +156 -0
- package/app/components/X/Mark/Blog/Navigation.vue +100 -0
- package/app/components/X/Mark/Blog/Sidebar.vue +160 -0
- package/app/components/X/Mark/Button/BackToTop.vue +99 -0
- package/app/components/X/Mark/CTA/index.vue +294 -0
- package/app/components/X/Mark/Card/Glass.vue +64 -0
- package/app/components/X/Mark/Card/Promo.vue +164 -0
- package/app/components/X/Mark/Divider/Glow.vue +113 -0
- package/app/components/X/Mark/Features/index.vue +194 -0
- package/app/components/X/Mark/Hero/index.vue +217 -0
- package/app/components/X/Mark/Layout/AnnouncementBar.vue +139 -0
- package/app/components/X/Mark/Layout/Footer.vue +160 -0
- package/app/components/X/Mark/Layout/FooterLegal.vue +42 -0
- package/app/components/X/Mark/Layout/Navbar.vue +267 -0
- package/app/components/X/Mark/Modal/Chat.vue +151 -0
- package/app/components/X/Mark/Modal/Feature.vue +197 -0
- package/app/components/X/Mark/Modal/Image.vue +226 -0
- package/app/components/X/Mark/Modal/Video.vue +203 -0
- package/app/components/X/Mark/Modal/index.vue +133 -0
- package/app/components/X/Mark/Newsletter/Form.vue +174 -0
- package/app/components/X/Mark/Pattern/Bg.vue +86 -0
- package/app/components/X/Mark/Pricing/Comparison.vue +126 -0
- package/app/components/X/Mark/Pricing/Plans.vue +181 -0
- package/app/components/X/Mark/Privacy/CookieBanner.vue +112 -0
- package/app/components/X/Mark/Privacy/CookieToast.vue +43 -0
- package/app/components/X/Mark/Privacy/GDPR.vue +245 -0
- package/app/components/X/Mark/Section/Newsletter.vue +183 -0
- package/app/components/X/Mark/Section/Stitch.vue +156 -0
- package/app/components/X/Mark/Section/index.vue +151 -0
- package/app/components/X/Mark/SocialProof/Badge.vue +102 -0
- package/app/components/X/Mark/SocialProof/Testimonials.vue +326 -0
- package/app/components/X/Mark/SocialProof/Toast.vue +136 -0
- package/app/components/X/Mark/_archive/Pattern/Background.vue +83 -0
- package/app/components/X/Mark/_archive/Pattern/CheckBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/CircuitBg.vue +41 -0
- package/app/components/X/Mark/_archive/Pattern/DotsBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/GlowDivider.vue +86 -0
- package/app/components/X/Mark/_archive/Pattern/HexBg.vue +35 -0
- package/app/components/X/Mark/_archive/Pattern/PlaidBg.vue +47 -0
- package/app/components/X/Mark/_archive/Pattern/SectionStitch.vue +168 -0
- package/app/components/X/Mark/_archive/Pattern/WaveBg.vue +41 -0
- package/app/components/X/_archive/Newsletter/Form.vue +123 -0
- package/app/components/X/_archive/Newsletter/Section.vue +131 -0
- package/app/composables/useParallax.ts +124 -0
- package/app/composables/useScrollReveal.ts +92 -0
- package/app/pages/index.vue +210 -0
- package/app/plugins/marketing.client.ts +13 -0
- package/app/types/marketing.d.ts +268 -0
- package/componentList.json +511 -0
- package/nuxt.config.ts +6 -13
- package/package.json +21 -9
- package/.editorconfig +0 -12
- package/app/assets/css/main.css +0 -2
- package/app/components/X/Marketing/Sections/EmailSubscription/index.vue +0 -129
|
@@ -0,0 +1,224 @@
|
|
|
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">Popup Chat</h1>
|
|
5
|
+
<p class="mt-2 text-neutral-600 dark:text-neutral-400">Proactive chat popup to engage visitors.</p>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div class="p-8 space-y-12">
|
|
9
|
+
<!-- Demo -->
|
|
10
|
+
<section>
|
|
11
|
+
<h2 class="text-lg font-semibold mb-4">Demo</h2>
|
|
12
|
+
<p class="text-sm text-neutral-500 mb-4">Click to show the chat popup in the bottom-right corner</p>
|
|
13
|
+
<div class="flex gap-3">
|
|
14
|
+
<UButton @click="showChat = true">Show Chat Popup</UButton>
|
|
15
|
+
<UButton color="neutral" variant="outline" @click="showWithAction = true">With Action Button</UButton>
|
|
16
|
+
</div>
|
|
17
|
+
</section>
|
|
18
|
+
|
|
19
|
+
<!-- Preview -->
|
|
20
|
+
<section>
|
|
21
|
+
<h2 class="text-lg font-semibold mb-4">Preview</h2>
|
|
22
|
+
<div class="bg-neutral-100 dark:bg-neutral-800 rounded-lg p-8">
|
|
23
|
+
<div class="max-w-sm ml-auto">
|
|
24
|
+
<div class="xGlass rounded-2xl p-4 shadow-xl relative">
|
|
25
|
+
<button class="absolute top-2 right-2 p-1 rounded-full hover:bg-black/5">
|
|
26
|
+
<UIcon name="i-lucide-x" class="w-4 h-4 text-neutral-400" />
|
|
27
|
+
</button>
|
|
28
|
+
<div class="flex gap-3">
|
|
29
|
+
<img
|
|
30
|
+
src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop"
|
|
31
|
+
alt="Support"
|
|
32
|
+
class="w-12 h-12 rounded-full object-cover"
|
|
33
|
+
/>
|
|
34
|
+
<div class="flex-1">
|
|
35
|
+
<div class="flex items-center gap-2 mb-1">
|
|
36
|
+
<span class="font-medium text-neutral-900 dark:text-white">Sarah</span>
|
|
37
|
+
<span class="w-2 h-2 rounded-full bg-green-500" />
|
|
38
|
+
</div>
|
|
39
|
+
<p class="text-sm text-neutral-600 dark:text-neutral-400">
|
|
40
|
+
Hi there! Need help finding something?
|
|
41
|
+
</p>
|
|
42
|
+
<UButton size="sm" class="mt-3">Start Chat</UButton>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</section>
|
|
49
|
+
|
|
50
|
+
<!-- Without Avatar -->
|
|
51
|
+
<section>
|
|
52
|
+
<h2 class="text-lg font-semibold mb-4">Without Avatar</h2>
|
|
53
|
+
<p class="text-sm text-neutral-500 mb-4">Falls back to initial when no avatar is provided</p>
|
|
54
|
+
<UButton @click="showNoAvatar = true">Show Without Avatar</UButton>
|
|
55
|
+
</section>
|
|
56
|
+
|
|
57
|
+
<!-- Auto-dismiss -->
|
|
58
|
+
<section>
|
|
59
|
+
<h2 class="text-lg font-semibold mb-4">Auto-dismiss</h2>
|
|
60
|
+
<p class="text-sm text-neutral-500 mb-4">Set autoDismiss to automatically close after a duration</p>
|
|
61
|
+
<UButton @click="showAutoDismiss = true">Show (Auto-closes in 5s)</UButton>
|
|
62
|
+
</section>
|
|
63
|
+
|
|
64
|
+
<!-- Props -->
|
|
65
|
+
<section>
|
|
66
|
+
<h2 class="text-lg font-semibold mb-4">Props</h2>
|
|
67
|
+
<table class="w-full text-sm">
|
|
68
|
+
<thead>
|
|
69
|
+
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
70
|
+
<th class="text-left py-3 px-4">Prop</th>
|
|
71
|
+
<th class="text-left py-3 px-4">Type</th>
|
|
72
|
+
<th class="text-left py-3 px-4">Default</th>
|
|
73
|
+
<th class="text-left py-3 px-4">Description</th>
|
|
74
|
+
</tr>
|
|
75
|
+
</thead>
|
|
76
|
+
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
77
|
+
<tr><td class="py-3 px-4 font-mono text-xs">v-model</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">false</td><td class="py-3 px-4">Visibility control</td></tr>
|
|
78
|
+
<tr><td class="py-3 px-4 font-mono text-xs">name</td><td class="py-3 px-4">String</td><td class="py-3 px-4">required</td><td class="py-3 px-4">Person or bot name</td></tr>
|
|
79
|
+
<tr><td class="py-3 px-4 font-mono text-xs">message</td><td class="py-3 px-4">String</td><td class="py-3 px-4">required</td><td class="py-3 px-4">Chat message text</td></tr>
|
|
80
|
+
<tr><td class="py-3 px-4 font-mono text-xs">avatar</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4">Avatar image URL</td></tr>
|
|
81
|
+
<tr><td class="py-3 px-4 font-mono text-xs">online</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">true</td><td class="py-3 px-4">Show online indicator</td></tr>
|
|
82
|
+
<tr><td class="py-3 px-4 font-mono text-xs">actionText</td><td class="py-3 px-4">String</td><td class="py-3 px-4">''</td><td class="py-3 px-4">CTA button text</td></tr>
|
|
83
|
+
<tr><td class="py-3 px-4 font-mono text-xs">delay</td><td class="py-3 px-4">Number</td><td class="py-3 px-4">3000</td><td class="py-3 px-4">Delay before showing (ms)</td></tr>
|
|
84
|
+
<tr><td class="py-3 px-4 font-mono text-xs">autoDismiss</td><td class="py-3 px-4">Number</td><td class="py-3 px-4">0</td><td class="py-3 px-4">Auto-close after ms (0 = never)</td></tr>
|
|
85
|
+
</tbody>
|
|
86
|
+
</table>
|
|
87
|
+
</section>
|
|
88
|
+
|
|
89
|
+
<!-- Events -->
|
|
90
|
+
<section>
|
|
91
|
+
<h2 class="text-lg font-semibold mb-4">Events</h2>
|
|
92
|
+
<table class="w-full text-sm">
|
|
93
|
+
<thead>
|
|
94
|
+
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
95
|
+
<th class="text-left py-3 px-4">Event</th>
|
|
96
|
+
<th class="text-left py-3 px-4">Description</th>
|
|
97
|
+
</tr>
|
|
98
|
+
</thead>
|
|
99
|
+
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
100
|
+
<tr><td class="py-3 px-4 font-mono text-xs">@action</td><td class="py-3 px-4">Emitted when action button is clicked</td></tr>
|
|
101
|
+
<tr><td class="py-3 px-4 font-mono text-xs">@dismiss</td><td class="py-3 px-4">Emitted when popup is closed</td></tr>
|
|
102
|
+
</tbody>
|
|
103
|
+
</table>
|
|
104
|
+
</section>
|
|
105
|
+
|
|
106
|
+
<!-- Code Example -->
|
|
107
|
+
<section>
|
|
108
|
+
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
109
|
+
<CodeExample title="Popup Chat Usage" :code="codeExample" />
|
|
110
|
+
</section>
|
|
111
|
+
|
|
112
|
+
<!-- Use Cases -->
|
|
113
|
+
<section>
|
|
114
|
+
<h2 class="text-lg font-semibold mb-4">Common Use Cases</h2>
|
|
115
|
+
<div class="grid md:grid-cols-2 gap-4">
|
|
116
|
+
<div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700">
|
|
117
|
+
<h3 class="font-medium mb-2">Proactive Support</h3>
|
|
118
|
+
<p class="text-sm text-neutral-500">Offer help after user has been on page for a while</p>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700">
|
|
121
|
+
<h3 class="font-medium mb-2">Lead Capture</h3>
|
|
122
|
+
<p class="text-sm text-neutral-500">Encourage visitors to start a conversation</p>
|
|
123
|
+
</div>
|
|
124
|
+
<div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700">
|
|
125
|
+
<h3 class="font-medium mb-2">Exit Intent</h3>
|
|
126
|
+
<p class="text-sm text-neutral-500">Show when user is about to leave the page</p>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700">
|
|
129
|
+
<h3 class="font-medium mb-2">Sales Outreach</h3>
|
|
130
|
+
<p class="text-sm text-neutral-500">Connect pricing page visitors with sales team</p>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</section>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<!-- Actual Components -->
|
|
137
|
+
<XMarkModalChat
|
|
138
|
+
v-model="showChat"
|
|
139
|
+
name="Sarah"
|
|
140
|
+
message="Hi there! Need help finding something?"
|
|
141
|
+
avatar="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop"
|
|
142
|
+
:delay="0"
|
|
143
|
+
@dismiss="showChat = false"
|
|
144
|
+
/>
|
|
145
|
+
|
|
146
|
+
<XMarkModalChat
|
|
147
|
+
v-model="showWithAction"
|
|
148
|
+
name="Alex"
|
|
149
|
+
message="Have a question about our pricing? I'm here to help!"
|
|
150
|
+
avatar="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop"
|
|
151
|
+
action-text="Start Chat"
|
|
152
|
+
:delay="0"
|
|
153
|
+
@action="handleAction"
|
|
154
|
+
@dismiss="showWithAction = false"
|
|
155
|
+
/>
|
|
156
|
+
|
|
157
|
+
<XMarkModalChat
|
|
158
|
+
v-model="showNoAvatar"
|
|
159
|
+
name="Support Bot"
|
|
160
|
+
message="Hello! I'm an AI assistant. How can I help you today?"
|
|
161
|
+
:delay="0"
|
|
162
|
+
@dismiss="showNoAvatar = false"
|
|
163
|
+
/>
|
|
164
|
+
|
|
165
|
+
<XMarkModalChat
|
|
166
|
+
v-model="showAutoDismiss"
|
|
167
|
+
name="Quick Tip"
|
|
168
|
+
message="Did you know? You can use keyboard shortcuts to navigate faster!"
|
|
169
|
+
:delay="0"
|
|
170
|
+
:auto-dismiss="5000"
|
|
171
|
+
@dismiss="showAutoDismiss = false"
|
|
172
|
+
/>
|
|
173
|
+
</div>
|
|
174
|
+
</template>
|
|
175
|
+
|
|
176
|
+
<script setup>
|
|
177
|
+
const codeExample = `<XMarkModalChat
|
|
178
|
+
v-model="showChat"
|
|
179
|
+
name="Sarah"
|
|
180
|
+
message="Hi there! Need help finding something?"
|
|
181
|
+
avatar="/images/support-avatar.jpg"
|
|
182
|
+
action-text="Start Chat"
|
|
183
|
+
:delay="5000"
|
|
184
|
+
@action="openChatWidget"
|
|
185
|
+
@dismiss="showChat = false"
|
|
186
|
+
/>
|
|
187
|
+
|
|
188
|
+
<!-- Auto-show after delay -->
|
|
189
|
+
<script setup>
|
|
190
|
+
const showChat = ref(false)
|
|
191
|
+
|
|
192
|
+
onMounted(() => {
|
|
193
|
+
setTimeout(() => {
|
|
194
|
+
showChat.value = true
|
|
195
|
+
}, 10000)
|
|
196
|
+
})
|
|
197
|
+
<\/script>
|
|
198
|
+
|
|
199
|
+
<!-- Without avatar (shows initial) -->
|
|
200
|
+
<XMarkModalChat
|
|
201
|
+
v-model="showBot"
|
|
202
|
+
name="Support Bot"
|
|
203
|
+
message="Hello! How can I help?"
|
|
204
|
+
:online="false"
|
|
205
|
+
/>
|
|
206
|
+
|
|
207
|
+
<!-- Auto-dismiss after 5 seconds -->
|
|
208
|
+
<XMarkModalChat
|
|
209
|
+
v-model="showTip"
|
|
210
|
+
name="Quick Tip"
|
|
211
|
+
message="Use keyboard shortcuts!"
|
|
212
|
+
:auto-dismiss="5000"
|
|
213
|
+
/>`
|
|
214
|
+
|
|
215
|
+
const showChat = ref(false)
|
|
216
|
+
const showWithAction = ref(false)
|
|
217
|
+
const showNoAvatar = ref(false)
|
|
218
|
+
const showAutoDismiss = ref(false)
|
|
219
|
+
|
|
220
|
+
const handleAction = () => {
|
|
221
|
+
console.log('Chat action clicked')
|
|
222
|
+
showWithAction.value = false
|
|
223
|
+
}
|
|
224
|
+
</script>
|