@victusvinceere/saas-landing 0.1.0 → 0.1.1
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/README.md +332 -0
- package/dist/components/index.d.mts +42 -121
- package/dist/components/index.d.ts +42 -121
- package/dist/components/index.js +259 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +256 -1
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.d.mts +135 -4
- package/dist/index.d.ts +135 -4
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# @victusvinceere/saas-landing
|
|
2
|
+
|
|
3
|
+
Landing page and marketing components for SaaS applications.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @victusvinceere/saas-landing
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
### Navbar
|
|
14
|
+
|
|
15
|
+
Navigation bar with brand, links, and CTA button.
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { Navbar } from "@victusvinceere/saas-landing/components";
|
|
19
|
+
|
|
20
|
+
<Navbar
|
|
21
|
+
brand="MySaaS"
|
|
22
|
+
links={[
|
|
23
|
+
{ label: "Features", href: "#features" },
|
|
24
|
+
{ label: "Pricing", href: "#pricing" },
|
|
25
|
+
{ label: "FAQ", href: "#faq" },
|
|
26
|
+
]}
|
|
27
|
+
cta={{ label: "Get Started", href: "#waitlist" }}
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Hero
|
|
32
|
+
|
|
33
|
+
Hero section with badge, title, description, and CTAs.
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
import { Hero } from "@victusvinceere/saas-landing/components";
|
|
37
|
+
|
|
38
|
+
<Hero
|
|
39
|
+
badge="Now in Beta"
|
|
40
|
+
title="Your Amazing"
|
|
41
|
+
highlight="Product"
|
|
42
|
+
description="The best solution for your needs."
|
|
43
|
+
primaryCta={{ label: "Get Started", href: "#waitlist" }}
|
|
44
|
+
secondaryCta={{ label: "Learn More", href: "#features" }}
|
|
45
|
+
/>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Features
|
|
49
|
+
|
|
50
|
+
Feature grid with icons and descriptions.
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
import { Features } from "@victusvinceere/saas-landing/components";
|
|
54
|
+
|
|
55
|
+
<Features
|
|
56
|
+
title="Features"
|
|
57
|
+
subtitle="Everything you need to succeed"
|
|
58
|
+
features={[
|
|
59
|
+
{
|
|
60
|
+
icon: "Zap",
|
|
61
|
+
title: "Lightning Fast",
|
|
62
|
+
description: "Built for speed and performance.",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
icon: "Shield",
|
|
66
|
+
title: "Secure",
|
|
67
|
+
description: "Enterprise-grade security.",
|
|
68
|
+
},
|
|
69
|
+
]}
|
|
70
|
+
/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Pricing
|
|
74
|
+
|
|
75
|
+
Pricing plans with feature lists.
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
import { Pricing } from "@victusvinceere/saas-landing/components";
|
|
79
|
+
|
|
80
|
+
<Pricing
|
|
81
|
+
title="Simple Pricing"
|
|
82
|
+
subtitle="Choose your plan"
|
|
83
|
+
plans={[
|
|
84
|
+
{
|
|
85
|
+
name: "Starter",
|
|
86
|
+
price: 29,
|
|
87
|
+
period: "mo",
|
|
88
|
+
description: "For individuals",
|
|
89
|
+
features: ["Feature 1", "Feature 2"],
|
|
90
|
+
cta: { label: "Get Started", href: "#" },
|
|
91
|
+
highlighted: false,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "Pro",
|
|
95
|
+
price: 79,
|
|
96
|
+
period: "mo",
|
|
97
|
+
description: "For teams",
|
|
98
|
+
features: ["Everything in Starter", "Feature 3"],
|
|
99
|
+
cta: { label: "Get Started", href: "#" },
|
|
100
|
+
highlighted: true,
|
|
101
|
+
},
|
|
102
|
+
]}
|
|
103
|
+
/>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Faq
|
|
107
|
+
|
|
108
|
+
Accordion FAQ section.
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
import { Faq } from "@victusvinceere/saas-landing/components";
|
|
112
|
+
|
|
113
|
+
<Faq
|
|
114
|
+
title="Frequently Asked Questions"
|
|
115
|
+
subtitle="Everything you need to know"
|
|
116
|
+
items={[
|
|
117
|
+
{
|
|
118
|
+
question: "What is this product?",
|
|
119
|
+
answer: "It's the best SaaS solution.",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
question: "How much does it cost?",
|
|
123
|
+
answer: "Plans start at $29/month.",
|
|
124
|
+
},
|
|
125
|
+
]}
|
|
126
|
+
/>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Testimonials
|
|
130
|
+
|
|
131
|
+
Customer testimonials in a grid layout.
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
import { Testimonials } from "@victusvinceere/saas-landing/components";
|
|
135
|
+
|
|
136
|
+
<Testimonials
|
|
137
|
+
title="What Our Customers Say"
|
|
138
|
+
subtitle="Don't just take our word for it"
|
|
139
|
+
testimonials={[
|
|
140
|
+
{
|
|
141
|
+
quote: "This product changed everything for us!",
|
|
142
|
+
author: "Jane Smith",
|
|
143
|
+
role: "CEO",
|
|
144
|
+
company: "TechCorp",
|
|
145
|
+
initial: "J",
|
|
146
|
+
color: "from-blue-400 to-blue-600",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
quote: "The best investment we've made.",
|
|
150
|
+
author: "John Doe",
|
|
151
|
+
role: "CTO",
|
|
152
|
+
company: "StartupXYZ",
|
|
153
|
+
image: "/avatars/john.jpg", // Or use initial/color
|
|
154
|
+
},
|
|
155
|
+
]}
|
|
156
|
+
/>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Waitlist
|
|
160
|
+
|
|
161
|
+
Email capture form with optional business type selector.
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
import { Waitlist } from "@victusvinceere/saas-landing/components";
|
|
165
|
+
|
|
166
|
+
<Waitlist
|
|
167
|
+
title="Join the Waitlist"
|
|
168
|
+
description="Be the first to know when we launch."
|
|
169
|
+
badge="Early Access"
|
|
170
|
+
submitText="Join Waitlist"
|
|
171
|
+
successMessage="You're on the list!"
|
|
172
|
+
endpoint="/api/waitlist"
|
|
173
|
+
showBusinessType={true}
|
|
174
|
+
businessTypes={[
|
|
175
|
+
{ value: "startup", label: "Startup" },
|
|
176
|
+
{ value: "enterprise", label: "Enterprise" },
|
|
177
|
+
]}
|
|
178
|
+
tracking={{
|
|
179
|
+
onFormStart: () => console.log("Form started"),
|
|
180
|
+
onSubmit: (success, businessType) => console.log("Submitted", success),
|
|
181
|
+
}}
|
|
182
|
+
/>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Cta
|
|
186
|
+
|
|
187
|
+
Call-to-action section.
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
import { Cta } from "@victusvinceere/saas-landing/components";
|
|
191
|
+
|
|
192
|
+
<Cta
|
|
193
|
+
title="Ready to get started?"
|
|
194
|
+
description="Join thousands of happy customers."
|
|
195
|
+
cta={{ label: "Start Free Trial", href: "/signup" }}
|
|
196
|
+
/>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Footer
|
|
200
|
+
|
|
201
|
+
Footer with brand and links.
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
import { Footer } from "@victusvinceere/saas-landing/components";
|
|
205
|
+
|
|
206
|
+
<Footer
|
|
207
|
+
brand="MySaaS"
|
|
208
|
+
links={[
|
|
209
|
+
{ label: "Privacy", href: "/privacy" },
|
|
210
|
+
{ label: "Terms", href: "/terms" },
|
|
211
|
+
{ label: "Contact", href: "mailto:hello@example.com" },
|
|
212
|
+
]}
|
|
213
|
+
copyright="© 2024 MySaaS. All rights reserved."
|
|
214
|
+
/>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Full Page Example
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
"use client";
|
|
221
|
+
|
|
222
|
+
import {
|
|
223
|
+
Navbar,
|
|
224
|
+
Hero,
|
|
225
|
+
Features,
|
|
226
|
+
Pricing,
|
|
227
|
+
Faq,
|
|
228
|
+
Testimonials,
|
|
229
|
+
Waitlist,
|
|
230
|
+
Footer,
|
|
231
|
+
} from "@victusvinceere/saas-landing/components";
|
|
232
|
+
import { siteConfig } from "@/config/site";
|
|
233
|
+
|
|
234
|
+
export default function LandingPage() {
|
|
235
|
+
return (
|
|
236
|
+
<div className="min-h-screen">
|
|
237
|
+
<Navbar
|
|
238
|
+
brand={siteConfig.name}
|
|
239
|
+
links={siteConfig.navigation}
|
|
240
|
+
cta={{ label: "Get Started", href: "#waitlist" }}
|
|
241
|
+
/>
|
|
242
|
+
|
|
243
|
+
<Hero
|
|
244
|
+
badge={siteConfig.hero.badge}
|
|
245
|
+
title={siteConfig.hero.title}
|
|
246
|
+
highlight={siteConfig.hero.highlight}
|
|
247
|
+
description={siteConfig.hero.description}
|
|
248
|
+
primaryCta={siteConfig.hero.cta.primary}
|
|
249
|
+
secondaryCta={siteConfig.hero.cta.secondary}
|
|
250
|
+
/>
|
|
251
|
+
|
|
252
|
+
<Features
|
|
253
|
+
title="Features"
|
|
254
|
+
subtitle="Everything you need"
|
|
255
|
+
features={siteConfig.features}
|
|
256
|
+
/>
|
|
257
|
+
|
|
258
|
+
<Pricing
|
|
259
|
+
title={siteConfig.pricing.title}
|
|
260
|
+
subtitle={siteConfig.pricing.subtitle}
|
|
261
|
+
plans={siteConfig.pricing.plans}
|
|
262
|
+
/>
|
|
263
|
+
|
|
264
|
+
<Testimonials
|
|
265
|
+
title="What Customers Say"
|
|
266
|
+
testimonials={siteConfig.testimonials}
|
|
267
|
+
/>
|
|
268
|
+
|
|
269
|
+
<Faq
|
|
270
|
+
title="FAQ"
|
|
271
|
+
items={siteConfig.faq}
|
|
272
|
+
/>
|
|
273
|
+
|
|
274
|
+
<Waitlist
|
|
275
|
+
title={siteConfig.waitlist.title}
|
|
276
|
+
description={siteConfig.waitlist.description}
|
|
277
|
+
badge={siteConfig.waitlist.badge}
|
|
278
|
+
submitText={siteConfig.waitlist.submitText}
|
|
279
|
+
businessTypes={siteConfig.waitlist.businessTypes}
|
|
280
|
+
/>
|
|
281
|
+
|
|
282
|
+
<Footer
|
|
283
|
+
brand={siteConfig.name}
|
|
284
|
+
links={siteConfig.footer.links}
|
|
285
|
+
copyright={`© ${new Date().getFullYear()} ${siteConfig.name}`}
|
|
286
|
+
/>
|
|
287
|
+
</div>
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## TypeScript Types
|
|
293
|
+
|
|
294
|
+
All components export their prop types:
|
|
295
|
+
|
|
296
|
+
```tsx
|
|
297
|
+
import type {
|
|
298
|
+
NavbarProps,
|
|
299
|
+
NavLink,
|
|
300
|
+
HeroProps,
|
|
301
|
+
FeaturesProps,
|
|
302
|
+
Feature,
|
|
303
|
+
PricingProps,
|
|
304
|
+
PricingPlan,
|
|
305
|
+
FaqProps,
|
|
306
|
+
FaqItem,
|
|
307
|
+
TestimonialsProps,
|
|
308
|
+
Testimonial,
|
|
309
|
+
WaitlistProps,
|
|
310
|
+
CtaProps,
|
|
311
|
+
FooterProps,
|
|
312
|
+
FooterLink,
|
|
313
|
+
} from "@victusvinceere/saas-landing/components";
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Styling
|
|
317
|
+
|
|
318
|
+
Components use Tailwind CSS and CSS variables for theming. Make sure your `tailwind.config.js` includes the package:
|
|
319
|
+
|
|
320
|
+
```js
|
|
321
|
+
module.exports = {
|
|
322
|
+
content: [
|
|
323
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
324
|
+
"./node_modules/@victusvinceere/saas-landing/dist/**/*.{js,mjs}",
|
|
325
|
+
],
|
|
326
|
+
// ...
|
|
327
|
+
};
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## License
|
|
331
|
+
|
|
332
|
+
MIT
|
|
@@ -1,135 +1,56 @@
|
|
|
1
|
+
export { Cta, CtaProps, Faq, FaqItem, FaqProps, Feature, Features, FeaturesProps, Footer, FooterColumn, FooterLink, FooterProps, Hero, HeroProps, HeroStat, NavLink, Navbar, NavbarProps, Pricing, PricingPlan, PricingProps } from '../index.mjs';
|
|
1
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
interface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
icon?: LucideIcon;
|
|
13
|
-
};
|
|
14
|
-
title: ReactNode;
|
|
15
|
-
subtitle: string;
|
|
16
|
-
stats?: HeroStat[];
|
|
17
|
-
primaryCta?: {
|
|
18
|
-
text: string;
|
|
19
|
-
href: string;
|
|
20
|
-
};
|
|
21
|
-
secondaryCta?: {
|
|
22
|
-
text: string;
|
|
23
|
-
href: string;
|
|
24
|
-
};
|
|
25
|
-
trustedBy?: string[];
|
|
26
|
-
children?: ReactNode;
|
|
27
|
-
className?: string;
|
|
28
|
-
}
|
|
29
|
-
declare function Hero({ badge, title, subtitle, stats, primaryCta, secondaryCta, trustedBy, children, className, }: HeroProps): react_jsx_runtime.JSX.Element;
|
|
30
|
-
|
|
31
|
-
interface Feature {
|
|
32
|
-
name: string;
|
|
33
|
-
description: string;
|
|
34
|
-
icon: LucideIcon;
|
|
3
|
+
import 'lucide-react';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface Testimonial {
|
|
7
|
+
quote: string;
|
|
8
|
+
author: string;
|
|
9
|
+
role: string;
|
|
10
|
+
company?: string;
|
|
11
|
+
initial?: string;
|
|
12
|
+
image?: string;
|
|
35
13
|
color?: string;
|
|
36
|
-
bg?: string;
|
|
37
|
-
}
|
|
38
|
-
interface FeaturesProps {
|
|
39
|
-
badge?: string;
|
|
40
|
-
title: string;
|
|
41
|
-
subtitle?: string;
|
|
42
|
-
features: Feature[];
|
|
43
|
-
techStack?: Array<{
|
|
44
|
-
name: string;
|
|
45
|
-
color: string;
|
|
46
|
-
textColor?: string;
|
|
47
|
-
label: string;
|
|
48
|
-
}>;
|
|
49
|
-
className?: string;
|
|
50
14
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
interface PricingPlan {
|
|
54
|
-
name: string;
|
|
55
|
-
price: string;
|
|
56
|
-
period?: string;
|
|
57
|
-
description: string;
|
|
58
|
-
features: string[];
|
|
59
|
-
cta: string;
|
|
60
|
-
href: string;
|
|
61
|
-
popular?: boolean;
|
|
62
|
-
}
|
|
63
|
-
interface PricingProps {
|
|
15
|
+
interface TestimonialsProps {
|
|
64
16
|
title?: string;
|
|
65
17
|
subtitle?: string;
|
|
66
|
-
|
|
18
|
+
testimonials: Testimonial[];
|
|
67
19
|
className?: string;
|
|
68
20
|
}
|
|
69
|
-
declare function
|
|
21
|
+
declare function Testimonials({ title, subtitle, testimonials, className, }: TestimonialsProps): react_jsx_runtime.JSX.Element;
|
|
70
22
|
|
|
71
|
-
interface
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
interface FaqProps {
|
|
23
|
+
interface WaitlistProps {
|
|
24
|
+
/** API endpoint for waitlist signup */
|
|
25
|
+
endpoint?: string;
|
|
26
|
+
/** Section title */
|
|
76
27
|
title?: string;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
secondaryCta?: {
|
|
91
|
-
text: string;
|
|
92
|
-
href: string;
|
|
93
|
-
};
|
|
94
|
-
className?: string;
|
|
95
|
-
}
|
|
96
|
-
declare function Cta({ title, subtitle, primaryCta, secondaryCta, className, }: CtaProps): react_jsx_runtime.JSX.Element;
|
|
97
|
-
|
|
98
|
-
interface FooterLink {
|
|
99
|
-
label: string;
|
|
100
|
-
href: string;
|
|
101
|
-
}
|
|
102
|
-
interface FooterColumn {
|
|
103
|
-
title: string;
|
|
104
|
-
links: FooterLink[];
|
|
105
|
-
}
|
|
106
|
-
interface FooterProps {
|
|
107
|
-
logo?: ReactNode;
|
|
108
|
-
siteName?: string;
|
|
109
|
-
description?: string;
|
|
110
|
-
columns?: FooterColumn[];
|
|
111
|
-
socialLinks?: Array<{
|
|
112
|
-
icon: ReactNode;
|
|
113
|
-
href: string;
|
|
28
|
+
/** Section description */
|
|
29
|
+
description?: React.ReactNode;
|
|
30
|
+
/** Badge text */
|
|
31
|
+
badge?: string;
|
|
32
|
+
/** Submit button text */
|
|
33
|
+
submitText?: string;
|
|
34
|
+
/** Success message */
|
|
35
|
+
successMessage?: string;
|
|
36
|
+
/** Show business type selector */
|
|
37
|
+
showBusinessType?: boolean;
|
|
38
|
+
/** Business types list */
|
|
39
|
+
businessTypes?: Array<{
|
|
40
|
+
value: string;
|
|
114
41
|
label: string;
|
|
115
42
|
}>;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
interface NavbarProps {
|
|
126
|
-
logo?: ReactNode;
|
|
127
|
-
siteName?: string;
|
|
128
|
-
links?: NavLink[];
|
|
129
|
-
ctaText?: string;
|
|
130
|
-
ctaHref?: string;
|
|
43
|
+
/** Tracking callbacks */
|
|
44
|
+
tracking?: {
|
|
45
|
+
onFormStart?: () => void;
|
|
46
|
+
onFieldFocus?: (field: string) => void;
|
|
47
|
+
onSubmit?: (success: boolean, businessType?: string) => void;
|
|
48
|
+
};
|
|
49
|
+
/** Additional data to send with the form */
|
|
50
|
+
additionalData?: Record<string, unknown>;
|
|
51
|
+
/** Custom class for the section */
|
|
131
52
|
className?: string;
|
|
132
53
|
}
|
|
133
|
-
declare function
|
|
54
|
+
declare function Waitlist({ endpoint, title, description, badge, submitText, successMessage, showBusinessType, businessTypes, tracking, additionalData, className, }: WaitlistProps): react_jsx_runtime.JSX.Element;
|
|
134
55
|
|
|
135
|
-
export {
|
|
56
|
+
export { type Testimonial, Testimonials, type TestimonialsProps, Waitlist, type WaitlistProps };
|
|
@@ -1,135 +1,56 @@
|
|
|
1
|
+
export { Cta, CtaProps, Faq, FaqItem, FaqProps, Feature, Features, FeaturesProps, Footer, FooterColumn, FooterLink, FooterProps, Hero, HeroProps, HeroStat, NavLink, Navbar, NavbarProps, Pricing, PricingPlan, PricingProps } from '../index.js';
|
|
1
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
interface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
icon?: LucideIcon;
|
|
13
|
-
};
|
|
14
|
-
title: ReactNode;
|
|
15
|
-
subtitle: string;
|
|
16
|
-
stats?: HeroStat[];
|
|
17
|
-
primaryCta?: {
|
|
18
|
-
text: string;
|
|
19
|
-
href: string;
|
|
20
|
-
};
|
|
21
|
-
secondaryCta?: {
|
|
22
|
-
text: string;
|
|
23
|
-
href: string;
|
|
24
|
-
};
|
|
25
|
-
trustedBy?: string[];
|
|
26
|
-
children?: ReactNode;
|
|
27
|
-
className?: string;
|
|
28
|
-
}
|
|
29
|
-
declare function Hero({ badge, title, subtitle, stats, primaryCta, secondaryCta, trustedBy, children, className, }: HeroProps): react_jsx_runtime.JSX.Element;
|
|
30
|
-
|
|
31
|
-
interface Feature {
|
|
32
|
-
name: string;
|
|
33
|
-
description: string;
|
|
34
|
-
icon: LucideIcon;
|
|
3
|
+
import 'lucide-react';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface Testimonial {
|
|
7
|
+
quote: string;
|
|
8
|
+
author: string;
|
|
9
|
+
role: string;
|
|
10
|
+
company?: string;
|
|
11
|
+
initial?: string;
|
|
12
|
+
image?: string;
|
|
35
13
|
color?: string;
|
|
36
|
-
bg?: string;
|
|
37
|
-
}
|
|
38
|
-
interface FeaturesProps {
|
|
39
|
-
badge?: string;
|
|
40
|
-
title: string;
|
|
41
|
-
subtitle?: string;
|
|
42
|
-
features: Feature[];
|
|
43
|
-
techStack?: Array<{
|
|
44
|
-
name: string;
|
|
45
|
-
color: string;
|
|
46
|
-
textColor?: string;
|
|
47
|
-
label: string;
|
|
48
|
-
}>;
|
|
49
|
-
className?: string;
|
|
50
14
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
interface PricingPlan {
|
|
54
|
-
name: string;
|
|
55
|
-
price: string;
|
|
56
|
-
period?: string;
|
|
57
|
-
description: string;
|
|
58
|
-
features: string[];
|
|
59
|
-
cta: string;
|
|
60
|
-
href: string;
|
|
61
|
-
popular?: boolean;
|
|
62
|
-
}
|
|
63
|
-
interface PricingProps {
|
|
15
|
+
interface TestimonialsProps {
|
|
64
16
|
title?: string;
|
|
65
17
|
subtitle?: string;
|
|
66
|
-
|
|
18
|
+
testimonials: Testimonial[];
|
|
67
19
|
className?: string;
|
|
68
20
|
}
|
|
69
|
-
declare function
|
|
21
|
+
declare function Testimonials({ title, subtitle, testimonials, className, }: TestimonialsProps): react_jsx_runtime.JSX.Element;
|
|
70
22
|
|
|
71
|
-
interface
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
interface FaqProps {
|
|
23
|
+
interface WaitlistProps {
|
|
24
|
+
/** API endpoint for waitlist signup */
|
|
25
|
+
endpoint?: string;
|
|
26
|
+
/** Section title */
|
|
76
27
|
title?: string;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
secondaryCta?: {
|
|
91
|
-
text: string;
|
|
92
|
-
href: string;
|
|
93
|
-
};
|
|
94
|
-
className?: string;
|
|
95
|
-
}
|
|
96
|
-
declare function Cta({ title, subtitle, primaryCta, secondaryCta, className, }: CtaProps): react_jsx_runtime.JSX.Element;
|
|
97
|
-
|
|
98
|
-
interface FooterLink {
|
|
99
|
-
label: string;
|
|
100
|
-
href: string;
|
|
101
|
-
}
|
|
102
|
-
interface FooterColumn {
|
|
103
|
-
title: string;
|
|
104
|
-
links: FooterLink[];
|
|
105
|
-
}
|
|
106
|
-
interface FooterProps {
|
|
107
|
-
logo?: ReactNode;
|
|
108
|
-
siteName?: string;
|
|
109
|
-
description?: string;
|
|
110
|
-
columns?: FooterColumn[];
|
|
111
|
-
socialLinks?: Array<{
|
|
112
|
-
icon: ReactNode;
|
|
113
|
-
href: string;
|
|
28
|
+
/** Section description */
|
|
29
|
+
description?: React.ReactNode;
|
|
30
|
+
/** Badge text */
|
|
31
|
+
badge?: string;
|
|
32
|
+
/** Submit button text */
|
|
33
|
+
submitText?: string;
|
|
34
|
+
/** Success message */
|
|
35
|
+
successMessage?: string;
|
|
36
|
+
/** Show business type selector */
|
|
37
|
+
showBusinessType?: boolean;
|
|
38
|
+
/** Business types list */
|
|
39
|
+
businessTypes?: Array<{
|
|
40
|
+
value: string;
|
|
114
41
|
label: string;
|
|
115
42
|
}>;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
interface NavbarProps {
|
|
126
|
-
logo?: ReactNode;
|
|
127
|
-
siteName?: string;
|
|
128
|
-
links?: NavLink[];
|
|
129
|
-
ctaText?: string;
|
|
130
|
-
ctaHref?: string;
|
|
43
|
+
/** Tracking callbacks */
|
|
44
|
+
tracking?: {
|
|
45
|
+
onFormStart?: () => void;
|
|
46
|
+
onFieldFocus?: (field: string) => void;
|
|
47
|
+
onSubmit?: (success: boolean, businessType?: string) => void;
|
|
48
|
+
};
|
|
49
|
+
/** Additional data to send with the form */
|
|
50
|
+
additionalData?: Record<string, unknown>;
|
|
51
|
+
/** Custom class for the section */
|
|
131
52
|
className?: string;
|
|
132
53
|
}
|
|
133
|
-
declare function
|
|
54
|
+
declare function Waitlist({ endpoint, title, description, badge, submitText, successMessage, showBusinessType, businessTypes, tracking, additionalData, className, }: WaitlistProps): react_jsx_runtime.JSX.Element;
|
|
134
55
|
|
|
135
|
-
export {
|
|
56
|
+
export { type Testimonial, Testimonials, type TestimonialsProps, Waitlist, type WaitlistProps };
|