@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
package/README.md
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
# @xenterprises/nuxt-x-marketing
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
101
|
+
const legalLinks = [
|
|
102
|
+
{ label: "Privacy Policy", to: "/privacy" },
|
|
103
|
+
{ label: "Terms of Service", to: "/terms" },
|
|
104
|
+
];
|
|
33
105
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
442
|
+
#### XMarkNewsletter
|
|
89
443
|
|
|
90
|
-
|
|
444
|
+
Email signup form with variants.
|
|
91
445
|
|
|
92
|
-
```
|
|
93
|
-
|
|
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
|
-
|
|
487
|
+
#### XMarkBlogList
|
|
97
488
|
|
|
98
|
-
|
|
489
|
+
Blog listing grid with optional featured post.
|
|
99
490
|
|
|
100
|
-
|
|
491
|
+
```vue
|
|
492
|
+
<XMarkBlogList
|
|
493
|
+
:posts="posts"
|
|
494
|
+
:columns="3"
|
|
495
|
+
:show-featured="true"
|
|
496
|
+
/>
|
|
497
|
+
```
|
|
101
498
|
|
|
102
|
-
|
|
499
|
+
#### XMarkBlogDetail
|
|
103
500
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
511
|
+
#### XMarkBlogSidebar
|
|
114
512
|
|
|
115
|
-
|
|
513
|
+
Blog sidebar with search, categories, tags, and recent posts.
|
|
116
514
|
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
####
|
|
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
|
-
|
|
543
|
+
| Prop | Type | Default | Description |
|
|
544
|
+
|------|------|---------|-------------|
|
|
545
|
+
| `author` | `Object` | required | Author data |
|
|
546
|
+
| `variant` | `String` | `'inline'` | `inline`, `sm`, `full`, `card` |
|
|
128
547
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
####
|
|
560
|
+
#### XMarkBlogCTA
|
|
143
561
|
|
|
144
|
-
|
|
562
|
+
In-article newsletter signup.
|
|
145
563
|
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
754
|
+
#### XMarkGDPR
|
|
166
755
|
|
|
167
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
226
|
-
- **Responsive Layouts**: Use `container` and `max-w-screen` utilities for responsive designs.
|
|
861
|
+
---
|
|
227
862
|
|
|
228
863
|
## License
|
|
229
864
|
|
|
230
|
-
|
|
865
|
+
MIT License - see LICENSE file for details.
|