@xenterprises/nuxt-x-marketing 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +130 -11
  2. package/app/components/X/Mark/CodeBlock/index.vue +19 -7
  3. package/app/components/X/Mark/Divider/Glow.vue +25 -19
  4. package/app/components/X/Mark/Section/Stitch.vue +45 -31
  5. package/app/composables/{useParallax.ts → useParallax.js} +6 -7
  6. package/app/composables/{useScrollReveal.ts → useScrollReveal.js} +4 -4
  7. package/nuxt.config.ts +1 -11
  8. package/package.json +1 -1
  9. package/.claude/settings.local.json +0 -23
  10. package/.nuxtrc +0 -1
  11. package/.playground/app.config.ts +0 -74
  12. package/.playground/app.vue +0 -269
  13. package/.playground/components/AppFooter.vue +0 -103
  14. package/.playground/components/AppHeader.vue +0 -41
  15. package/.playground/components/CodeExample.vue +0 -70
  16. package/.playground/components/ComponentPlayground.vue +0 -117
  17. package/.playground/components/DocsHeader.vue +0 -19
  18. package/.playground/layouts/default.vue +0 -15
  19. package/.playground/layouts/docs-layout.vue +0 -161
  20. package/.playground/layouts/docs.vue +0 -11
  21. package/.playground/nuxt.config.ts +0 -5
  22. package/.playground/package-lock.json +0 -6
  23. package/.playground/pages/blog/author.vue +0 -145
  24. package/.playground/pages/blog/card.vue +0 -149
  25. package/.playground/pages/blog/cta.vue +0 -131
  26. package/.playground/pages/blog/detail.vue +0 -471
  27. package/.playground/pages/blog/list.vue +0 -261
  28. package/.playground/pages/blog/navigation.vue +0 -228
  29. package/.playground/pages/blog/sidebar.vue +0 -279
  30. package/.playground/pages/config.vue +0 -289
  31. package/.playground/pages/content/comparison.vue +0 -253
  32. package/.playground/pages/content/cta.vue +0 -245
  33. package/.playground/pages/content/features.vue +0 -217
  34. package/.playground/pages/content/newsletter-section.vue +0 -260
  35. package/.playground/pages/content/newsletter.vue +0 -200
  36. package/.playground/pages/content/pricing.vue +0 -335
  37. package/.playground/pages/content/testimonials.vue +0 -188
  38. package/.playground/pages/hero.vue +0 -257
  39. package/.playground/pages/index.vue +0 -381
  40. package/.playground/pages/layout/footer.vue +0 -210
  41. package/.playground/pages/layout/legal-footer.vue +0 -121
  42. package/.playground/pages/layout/navbar.vue +0 -285
  43. package/.playground/pages/layout/section.vue +0 -266
  44. package/.playground/pages/layout/x-legal.vue +0 -199
  45. package/.playground/pages/modals/feature-modal.vue +0 -320
  46. package/.playground/pages/modals/image-lightbox.vue +0 -277
  47. package/.playground/pages/modals/video-modal.vue +0 -222
  48. package/.playground/pages/notifications/announcement-bar.vue +0 -164
  49. package/.playground/pages/notifications/cookie-banner.vue +0 -210
  50. package/.playground/pages/notifications/cookie-toast.vue +0 -143
  51. package/.playground/pages/notifications/gdpr.vue +0 -276
  52. package/.playground/pages/notifications/social-proof-toast.vue +0 -515
  53. package/.playground/pages/ui/badge.vue +0 -161
  54. package/.playground/pages/ui/bg-pattern.vue +0 -177
  55. package/.playground/pages/ui/glass-card.vue +0 -179
  56. package/.playground/pages/ui/glow-divider.vue +0 -179
  57. package/.playground/pages/ui/promo-card.vue +0 -259
  58. package/.playground/pages/ui/section-stitch.vue +0 -411
  59. package/.playground/pages/utilities/back-to-top.vue +0 -153
  60. package/.playground/pages/utilities/popup-chat.vue +0 -224
  61. package/componentList.json +0 -2129
  62. package/screenshots/playground-home.png +0 -0
  63. package/tsconfig.json +0 -3
  64. /package/app/composables/{useXBlog.ts → useXBlog.js} +0 -0
