@bitbaum/sitekit 0.3.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/LICENSE +21 -0
- package/README.md +129 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +12 -0
- package/dist/model.d.ts +28 -0
- package/dist/model.js +42 -0
- package/dist/provenance.d.ts +60 -0
- package/dist/provenance.js +61 -0
- package/dist/react/NavAutoScroll.d.ts +3 -0
- package/dist/react/NavAutoScroll.js +26 -0
- package/dist/react/SiteChrome.d.ts +25 -0
- package/dist/react/SiteChrome.js +21 -0
- package/dist/react/SiteNav.d.ts +22 -0
- package/dist/react/SiteNav.js +32 -0
- package/dist/react/SiteSections.d.ts +16 -0
- package/dist/react/SiteSections.js +42 -0
- package/dist/react/index.d.ts +19 -0
- package/dist/react/index.js +19 -0
- package/dist/react/link.d.ts +18 -0
- package/dist/react/link.js +11 -0
- package/dist/react/sections/BusinessSections.d.ts +41 -0
- package/dist/react/sections/BusinessSections.js +33 -0
- package/dist/react/sections/DataSections.d.ts +19 -0
- package/dist/react/sections/DataSections.js +45 -0
- package/dist/react/sections/FigureSections.d.ts +26 -0
- package/dist/react/sections/FigureSections.js +22 -0
- package/dist/react/sections/HeroSection.d.ts +13 -0
- package/dist/react/sections/HeroSection.js +9 -0
- package/dist/react/sections/Primitives.d.ts +32 -0
- package/dist/react/sections/Primitives.js +21 -0
- package/dist/react/sections/ProseSections.d.ts +25 -0
- package/dist/react/sections/ProseSections.js +22 -0
- package/dist/schema.d.ts +573 -0
- package/dist/schema.js +288 -0
- package/package.json +72 -0
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The content model: a site is pages, a page is sections, and sections come
|
|
3
|
+
* from a small CLOSED set of shapes.
|
|
4
|
+
*
|
|
5
|
+
* The closed set is the design, not a limitation. A generator emitting data
|
|
6
|
+
* against this schema is a task with a machine-checkable result; a generator
|
|
7
|
+
* emitting components is not. Per-site quality becomes a property of the
|
|
8
|
+
* renderers — fixing one renderer improves every site ever generated.
|
|
9
|
+
*
|
|
10
|
+
* Zod is the single source of truth here: every TypeScript type is inferred
|
|
11
|
+
* from its schema, never written twice. Extracted from substrata's
|
|
12
|
+
* `config/site-content.ts` (2026-08-26), which remains the reference consumer.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
/** A stat worth putting at the top of a page. */
|
|
16
|
+
export declare const siteStatSchema: z.ZodObject<{
|
|
17
|
+
label: z.ZodString;
|
|
18
|
+
value: z.ZodString;
|
|
19
|
+
note: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export type SiteStat = z.infer<typeof siteStatSchema>;
|
|
22
|
+
export declare const siteCardSchema: z.ZodObject<{
|
|
23
|
+
title: z.ZodString;
|
|
24
|
+
body: z.ZodString;
|
|
25
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
26
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
export type SiteCard = z.infer<typeof siteCardSchema>;
|
|
29
|
+
export declare const siteDefinitionSchema: z.ZodObject<{
|
|
30
|
+
term: z.ZodString;
|
|
31
|
+
detail: z.ZodString;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type SiteDefinition = z.infer<typeof siteDefinitionSchema>;
|
|
34
|
+
export declare const siteIndexEntrySchema: z.ZodObject<{
|
|
35
|
+
label: z.ZodString;
|
|
36
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
37
|
+
anchor: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type SiteIndexEntry = z.infer<typeof siteIndexEntrySchema>;
|
|
40
|
+
/** A call to action: what the button says and where it goes. */
|
|
41
|
+
export declare const siteActionSchema: z.ZodObject<{
|
|
42
|
+
label: z.ZodString;
|
|
43
|
+
href: z.ZodString;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export type SiteAction = z.infer<typeof siteActionSchema>;
|
|
46
|
+
export declare const siteImageSchema: z.ZodObject<{
|
|
47
|
+
src: z.ZodString;
|
|
48
|
+
alt: z.ZodString;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
export type SiteImage = z.infer<typeof siteImageSchema>;
|
|
51
|
+
/**
|
|
52
|
+
* A physical place. These are exactly the fields the provenance rules exist
|
|
53
|
+
* to protect: a plausible-but-wrong address or opening time is the one detail
|
|
54
|
+
* that actively damages the business a site is about.
|
|
55
|
+
*/
|
|
56
|
+
export declare const siteLocationSchema: z.ZodObject<{
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
note: z.ZodOptional<z.ZodString>;
|
|
59
|
+
address: z.ZodString;
|
|
60
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
61
|
+
hours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
export type SiteLocation = z.infer<typeof siteLocationSchema>;
|
|
64
|
+
export declare const siteFaqItemSchema: z.ZodObject<{
|
|
65
|
+
question: z.ZodString;
|
|
66
|
+
answer: z.ZodString;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
export type SiteFaqItem = z.infer<typeof siteFaqItemSchema>;
|
|
69
|
+
/**
|
|
70
|
+
* Opens a page in place of the standard title block. An eyebrow, one display
|
|
71
|
+
* statement, and the lead. Only ever the FIRST section of a page — the page
|
|
72
|
+
* schema enforces it, and the shell suppresses its own header when present so
|
|
73
|
+
* the two cannot both render.
|
|
74
|
+
*/
|
|
75
|
+
export declare const heroSectionSchema: z.ZodObject<{
|
|
76
|
+
kind: z.ZodLiteral<"hero">;
|
|
77
|
+
eyebrow: z.ZodOptional<z.ZodString>;
|
|
78
|
+
statement: z.ZodString;
|
|
79
|
+
lead: z.ZodArray<z.ZodString>;
|
|
80
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
81
|
+
label: z.ZodString;
|
|
82
|
+
href: z.ZodString;
|
|
83
|
+
}, z.core.$strip>>>;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
export declare const proseSectionSchema: z.ZodObject<{
|
|
86
|
+
kind: z.ZodLiteral<"prose">;
|
|
87
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
88
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
89
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
90
|
+
}, z.core.$strip>;
|
|
91
|
+
export declare const statsSectionSchema: z.ZodObject<{
|
|
92
|
+
kind: z.ZodLiteral<"stats">;
|
|
93
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
94
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
95
|
+
stats: z.ZodArray<z.ZodObject<{
|
|
96
|
+
label: z.ZodString;
|
|
97
|
+
value: z.ZodString;
|
|
98
|
+
note: z.ZodOptional<z.ZodString>;
|
|
99
|
+
}, z.core.$strip>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
/**
|
|
102
|
+
* One number that deserves a picture. The gap between `value` and `of` IS the
|
|
103
|
+
* message — an empty bar is the honest rendering of "nothing sourced yet",
|
|
104
|
+
* and it should look empty.
|
|
105
|
+
*/
|
|
106
|
+
export declare const meterSectionSchema: z.ZodObject<{
|
|
107
|
+
kind: z.ZodLiteral<"meter">;
|
|
108
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
109
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
110
|
+
label: z.ZodString;
|
|
111
|
+
value: z.ZodNumber;
|
|
112
|
+
of: z.ZodNumber;
|
|
113
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
114
|
+
}, z.core.$strip>;
|
|
115
|
+
export declare const cardsSectionSchema: z.ZodObject<{
|
|
116
|
+
kind: z.ZodLiteral<"cards">;
|
|
117
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
118
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
119
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
120
|
+
columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
|
|
121
|
+
cards: z.ZodArray<z.ZodObject<{
|
|
122
|
+
title: z.ZodString;
|
|
123
|
+
body: z.ZodString;
|
|
124
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
125
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
126
|
+
}, z.core.$strip>>;
|
|
127
|
+
}, z.core.$strip>;
|
|
128
|
+
export declare const definitionsSectionSchema: z.ZodObject<{
|
|
129
|
+
kind: z.ZodLiteral<"definitions">;
|
|
130
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
131
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
132
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
133
|
+
items: z.ZodArray<z.ZodObject<{
|
|
134
|
+
term: z.ZodString;
|
|
135
|
+
detail: z.ZodString;
|
|
136
|
+
}, z.core.$strip>>;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
/**
|
|
139
|
+
* A split: a figure (or just space) beside a story. The founder, the
|
|
140
|
+
* workshop, the thing that makes this business this business. The one
|
|
141
|
+
* section on a small-business site that is allowed to be personal.
|
|
142
|
+
*/
|
|
143
|
+
export declare const featureSectionSchema: z.ZodObject<{
|
|
144
|
+
kind: z.ZodLiteral<"feature">;
|
|
145
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
146
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
147
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
148
|
+
quote: z.ZodOptional<z.ZodString>;
|
|
149
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
150
|
+
label: z.ZodString;
|
|
151
|
+
href: z.ZodString;
|
|
152
|
+
}, z.core.$strip>>;
|
|
153
|
+
image: z.ZodOptional<z.ZodObject<{
|
|
154
|
+
src: z.ZodString;
|
|
155
|
+
alt: z.ZodString;
|
|
156
|
+
}, z.core.$strip>>;
|
|
157
|
+
}, z.core.$strip>;
|
|
158
|
+
/** Where the business actually is. See `siteLocationSchema` on why this exists. */
|
|
159
|
+
export declare const contactSectionSchema: z.ZodObject<{
|
|
160
|
+
kind: z.ZodLiteral<"contact">;
|
|
161
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
162
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
163
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
164
|
+
locations: z.ZodArray<z.ZodObject<{
|
|
165
|
+
name: z.ZodString;
|
|
166
|
+
note: z.ZodOptional<z.ZodString>;
|
|
167
|
+
address: z.ZodString;
|
|
168
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
169
|
+
hours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
170
|
+
}, z.core.$strip>>;
|
|
171
|
+
}, z.core.$strip>;
|
|
172
|
+
export declare const faqSectionSchema: z.ZodObject<{
|
|
173
|
+
kind: z.ZodLiteral<"faq">;
|
|
174
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
175
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
176
|
+
items: z.ZodArray<z.ZodObject<{
|
|
177
|
+
question: z.ZodString;
|
|
178
|
+
answer: z.ZodString;
|
|
179
|
+
}, z.core.$strip>>;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
/** Jump list for a long page. Without one, fifteen tables is a scroll, not a document. */
|
|
182
|
+
export declare const indexSectionSchema: z.ZodObject<{
|
|
183
|
+
kind: z.ZodLiteral<"index">;
|
|
184
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
185
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
186
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
187
|
+
label: z.ZodString;
|
|
188
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
189
|
+
anchor: z.ZodString;
|
|
190
|
+
}, z.core.$strip>>;
|
|
191
|
+
}, z.core.$strip>;
|
|
192
|
+
export declare const tableSectionSchema: z.ZodObject<{
|
|
193
|
+
kind: z.ZodLiteral<"table">;
|
|
194
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
195
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
196
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
197
|
+
columns: z.ZodArray<z.ZodString>;
|
|
198
|
+
rows: z.ZodArray<z.ZodArray<z.ZodString>>;
|
|
199
|
+
monoColumns: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
200
|
+
statusColumn: z.ZodOptional<z.ZodNumber>;
|
|
201
|
+
note: z.ZodOptional<z.ZodString>;
|
|
202
|
+
}, z.core.$strip>;
|
|
203
|
+
export declare const siteSectionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
204
|
+
kind: z.ZodLiteral<"hero">;
|
|
205
|
+
eyebrow: z.ZodOptional<z.ZodString>;
|
|
206
|
+
statement: z.ZodString;
|
|
207
|
+
lead: z.ZodArray<z.ZodString>;
|
|
208
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
209
|
+
label: z.ZodString;
|
|
210
|
+
href: z.ZodString;
|
|
211
|
+
}, z.core.$strip>>>;
|
|
212
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
213
|
+
kind: z.ZodLiteral<"prose">;
|
|
214
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
215
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
216
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
217
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
218
|
+
kind: z.ZodLiteral<"stats">;
|
|
219
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
220
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
221
|
+
stats: z.ZodArray<z.ZodObject<{
|
|
222
|
+
label: z.ZodString;
|
|
223
|
+
value: z.ZodString;
|
|
224
|
+
note: z.ZodOptional<z.ZodString>;
|
|
225
|
+
}, z.core.$strip>>;
|
|
226
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
227
|
+
kind: z.ZodLiteral<"meter">;
|
|
228
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
229
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
230
|
+
label: z.ZodString;
|
|
231
|
+
value: z.ZodNumber;
|
|
232
|
+
of: z.ZodNumber;
|
|
233
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
234
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
235
|
+
kind: z.ZodLiteral<"cards">;
|
|
236
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
237
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
238
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
239
|
+
columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
|
|
240
|
+
cards: z.ZodArray<z.ZodObject<{
|
|
241
|
+
title: z.ZodString;
|
|
242
|
+
body: z.ZodString;
|
|
243
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
244
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
245
|
+
}, z.core.$strip>>;
|
|
246
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
247
|
+
kind: z.ZodLiteral<"definitions">;
|
|
248
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
249
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
250
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
251
|
+
items: z.ZodArray<z.ZodObject<{
|
|
252
|
+
term: z.ZodString;
|
|
253
|
+
detail: z.ZodString;
|
|
254
|
+
}, z.core.$strip>>;
|
|
255
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
256
|
+
kind: z.ZodLiteral<"feature">;
|
|
257
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
258
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
259
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
260
|
+
quote: z.ZodOptional<z.ZodString>;
|
|
261
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
262
|
+
label: z.ZodString;
|
|
263
|
+
href: z.ZodString;
|
|
264
|
+
}, z.core.$strip>>;
|
|
265
|
+
image: z.ZodOptional<z.ZodObject<{
|
|
266
|
+
src: z.ZodString;
|
|
267
|
+
alt: z.ZodString;
|
|
268
|
+
}, z.core.$strip>>;
|
|
269
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
270
|
+
kind: z.ZodLiteral<"contact">;
|
|
271
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
272
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
273
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
274
|
+
locations: z.ZodArray<z.ZodObject<{
|
|
275
|
+
name: z.ZodString;
|
|
276
|
+
note: z.ZodOptional<z.ZodString>;
|
|
277
|
+
address: z.ZodString;
|
|
278
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
279
|
+
hours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
280
|
+
}, z.core.$strip>>;
|
|
281
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
282
|
+
kind: z.ZodLiteral<"faq">;
|
|
283
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
284
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
285
|
+
items: z.ZodArray<z.ZodObject<{
|
|
286
|
+
question: z.ZodString;
|
|
287
|
+
answer: z.ZodString;
|
|
288
|
+
}, z.core.$strip>>;
|
|
289
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
290
|
+
kind: z.ZodLiteral<"index">;
|
|
291
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
292
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
293
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
294
|
+
label: z.ZodString;
|
|
295
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
296
|
+
anchor: z.ZodString;
|
|
297
|
+
}, z.core.$strip>>;
|
|
298
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
299
|
+
kind: z.ZodLiteral<"table">;
|
|
300
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
301
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
302
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
303
|
+
columns: z.ZodArray<z.ZodString>;
|
|
304
|
+
rows: z.ZodArray<z.ZodArray<z.ZodString>>;
|
|
305
|
+
monoColumns: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
306
|
+
statusColumn: z.ZodOptional<z.ZodNumber>;
|
|
307
|
+
note: z.ZodOptional<z.ZodString>;
|
|
308
|
+
}, z.core.$strip>], "kind">;
|
|
309
|
+
export type SiteSection = z.infer<typeof siteSectionSchema>;
|
|
310
|
+
export type SiteSectionKind = SiteSection['kind'];
|
|
311
|
+
export declare const sitePageSchema: z.ZodObject<{
|
|
312
|
+
path: z.ZodString;
|
|
313
|
+
navLabel: z.ZodOptional<z.ZodString>;
|
|
314
|
+
title: z.ZodString;
|
|
315
|
+
intro: z.ZodOptional<z.ZodString>;
|
|
316
|
+
sections: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
317
|
+
kind: z.ZodLiteral<"hero">;
|
|
318
|
+
eyebrow: z.ZodOptional<z.ZodString>;
|
|
319
|
+
statement: z.ZodString;
|
|
320
|
+
lead: z.ZodArray<z.ZodString>;
|
|
321
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
322
|
+
label: z.ZodString;
|
|
323
|
+
href: z.ZodString;
|
|
324
|
+
}, z.core.$strip>>>;
|
|
325
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
326
|
+
kind: z.ZodLiteral<"prose">;
|
|
327
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
328
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
329
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
330
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
331
|
+
kind: z.ZodLiteral<"stats">;
|
|
332
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
333
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
334
|
+
stats: z.ZodArray<z.ZodObject<{
|
|
335
|
+
label: z.ZodString;
|
|
336
|
+
value: z.ZodString;
|
|
337
|
+
note: z.ZodOptional<z.ZodString>;
|
|
338
|
+
}, z.core.$strip>>;
|
|
339
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
340
|
+
kind: z.ZodLiteral<"meter">;
|
|
341
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
342
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
343
|
+
label: z.ZodString;
|
|
344
|
+
value: z.ZodNumber;
|
|
345
|
+
of: z.ZodNumber;
|
|
346
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
347
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
348
|
+
kind: z.ZodLiteral<"cards">;
|
|
349
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
350
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
351
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
352
|
+
columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
|
|
353
|
+
cards: z.ZodArray<z.ZodObject<{
|
|
354
|
+
title: z.ZodString;
|
|
355
|
+
body: z.ZodString;
|
|
356
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
357
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
358
|
+
}, z.core.$strip>>;
|
|
359
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
360
|
+
kind: z.ZodLiteral<"definitions">;
|
|
361
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
362
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
363
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
364
|
+
items: z.ZodArray<z.ZodObject<{
|
|
365
|
+
term: z.ZodString;
|
|
366
|
+
detail: z.ZodString;
|
|
367
|
+
}, z.core.$strip>>;
|
|
368
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
369
|
+
kind: z.ZodLiteral<"feature">;
|
|
370
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
371
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
372
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
373
|
+
quote: z.ZodOptional<z.ZodString>;
|
|
374
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
375
|
+
label: z.ZodString;
|
|
376
|
+
href: z.ZodString;
|
|
377
|
+
}, z.core.$strip>>;
|
|
378
|
+
image: z.ZodOptional<z.ZodObject<{
|
|
379
|
+
src: z.ZodString;
|
|
380
|
+
alt: z.ZodString;
|
|
381
|
+
}, z.core.$strip>>;
|
|
382
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
383
|
+
kind: z.ZodLiteral<"contact">;
|
|
384
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
385
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
386
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
387
|
+
locations: z.ZodArray<z.ZodObject<{
|
|
388
|
+
name: z.ZodString;
|
|
389
|
+
note: z.ZodOptional<z.ZodString>;
|
|
390
|
+
address: z.ZodString;
|
|
391
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
392
|
+
hours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
393
|
+
}, z.core.$strip>>;
|
|
394
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
395
|
+
kind: z.ZodLiteral<"faq">;
|
|
396
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
397
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
398
|
+
items: z.ZodArray<z.ZodObject<{
|
|
399
|
+
question: z.ZodString;
|
|
400
|
+
answer: z.ZodString;
|
|
401
|
+
}, z.core.$strip>>;
|
|
402
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
403
|
+
kind: z.ZodLiteral<"index">;
|
|
404
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
405
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
406
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
407
|
+
label: z.ZodString;
|
|
408
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
409
|
+
anchor: z.ZodString;
|
|
410
|
+
}, z.core.$strip>>;
|
|
411
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
412
|
+
kind: z.ZodLiteral<"table">;
|
|
413
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
414
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
415
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
416
|
+
columns: z.ZodArray<z.ZodString>;
|
|
417
|
+
rows: z.ZodArray<z.ZodArray<z.ZodString>>;
|
|
418
|
+
monoColumns: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
419
|
+
statusColumn: z.ZodOptional<z.ZodNumber>;
|
|
420
|
+
note: z.ZodOptional<z.ZodString>;
|
|
421
|
+
}, z.core.$strip>], "kind">>;
|
|
422
|
+
}, z.core.$strip>;
|
|
423
|
+
export type SitePage = z.infer<typeof sitePageSchema>;
|
|
424
|
+
/** Everything the site chrome needs: the masthead, the nav, the footer. */
|
|
425
|
+
export declare const siteChromeSchema: z.ZodObject<{
|
|
426
|
+
name: z.ZodString;
|
|
427
|
+
tagline: z.ZodString;
|
|
428
|
+
footerNote: z.ZodString;
|
|
429
|
+
host: z.ZodOptional<z.ZodString>;
|
|
430
|
+
}, z.core.$strip>;
|
|
431
|
+
export type SiteChrome = z.infer<typeof siteChromeSchema>;
|
|
432
|
+
/**
|
|
433
|
+
* One object a generator emits: the whole site, plus (optionally) where every
|
|
434
|
+
* field of it came from. This is the machine-checkable boundary between "a
|
|
435
|
+
* model wrote something" and "a site we can stand behind".
|
|
436
|
+
*/
|
|
437
|
+
export declare const siteSpecSchema: z.ZodObject<{
|
|
438
|
+
chrome: z.ZodObject<{
|
|
439
|
+
name: z.ZodString;
|
|
440
|
+
tagline: z.ZodString;
|
|
441
|
+
footerNote: z.ZodString;
|
|
442
|
+
host: z.ZodOptional<z.ZodString>;
|
|
443
|
+
}, z.core.$strip>;
|
|
444
|
+
pages: z.ZodArray<z.ZodObject<{
|
|
445
|
+
path: z.ZodString;
|
|
446
|
+
navLabel: z.ZodOptional<z.ZodString>;
|
|
447
|
+
title: z.ZodString;
|
|
448
|
+
intro: z.ZodOptional<z.ZodString>;
|
|
449
|
+
sections: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
450
|
+
kind: z.ZodLiteral<"hero">;
|
|
451
|
+
eyebrow: z.ZodOptional<z.ZodString>;
|
|
452
|
+
statement: z.ZodString;
|
|
453
|
+
lead: z.ZodArray<z.ZodString>;
|
|
454
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
455
|
+
label: z.ZodString;
|
|
456
|
+
href: z.ZodString;
|
|
457
|
+
}, z.core.$strip>>>;
|
|
458
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
459
|
+
kind: z.ZodLiteral<"prose">;
|
|
460
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
461
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
462
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
463
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
464
|
+
kind: z.ZodLiteral<"stats">;
|
|
465
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
466
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
467
|
+
stats: z.ZodArray<z.ZodObject<{
|
|
468
|
+
label: z.ZodString;
|
|
469
|
+
value: z.ZodString;
|
|
470
|
+
note: z.ZodOptional<z.ZodString>;
|
|
471
|
+
}, z.core.$strip>>;
|
|
472
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
473
|
+
kind: z.ZodLiteral<"meter">;
|
|
474
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
475
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
476
|
+
label: z.ZodString;
|
|
477
|
+
value: z.ZodNumber;
|
|
478
|
+
of: z.ZodNumber;
|
|
479
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
480
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
481
|
+
kind: z.ZodLiteral<"cards">;
|
|
482
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
483
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
484
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
485
|
+
columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
|
|
486
|
+
cards: z.ZodArray<z.ZodObject<{
|
|
487
|
+
title: z.ZodString;
|
|
488
|
+
body: z.ZodString;
|
|
489
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
490
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
491
|
+
}, z.core.$strip>>;
|
|
492
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
493
|
+
kind: z.ZodLiteral<"definitions">;
|
|
494
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
495
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
496
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
497
|
+
items: z.ZodArray<z.ZodObject<{
|
|
498
|
+
term: z.ZodString;
|
|
499
|
+
detail: z.ZodString;
|
|
500
|
+
}, z.core.$strip>>;
|
|
501
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
502
|
+
kind: z.ZodLiteral<"feature">;
|
|
503
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
504
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
505
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
506
|
+
quote: z.ZodOptional<z.ZodString>;
|
|
507
|
+
cta: z.ZodOptional<z.ZodObject<{
|
|
508
|
+
label: z.ZodString;
|
|
509
|
+
href: z.ZodString;
|
|
510
|
+
}, z.core.$strip>>;
|
|
511
|
+
image: z.ZodOptional<z.ZodObject<{
|
|
512
|
+
src: z.ZodString;
|
|
513
|
+
alt: z.ZodString;
|
|
514
|
+
}, z.core.$strip>>;
|
|
515
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
516
|
+
kind: z.ZodLiteral<"contact">;
|
|
517
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
518
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
519
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
520
|
+
locations: z.ZodArray<z.ZodObject<{
|
|
521
|
+
name: z.ZodString;
|
|
522
|
+
note: z.ZodOptional<z.ZodString>;
|
|
523
|
+
address: z.ZodString;
|
|
524
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
525
|
+
hours: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
526
|
+
}, z.core.$strip>>;
|
|
527
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
528
|
+
kind: z.ZodLiteral<"faq">;
|
|
529
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
530
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
531
|
+
items: z.ZodArray<z.ZodObject<{
|
|
532
|
+
question: z.ZodString;
|
|
533
|
+
answer: z.ZodString;
|
|
534
|
+
}, z.core.$strip>>;
|
|
535
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
536
|
+
kind: z.ZodLiteral<"index">;
|
|
537
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
538
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
539
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
540
|
+
label: z.ZodString;
|
|
541
|
+
meta: z.ZodOptional<z.ZodString>;
|
|
542
|
+
anchor: z.ZodString;
|
|
543
|
+
}, z.core.$strip>>;
|
|
544
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
545
|
+
kind: z.ZodLiteral<"table">;
|
|
546
|
+
heading: z.ZodOptional<z.ZodString>;
|
|
547
|
+
blurb: z.ZodOptional<z.ZodString>;
|
|
548
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
549
|
+
columns: z.ZodArray<z.ZodString>;
|
|
550
|
+
rows: z.ZodArray<z.ZodArray<z.ZodString>>;
|
|
551
|
+
monoColumns: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
552
|
+
statusColumn: z.ZodOptional<z.ZodNumber>;
|
|
553
|
+
note: z.ZodOptional<z.ZodString>;
|
|
554
|
+
}, z.core.$strip>], "kind">>;
|
|
555
|
+
}, z.core.$strip>>;
|
|
556
|
+
provenance: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
557
|
+
kind: z.ZodLiteral<"scraped">;
|
|
558
|
+
url: z.ZodURL;
|
|
559
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
560
|
+
kind: z.ZodLiteral<"operator">;
|
|
561
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
562
|
+
kind: z.ZodLiteral<"inferred">;
|
|
563
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
564
|
+
kind: z.ZodLiteral<"not-found">;
|
|
565
|
+
}, z.core.$strip>], "kind">>>;
|
|
566
|
+
}, z.core.$strip>;
|
|
567
|
+
export type SiteSpec = z.infer<typeof siteSpecSchema>;
|
|
568
|
+
/** Nav entry: a label and where it goes, nothing more. */
|
|
569
|
+
export declare const siteNavItemSchema: z.ZodObject<{
|
|
570
|
+
path: z.ZodString;
|
|
571
|
+
label: z.ZodString;
|
|
572
|
+
}, z.core.$strip>;
|
|
573
|
+
export type SiteNavItem = z.infer<typeof siteNavItemSchema>;
|