@marktiderman/genesis-sites 0.0.0-stage → 0.1.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.
@@ -0,0 +1,386 @@
1
+ import { u as SectionDefinition, L as Link, p as RenderContext, S as SectionNode, K as Surface, I as Image, A as AnySectionDefinition } from './registry-CdgVymsu.js';
2
+ import * as lucide_react from 'lucide-react';
3
+ import * as React from 'react';
4
+ import { z } from 'zod';
5
+ import { BandProps } from '@marktiderman/genesis-ui/band';
6
+ import { HeaderSlotProps } from '@marktiderman/genesis-forms-web';
7
+
8
+ declare const ctaSection: Readonly<SectionDefinition<{
9
+ heading: string;
10
+ primaryCta: {
11
+ label: string;
12
+ href: string;
13
+ newTab?: boolean | undefined;
14
+ };
15
+ surface: "base" | "muted" | "accent" | "inverse";
16
+ body?: string | undefined;
17
+ secondaryCta?: {
18
+ label: string;
19
+ href: string;
20
+ newTab?: boolean | undefined;
21
+ } | undefined;
22
+ anchor?: string | undefined;
23
+ }>>;
24
+
25
+ declare const faqSection: Readonly<SectionDefinition<{
26
+ heading: string;
27
+ items: {
28
+ question: string;
29
+ answer: string;
30
+ }[];
31
+ surface: "base" | "muted" | "accent" | "inverse";
32
+ body?: string | undefined;
33
+ anchor?: string | undefined;
34
+ }>>;
35
+
36
+ declare const featuresSection: Readonly<SectionDefinition<{
37
+ heading: string;
38
+ items: {
39
+ title: string;
40
+ body: string;
41
+ icon?: "check" | "message" | "target" | "activity" | "award" | "calendar" | "clock" | "dumbbell" | "heart" | "leaf" | "mail" | "map-pin" | "phone" | "shield" | "smile" | "sparkles" | "star" | "trophy" | "users" | "zap" | undefined;
42
+ image?: {
43
+ src: string;
44
+ alt: string;
45
+ decorative?: boolean | undefined;
46
+ width?: number | undefined;
47
+ height?: number | undefined;
48
+ focal?: {
49
+ x: number;
50
+ y: number;
51
+ } | undefined;
52
+ } | undefined;
53
+ link?: {
54
+ label: string;
55
+ href: string;
56
+ newTab?: boolean | undefined;
57
+ } | undefined;
58
+ }[];
59
+ columns: 2 | 4 | 3;
60
+ surface: "base" | "muted" | "accent" | "inverse";
61
+ eyebrow?: string | undefined;
62
+ body?: string | undefined;
63
+ anchor?: string | undefined;
64
+ }>>;
65
+
66
+ declare const footerSection: Readonly<SectionDefinition<{
67
+ columns: {
68
+ heading: string;
69
+ links: {
70
+ label: string;
71
+ href: string;
72
+ newTab?: boolean | undefined;
73
+ }[];
74
+ }[];
75
+ links: {
76
+ label: string;
77
+ href: string;
78
+ newTab?: boolean | undefined;
79
+ }[];
80
+ surface: "base" | "muted" | "accent" | "inverse";
81
+ tagline?: string | undefined;
82
+ copyright?: string | undefined;
83
+ }>>;
84
+
85
+ declare const formEmbedSection: Readonly<SectionDefinition<{
86
+ heading: string;
87
+ form: string;
88
+ surface: "base" | "muted" | "accent" | "inverse";
89
+ anchor: string;
90
+ body?: string | undefined;
91
+ }>>;
92
+
93
+ declare const gallerySection: Readonly<SectionDefinition<{
94
+ images: {
95
+ src: string;
96
+ alt: string;
97
+ decorative?: boolean | undefined;
98
+ width?: number | undefined;
99
+ height?: number | undefined;
100
+ focal?: {
101
+ x: number;
102
+ y: number;
103
+ } | undefined;
104
+ caption?: string | undefined;
105
+ }[];
106
+ surface: "base" | "muted" | "accent" | "inverse";
107
+ heading?: string | undefined;
108
+ body?: string | undefined;
109
+ anchor?: string | undefined;
110
+ }>>;
111
+
112
+ declare const heroSection: Readonly<SectionDefinition<{
113
+ heading: string;
114
+ eyebrow?: string | undefined;
115
+ body?: string | undefined;
116
+ primaryCta?: {
117
+ label: string;
118
+ href: string;
119
+ newTab?: boolean | undefined;
120
+ } | undefined;
121
+ secondaryCta?: {
122
+ label: string;
123
+ href: string;
124
+ newTab?: boolean | undefined;
125
+ } | undefined;
126
+ image?: {
127
+ src: string;
128
+ alt: string;
129
+ decorative?: boolean | undefined;
130
+ width?: number | undefined;
131
+ height?: number | undefined;
132
+ focal?: {
133
+ x: number;
134
+ y: number;
135
+ } | undefined;
136
+ } | undefined;
137
+ anchor?: string | undefined;
138
+ }>>;
139
+
140
+ declare const logosSection: Readonly<SectionDefinition<{
141
+ items: {
142
+ name: string;
143
+ image: {
144
+ src: string;
145
+ alt: string;
146
+ decorative?: boolean | undefined;
147
+ width?: number | undefined;
148
+ height?: number | undefined;
149
+ focal?: {
150
+ x: number;
151
+ y: number;
152
+ } | undefined;
153
+ };
154
+ href?: string | undefined;
155
+ }[];
156
+ surface: "base" | "muted" | "accent" | "inverse";
157
+ heading?: string | undefined;
158
+ anchor?: string | undefined;
159
+ }>>;
160
+
161
+ declare const navSection: Readonly<SectionDefinition<{
162
+ showName: boolean;
163
+ logo?: {
164
+ src: string;
165
+ alt: string;
166
+ decorative?: boolean | undefined;
167
+ width?: number | undefined;
168
+ height?: number | undefined;
169
+ focal?: {
170
+ x: number;
171
+ y: number;
172
+ } | undefined;
173
+ } | undefined;
174
+ cta?: {
175
+ label: string;
176
+ href: string;
177
+ newTab?: boolean | undefined;
178
+ } | undefined;
179
+ }>>;
180
+
181
+ declare const pricingSection: Readonly<SectionDefinition<{
182
+ heading: string;
183
+ tiers: {
184
+ name: string;
185
+ price: string;
186
+ features: string[];
187
+ period?: string | undefined;
188
+ description?: string | undefined;
189
+ cta?: {
190
+ label: string;
191
+ href: string;
192
+ newTab?: boolean | undefined;
193
+ } | undefined;
194
+ highlighted?: boolean | undefined;
195
+ }[];
196
+ surface: "base" | "muted" | "accent" | "inverse";
197
+ body?: string | undefined;
198
+ note?: string | undefined;
199
+ anchor?: string | undefined;
200
+ }>>;
201
+
202
+ declare const richTextSection: Readonly<SectionDefinition<{
203
+ body: {
204
+ type: "doc";
205
+ content?: Record<string, unknown>[] | undefined;
206
+ };
207
+ surface: "base" | "muted" | "accent" | "inverse";
208
+ heading?: string | undefined;
209
+ anchor?: string | undefined;
210
+ }>>;
211
+
212
+ declare const statsSection: Readonly<SectionDefinition<{
213
+ items: {
214
+ value: string;
215
+ label: string;
216
+ }[];
217
+ surface: "base" | "muted" | "accent" | "inverse";
218
+ heading?: string | undefined;
219
+ body?: string | undefined;
220
+ anchor?: string | undefined;
221
+ }>>;
222
+
223
+ declare const testimonialsSection: Readonly<SectionDefinition<{
224
+ items: {
225
+ quote: string;
226
+ name: string;
227
+ role?: string | undefined;
228
+ avatar?: {
229
+ src: string;
230
+ alt: string;
231
+ decorative?: boolean | undefined;
232
+ width?: number | undefined;
233
+ height?: number | undefined;
234
+ focal?: {
235
+ x: number;
236
+ y: number;
237
+ } | undefined;
238
+ } | undefined;
239
+ }[];
240
+ surface: "base" | "muted" | "accent" | "inverse";
241
+ heading?: string | undefined;
242
+ body?: string | undefined;
243
+ anchor?: string | undefined;
244
+ }>>;
245
+
246
+ /** An in-page anchor (`#contact`): lowercase letters, digits and hyphens. */
247
+ declare const Anchor: z.ZodOptional<z.ZodString>;
248
+ declare const ICONS: {
249
+ activity: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
250
+ award: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
251
+ calendar: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
252
+ check: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
253
+ clock: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
254
+ dumbbell: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
255
+ heart: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
256
+ leaf: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
257
+ mail: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
258
+ "map-pin": React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
259
+ message: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
260
+ phone: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
261
+ shield: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
262
+ smile: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
263
+ sparkles: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
264
+ star: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
265
+ target: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
266
+ trophy: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
267
+ users: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
268
+ zap: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
269
+ };
270
+ type IconName = keyof typeof ICONS;
271
+ declare const IconName: z.ZodEnum<{
272
+ check: "check";
273
+ message: "message";
274
+ target: "target";
275
+ activity: "activity";
276
+ award: "award";
277
+ calendar: "calendar";
278
+ clock: "clock";
279
+ dumbbell: "dumbbell";
280
+ heart: "heart";
281
+ leaf: "leaf";
282
+ mail: "mail";
283
+ "map-pin": "map-pin";
284
+ phone: "phone";
285
+ shield: "shield";
286
+ smile: "smile";
287
+ sparkles: "sparkles";
288
+ star: "star";
289
+ trophy: "trophy";
290
+ users: "users";
291
+ zap: "zap";
292
+ }>;
293
+ /**
294
+ * A stored link as it prints: checked again (a document that skipped the
295
+ * schema can't smuggle `javascript:` in), with the host's base path on site
296
+ * paths. An unsafe link renders as an inert `#` and is logged.
297
+ */
298
+ declare function resolveHref(href: string, ctx: RenderContext): string;
299
+ type ButtonTone = "primary" | "secondary" | "outline" | "inverse" | "ghost";
300
+ /** A link drawn as a button: at least 44px tall, with the focus ring. */
301
+ declare function ButtonLink({ link, ctx, tone, className }: {
302
+ link: Link;
303
+ ctx: RenderContext;
304
+ tone?: ButtonTone;
305
+ className?: string;
306
+ }): React.JSX.Element;
307
+ /** A text link: underlined, at least 24px tall (WCAG 2.5.8). */
308
+ declare function TextLink({ link, ctx, className }: {
309
+ link: Link;
310
+ ctx: RenderContext;
311
+ className?: string;
312
+ }): React.JSX.Element;
313
+ interface SiteImageProps {
314
+ image: Image;
315
+ className?: string;
316
+ /** `sizes` for the browser's pick; the image is one source here (image CDN transforms are V1). */
317
+ sizes?: string;
318
+ /** The page's largest image (a hero): loaded eagerly, at high priority. */
319
+ priority?: boolean;
320
+ ctx: RenderContext;
321
+ }
322
+ /** An image with alt text (empty when decorative), its size to stop layout shift, and lazy loading below the fold. */
323
+ declare function SiteImage({ image, className, sizes, priority, ctx }: SiteImageProps): React.JSX.Element | null;
324
+ /** The section's title, at the level the page gives it (h1 for the page's main heading). */
325
+ declare function SectionTitle({ ctx, id, size, className, children }: {
326
+ ctx: RenderContext;
327
+ id: string;
328
+ size?: "xl" | "lg" | "md" | "sm";
329
+ className?: string;
330
+ children: React.ReactNode;
331
+ }): React.JSX.Element;
332
+ /** An item's title inside a section: one level below the section's. */
333
+ declare function ItemTitle({ ctx, className, children }: {
334
+ ctx: RenderContext;
335
+ className?: string;
336
+ children: React.ReactNode;
337
+ }): React.JSX.Element;
338
+ declare const titleId: (ctx: RenderContext, part?: string) => string;
339
+ /** The band a body section sits on, named by its title. */
340
+ declare function SectionBand({ node, ctx, anchor, surface, spacing, width, labelled, className, children, }: {
341
+ node: SectionNode;
342
+ ctx: RenderContext;
343
+ anchor?: string | undefined;
344
+ surface?: Surface;
345
+ spacing?: BandProps["spacing"];
346
+ width?: BandProps["width"];
347
+ labelled?: boolean;
348
+ className?: string;
349
+ children: React.ReactNode;
350
+ }): React.JSX.Element;
351
+ /** A section's heading block: an eyebrow, the title and a lead, centred or left. */
352
+ declare function SectionIntro({ ctx, eyebrow, heading, body, align, tone, size, }: {
353
+ ctx: RenderContext;
354
+ eyebrow?: string | undefined;
355
+ heading?: string | undefined;
356
+ body?: string | undefined;
357
+ align?: "center" | "left";
358
+ tone?: "muted" | "inherit";
359
+ size?: "xl" | "lg" | "md" | "sm";
360
+ }): React.JSX.Element | null;
361
+ /** A section with no visible title still needs a name: a visually hidden one. */
362
+ declare function HiddenTitle({ ctx, children }: {
363
+ ctx: RenderContext;
364
+ children: React.ReactNode;
365
+ }): React.JSX.Element;
366
+
367
+ declare function SiteFormHeader({ title, description, requiredNote }: HeaderSlotProps): React.JSX.Element;
368
+ declare const siteFormSlots: {
369
+ header: typeof SiteFormHeader;
370
+ };
371
+
372
+ /**
373
+ * @marktiderman/genesis-sites/sections: the built-in section catalog.
374
+ *
375
+ * Importing this module registers the 13 built-in sections (unless a host
376
+ * registered a replacement first, with `{ replace: true }`). Each is
377
+ * server-safe React on genesis-ui's `Band` and `Display`, mobile first, with
378
+ * 2–4 variants and presets for the editor's Add picker.
379
+ *
380
+ * @packageDocumentation
381
+ */
382
+
383
+ /** The built-in sections, in the editor's order. */
384
+ declare const builtInSections: readonly AnySectionDefinition[];
385
+
386
+ export { Anchor, ButtonLink, HiddenTitle, ICONS, IconName, ItemTitle, SectionBand, SectionIntro, SectionTitle, SiteFormHeader, SiteImage, TextLink, builtInSections, ctaSection, faqSection, featuresSection, footerSection, formEmbedSection, gallerySection, heroSection, logosSection, navSection, pricingSection, resolveHref, richTextSection, siteFormSlots, statsSection, testimonialsSection, titleId };
@@ -0,0 +1,4 @@
1
+ export { Anchor, ButtonLink, HiddenTitle, ICONS, IconName, ItemTitle, SectionBand, SectionIntro, SectionTitle, SiteFormHeader, SiteImage, TextLink, builtInSections, ctaSection, faqSection, featuresSection, footerSection, formEmbedSection, gallerySection, heroSection, logosSection, navSection, pricingSection, resolveHref, richTextSection, siteFormSlots, statsSection, testimonialsSection, titleId } from './chunk-43XUAO63.js';
2
+ import './chunk-KEF3V5ZN.js';
3
+ //# sourceMappingURL=sections.js.map
4
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sections.js"}