@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
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="py-24">
|
|
3
|
-
<main class="container mx-auto">
|
|
4
|
-
<section
|
|
5
|
-
class="py-24 rounded-3xl border-primary border max-w-screen-2xl"
|
|
6
|
-
:class="cardClass"
|
|
7
|
-
:style="cardStyle"
|
|
8
|
-
>
|
|
9
|
-
<div
|
|
10
|
-
class="flex flex-col items-center justify-center"
|
|
11
|
-
v-if="!submitted"
|
|
12
|
-
>
|
|
13
|
-
<h2 class="text-4xl font-bold text-center text-primary">
|
|
14
|
-
{{ heading }}
|
|
15
|
-
</h2>
|
|
16
|
-
<p class="mt-4 text-center text-gray-800 dark:text-gray-100">
|
|
17
|
-
{{ subheading }}
|
|
18
|
-
</p>
|
|
19
|
-
<UForm
|
|
20
|
-
class="mt-8 flex flex-col items-center justify-center w-full max-w-lg"
|
|
21
|
-
:schema="schema"
|
|
22
|
-
:state="state"
|
|
23
|
-
@submit="onSubmit"
|
|
24
|
-
>
|
|
25
|
-
<div class="w-full text-center">
|
|
26
|
-
<UFormField label="" name="email" class="w-full">
|
|
27
|
-
<UInput
|
|
28
|
-
padded
|
|
29
|
-
placeholder="Enter your email"
|
|
30
|
-
icon="i-heroicons-envelope"
|
|
31
|
-
size="xl"
|
|
32
|
-
class="w-full flex-1"
|
|
33
|
-
v-model="state.email"
|
|
34
|
-
:loading="loading"
|
|
35
|
-
:disabled="disabled"
|
|
36
|
-
/>
|
|
37
|
-
</UFormField>
|
|
38
|
-
<UButton
|
|
39
|
-
type="submit"
|
|
40
|
-
size="xl"
|
|
41
|
-
class="mt-6"
|
|
42
|
-
:label="submitLabel"
|
|
43
|
-
/>
|
|
44
|
-
</div>
|
|
45
|
-
</UForm>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="text-center text-2xl" v-else>
|
|
48
|
-
<div class="text-3xl font-bold">Done!</div>
|
|
49
|
-
You have successfully subscribed.
|
|
50
|
-
</div>
|
|
51
|
-
</section>
|
|
52
|
-
</main>
|
|
53
|
-
</div>
|
|
54
|
-
</template>
|
|
55
|
-
<script setup>
|
|
56
|
-
import { z } from "zod";
|
|
57
|
-
const toast = useToast();
|
|
58
|
-
const props = defineProps({
|
|
59
|
-
heading: {
|
|
60
|
-
type: String,
|
|
61
|
-
default: "Stay Up To Date",
|
|
62
|
-
},
|
|
63
|
-
subheading: {
|
|
64
|
-
type: String,
|
|
65
|
-
default: "Stay up to date with our latest news and product announcements.",
|
|
66
|
-
},
|
|
67
|
-
submitLabel: {
|
|
68
|
-
type: String,
|
|
69
|
-
default: "Subscribe",
|
|
70
|
-
},
|
|
71
|
-
cardClass: {
|
|
72
|
-
type: String,
|
|
73
|
-
default: `bg-fit bg-center bg-no-repeat bg-primary/5`,
|
|
74
|
-
},
|
|
75
|
-
cardStyle: {
|
|
76
|
-
type: String,
|
|
77
|
-
default: `background-image: url('https://cdn.x.enterprises/bg-subscription-poof2.webp');`,
|
|
78
|
-
},
|
|
79
|
-
organizationId: {
|
|
80
|
-
type: String,
|
|
81
|
-
required: true,
|
|
82
|
-
},
|
|
83
|
-
endpoint: {
|
|
84
|
-
type: String,
|
|
85
|
-
default: "https://api.emailmarketingnewsletters.com",
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
const schema = z.object({
|
|
90
|
-
email: z.string().email("Invalid email"),
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// type Schema = z.output<typeof schema>;
|
|
94
|
-
|
|
95
|
-
const state = reactive({
|
|
96
|
-
email: undefined,
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
async function onSubmit(event) {
|
|
100
|
-
loading.value = true;
|
|
101
|
-
disabled.value = true;
|
|
102
|
-
try {
|
|
103
|
-
await $fetch(`${props.endpoint}/public/subscriptions/subscribe`, {
|
|
104
|
-
method: "POST",
|
|
105
|
-
body: JSON.stringify({
|
|
106
|
-
email: state.email,
|
|
107
|
-
organizationId: props.organizationId,
|
|
108
|
-
}),
|
|
109
|
-
});
|
|
110
|
-
submitted.value = true;
|
|
111
|
-
toast.add({
|
|
112
|
-
icon: "i-heroicons-check-badge",
|
|
113
|
-
title: "You have successfully subscribed to our newsletter.",
|
|
114
|
-
});
|
|
115
|
-
} catch (error) {
|
|
116
|
-
console.log(error);
|
|
117
|
-
toast.add({
|
|
118
|
-
icon: "i-heroicons-exclamation-circle-solid",
|
|
119
|
-
title: `An error occurred or you've already subscribed.`,
|
|
120
|
-
});
|
|
121
|
-
} finally {
|
|
122
|
-
loading.value = false;
|
|
123
|
-
disabled.value = false;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
const loading = ref(false);
|
|
127
|
-
const disabled = ref(false);
|
|
128
|
-
const submitted = ref(false);
|
|
129
|
-
</script>
|