@contractspec/lib.content-gen 2.3.0 → 2.5.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/dist/browser/generators/blog.js +943 -12
- package/dist/browser/generators/email.js +952 -14
- package/dist/browser/generators/index.js +1005 -46
- package/dist/browser/generators/landing-page.js +938 -15
- package/dist/browser/generators/social.js +926 -5
- package/dist/browser/i18n/catalogs/en.js +276 -0
- package/dist/browser/i18n/catalogs/es.js +276 -0
- package/dist/browser/i18n/catalogs/fr.js +276 -0
- package/dist/browser/i18n/catalogs/index.js +826 -0
- package/dist/browser/i18n/index.js +937 -0
- package/dist/browser/i18n/keys.js +85 -0
- package/dist/browser/i18n/locale.js +13 -0
- package/dist/browser/i18n/messages.js +838 -0
- package/dist/browser/index.js +1020 -50
- package/dist/browser/seo/index.js +933 -4
- package/dist/browser/seo/optimizer.js +933 -4
- package/dist/generators/blog.d.ts +1 -0
- package/dist/generators/blog.js +943 -12
- package/dist/generators/email.d.ts +1 -0
- package/dist/generators/email.js +952 -14
- package/dist/generators/index.js +1005 -46
- package/dist/generators/landing-page.d.ts +1 -0
- package/dist/generators/landing-page.js +938 -15
- package/dist/generators/social.d.ts +1 -0
- package/dist/generators/social.js +926 -5
- package/dist/i18n/catalogs/en.d.ts +8 -0
- package/dist/i18n/catalogs/en.js +277 -0
- package/dist/i18n/catalogs/es.d.ts +6 -0
- package/dist/i18n/catalogs/es.js +277 -0
- package/dist/i18n/catalogs/fr.d.ts +6 -0
- package/dist/i18n/catalogs/fr.js +277 -0
- package/dist/i18n/catalogs/index.d.ts +8 -0
- package/dist/i18n/catalogs/index.js +827 -0
- package/dist/i18n/i18n.test.d.ts +1 -0
- package/dist/i18n/index.d.ts +29 -0
- package/dist/i18n/index.js +938 -0
- package/dist/i18n/keys.d.ts +244 -0
- package/dist/i18n/keys.js +86 -0
- package/dist/i18n/locale.d.ts +8 -0
- package/dist/i18n/locale.js +14 -0
- package/dist/i18n/messages.d.ts +14 -0
- package/dist/i18n/messages.js +839 -0
- package/dist/index.js +1020 -50
- package/dist/node/generators/blog.js +943 -12
- package/dist/node/generators/email.js +952 -14
- package/dist/node/generators/index.js +1005 -46
- package/dist/node/generators/landing-page.js +938 -15
- package/dist/node/generators/social.js +926 -5
- package/dist/node/i18n/catalogs/en.js +276 -0
- package/dist/node/i18n/catalogs/es.js +276 -0
- package/dist/node/i18n/catalogs/fr.js +276 -0
- package/dist/node/i18n/catalogs/index.js +826 -0
- package/dist/node/i18n/index.js +937 -0
- package/dist/node/i18n/keys.js +85 -0
- package/dist/node/i18n/locale.js +13 -0
- package/dist/node/i18n/messages.js +838 -0
- package/dist/node/index.js +1020 -50
- package/dist/node/seo/index.js +933 -4
- package/dist/node/seo/optimizer.js +933 -4
- package/dist/seo/index.js +933 -4
- package/dist/seo/optimizer.d.ts +10 -1
- package/dist/seo/optimizer.js +933 -4
- package/dist/types.d.ts +2 -0
- package/package.json +145 -5
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed message keys for the content-gen i18n system.
|
|
3
|
+
*
|
|
4
|
+
* All translatable strings in the package are referenced by these keys.
|
|
5
|
+
* Organized by domain: prompt, blog, email, landing, social, seo.
|
|
6
|
+
*
|
|
7
|
+
* @module i18n/keys
|
|
8
|
+
*/
|
|
9
|
+
export declare const PROMPT_KEYS: {
|
|
10
|
+
/** Blog generator system prompt */
|
|
11
|
+
readonly 'prompt.blog.system': "prompt.blog.system";
|
|
12
|
+
/** Email generator system prompt */
|
|
13
|
+
readonly 'prompt.email.system': "prompt.email.system";
|
|
14
|
+
/** Landing page generator system prompt */
|
|
15
|
+
readonly 'prompt.landing.system': "prompt.landing.system";
|
|
16
|
+
/** Social post generator system prompt */
|
|
17
|
+
readonly 'prompt.social.system': "prompt.social.system";
|
|
18
|
+
};
|
|
19
|
+
export declare const BLOG_KEYS: {
|
|
20
|
+
/** "Operators like {role} teams face {problems}. {title} changes that by {summary}." */
|
|
21
|
+
readonly 'blog.intro': "blog.intro";
|
|
22
|
+
/** "Why now" */
|
|
23
|
+
readonly 'blog.heading.whyNow': "blog.heading.whyNow";
|
|
24
|
+
/** "What you get" */
|
|
25
|
+
readonly 'blog.heading.whatYouGet': "blog.heading.whatYouGet";
|
|
26
|
+
/** "Proof it works" */
|
|
27
|
+
readonly 'blog.heading.proofItWorks': "blog.heading.proofItWorks";
|
|
28
|
+
/** "A focused stack built for policy-safe automation." */
|
|
29
|
+
readonly 'blog.body.whatYouGet': "blog.body.whatYouGet";
|
|
30
|
+
/** "Teams using the blueprint report measurable wins." */
|
|
31
|
+
readonly 'blog.body.proofItWorks': "blog.body.proofItWorks";
|
|
32
|
+
/** "Launch workflows in minutes" */
|
|
33
|
+
readonly 'blog.metric.launchWorkflows': "blog.metric.launchWorkflows";
|
|
34
|
+
/** "Cut review time by 60%" */
|
|
35
|
+
readonly 'blog.metric.cutReviewTime': "blog.metric.cutReviewTime";
|
|
36
|
+
/** "Ready to see it live? Spin up a sandbox in under 5 minutes." */
|
|
37
|
+
readonly 'blog.outro.default': "blog.outro.default";
|
|
38
|
+
/** "{audience} teams are stuck with {pains}. {title} delivers guardrails without slowing shipping." */
|
|
39
|
+
readonly 'blog.whyNow': "blog.whyNow";
|
|
40
|
+
/** " in {industry}" */
|
|
41
|
+
readonly 'blog.audience.industry': "blog.audience.industry";
|
|
42
|
+
};
|
|
43
|
+
export declare const EMAIL_KEYS: {
|
|
44
|
+
/** "Launch: {title}" */
|
|
45
|
+
readonly 'email.subject.announcement.launch': "email.subject.announcement.launch";
|
|
46
|
+
/** "{title} is live" */
|
|
47
|
+
readonly 'email.subject.announcement.live': "email.subject.announcement.live";
|
|
48
|
+
/** "New: {title}" */
|
|
49
|
+
readonly 'email.subject.announcement.new': "email.subject.announcement.new";
|
|
50
|
+
/** "Get started with {title}" */
|
|
51
|
+
readonly 'email.subject.onboarding.getStarted': "email.subject.onboarding.getStarted";
|
|
52
|
+
/** "Your {title} guide" */
|
|
53
|
+
readonly 'email.subject.onboarding.guide': "email.subject.onboarding.guide";
|
|
54
|
+
/** "How {title} speeds ops" */
|
|
55
|
+
readonly 'email.subject.nurture.speeds': "email.subject.nurture.speeds";
|
|
56
|
+
/** "Proof {title} works" */
|
|
57
|
+
readonly 'email.subject.nurture.proof': "email.subject.nurture.proof";
|
|
58
|
+
/** "{title} update" */
|
|
59
|
+
readonly 'email.subject.fallback': "email.subject.fallback";
|
|
60
|
+
/** "ship faster without policy gaps" */
|
|
61
|
+
readonly 'email.preview.defaultWin': "email.preview.defaultWin";
|
|
62
|
+
/** "See how teams {win}." */
|
|
63
|
+
readonly 'email.preview.template': "email.preview.template";
|
|
64
|
+
/** "Hi there," */
|
|
65
|
+
readonly 'email.body.greeting': "email.body.greeting";
|
|
66
|
+
/** "Top reasons teams adopt {title}:" */
|
|
67
|
+
readonly 'email.body.reasons': "email.body.reasons";
|
|
68
|
+
/** "Spin up a sandbox" */
|
|
69
|
+
readonly 'email.cta.sandbox': "email.cta.sandbox";
|
|
70
|
+
/** "Explore the sandbox" */
|
|
71
|
+
readonly 'email.cta.explore': "email.cta.explore";
|
|
72
|
+
/** "{title} is live. {summary}" */
|
|
73
|
+
readonly 'email.hook.announcement': "email.hook.announcement";
|
|
74
|
+
/** "Here is your next step to unlock {title}." */
|
|
75
|
+
readonly 'email.hook.onboarding': "email.hook.onboarding";
|
|
76
|
+
/** "Operators like {role} keep asking how to automate policy checks. Here is what works." */
|
|
77
|
+
readonly 'email.hook.nurture': "email.hook.nurture";
|
|
78
|
+
};
|
|
79
|
+
export declare const LANDING_KEYS: {
|
|
80
|
+
/** "Operations" */
|
|
81
|
+
readonly 'landing.eyebrow.defaultIndustry': "landing.eyebrow.defaultIndustry";
|
|
82
|
+
/** "{industry} teams" */
|
|
83
|
+
readonly 'landing.eyebrow.template': "landing.eyebrow.template";
|
|
84
|
+
/** "Launch a sandbox" */
|
|
85
|
+
readonly 'landing.cta.primary': "landing.cta.primary";
|
|
86
|
+
/** "View docs" */
|
|
87
|
+
readonly 'landing.cta.secondary': "landing.cta.secondary";
|
|
88
|
+
/** "Policy-safe by default" */
|
|
89
|
+
readonly 'landing.highlight.policySafe': "landing.highlight.policySafe";
|
|
90
|
+
/** "Auto-adapts per tenant" */
|
|
91
|
+
readonly 'landing.highlight.autoAdapts': "landing.highlight.autoAdapts";
|
|
92
|
+
/** "Launch-ready in days" */
|
|
93
|
+
readonly 'landing.highlight.launchReady': "landing.highlight.launchReady";
|
|
94
|
+
/** "Key capability" */
|
|
95
|
+
readonly 'landing.highlight.fallback': "landing.highlight.fallback";
|
|
96
|
+
/** "Teams using ContractSpec" */
|
|
97
|
+
readonly 'landing.socialProof.heading': "landing.socialProof.heading";
|
|
98
|
+
/** Default social proof quote */
|
|
99
|
+
readonly 'landing.socialProof.defaultQuote': "landing.socialProof.defaultQuote";
|
|
100
|
+
/** "How does this keep policies enforced?" */
|
|
101
|
+
readonly 'landing.faq.policiesEnforced.heading': "landing.faq.policiesEnforced.heading";
|
|
102
|
+
/** FAQ body about policy enforcement */
|
|
103
|
+
readonly 'landing.faq.policiesEnforced.body': "landing.faq.policiesEnforced.body";
|
|
104
|
+
/** "Will it fit our existing stack?" */
|
|
105
|
+
readonly 'landing.faq.existingStack.heading': "landing.faq.existingStack.heading";
|
|
106
|
+
/** FAQ body about stack compatibility */
|
|
107
|
+
readonly 'landing.faq.existingStack.body': "landing.faq.existingStack.body";
|
|
108
|
+
/** "What about compliance requirements?" */
|
|
109
|
+
readonly 'landing.faq.compliance.heading': "landing.faq.compliance.heading";
|
|
110
|
+
};
|
|
111
|
+
export declare const SOCIAL_KEYS: {
|
|
112
|
+
/** "Book a 15-min run-through" */
|
|
113
|
+
readonly 'social.cta.linkedin': "social.cta.linkedin";
|
|
114
|
+
/** "→ contractspec.io/sandbox" */
|
|
115
|
+
readonly 'social.cta.twitter': "social.cta.twitter";
|
|
116
|
+
/** "Ops + policy can move fast. {title} automates guardrails so teams ship daily." */
|
|
117
|
+
readonly 'social.body.threads': "social.body.threads";
|
|
118
|
+
/** " in <60s. " -- twitter body connector */
|
|
119
|
+
readonly 'social.body.twitter.connector': "social.body.twitter.connector";
|
|
120
|
+
};
|
|
121
|
+
export declare const SEO_KEYS: {
|
|
122
|
+
/** "{title} | ContractSpec" */
|
|
123
|
+
readonly 'seo.metaTitle': "seo.metaTitle";
|
|
124
|
+
/** "{summary} — built for {role}{industry}." */
|
|
125
|
+
readonly 'seo.metaDescription': "seo.metaDescription";
|
|
126
|
+
/** "Start building with ContractSpec" */
|
|
127
|
+
readonly 'seo.offer.default': "seo.offer.default";
|
|
128
|
+
/** " in {industry}" */
|
|
129
|
+
readonly 'seo.audience.industry': "seo.audience.industry";
|
|
130
|
+
};
|
|
131
|
+
export declare const I18N_KEYS: {
|
|
132
|
+
/** "{title} | ContractSpec" */
|
|
133
|
+
readonly 'seo.metaTitle': "seo.metaTitle";
|
|
134
|
+
/** "{summary} — built for {role}{industry}." */
|
|
135
|
+
readonly 'seo.metaDescription': "seo.metaDescription";
|
|
136
|
+
/** "Start building with ContractSpec" */
|
|
137
|
+
readonly 'seo.offer.default': "seo.offer.default";
|
|
138
|
+
/** " in {industry}" */
|
|
139
|
+
readonly 'seo.audience.industry': "seo.audience.industry";
|
|
140
|
+
/** "Book a 15-min run-through" */
|
|
141
|
+
readonly 'social.cta.linkedin': "social.cta.linkedin";
|
|
142
|
+
/** "→ contractspec.io/sandbox" */
|
|
143
|
+
readonly 'social.cta.twitter': "social.cta.twitter";
|
|
144
|
+
/** "Ops + policy can move fast. {title} automates guardrails so teams ship daily." */
|
|
145
|
+
readonly 'social.body.threads': "social.body.threads";
|
|
146
|
+
/** " in <60s. " -- twitter body connector */
|
|
147
|
+
readonly 'social.body.twitter.connector': "social.body.twitter.connector";
|
|
148
|
+
/** "Operations" */
|
|
149
|
+
readonly 'landing.eyebrow.defaultIndustry': "landing.eyebrow.defaultIndustry";
|
|
150
|
+
/** "{industry} teams" */
|
|
151
|
+
readonly 'landing.eyebrow.template': "landing.eyebrow.template";
|
|
152
|
+
/** "Launch a sandbox" */
|
|
153
|
+
readonly 'landing.cta.primary': "landing.cta.primary";
|
|
154
|
+
/** "View docs" */
|
|
155
|
+
readonly 'landing.cta.secondary': "landing.cta.secondary";
|
|
156
|
+
/** "Policy-safe by default" */
|
|
157
|
+
readonly 'landing.highlight.policySafe': "landing.highlight.policySafe";
|
|
158
|
+
/** "Auto-adapts per tenant" */
|
|
159
|
+
readonly 'landing.highlight.autoAdapts': "landing.highlight.autoAdapts";
|
|
160
|
+
/** "Launch-ready in days" */
|
|
161
|
+
readonly 'landing.highlight.launchReady': "landing.highlight.launchReady";
|
|
162
|
+
/** "Key capability" */
|
|
163
|
+
readonly 'landing.highlight.fallback': "landing.highlight.fallback";
|
|
164
|
+
/** "Teams using ContractSpec" */
|
|
165
|
+
readonly 'landing.socialProof.heading': "landing.socialProof.heading";
|
|
166
|
+
/** Default social proof quote */
|
|
167
|
+
readonly 'landing.socialProof.defaultQuote': "landing.socialProof.defaultQuote";
|
|
168
|
+
/** "How does this keep policies enforced?" */
|
|
169
|
+
readonly 'landing.faq.policiesEnforced.heading': "landing.faq.policiesEnforced.heading";
|
|
170
|
+
/** FAQ body about policy enforcement */
|
|
171
|
+
readonly 'landing.faq.policiesEnforced.body': "landing.faq.policiesEnforced.body";
|
|
172
|
+
/** "Will it fit our existing stack?" */
|
|
173
|
+
readonly 'landing.faq.existingStack.heading': "landing.faq.existingStack.heading";
|
|
174
|
+
/** FAQ body about stack compatibility */
|
|
175
|
+
readonly 'landing.faq.existingStack.body': "landing.faq.existingStack.body";
|
|
176
|
+
/** "What about compliance requirements?" */
|
|
177
|
+
readonly 'landing.faq.compliance.heading': "landing.faq.compliance.heading";
|
|
178
|
+
/** "Launch: {title}" */
|
|
179
|
+
readonly 'email.subject.announcement.launch': "email.subject.announcement.launch";
|
|
180
|
+
/** "{title} is live" */
|
|
181
|
+
readonly 'email.subject.announcement.live': "email.subject.announcement.live";
|
|
182
|
+
/** "New: {title}" */
|
|
183
|
+
readonly 'email.subject.announcement.new': "email.subject.announcement.new";
|
|
184
|
+
/** "Get started with {title}" */
|
|
185
|
+
readonly 'email.subject.onboarding.getStarted': "email.subject.onboarding.getStarted";
|
|
186
|
+
/** "Your {title} guide" */
|
|
187
|
+
readonly 'email.subject.onboarding.guide': "email.subject.onboarding.guide";
|
|
188
|
+
/** "How {title} speeds ops" */
|
|
189
|
+
readonly 'email.subject.nurture.speeds': "email.subject.nurture.speeds";
|
|
190
|
+
/** "Proof {title} works" */
|
|
191
|
+
readonly 'email.subject.nurture.proof': "email.subject.nurture.proof";
|
|
192
|
+
/** "{title} update" */
|
|
193
|
+
readonly 'email.subject.fallback': "email.subject.fallback";
|
|
194
|
+
/** "ship faster without policy gaps" */
|
|
195
|
+
readonly 'email.preview.defaultWin': "email.preview.defaultWin";
|
|
196
|
+
/** "See how teams {win}." */
|
|
197
|
+
readonly 'email.preview.template': "email.preview.template";
|
|
198
|
+
/** "Hi there," */
|
|
199
|
+
readonly 'email.body.greeting': "email.body.greeting";
|
|
200
|
+
/** "Top reasons teams adopt {title}:" */
|
|
201
|
+
readonly 'email.body.reasons': "email.body.reasons";
|
|
202
|
+
/** "Spin up a sandbox" */
|
|
203
|
+
readonly 'email.cta.sandbox': "email.cta.sandbox";
|
|
204
|
+
/** "Explore the sandbox" */
|
|
205
|
+
readonly 'email.cta.explore': "email.cta.explore";
|
|
206
|
+
/** "{title} is live. {summary}" */
|
|
207
|
+
readonly 'email.hook.announcement': "email.hook.announcement";
|
|
208
|
+
/** "Here is your next step to unlock {title}." */
|
|
209
|
+
readonly 'email.hook.onboarding': "email.hook.onboarding";
|
|
210
|
+
/** "Operators like {role} keep asking how to automate policy checks. Here is what works." */
|
|
211
|
+
readonly 'email.hook.nurture': "email.hook.nurture";
|
|
212
|
+
/** "Operators like {role} teams face {problems}. {title} changes that by {summary}." */
|
|
213
|
+
readonly 'blog.intro': "blog.intro";
|
|
214
|
+
/** "Why now" */
|
|
215
|
+
readonly 'blog.heading.whyNow': "blog.heading.whyNow";
|
|
216
|
+
/** "What you get" */
|
|
217
|
+
readonly 'blog.heading.whatYouGet': "blog.heading.whatYouGet";
|
|
218
|
+
/** "Proof it works" */
|
|
219
|
+
readonly 'blog.heading.proofItWorks': "blog.heading.proofItWorks";
|
|
220
|
+
/** "A focused stack built for policy-safe automation." */
|
|
221
|
+
readonly 'blog.body.whatYouGet': "blog.body.whatYouGet";
|
|
222
|
+
/** "Teams using the blueprint report measurable wins." */
|
|
223
|
+
readonly 'blog.body.proofItWorks': "blog.body.proofItWorks";
|
|
224
|
+
/** "Launch workflows in minutes" */
|
|
225
|
+
readonly 'blog.metric.launchWorkflows': "blog.metric.launchWorkflows";
|
|
226
|
+
/** "Cut review time by 60%" */
|
|
227
|
+
readonly 'blog.metric.cutReviewTime': "blog.metric.cutReviewTime";
|
|
228
|
+
/** "Ready to see it live? Spin up a sandbox in under 5 minutes." */
|
|
229
|
+
readonly 'blog.outro.default': "blog.outro.default";
|
|
230
|
+
/** "{audience} teams are stuck with {pains}. {title} delivers guardrails without slowing shipping." */
|
|
231
|
+
readonly 'blog.whyNow': "blog.whyNow";
|
|
232
|
+
/** " in {industry}" */
|
|
233
|
+
readonly 'blog.audience.industry': "blog.audience.industry";
|
|
234
|
+
/** Blog generator system prompt */
|
|
235
|
+
readonly 'prompt.blog.system': "prompt.blog.system";
|
|
236
|
+
/** Email generator system prompt */
|
|
237
|
+
readonly 'prompt.email.system': "prompt.email.system";
|
|
238
|
+
/** Landing page generator system prompt */
|
|
239
|
+
readonly 'prompt.landing.system': "prompt.landing.system";
|
|
240
|
+
/** Social post generator system prompt */
|
|
241
|
+
readonly 'prompt.social.system': "prompt.social.system";
|
|
242
|
+
};
|
|
243
|
+
/** Union type of all valid content-gen i18n keys */
|
|
244
|
+
export type ContentGenMessageKey = keyof typeof I18N_KEYS;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/i18n/keys.ts
|
|
3
|
+
var PROMPT_KEYS = {
|
|
4
|
+
"prompt.blog.system": "prompt.blog.system",
|
|
5
|
+
"prompt.email.system": "prompt.email.system",
|
|
6
|
+
"prompt.landing.system": "prompt.landing.system",
|
|
7
|
+
"prompt.social.system": "prompt.social.system"
|
|
8
|
+
};
|
|
9
|
+
var BLOG_KEYS = {
|
|
10
|
+
"blog.intro": "blog.intro",
|
|
11
|
+
"blog.heading.whyNow": "blog.heading.whyNow",
|
|
12
|
+
"blog.heading.whatYouGet": "blog.heading.whatYouGet",
|
|
13
|
+
"blog.heading.proofItWorks": "blog.heading.proofItWorks",
|
|
14
|
+
"blog.body.whatYouGet": "blog.body.whatYouGet",
|
|
15
|
+
"blog.body.proofItWorks": "blog.body.proofItWorks",
|
|
16
|
+
"blog.metric.launchWorkflows": "blog.metric.launchWorkflows",
|
|
17
|
+
"blog.metric.cutReviewTime": "blog.metric.cutReviewTime",
|
|
18
|
+
"blog.outro.default": "blog.outro.default",
|
|
19
|
+
"blog.whyNow": "blog.whyNow",
|
|
20
|
+
"blog.audience.industry": "blog.audience.industry"
|
|
21
|
+
};
|
|
22
|
+
var EMAIL_KEYS = {
|
|
23
|
+
"email.subject.announcement.launch": "email.subject.announcement.launch",
|
|
24
|
+
"email.subject.announcement.live": "email.subject.announcement.live",
|
|
25
|
+
"email.subject.announcement.new": "email.subject.announcement.new",
|
|
26
|
+
"email.subject.onboarding.getStarted": "email.subject.onboarding.getStarted",
|
|
27
|
+
"email.subject.onboarding.guide": "email.subject.onboarding.guide",
|
|
28
|
+
"email.subject.nurture.speeds": "email.subject.nurture.speeds",
|
|
29
|
+
"email.subject.nurture.proof": "email.subject.nurture.proof",
|
|
30
|
+
"email.subject.fallback": "email.subject.fallback",
|
|
31
|
+
"email.preview.defaultWin": "email.preview.defaultWin",
|
|
32
|
+
"email.preview.template": "email.preview.template",
|
|
33
|
+
"email.body.greeting": "email.body.greeting",
|
|
34
|
+
"email.body.reasons": "email.body.reasons",
|
|
35
|
+
"email.cta.sandbox": "email.cta.sandbox",
|
|
36
|
+
"email.cta.explore": "email.cta.explore",
|
|
37
|
+
"email.hook.announcement": "email.hook.announcement",
|
|
38
|
+
"email.hook.onboarding": "email.hook.onboarding",
|
|
39
|
+
"email.hook.nurture": "email.hook.nurture"
|
|
40
|
+
};
|
|
41
|
+
var LANDING_KEYS = {
|
|
42
|
+
"landing.eyebrow.defaultIndustry": "landing.eyebrow.defaultIndustry",
|
|
43
|
+
"landing.eyebrow.template": "landing.eyebrow.template",
|
|
44
|
+
"landing.cta.primary": "landing.cta.primary",
|
|
45
|
+
"landing.cta.secondary": "landing.cta.secondary",
|
|
46
|
+
"landing.highlight.policySafe": "landing.highlight.policySafe",
|
|
47
|
+
"landing.highlight.autoAdapts": "landing.highlight.autoAdapts",
|
|
48
|
+
"landing.highlight.launchReady": "landing.highlight.launchReady",
|
|
49
|
+
"landing.highlight.fallback": "landing.highlight.fallback",
|
|
50
|
+
"landing.socialProof.heading": "landing.socialProof.heading",
|
|
51
|
+
"landing.socialProof.defaultQuote": "landing.socialProof.defaultQuote",
|
|
52
|
+
"landing.faq.policiesEnforced.heading": "landing.faq.policiesEnforced.heading",
|
|
53
|
+
"landing.faq.policiesEnforced.body": "landing.faq.policiesEnforced.body",
|
|
54
|
+
"landing.faq.existingStack.heading": "landing.faq.existingStack.heading",
|
|
55
|
+
"landing.faq.existingStack.body": "landing.faq.existingStack.body",
|
|
56
|
+
"landing.faq.compliance.heading": "landing.faq.compliance.heading"
|
|
57
|
+
};
|
|
58
|
+
var SOCIAL_KEYS = {
|
|
59
|
+
"social.cta.linkedin": "social.cta.linkedin",
|
|
60
|
+
"social.cta.twitter": "social.cta.twitter",
|
|
61
|
+
"social.body.threads": "social.body.threads",
|
|
62
|
+
"social.body.twitter.connector": "social.body.twitter.connector"
|
|
63
|
+
};
|
|
64
|
+
var SEO_KEYS = {
|
|
65
|
+
"seo.metaTitle": "seo.metaTitle",
|
|
66
|
+
"seo.metaDescription": "seo.metaDescription",
|
|
67
|
+
"seo.offer.default": "seo.offer.default",
|
|
68
|
+
"seo.audience.industry": "seo.audience.industry"
|
|
69
|
+
};
|
|
70
|
+
var I18N_KEYS = {
|
|
71
|
+
...PROMPT_KEYS,
|
|
72
|
+
...BLOG_KEYS,
|
|
73
|
+
...EMAIL_KEYS,
|
|
74
|
+
...LANDING_KEYS,
|
|
75
|
+
...SOCIAL_KEYS,
|
|
76
|
+
...SEO_KEYS
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
SOCIAL_KEYS,
|
|
80
|
+
SEO_KEYS,
|
|
81
|
+
PROMPT_KEYS,
|
|
82
|
+
LANDING_KEYS,
|
|
83
|
+
I18N_KEYS,
|
|
84
|
+
EMAIL_KEYS,
|
|
85
|
+
BLOG_KEYS
|
|
86
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locale utilities for the content-gen package.
|
|
3
|
+
*
|
|
4
|
+
* Re-exported from the shared i18n factory in contracts-spec.
|
|
5
|
+
*
|
|
6
|
+
* @module i18n/locale
|
|
7
|
+
*/
|
|
8
|
+
export { DEFAULT_LOCALE, SUPPORTED_LOCALES, resolveLocale, isSupportedLocale, type SupportedLocale, } from '@contractspec/lib.contracts-spec/translations';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/i18n/locale.ts
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_LOCALE,
|
|
5
|
+
SUPPORTED_LOCALES,
|
|
6
|
+
resolveLocale,
|
|
7
|
+
isSupportedLocale
|
|
8
|
+
} from "@contractspec/lib.contracts-spec/translations";
|
|
9
|
+
export {
|
|
10
|
+
resolveLocale,
|
|
11
|
+
isSupportedLocale,
|
|
12
|
+
SUPPORTED_LOCALES,
|
|
13
|
+
DEFAULT_LOCALE
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translation helper for the content-gen package.
|
|
3
|
+
* @module i18n/messages
|
|
4
|
+
*/
|
|
5
|
+
import { type I18nInstance } from '@contractspec/lib.contracts-spec/translations';
|
|
6
|
+
import type { ContentGenMessageKey } from './keys';
|
|
7
|
+
/** I18n instance type for the content-gen package. */
|
|
8
|
+
export type ContentGenI18n = I18nInstance<ContentGenMessageKey>;
|
|
9
|
+
/** Create an i18n instance for a given locale. */
|
|
10
|
+
export declare const createContentGenI18n: (optionsLocale?: string, runtimeLocale?: string) => I18nInstance<"prompt.blog.system" | "prompt.email.system" | "prompt.landing.system" | "prompt.social.system" | "blog.intro" | "blog.heading.whyNow" | "blog.heading.whatYouGet" | "blog.heading.proofItWorks" | "blog.body.whatYouGet" | "blog.body.proofItWorks" | "blog.metric.launchWorkflows" | "blog.metric.cutReviewTime" | "blog.outro.default" | "blog.whyNow" | "blog.audience.industry" | "email.subject.announcement.launch" | "email.subject.announcement.live" | "email.subject.announcement.new" | "email.subject.onboarding.getStarted" | "email.subject.onboarding.guide" | "email.subject.nurture.speeds" | "email.subject.nurture.proof" | "email.subject.fallback" | "email.preview.defaultWin" | "email.preview.template" | "email.body.greeting" | "email.body.reasons" | "email.cta.sandbox" | "email.cta.explore" | "email.hook.announcement" | "email.hook.onboarding" | "email.hook.nurture" | "landing.eyebrow.defaultIndustry" | "landing.eyebrow.template" | "landing.cta.primary" | "landing.cta.secondary" | "landing.highlight.policySafe" | "landing.highlight.autoAdapts" | "landing.highlight.launchReady" | "landing.highlight.fallback" | "landing.socialProof.heading" | "landing.socialProof.defaultQuote" | "landing.faq.policiesEnforced.heading" | "landing.faq.policiesEnforced.body" | "landing.faq.existingStack.heading" | "landing.faq.existingStack.body" | "landing.faq.compliance.heading" | "social.cta.linkedin" | "social.cta.twitter" | "social.body.threads" | "social.body.twitter.connector" | "seo.metaTitle" | "seo.metaDescription" | "seo.offer.default" | "seo.audience.industry">;
|
|
11
|
+
/** Create a default (English) i18n instance. */
|
|
12
|
+
export declare const getDefaultI18n: () => I18nInstance<"prompt.blog.system" | "prompt.email.system" | "prompt.landing.system" | "prompt.social.system" | "blog.intro" | "blog.heading.whyNow" | "blog.heading.whatYouGet" | "blog.heading.proofItWorks" | "blog.body.whatYouGet" | "blog.body.proofItWorks" | "blog.metric.launchWorkflows" | "blog.metric.cutReviewTime" | "blog.outro.default" | "blog.whyNow" | "blog.audience.industry" | "email.subject.announcement.launch" | "email.subject.announcement.live" | "email.subject.announcement.new" | "email.subject.onboarding.getStarted" | "email.subject.onboarding.guide" | "email.subject.nurture.speeds" | "email.subject.nurture.proof" | "email.subject.fallback" | "email.preview.defaultWin" | "email.preview.template" | "email.body.greeting" | "email.body.reasons" | "email.cta.sandbox" | "email.cta.explore" | "email.hook.announcement" | "email.hook.onboarding" | "email.hook.nurture" | "landing.eyebrow.defaultIndustry" | "landing.eyebrow.template" | "landing.cta.primary" | "landing.cta.secondary" | "landing.highlight.policySafe" | "landing.highlight.autoAdapts" | "landing.highlight.launchReady" | "landing.highlight.fallback" | "landing.socialProof.heading" | "landing.socialProof.defaultQuote" | "landing.faq.policiesEnforced.heading" | "landing.faq.policiesEnforced.body" | "landing.faq.existingStack.heading" | "landing.faq.existingStack.body" | "landing.faq.compliance.heading" | "social.cta.linkedin" | "social.cta.twitter" | "social.body.threads" | "social.body.twitter.connector" | "seo.metaTitle" | "seo.metaDescription" | "seo.offer.default" | "seo.audience.industry">;
|
|
13
|
+
/** Reset the shared registry (useful for testing). @internal */
|
|
14
|
+
export declare const resetI18nRegistry: () => void;
|