@contractspec/bundle.marketing 3.7.5 → 3.7.7
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/.turbo/turbo-build.log +84 -84
- package/AGENTS.md +29 -21
- package/CHANGELOG.md +27 -0
- package/README.md +36 -49
- package/dist/browser/components/marketing/ChangelogPage.js +8 -8
- package/dist/browser/components/marketing/CofounderPage.js +167 -523
- package/dist/browser/components/marketing/ContactClient.js +200 -207
- package/dist/browser/components/marketing/ContributePage.js +211 -463
- package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/browser/components/marketing/LandingPage.js +464 -568
- package/dist/browser/components/marketing/PricingClient.js +213 -839
- package/dist/browser/components/marketing/ProductClientPage.js +265 -463
- package/dist/browser/components/marketing/index.js +2007 -3338
- package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
- package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
- package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
- package/dist/browser/components/marketing/studio-signup-section.js +25 -41
- package/dist/browser/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/browser/components/templates/TemplatesPage.js +1 -1
- package/dist/browser/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/browser/components/templates/index.js +2361 -3615
- package/dist/browser/index.js +2363 -3617
- package/dist/browser/libs/email/client.js +1 -1
- package/dist/browser/libs/email/contact.js +1 -1
- package/dist/browser/libs/email/newsletter.js +1 -1
- package/dist/browser/libs/email/waitlist-application.js +1 -1
- package/dist/browser/libs/email/waitlist.js +1 -1
- package/dist/browser/registry/engine.js +2003 -3334
- package/dist/browser/registry/index.js +2003 -3334
- package/dist/browser/registry/registry-docs.js +2 -2
- package/dist/browser/registry/registry-landing.js +2007 -3338
- package/dist/browser/registry/registry.js +2003 -3334
- package/dist/browser/registry/utils.js +2003 -3334
- package/dist/components/marketing/ChangelogPage.js +8 -8
- package/dist/components/marketing/CofounderPage.js +167 -523
- package/dist/components/marketing/ContactClient.js +200 -207
- package/dist/components/marketing/ContributePage.d.ts +0 -2
- package/dist/components/marketing/ContributePage.js +211 -463
- package/dist/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/components/marketing/LandingPage.js +464 -568
- package/dist/components/marketing/PricingClient.js +213 -839
- package/dist/components/marketing/ProductClientPage.js +265 -463
- package/dist/components/marketing/index.d.ts +5 -5
- package/dist/components/marketing/index.js +2007 -3338
- package/dist/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/components/marketing/sections/CtaSection.js +3 -3
- package/dist/components/marketing/sections/FearsSection.js +3 -3
- package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
- package/dist/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/components/marketing/sections/StepsSection.js +4 -4
- package/dist/components/marketing/studio-signup-section.js +25 -41
- package/dist/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/components/templates/TemplatesPage.js +1 -1
- package/dist/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/components/templates/index.js +2361 -3615
- package/dist/index.js +2363 -3617
- package/dist/libs/email/client.js +1 -1
- package/dist/libs/email/contact.js +1 -1
- package/dist/libs/email/newsletter.js +1 -1
- package/dist/libs/email/waitlist-application.js +1 -1
- package/dist/libs/email/waitlist.js +1 -1
- package/dist/node/components/marketing/ChangelogPage.js +8 -8
- package/dist/node/components/marketing/CofounderPage.js +167 -523
- package/dist/node/components/marketing/ContactClient.js +200 -207
- package/dist/node/components/marketing/ContributePage.js +211 -463
- package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/node/components/marketing/LandingPage.js +464 -568
- package/dist/node/components/marketing/PricingClient.js +213 -839
- package/dist/node/components/marketing/ProductClientPage.js +265 -463
- package/dist/node/components/marketing/index.js +2007 -3338
- package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/node/components/marketing/sections/CtaSection.js +3 -3
- package/dist/node/components/marketing/sections/FearsSection.js +3 -3
- package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/node/components/marketing/sections/StepsSection.js +4 -4
- package/dist/node/components/marketing/studio-signup-section.js +25 -41
- package/dist/node/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/node/components/templates/TemplatesPage.js +1 -1
- package/dist/node/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/node/components/templates/index.js +2361 -3615
- package/dist/node/index.js +2363 -3617
- package/dist/node/libs/email/client.js +1 -1
- package/dist/node/libs/email/contact.js +1 -1
- package/dist/node/libs/email/newsletter.js +1 -1
- package/dist/node/libs/email/waitlist-application.js +1 -1
- package/dist/node/libs/email/waitlist.js +1 -1
- package/dist/node/registry/engine.js +2003 -3334
- package/dist/node/registry/index.js +2003 -3334
- package/dist/node/registry/registry-docs.js +2 -2
- package/dist/node/registry/registry-landing.js +2007 -3338
- package/dist/node/registry/registry.js +2003 -3334
- package/dist/node/registry/utils.js +2003 -3334
- package/dist/registry/engine.js +2003 -3334
- package/dist/registry/index.js +2003 -3334
- package/dist/registry/registry-docs.js +2 -2
- package/dist/registry/registry-landing.js +2007 -3338
- package/dist/registry/registry.js +2003 -3334
- package/dist/registry/utils.js +2003 -3334
- package/package.json +29 -29
- package/src/bundles/MarketingBundle.ts +273 -273
- package/src/components/marketing/ChangelogPage.tsx +72 -100
- package/src/components/marketing/CofounderPage.tsx +120 -384
- package/src/components/marketing/ContactClient.tsx +164 -154
- package/src/components/marketing/ContributePage.tsx +139 -313
- package/src/components/marketing/DesignPartnerPage.tsx +133 -171
- package/src/components/marketing/LandingPage.tsx +353 -25
- package/src/components/marketing/PricingClient.tsx +192 -437
- package/src/components/marketing/ProductClientPage.tsx +255 -377
- package/src/components/marketing/index.ts +5 -5
- package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
- package/src/components/marketing/sections/AudienceSection.tsx +55 -56
- package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
- package/src/components/marketing/sections/CtaSection.tsx +49 -50
- package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
- package/src/components/marketing/sections/FearsSection.tsx +36 -37
- package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
- package/src/components/marketing/sections/IconGridSection.tsx +71 -71
- package/src/components/marketing/sections/OutputsSection.tsx +51 -52
- package/src/components/marketing/sections/ProblemSection.tsx +39 -40
- package/src/components/marketing/sections/SolutionSection.tsx +39 -40
- package/src/components/marketing/sections/StepsSection.tsx +47 -48
- package/src/components/marketing/studio-signup-section.tsx +39 -41
- package/src/components/templates/TemplatesClientPage.tsx +727 -685
- package/src/components/templates/TemplatesPage.tsx +110 -110
- package/src/components/templates/TemplatesPreviewModal.tsx +197 -198
- package/src/index.ts +4 -4
- package/src/libs/email/client.test.ts +81 -81
- package/src/libs/email/client.ts +111 -111
- package/src/libs/email/contact.ts +35 -35
- package/src/libs/email/newsletter.ts +46 -46
- package/src/libs/email/types.ts +29 -29
- package/src/libs/email/utils.ts +5 -5
- package/src/libs/email/waitlist-application.ts +72 -72
- package/src/libs/email/waitlist.ts +46 -46
- package/src/libs/pricing-examples.ts +12 -12
- package/src/registry/engine.ts +16 -16
- package/src/registry/factory.ts +57 -57
- package/src/registry/registry-docs.ts +656 -666
- package/src/registry/registry-landing.ts +94 -95
- package/src/registry/registry.ts +36 -37
- package/src/registry/types.ts +2 -2
- package/src/registry/utils.ts +56 -56
- package/tsconfig.json +11 -11
- package/tsdown.config.js +5 -5
|
@@ -1,174 +1,184 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useActionState } from 'react';
|
|
4
3
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
ActionForm,
|
|
5
|
+
Button,
|
|
6
|
+
Input,
|
|
7
|
+
Textarea,
|
|
8
|
+
} from '@contractspec/lib.design-system';
|
|
9
|
+
import {
|
|
10
|
+
AlertCircle,
|
|
11
|
+
Calendar,
|
|
12
|
+
CheckCircle,
|
|
13
|
+
MessageSquare,
|
|
9
14
|
} from 'lucide-react';
|
|
15
|
+
import { useActionState } from 'react';
|
|
10
16
|
import { submitContactForm } from '../../libs/email/contact';
|
|
11
|
-
import type { SubmitContactFormResult } from '../../libs/email/types';
|
|
12
|
-
// Wait check imports again. submitContactForm is imported from @contractspec/bundle.marketing.
|
|
13
|
-
// In bundle.marketing, it is likely in 'src/actions' or 'src/utils'.
|
|
14
|
-
// I need to check where submitContactForm is defined in bundle.marketing.
|
|
17
|
+
import type { SubmitContactFormResult } from '../../libs/email/types';
|
|
15
18
|
import { StudioSignupSection } from './studio-signup-section';
|
|
16
|
-
import {
|
|
17
|
-
ActionForm,
|
|
18
|
-
Button,
|
|
19
|
-
Input,
|
|
20
|
-
Textarea,
|
|
21
|
-
} from '@contractspec/lib.design-system';
|
|
22
|
-
import { VStack, HStack } from '@contractspec/lib.ui-kit-web/ui/stack';
|
|
23
|
-
import {
|
|
24
|
-
H2,
|
|
25
|
-
H1,
|
|
26
|
-
Small,
|
|
27
|
-
Muted,
|
|
28
|
-
} from '@contractspec/lib.ui-kit-web/ui/typography';
|
|
29
19
|
|
|
30
20
|
export function ContactClient() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const result = await submitContactForm(formData);
|
|
37
|
-
|
|
38
|
-
if (result.success) {
|
|
39
|
-
return {
|
|
40
|
-
success: true,
|
|
41
|
-
text: "Message sent successfully! We'll get back to you soon.",
|
|
42
|
-
};
|
|
43
|
-
} else {
|
|
44
|
-
return {
|
|
45
|
-
success: false,
|
|
46
|
-
text: result.text || 'Failed to send message. Please try again.',
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
};
|
|
21
|
+
const handleContactSubmit = async (
|
|
22
|
+
_prevState: SubmitContactFormResult | null,
|
|
23
|
+
formData: FormData
|
|
24
|
+
): Promise<SubmitContactFormResult> => {
|
|
25
|
+
const result = await submitContactForm(formData);
|
|
50
26
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
27
|
+
if (result.success) {
|
|
28
|
+
return {
|
|
29
|
+
success: true,
|
|
30
|
+
text: "Message sent successfully. We'll get back to you soon.",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
55
33
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<Muted className="text-lg">
|
|
62
|
-
Choose how you'd like to connect with us
|
|
63
|
-
</Muted>
|
|
64
|
-
</VStack>
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
text: result.text || 'Failed to send message. Please try again.',
|
|
37
|
+
};
|
|
38
|
+
};
|
|
65
39
|
|
|
66
|
-
|
|
67
|
-
|
|
40
|
+
const [contactResult, contactAction, contactPending] = useActionState<
|
|
41
|
+
SubmitContactFormResult | null,
|
|
42
|
+
FormData
|
|
43
|
+
>(handleContactSubmit, null);
|
|
68
44
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
45
|
+
return (
|
|
46
|
+
<main>
|
|
47
|
+
<section className="section-padding hero-gradient border-border/70 border-b">
|
|
48
|
+
<div className="editorial-shell grid gap-8 lg:grid-cols-[1.05fr_0.95fr]">
|
|
49
|
+
<div className="space-y-5">
|
|
50
|
+
<p className="editorial-kicker">Contact</p>
|
|
51
|
+
<h1 className="editorial-title max-w-4xl">
|
|
52
|
+
Talk to the team behind the open system and the Studio product.
|
|
53
|
+
</h1>
|
|
54
|
+
<p className="editorial-subtitle">
|
|
55
|
+
Reach out when you are evaluating the OSS foundation, deciding
|
|
56
|
+
whether Studio fits your workflow, or want a direct conversation
|
|
57
|
+
about adoption.
|
|
58
|
+
</p>
|
|
59
|
+
</div>
|
|
60
|
+
<StudioSignupSection variant="compact" />
|
|
61
|
+
</div>
|
|
62
|
+
</section>
|
|
81
63
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
64
|
+
<section className="editorial-section">
|
|
65
|
+
<div className="editorial-shell grid gap-8 lg:grid-cols-2">
|
|
66
|
+
<div className="editorial-panel space-y-6" id="call">
|
|
67
|
+
<div className="space-y-3">
|
|
68
|
+
<div className="badge">
|
|
69
|
+
<Calendar size={14} />
|
|
70
|
+
Book a conversation
|
|
71
|
+
</div>
|
|
72
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em]">
|
|
73
|
+
Walk through your current system with us.
|
|
74
|
+
</h2>
|
|
75
|
+
<p className="text-muted-foreground text-sm leading-7">
|
|
76
|
+
Use the call when you want a direct conversation about fit,
|
|
77
|
+
adoption order, or the right entry point between OSS and Studio.
|
|
78
|
+
</p>
|
|
79
|
+
</div>
|
|
80
|
+
<div className="overflow-hidden rounded-[28px] border border-border">
|
|
81
|
+
<object
|
|
82
|
+
data="https://meet.reclaimai.com/e/f863cb29-caac-44b6-972b-1407dd9545a3"
|
|
83
|
+
width="100%"
|
|
84
|
+
height="700px"
|
|
85
|
+
style={{ outline: 'none' }}
|
|
86
|
+
aria-label="Calendar booking widget"
|
|
87
|
+
/>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
</HStack>
|
|
91
|
+
<div className="editorial-panel space-y-6" id="message">
|
|
92
|
+
<div className="space-y-3">
|
|
93
|
+
<div className="badge">
|
|
94
|
+
<MessageSquare size={14} />
|
|
95
|
+
Send a message
|
|
96
|
+
</div>
|
|
97
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em]">
|
|
98
|
+
Share context, questions, or a project we should understand.
|
|
99
|
+
</h2>
|
|
100
|
+
</div>
|
|
104
101
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
102
|
+
<ActionForm action={contactAction}>
|
|
103
|
+
<div className="space-y-4">
|
|
104
|
+
<div className="space-y-2">
|
|
105
|
+
<label htmlFor="contact-name" className="font-medium text-sm">
|
|
106
|
+
Name
|
|
107
|
+
</label>
|
|
108
|
+
<Input
|
|
109
|
+
id="contact-name"
|
|
110
|
+
name="name"
|
|
111
|
+
type="text"
|
|
112
|
+
placeholder="Your name"
|
|
113
|
+
disabled={contactPending || contactResult?.success}
|
|
114
|
+
required
|
|
115
|
+
/>
|
|
116
|
+
</div>
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
118
|
+
<div className="space-y-2">
|
|
119
|
+
<label
|
|
120
|
+
htmlFor="contact-email"
|
|
121
|
+
className="font-medium text-sm"
|
|
122
|
+
>
|
|
123
|
+
Email
|
|
124
|
+
</label>
|
|
125
|
+
<Input
|
|
126
|
+
id="contact-email"
|
|
127
|
+
name="email"
|
|
128
|
+
type="email"
|
|
129
|
+
keyboard={{ kind: 'email' }}
|
|
130
|
+
placeholder="you@company.com"
|
|
131
|
+
disabled={contactPending || contactResult?.success}
|
|
132
|
+
required
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
131
135
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
136
|
+
<div className="space-y-2">
|
|
137
|
+
<label
|
|
138
|
+
htmlFor="contact-message"
|
|
139
|
+
className="font-medium text-sm"
|
|
140
|
+
>
|
|
141
|
+
Message
|
|
142
|
+
</label>
|
|
143
|
+
<Textarea
|
|
144
|
+
id="contact-message"
|
|
145
|
+
name="message"
|
|
146
|
+
placeholder="What are you trying to stabilize, and where is the current system breaking down?"
|
|
147
|
+
disabled={contactPending || contactResult?.success}
|
|
148
|
+
rows={7}
|
|
149
|
+
required
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
143
152
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
{contactResult && !contactPending ? (
|
|
154
|
+
<div
|
|
155
|
+
className={`flex items-center gap-2 rounded-2xl border px-4 py-3 text-sm ${
|
|
156
|
+
contactResult.success
|
|
157
|
+
? 'border-green-600/20 bg-green-600/10 text-green-700'
|
|
158
|
+
: 'border-red-600/20 bg-red-600/10 text-red-700'
|
|
159
|
+
}`}
|
|
160
|
+
>
|
|
161
|
+
{contactResult.success ? (
|
|
162
|
+
<CheckCircle size={16} />
|
|
163
|
+
) : (
|
|
164
|
+
<AlertCircle size={16} />
|
|
165
|
+
)}
|
|
166
|
+
<span>{contactResult.text}</span>
|
|
167
|
+
</div>
|
|
168
|
+
) : null}
|
|
160
169
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
<Button
|
|
171
|
+
type="submit"
|
|
172
|
+
disabled={contactPending || contactResult?.success}
|
|
173
|
+
className="w-full"
|
|
174
|
+
>
|
|
175
|
+
{contactPending ? 'Sending...' : 'Send message'}
|
|
176
|
+
</Button>
|
|
177
|
+
</div>
|
|
178
|
+
</ActionForm>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
</section>
|
|
182
|
+
</main>
|
|
183
|
+
);
|
|
174
184
|
}
|