@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.
Files changed (115) hide show
  1. package/.claude/settings.local.json +22 -0
  2. package/.playground/app.config.ts +44 -45
  3. package/.playground/app.vue +263 -0
  4. package/.playground/components/AppFooter.vue +103 -0
  5. package/.playground/components/AppHeader.vue +41 -0
  6. package/.playground/components/CodeExample.vue +70 -0
  7. package/.playground/components/ComponentPlayground.vue +117 -0
  8. package/.playground/components/DocsHeader.vue +19 -0
  9. package/.playground/layouts/default.vue +13 -3
  10. package/.playground/layouts/docs-layout.vue +161 -0
  11. package/.playground/layouts/docs.vue +11 -0
  12. package/.playground/package-lock.json +6 -0
  13. package/.playground/pages/blog/author.vue +145 -0
  14. package/.playground/pages/blog/card.vue +149 -0
  15. package/.playground/pages/blog/cta.vue +131 -0
  16. package/.playground/pages/blog/detail.vue +379 -0
  17. package/.playground/pages/blog/list.vue +261 -0
  18. package/.playground/pages/blog/navigation.vue +228 -0
  19. package/.playground/pages/blog/sidebar.vue +279 -0
  20. package/.playground/pages/config.vue +289 -0
  21. package/.playground/pages/content/comparison.vue +253 -0
  22. package/.playground/pages/content/cta.vue +245 -0
  23. package/.playground/pages/content/features.vue +217 -0
  24. package/.playground/pages/content/newsletter-section.vue +260 -0
  25. package/.playground/pages/content/newsletter.vue +200 -0
  26. package/.playground/pages/content/pricing.vue +335 -0
  27. package/.playground/pages/content/testimonials.vue +188 -0
  28. package/.playground/pages/hero.vue +257 -0
  29. package/.playground/pages/index.vue +379 -2
  30. package/.playground/pages/layout/footer.vue +210 -0
  31. package/.playground/pages/layout/legal-footer.vue +121 -0
  32. package/.playground/pages/layout/navbar.vue +285 -0
  33. package/.playground/pages/layout/section.vue +266 -0
  34. package/.playground/pages/layout/x-legal.vue +199 -0
  35. package/.playground/pages/modals/feature-modal.vue +320 -0
  36. package/.playground/pages/modals/image-lightbox.vue +277 -0
  37. package/.playground/pages/modals/video-modal.vue +222 -0
  38. package/.playground/pages/notifications/announcement-bar.vue +164 -0
  39. package/.playground/pages/notifications/cookie-banner.vue +210 -0
  40. package/.playground/pages/notifications/cookie-toast.vue +143 -0
  41. package/.playground/pages/notifications/gdpr.vue +276 -0
  42. package/.playground/pages/notifications/social-proof-toast.vue +255 -0
  43. package/.playground/pages/ui/badge.vue +161 -0
  44. package/.playground/pages/ui/bg-pattern.vue +177 -0
  45. package/.playground/pages/ui/glass-card.vue +179 -0
  46. package/.playground/pages/ui/glow-divider.vue +179 -0
  47. package/.playground/pages/ui/promo-card.vue +259 -0
  48. package/.playground/pages/ui/section-stitch.vue +411 -0
  49. package/.playground/pages/utilities/back-to-top.vue +153 -0
  50. package/.playground/pages/utilities/popup-chat.vue +224 -0
  51. package/README.md +799 -164
  52. package/app/app.config.ts +88 -2
  53. package/app/app.vue +106 -11
  54. package/app/assets/css/x-marketing.css +668 -0
  55. package/app/components/X/Footer/XLegal/index.vue +63 -26
  56. package/app/components/X/Footer/index.vue +89 -89
  57. package/app/components/X/Header/App.vue +63 -0
  58. package/app/components/X/Mark/Blog/Author.vue +170 -0
  59. package/app/components/X/Mark/Blog/CTANewsletter.vue +197 -0
  60. package/app/components/X/Mark/Blog/Card.vue +117 -0
  61. package/app/components/X/Mark/Blog/Detail.vue +240 -0
  62. package/app/components/X/Mark/Blog/List.vue +156 -0
  63. package/app/components/X/Mark/Blog/Navigation.vue +100 -0
  64. package/app/components/X/Mark/Blog/Sidebar.vue +160 -0
  65. package/app/components/X/Mark/Button/BackToTop.vue +99 -0
  66. package/app/components/X/Mark/CTA/index.vue +294 -0
  67. package/app/components/X/Mark/Card/Glass.vue +64 -0
  68. package/app/components/X/Mark/Card/Promo.vue +164 -0
  69. package/app/components/X/Mark/Divider/Glow.vue +113 -0
  70. package/app/components/X/Mark/Features/index.vue +194 -0
  71. package/app/components/X/Mark/Hero/index.vue +217 -0
  72. package/app/components/X/Mark/Layout/AnnouncementBar.vue +139 -0
  73. package/app/components/X/Mark/Layout/Footer.vue +160 -0
  74. package/app/components/X/Mark/Layout/FooterLegal.vue +42 -0
  75. package/app/components/X/Mark/Layout/Navbar.vue +267 -0
  76. package/app/components/X/Mark/Modal/Chat.vue +151 -0
  77. package/app/components/X/Mark/Modal/Feature.vue +197 -0
  78. package/app/components/X/Mark/Modal/Image.vue +226 -0
  79. package/app/components/X/Mark/Modal/Video.vue +203 -0
  80. package/app/components/X/Mark/Modal/index.vue +133 -0
  81. package/app/components/X/Mark/Newsletter/Form.vue +174 -0
  82. package/app/components/X/Mark/Pattern/Bg.vue +86 -0
  83. package/app/components/X/Mark/Pricing/Comparison.vue +126 -0
  84. package/app/components/X/Mark/Pricing/Plans.vue +181 -0
  85. package/app/components/X/Mark/Privacy/CookieBanner.vue +112 -0
  86. package/app/components/X/Mark/Privacy/CookieToast.vue +43 -0
  87. package/app/components/X/Mark/Privacy/GDPR.vue +245 -0
  88. package/app/components/X/Mark/Section/Newsletter.vue +183 -0
  89. package/app/components/X/Mark/Section/Stitch.vue +156 -0
  90. package/app/components/X/Mark/Section/index.vue +151 -0
  91. package/app/components/X/Mark/SocialProof/Badge.vue +102 -0
  92. package/app/components/X/Mark/SocialProof/Testimonials.vue +326 -0
  93. package/app/components/X/Mark/SocialProof/Toast.vue +136 -0
  94. package/app/components/X/Mark/_archive/Pattern/Background.vue +83 -0
  95. package/app/components/X/Mark/_archive/Pattern/CheckBg.vue +35 -0
  96. package/app/components/X/Mark/_archive/Pattern/CircuitBg.vue +41 -0
  97. package/app/components/X/Mark/_archive/Pattern/DotsBg.vue +35 -0
  98. package/app/components/X/Mark/_archive/Pattern/GlowDivider.vue +86 -0
  99. package/app/components/X/Mark/_archive/Pattern/HexBg.vue +35 -0
  100. package/app/components/X/Mark/_archive/Pattern/PlaidBg.vue +47 -0
  101. package/app/components/X/Mark/_archive/Pattern/SectionStitch.vue +168 -0
  102. package/app/components/X/Mark/_archive/Pattern/WaveBg.vue +41 -0
  103. package/app/components/X/_archive/Newsletter/Form.vue +123 -0
  104. package/app/components/X/_archive/Newsletter/Section.vue +131 -0
  105. package/app/composables/useParallax.ts +124 -0
  106. package/app/composables/useScrollReveal.ts +92 -0
  107. package/app/pages/index.vue +210 -0
  108. package/app/plugins/marketing.client.ts +13 -0
  109. package/app/types/marketing.d.ts +268 -0
  110. package/componentList.json +511 -0
  111. package/nuxt.config.ts +6 -13
  112. package/package.json +21 -9
  113. package/.editorconfig +0 -12
  114. package/app/assets/css/main.css +0 -2
  115. package/app/components/X/Marketing/Sections/EmailSubscription/index.vue +0 -129
