@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,411 @@
|
|
|
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">Section Stitch</h1>
|
|
5
|
+
<p class="mt-2 text-neutral-600 dark:text-neutral-400">Dramatic decorative dividers between page sections.</p>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div class="p-8 space-y-16">
|
|
9
|
+
<!-- Diagonal Variants -->
|
|
10
|
+
<section>
|
|
11
|
+
<h2 class="text-lg font-semibold mb-6">Diagonal Shapes (Full Width)</h2>
|
|
12
|
+
<div class="grid md:grid-cols-2 gap-8">
|
|
13
|
+
<!-- Diagonal -->
|
|
14
|
+
<div>
|
|
15
|
+
<p class="text-sm font-medium mb-2">Diagonal (top-left to bottom-right)</p>
|
|
16
|
+
<div class="rounded-xl overflow-hidden">
|
|
17
|
+
<div class="bg-primary-600 p-8 text-center">
|
|
18
|
+
<p class="text-white font-medium">Hero Section</p>
|
|
19
|
+
</div>
|
|
20
|
+
<XMarkSectionStitch
|
|
21
|
+
variant="diagonal"
|
|
22
|
+
top-color="rgb(79 70 229)"
|
|
23
|
+
bottom-color="rgb(17 24 39)"
|
|
24
|
+
height="xl"
|
|
25
|
+
/>
|
|
26
|
+
<div class="bg-gray-900 p-8 text-center">
|
|
27
|
+
<p class="text-gray-300">Content Section</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- Slant -->
|
|
32
|
+
<div>
|
|
33
|
+
<p class="text-sm font-medium mb-2">Slant (top-right to bottom-left)</p>
|
|
34
|
+
<div class="rounded-xl overflow-hidden">
|
|
35
|
+
<div class="bg-emerald-600 p-8 text-center">
|
|
36
|
+
<p class="text-white font-medium">Hero Section</p>
|
|
37
|
+
</div>
|
|
38
|
+
<XMarkSectionStitch
|
|
39
|
+
variant="slant"
|
|
40
|
+
top-color="rgb(5 150 105)"
|
|
41
|
+
bottom-color="rgb(17 24 39)"
|
|
42
|
+
height="xl"
|
|
43
|
+
/>
|
|
44
|
+
<div class="bg-gray-900 p-8 text-center">
|
|
45
|
+
<p class="text-gray-300">Content Section</p>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</section>
|
|
51
|
+
|
|
52
|
+
<!-- Curved Variants -->
|
|
53
|
+
<section>
|
|
54
|
+
<h2 class="text-lg font-semibold mb-6">Curved Shapes</h2>
|
|
55
|
+
<div class="space-y-0 rounded-xl overflow-hidden">
|
|
56
|
+
<!-- Concave -->
|
|
57
|
+
<div class="bg-neutral-800 p-8 text-center">
|
|
58
|
+
<p class="text-white font-medium">Concave</p>
|
|
59
|
+
<p class="text-neutral-400 text-sm">Curves inward (scoops down)</p>
|
|
60
|
+
</div>
|
|
61
|
+
<XMarkSectionStitch
|
|
62
|
+
variant="concave"
|
|
63
|
+
top-color="rgb(38 38 38)"
|
|
64
|
+
bottom-color="rgb(64 64 64)"
|
|
65
|
+
height="xl"
|
|
66
|
+
/>
|
|
67
|
+
<div class="bg-neutral-700 p-6" />
|
|
68
|
+
|
|
69
|
+
<!-- Convex -->
|
|
70
|
+
<div class="bg-neutral-700 p-8 text-center">
|
|
71
|
+
<p class="text-white font-medium">Convex</p>
|
|
72
|
+
<p class="text-neutral-400 text-sm">Curves outward (bulges up)</p>
|
|
73
|
+
</div>
|
|
74
|
+
<XMarkSectionStitch
|
|
75
|
+
variant="convex"
|
|
76
|
+
top-color="rgb(64 64 64)"
|
|
77
|
+
bottom-color="rgb(82 82 82)"
|
|
78
|
+
height="xl"
|
|
79
|
+
/>
|
|
80
|
+
<div class="bg-neutral-600 p-6" />
|
|
81
|
+
</div>
|
|
82
|
+
</section>
|
|
83
|
+
|
|
84
|
+
<!-- Dramatic Variants -->
|
|
85
|
+
<section>
|
|
86
|
+
<h2 class="text-lg font-semibold mb-6">Dramatic Shapes</h2>
|
|
87
|
+
<div class="space-y-0 rounded-xl overflow-hidden">
|
|
88
|
+
<!-- Clouds -->
|
|
89
|
+
<div class="bg-sky-500 p-8 text-center">
|
|
90
|
+
<p class="text-white font-medium">Clouds</p>
|
|
91
|
+
<p class="text-sky-100 text-sm">Fluffy cloud-like bumps</p>
|
|
92
|
+
</div>
|
|
93
|
+
<XMarkSectionStitch
|
|
94
|
+
variant="clouds"
|
|
95
|
+
top-color="rgb(14 165 233)"
|
|
96
|
+
bottom-color="rgb(2 132 199)"
|
|
97
|
+
height="2xl"
|
|
98
|
+
/>
|
|
99
|
+
<div class="bg-sky-600 p-6" />
|
|
100
|
+
|
|
101
|
+
<!-- Waves -->
|
|
102
|
+
<div class="bg-sky-600 p-8 text-center">
|
|
103
|
+
<p class="text-white font-medium">Waves</p>
|
|
104
|
+
<p class="text-sky-100 text-sm">Flowing wave pattern</p>
|
|
105
|
+
</div>
|
|
106
|
+
<XMarkSectionStitch
|
|
107
|
+
variant="waves"
|
|
108
|
+
top-color="rgb(2 132 199)"
|
|
109
|
+
bottom-color="rgb(3 105 161)"
|
|
110
|
+
height="xl"
|
|
111
|
+
/>
|
|
112
|
+
<div class="bg-sky-700 p-6" />
|
|
113
|
+
|
|
114
|
+
<!-- Peaks -->
|
|
115
|
+
<div class="bg-sky-700 p-8 text-center">
|
|
116
|
+
<p class="text-white font-medium">Peaks</p>
|
|
117
|
+
<p class="text-sky-100 text-sm">Mountain-like jagged edges</p>
|
|
118
|
+
</div>
|
|
119
|
+
<XMarkSectionStitch
|
|
120
|
+
variant="peaks"
|
|
121
|
+
top-color="rgb(3 105 161)"
|
|
122
|
+
bottom-color="rgb(7 89 133)"
|
|
123
|
+
height="xl"
|
|
124
|
+
/>
|
|
125
|
+
<div class="bg-sky-800 p-6" />
|
|
126
|
+
</div>
|
|
127
|
+
</section>
|
|
128
|
+
|
|
129
|
+
<!-- More Variants -->
|
|
130
|
+
<section>
|
|
131
|
+
<h2 class="text-lg font-semibold mb-6">More Shapes</h2>
|
|
132
|
+
<div class="space-y-0 rounded-xl overflow-hidden">
|
|
133
|
+
<!-- Scallop -->
|
|
134
|
+
<div class="bg-purple-500 p-8 text-center">
|
|
135
|
+
<p class="text-white font-medium">Scallop</p>
|
|
136
|
+
<p class="text-purple-100 text-sm">Repeating curved pattern</p>
|
|
137
|
+
</div>
|
|
138
|
+
<XMarkSectionStitch
|
|
139
|
+
variant="scallop"
|
|
140
|
+
top-color="rgb(168 85 247)"
|
|
141
|
+
bottom-color="rgb(147 51 234)"
|
|
142
|
+
height="lg"
|
|
143
|
+
/>
|
|
144
|
+
<div class="bg-purple-600 p-6" />
|
|
145
|
+
|
|
146
|
+
<!-- Arrow -->
|
|
147
|
+
<div class="bg-purple-600 p-8 text-center">
|
|
148
|
+
<p class="text-white font-medium">Arrow</p>
|
|
149
|
+
<p class="text-purple-100 text-sm">Pointed center arrow</p>
|
|
150
|
+
</div>
|
|
151
|
+
<XMarkSectionStitch
|
|
152
|
+
variant="arrow"
|
|
153
|
+
top-color="rgb(147 51 234)"
|
|
154
|
+
bottom-color="rgb(126 34 206)"
|
|
155
|
+
height="xl"
|
|
156
|
+
/>
|
|
157
|
+
<div class="bg-purple-700 p-6" />
|
|
158
|
+
|
|
159
|
+
<!-- Tilt -->
|
|
160
|
+
<div class="bg-purple-700 p-8 text-center">
|
|
161
|
+
<p class="text-white font-medium">Tilt</p>
|
|
162
|
+
<p class="text-purple-100 text-sm">Steep diagonal angle</p>
|
|
163
|
+
</div>
|
|
164
|
+
<XMarkSectionStitch
|
|
165
|
+
variant="tilt"
|
|
166
|
+
top-color="rgb(126 34 206)"
|
|
167
|
+
bottom-color="rgb(107 33 168)"
|
|
168
|
+
height="lg"
|
|
169
|
+
/>
|
|
170
|
+
<div class="bg-purple-800 p-6" />
|
|
171
|
+
</div>
|
|
172
|
+
</section>
|
|
173
|
+
|
|
174
|
+
<!-- Height Sizes -->
|
|
175
|
+
<section>
|
|
176
|
+
<h2 class="text-lg font-semibold mb-6">Height Sizes</h2>
|
|
177
|
+
<div class="grid md:grid-cols-3 lg:grid-cols-6 gap-4">
|
|
178
|
+
<div v-for="size in ['sm', 'md', 'lg', 'xl', '2xl', '3xl']" :key="size">
|
|
179
|
+
<p class="text-sm font-medium mb-2 text-center">{{ size }}</p>
|
|
180
|
+
<div class="bg-primary-500 rounded-t-lg p-4" />
|
|
181
|
+
<XMarkSectionStitch
|
|
182
|
+
variant="concave"
|
|
183
|
+
top-color="rgb(99 102 241)"
|
|
184
|
+
bottom-color="rgb(79 70 229)"
|
|
185
|
+
:height="size"
|
|
186
|
+
/>
|
|
187
|
+
<div class="bg-primary-600 rounded-b-lg p-4" />
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</section>
|
|
191
|
+
|
|
192
|
+
<!-- Reverse Options -->
|
|
193
|
+
<section>
|
|
194
|
+
<h2 class="text-lg font-semibold mb-6">Reverse & Invert</h2>
|
|
195
|
+
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
196
|
+
<div>
|
|
197
|
+
<p class="text-sm font-medium mb-2">Normal</p>
|
|
198
|
+
<div class="rounded-xl overflow-hidden">
|
|
199
|
+
<div class="bg-amber-500 p-4 text-center">
|
|
200
|
+
<p class="text-white text-sm">Top</p>
|
|
201
|
+
</div>
|
|
202
|
+
<XMarkSectionStitch
|
|
203
|
+
variant="diagonal"
|
|
204
|
+
top-color="rgb(245 158 11)"
|
|
205
|
+
bottom-color="rgb(217 119 6)"
|
|
206
|
+
height="lg"
|
|
207
|
+
/>
|
|
208
|
+
<div class="bg-amber-600 p-4 text-center">
|
|
209
|
+
<p class="text-white text-sm">Bottom</p>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
<div>
|
|
214
|
+
<p class="text-sm font-medium mb-2">Reverse (horizontal)</p>
|
|
215
|
+
<div class="rounded-xl overflow-hidden">
|
|
216
|
+
<div class="bg-amber-500 p-4 text-center">
|
|
217
|
+
<p class="text-white text-sm">Top</p>
|
|
218
|
+
</div>
|
|
219
|
+
<XMarkSectionStitch
|
|
220
|
+
variant="diagonal"
|
|
221
|
+
top-color="rgb(245 158 11)"
|
|
222
|
+
bottom-color="rgb(217 119 6)"
|
|
223
|
+
height="lg"
|
|
224
|
+
reverse
|
|
225
|
+
/>
|
|
226
|
+
<div class="bg-amber-600 p-4 text-center">
|
|
227
|
+
<p class="text-white text-sm">Bottom</p>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
<div>
|
|
232
|
+
<p class="text-sm font-medium mb-2">Invert (vertical)</p>
|
|
233
|
+
<div class="rounded-xl overflow-hidden">
|
|
234
|
+
<div class="bg-amber-500 p-4 text-center">
|
|
235
|
+
<p class="text-white text-sm">Top</p>
|
|
236
|
+
</div>
|
|
237
|
+
<XMarkSectionStitch
|
|
238
|
+
variant="diagonal"
|
|
239
|
+
top-color="rgb(245 158 11)"
|
|
240
|
+
bottom-color="rgb(217 119 6)"
|
|
241
|
+
height="lg"
|
|
242
|
+
invert
|
|
243
|
+
/>
|
|
244
|
+
<div class="bg-amber-600 p-4 text-center">
|
|
245
|
+
<p class="text-white text-sm">Bottom</p>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
<div>
|
|
250
|
+
<p class="text-sm font-medium mb-2">Both</p>
|
|
251
|
+
<div class="rounded-xl overflow-hidden">
|
|
252
|
+
<div class="bg-amber-500 p-4 text-center">
|
|
253
|
+
<p class="text-white text-sm">Top</p>
|
|
254
|
+
</div>
|
|
255
|
+
<XMarkSectionStitch
|
|
256
|
+
variant="diagonal"
|
|
257
|
+
top-color="rgb(245 158 11)"
|
|
258
|
+
bottom-color="rgb(217 119 6)"
|
|
259
|
+
height="lg"
|
|
260
|
+
reverse
|
|
261
|
+
invert
|
|
262
|
+
/>
|
|
263
|
+
<div class="bg-amber-600 p-4 text-center">
|
|
264
|
+
<p class="text-white text-sm">Bottom</p>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</section>
|
|
270
|
+
|
|
271
|
+
<!-- With Glow -->
|
|
272
|
+
<section>
|
|
273
|
+
<h2 class="text-lg font-semibold mb-6">With Glow Effect</h2>
|
|
274
|
+
<div class="rounded-xl overflow-hidden">
|
|
275
|
+
<div class="bg-neutral-950 p-12 text-center">
|
|
276
|
+
<p class="text-white text-xl font-bold">Dark Hero Section</p>
|
|
277
|
+
<p class="text-neutral-400 mt-2">With glowing accent divider</p>
|
|
278
|
+
</div>
|
|
279
|
+
<XMarkSectionStitch
|
|
280
|
+
variant="convex"
|
|
281
|
+
top-color="rgb(10 10 10)"
|
|
282
|
+
bottom-color="rgb(23 23 23)"
|
|
283
|
+
glow
|
|
284
|
+
glow-color="rgba(99, 102, 241, 0.6)"
|
|
285
|
+
height="2xl"
|
|
286
|
+
/>
|
|
287
|
+
<div class="bg-neutral-900 p-12 text-center">
|
|
288
|
+
<p class="text-neutral-300">Content continues below</p>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
</section>
|
|
292
|
+
|
|
293
|
+
<!-- Real World Example -->
|
|
294
|
+
<section>
|
|
295
|
+
<h2 class="text-lg font-semibold mb-6">Real World Example</h2>
|
|
296
|
+
<div class="rounded-xl overflow-hidden">
|
|
297
|
+
<div class="bg-gradient-to-b from-primary-600 to-primary-700 p-16 text-center">
|
|
298
|
+
<h3 class="text-3xl font-bold text-white mb-4">Ready to get started?</h3>
|
|
299
|
+
<p class="text-primary-100 text-lg mb-8">Join thousands of happy customers today.</p>
|
|
300
|
+
<UButton size="lg" color="white">Start Free Trial</UButton>
|
|
301
|
+
</div>
|
|
302
|
+
<XMarkSectionStitch
|
|
303
|
+
variant="clouds"
|
|
304
|
+
top-color="rgb(67 56 202)"
|
|
305
|
+
bottom-color="rgb(17 24 39)"
|
|
306
|
+
height="3xl"
|
|
307
|
+
/>
|
|
308
|
+
<div class="bg-gray-900 p-16 text-center">
|
|
309
|
+
<h3 class="text-2xl font-bold text-white mb-4">Footer Section</h3>
|
|
310
|
+
<p class="text-gray-400">Beautiful cloud transition to footer</p>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
</section>
|
|
314
|
+
|
|
315
|
+
<!-- Props -->
|
|
316
|
+
<section>
|
|
317
|
+
<h2 class="text-lg font-semibold mb-4">Props</h2>
|
|
318
|
+
<table class="w-full text-sm">
|
|
319
|
+
<thead>
|
|
320
|
+
<tr class="border-b border-neutral-200 dark:border-neutral-700">
|
|
321
|
+
<th class="text-left py-3 px-4">Prop</th>
|
|
322
|
+
<th class="text-left py-3 px-4">Type</th>
|
|
323
|
+
<th class="text-left py-3 px-4">Default</th>
|
|
324
|
+
<th class="text-left py-3 px-4">Description</th>
|
|
325
|
+
</tr>
|
|
326
|
+
</thead>
|
|
327
|
+
<tbody class="divide-y divide-neutral-200 dark:divide-neutral-700">
|
|
328
|
+
<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">diagonal</td><td class="py-3 px-4">diagonal, slant, concave, convex, clouds, waves, peaks, scallop, arrow, tilt</td></tr>
|
|
329
|
+
<tr><td class="py-3 px-4 font-mono text-xs">topColor</td><td class="py-3 px-4">String</td><td class="py-3 px-4">rgb(243 244 246)</td><td class="py-3 px-4">Top section color (CSS)</td></tr>
|
|
330
|
+
<tr><td class="py-3 px-4 font-mono text-xs">bottomColor</td><td class="py-3 px-4">String</td><td class="py-3 px-4">rgb(249 250 251)</td><td class="py-3 px-4">Bottom section color (CSS)</td></tr>
|
|
331
|
+
<tr><td class="py-3 px-4 font-mono text-xs">height</td><td class="py-3 px-4">String</td><td class="py-3 px-4">md</td><td class="py-3 px-4">sm, md, lg, xl, 2xl, 3xl</td></tr>
|
|
332
|
+
<tr><td class="py-3 px-4 font-mono text-xs">reverse</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">false</td><td class="py-3 px-4">Reverse direction (flip horizontally)</td></tr>
|
|
333
|
+
<tr><td class="py-3 px-4 font-mono text-xs">invert</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">false</td><td class="py-3 px-4">Invert vertically (swap top/bottom)</td></tr>
|
|
334
|
+
<tr><td class="py-3 px-4 font-mono text-xs">glow</td><td class="py-3 px-4">Boolean</td><td class="py-3 px-4">false</td><td class="py-3 px-4">Add glow line at center</td></tr>
|
|
335
|
+
<tr><td class="py-3 px-4 font-mono text-xs">glowColor</td><td class="py-3 px-4">String</td><td class="py-3 px-4">rgba(99, 102, 241, 0.5)</td><td class="py-3 px-4">Glow line color</td></tr>
|
|
336
|
+
</tbody>
|
|
337
|
+
</table>
|
|
338
|
+
</section>
|
|
339
|
+
|
|
340
|
+
<!-- Code Example -->
|
|
341
|
+
<section>
|
|
342
|
+
<h2 class="text-lg font-semibold mb-4">Code Example</h2>
|
|
343
|
+
<CodeExample title="Section Stitch Usage" :code="codeExample" />
|
|
344
|
+
</section>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
</template>
|
|
348
|
+
|
|
349
|
+
<script setup>
|
|
350
|
+
const codeExample = `<!-- Full diagonal (corner to corner) -->
|
|
351
|
+
<XMarkSectionStitch
|
|
352
|
+
variant="diagonal"
|
|
353
|
+
top-color="rgb(79 70 229)"
|
|
354
|
+
bottom-color="rgb(17 24 39)"
|
|
355
|
+
height="xl"
|
|
356
|
+
/>
|
|
357
|
+
|
|
358
|
+
<!-- Slant (opposite direction) -->
|
|
359
|
+
<XMarkSectionStitch
|
|
360
|
+
variant="slant"
|
|
361
|
+
top-color="rgb(5 150 105)"
|
|
362
|
+
bottom-color="rgb(17 24 39)"
|
|
363
|
+
height="xl"
|
|
364
|
+
/>
|
|
365
|
+
|
|
366
|
+
<!-- Diagonal reversed -->
|
|
367
|
+
<XMarkSectionStitch
|
|
368
|
+
variant="diagonal"
|
|
369
|
+
top-color="rgb(79 70 229)"
|
|
370
|
+
bottom-color="rgb(17 24 39)"
|
|
371
|
+
height="xl"
|
|
372
|
+
reverse
|
|
373
|
+
/>
|
|
374
|
+
|
|
375
|
+
<!-- Dramatic cloud transition -->
|
|
376
|
+
<XMarkSectionStitch
|
|
377
|
+
variant="clouds"
|
|
378
|
+
top-color="rgb(79 70 229)"
|
|
379
|
+
bottom-color="rgb(17 24 39)"
|
|
380
|
+
height="3xl"
|
|
381
|
+
/>
|
|
382
|
+
|
|
383
|
+
<!-- Concave (scoops down) -->
|
|
384
|
+
<XMarkSectionStitch
|
|
385
|
+
variant="concave"
|
|
386
|
+
top-color="rgb(255 255 255)"
|
|
387
|
+
bottom-color="rgb(243 244 246)"
|
|
388
|
+
height="xl"
|
|
389
|
+
/>
|
|
390
|
+
|
|
391
|
+
<!-- Convex (bulges up) -->
|
|
392
|
+
<XMarkSectionStitch
|
|
393
|
+
variant="convex"
|
|
394
|
+
top-color="rgb(243 244 246)"
|
|
395
|
+
bottom-color="rgb(229 231 235)"
|
|
396
|
+
height="xl"
|
|
397
|
+
/>
|
|
398
|
+
|
|
399
|
+
<!-- With glow effect -->
|
|
400
|
+
<XMarkSectionStitch
|
|
401
|
+
variant="convex"
|
|
402
|
+
top-color="rgb(10 10 10)"
|
|
403
|
+
bottom-color="rgb(23 23 23)"
|
|
404
|
+
glow
|
|
405
|
+
glow-color="rgba(99, 102, 241, 0.6)"
|
|
406
|
+
height="2xl"
|
|
407
|
+
/>
|
|
408
|
+
|
|
409
|
+
<!-- Available variants -->
|
|
410
|
+
<!-- diagonal, slant, concave, convex, clouds, waves, peaks, scallop, arrow, tilt -->`
|
|
411
|
+
</script>
|
|
@@ -0,0 +1,153 @@
|
|
|
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>
|