@@ -1,153 +0,0 @@
1
- <template>
2
- <div class="min-h-screen">
3
- <div class="bg-white dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-800 px-8 py-6">
4
- <h1 class="text-2xl font-bold text-neutral-900 dark:text-white">Back to Top</h1>
5
- <p class="mt-2 text-neutral-600 dark:text-neutral-400">Scroll-to-top button that appears after scrolling down.</p>
6
- </div>
7
-
8
- <div class="p-8 space-y-12">
9
- <!-- Demo Instructions -->
10
- <section>
11
- <h2 class="text-lg font-semibold mb-4">Demo</h2>
12
- <p class="text-sm text-neutral-500 mb-4">Scroll down this page to see the back-to-top button appear in the bottom-right corner.</p>
13
- <div class="p-4 bg-primary-50 dark:bg-primary-900/20 rounded-lg border border-primary-200 dark:border-primary-800">
14
- <p class="text-primary-800 dark:text-primary-200 text-sm">
15
- The button appears after scrolling 400px (default threshold).
16
- </p>
17
- </div>
18
- </section>
19
-
20
- <!-- Variants Preview -->
21
- <section>
22
- <h2 class="text-lg font-semibold mb-4">Style Variants</h2>
23
- <p class="text-sm text-neutral-500 mb-4">Available button styles (current demo uses primary)</p>
24
- <div class="flex gap-6">
25
- <div class="text-center">
26
- <div class="w-12 h-12 rounded-full bg-primary-500 text-white flex items-center justify-center mb-2 shadow-lg">
27
- <UIcon name="i-lucide-arrow-up" class="w-5 h-5" />
28
- </div>
29
- <span class="text-sm">Primary</span>
30
- </div>
31
- <div class="text-center">
32
- <div class="w-12 h-12 rounded-full bg-neutral-900 dark:bg-white text-white dark:text-neutral-900 flex items-center justify-center mb-2 shadow-lg">
33
- <UIcon name="i-lucide-arrow-up" class="w-5 h-5" />
34
- </div>
35
- <span class="text-sm">Neutral</span>
36
- </div>
37
- <div class="text-center">
38
- <div class="w-12 h-12 rounded-full xGlass text-neutral-900 dark:text-white flex items-center justify-center mb-2 shadow-lg">
39
- <UIcon name="i-lucide-arrow-up" class="w-5 h-5" />
40
- </div>
41
- <span class="text-sm">Glass</span>
42
- </div>
43
- </div>
44
- </section>
45
-
46
- <!-- Position Options -->
47
- <section>
48
- <h2 class="text-lg font-semibold mb-4">Position Options</h2>
49
- <div class="grid md:grid-cols-3 gap-4">
50
- <div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700 relative h-32">
51
- <div class="absolute bottom-4 right-4 w-10 h-10 rounded-full bg-primary-500 flex items-center justify-center">
52
- <UIcon name="i-lucide-arrow-up" class="w-4 h-4 text-white" />
53
- </div>
54
- <span class="text-sm font-mono">bottom-right</span>
55
- </div>
56
- <div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700 relative h-32">
57
- <div class="absolute bottom-4 left-4 w-10 h-10 rounded-full bg-primary-500 flex items-center justify-center">
58
- <UIcon name="i-lucide-arrow-up" class="w-4 h-4 text-white" />
59
- </div>
60
- <span class="text-sm font-mono">bottom-left</span>
61
- </div>
62
- <div class="p-4 rounded-lg border border-neutral-200 dark:border-neutral-700 relative h-32">
63
- <div class="absolute bottom-4 left-1/2 -translate-x-1/2 w-10 h-10 rounded-full bg-primary-500 flex items-center justify-center">
64
- <UIcon name="i-lucide-arrow-up" class="w-4 h-4 text-white" />
65
- </div>
66
- <span class="text-sm font-mono">bottom-center</span>
67
- </div>
68
- </div>
69
- </section>
70
-
71
- <!-- Props -->
72
- <section>
73
- <h2 class="text-lg font-semibold mb-4">Props</h2>
74
- <table class="w-full text-sm">
75
- <thead>
76
- <tr class="border-b border-neutral-200 dark:border-neutral-700">
77
- <th class="text-left py-3 px-4">Prop</th>
78
- <th class="text-left py-3 px-4">Type</th>
79
- <th class="text-left py-3 px-4">Default</th>
80
- <th class="text-left py-3 px-4">Description</th>
81
- </tr>
82
- </thead>
83
- <tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
84
- <tr><td class="py-3 px-4 font-mono text-xs">threshold</td><td class="py-3 px-4">Number</td><td class="py-3 px-4">400</td><td class="py-3 px-4">Scroll distance (px) before button appears</td></tr>
85
- <tr><td class="py-3 px-4 font-mono text-xs">position</td><td class="py-3 px-4">String</td><td class="py-3 px-4">bottom-right</td><td class="py-3 px-4">bottom-right, bottom-left, bottom-center</td></tr>
86
- <tr><td class="py-3 px-4 font-mono text-xs">variant</td><td class="py-3 px-4">String</td><td class="py-3 px-4">primary</td><td class="py-3 px-4">primary, neutral, glass</td></tr>
87
- <tr><td class="py-3 px-4 font-mono text-xs">icon</td><td class="py-3 px-4">String</td><td class="py-3 px-4">i-lucide-arrow-up</td><td class="py-3 px-4">Icon name</td></tr>
88
- <tr><td class="py-3 px-4 font-mono text-xs">label</td><td class="py-3 px-4">String</td><td class="py-3 px-4">Back to top</td><td class="py-3 px-4">Aria label for accessibility</td></tr>
89
- <tr><td class="py-3 px-4 font-mono text-xs">smooth</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">true</td><td class="py-3 px-4">Enable smooth scroll animation</td></tr>
90
- </tbody>
91
- </table>
92
- </section>
93
-
94
- <!-- Code Example -->
95
- <section>
96
- <h2 class="text-lg font-semibold mb-4">Code Example</h2>
97
- <CodeExample title="Back to Top Usage" :code="codeExample" />
98
- </section>
99
-
100
- <!-- Spacer content for scrolling demo -->
101
- <section v-for="i in 5" :key="i" class="py-12">
102
- <h2 class="text-lg font-semibold mb-4">Sample Content Section {{ i }}</h2>
103
- <p class="text-neutral-600 dark:text-neutral-400">
104
- This is placeholder content to demonstrate the back-to-top button.
105
- Keep scrolling to see the button appear in the bottom-right corner.
106
- </p>
107
- <div class="mt-4 grid grid-cols-3 gap-4">
108
- <div v-for="j in 3" :key="j" class="h-32 rounded-lg bg-neutral-100 dark:bg-neutral-800" />
109
- </div>
110
- </section>
111
-
112
- <!-- End Notice -->
113
- <section class="py-12 text-center">
114
- <p class="text-neutral-500">You've reached the bottom. Click the back-to-top button to scroll up!</p>
115
- </section>
116
- </div>
117
-
118
- <!-- Actual Component -->
119
- <XMarkButtonBackToTop
120
- :threshold="400"
121
- position="bottom-right"
122
- variant="primary"
123
- />
124
- </div>
125
- </template>
126
-
127
- <script setup>
128
- const codeExample = `<!-- Default - bottom right, primary color -->
129
- <XMarkButtonBackToTop />
130
-
131
- <!-- Custom configuration -->
132
- <XMarkButtonBackToTop
133
- :threshold="400"
134
- position="bottom-right"
135
- variant="primary"
136
- />
137
-
138
- <!-- Glass variant, bottom left -->
139
- <XMarkButtonBackToTop
140
- position="bottom-left"
141
- variant="glass"
142
- :threshold="200"
143
- />
144
-
145
- <!-- Neutral variant, centered -->
146
- <XMarkButtonBackToTop
147
- position="bottom-center"
148
- variant="neutral"
149
- icon="i-lucide-chevron-up"
150
- label="Scroll to top"
151
- :smooth="true"
152
- />`
153
- </script>
@@ -1,224 +0,0 @@
1
- <template>
2
- <div class="min-h-screen">
3
- <div class="bg-white dark:bg-neutral-900 border-b border-neutral-200 dark:border-neutral-800 px-8 py-6">
4
- <h1 class="text-2xl font-bold text-neutral-900 dark:text-white">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>