package/app/app.config.ts CHANGED
@@ -1,9 +1,31 @@
1
1
  export default defineAppConfig({
2
2
  ui: {
3
- primary: "sky",
3
+ primary: "brand",
4
4
  header: {
5
5
  container: "max-w-screen-2xl container mx-auto",
6
6
  },
7
+ colors: {
8
+ primary: "brand",
9
+ secondary: "deep",
10
+ neutral: "zinc",
11
+ },
12
+ button: {
13
+ slots: {
14
+ base: "font-medium tracking-wide",
15
+ },
16
+ variants: {
17
+ size: {
18
+ lg: "px-8 py-4 text-base",
19
+ xl: "px-10 py-5 text-lg",
20
+ },
21
+ },
22
+ },
23
+ card: {
24
+ slots: {
25
+ root: "overflow-hidden",
26
+ body: "p-0",
27
+ },
28
+ },
7
29
  },
8
30
  xMarketing: {
9
31
  name: "X Enterprises",
@@ -82,11 +104,75 @@ declare module "@nuxt/schema" {
82
104
  square?: boolean;
83
105
  color?: string;
84
106
  }[];
85
- links?: {
107
+ links?: NavLink[];
108
+ };
109
+ };
110
+ footer?: {
111
+ body?: string;
112
+ bg?: {
113
+ color?: string;
114
+ img?: {
115
+ src?: string;
116
+ alt?: string;
117
+ };
118
+ };
119
+ logo?: {
120
+ src?: string;
121
+ alt?: string;
122
+ };
123
+ socials?: {
124
+ name: string;
125
+ url: string;
126
+ icon: string;
127
+ }[];
128
+ columns?: {
129
+ headerLabel: string;
130
+ links: {
86
131
  label: string;
87
132
  to: string;
88
133
  target?: string;
89
134
  }[];
135
+ }[];
136
+ };
137
+ };
138
+ }
139
+ }
140
+
141
+ interface NavLink {
142
+ label: string;
143
+ to?: string;
144
+ target?: string;
145
+ children?: NavLink[];
146
+ }
147
+
148
+ declare module "@nuxt/schema" {
149
+ interface AppConfigInput {
150
+ xMarketing?: {
151
+ /** Project name */
152
+ name?: string;
153
+ config?: {
154
+ markerProjectId?: string;
155
+ emailMarketingNewsletters?: {
156
+ organizationId?: string;
157
+ };
158
+ };
159
+ header?: {
160
+ logo?: {
161
+ src?: string;
162
+ srcDark?: string;
163
+ alt?: string;
164
+ };
165
+ nav?: {
166
+ buttons?: {
167
+ label: string;
168
+ to: string;
169
+ icon?: string;
170
+ target?: string;
171
+ variant?: string;
172
+ square?: boolean;
173
+ color?: string;
174
+ }[];
175
+ links?: NavLink[];
90
176
  };
91
177
  };
92
178
  footer?: {
package/app/app.vue CHANGED
@@ -1,31 +1,126 @@
1
1
  <template>
2
- <main class="min-h-screen flex flex-col justify-between">
3
- <XHeaderNav />
4
- <section class="flex-grow">
2
+ <div class="min-h-screen flex flex-col">
3
+ <!-- Navbar -->
4
+ <XMarkNavbar
5
+ :links="navLinks"
6
+ :logo-light="logoLight"
7
+ :logo-dark="logoDark"
8
+ logo-alt="Company"
9
+ >
10
+ <template #actions>
11
+ <UButton variant="ghost" color="neutral">Sign In</UButton>
12
+ <UButton color="primary">Get Started</UButton>
13
+ </template>
14
+ </XMarkNavbar>
15
+
16
+ <!-- Main Content -->
17
+ <main class="flex-grow">
5
18
  <NuxtLoadingIndicator />
6
19
  <UApp>
7
20
  <NuxtLayout>
8
21
  <NuxtPage />
9
22
  </NuxtLayout>
10
23
  </UApp>
11
- </section>
12
- <section>
13
- <XFooter />
14
- <XFooterXLegal />
15
- </section>
16
- </main>
24
+ </main>
25
+
26
+ <!-- Newsletter Section -->
27
+ <XMarkSection bg="subtle" padding="lg">
28
+ <XMarkNewsletter
29
+ title="Stay in the loop"
30
+ description="Get the latest updates, tips, and insights delivered to your inbox."
31
+ variant="default"
32
+ @submit="handleNewsletterSubmit"
33
+ />
34
+ </XMarkSection>
35
+
36
+ <!-- Footer -->
37
+ <XMarkFooter
38
+ :logo="logoDark"
39
+ logo-alt="Company"
40
+ description="Building the future of modern software."
41
+ :social="socialLinks"
42
+ :columns="footerColumns"
43
+ :legal-links="legalLinks"
44
+ />
45
+ </div>
17
46
  </template>
18
47
  <script setup>
19
- import { ref, onMounted } from "vue";
48
+ import { onMounted } from "vue";
20
49
  import markerSDK from "@marker.io/browser";
21
50
 
22
51
  const appConfig = useAppConfig();
52
+
23
53
  useSeoMeta({
24
54
  titleTemplate: `%s`,
25
55
  });
56
+
57
+ // Logo configuration (replace with actual logos)
58
+ const logoLight = "/logo-white.svg";
59
+ const logoDark = "/logo-dark.svg";
60
+
61
+ // Navigation links
62
+ const navLinks = [
63
+ { label: "Features", to: "/#features" },
64
+ { label: "Pricing", to: "/pricing" },
65
+ { label: "Blog", to: "/blog" },
66
+ { label: "About", to: "/about" },
67
+ ];
68
+
69
+ // Social links
70
+ const socialLinks = [
71
+ { name: "Twitter", href: "https://twitter.com", icon: "i-lucide-twitter" },
72
+ { name: "GitHub", href: "https://github.com", icon: "i-lucide-github" },
73
+ { name: "LinkedIn", href: "https://linkedin.com", icon: "i-lucide-linkedin" },
74
+ ];
75
+
76
+ // Footer columns
77
+ const footerColumns = [
78
+ {
79
+ title: "Product",
80
+ links: [
81
+ { label: "Features", to: "/#features" },
82
+ { label: "Pricing", to: "/pricing" },
83
+ { label: "Integrations", to: "/integrations" },
84
+ { label: "Changelog", to: "/changelog" },
85
+ ],
86
+ },
87
+ {
88
+ title: "Company",
89
+ links: [
90
+ { label: "About", to: "/about" },
91
+ { label: "Blog", to: "/blog" },
92
+ { label: "Careers", to: "/careers" },
93
+ { label: "Contact", to: "/contact" },
94
+ ],
95
+ },
96
+ {
97
+ title: "Resources",
98
+ links: [
99
+ { label: "Documentation", to: "/docs" },
100
+ { label: "Help Center", to: "/help" },
101
+ { label: "Community", to: "/community" },
102
+ { label: "Status", to: "/status" },
103
+ ],
104
+ },
105
+ ];
106
+
107
+ // Legal links
108
+ const legalLinks = [
109
+ { label: "Privacy Policy", to: "/privacy" },
110
+ { label: "Terms of Service", to: "/terms" },
111
+ { label: "Cookie Policy", to: "/cookies" },
112
+ ];
113
+
114
+ // Newsletter submit handler
115
+ const handleNewsletterSubmit = (email) => {
116
+ console.log("Newsletter signup:", email);
117
+ // Implement your newsletter signup logic here
118
+ };
119
+
120
+ // Marker.io widget
26
121
  if (appConfig && appConfig?.xMarketing?.config?.markerProjectId) {
27
122
  onMounted(() => {
28
- const widget = markerSDK.loadWidget({
123
+ markerSDK.loadWidget({
29
124
  project: appConfig?.xMarketing?.config?.markerProjectId,
30
125
  });
31
126
  });