@marktiderman/genesis-sites 0.1.0 → 0.2.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.
Files changed (47) hide show
  1. package/README.md +152 -8
  2. package/dist/assets/islands.77d11f5697.js +1 -0
  3. package/dist/assets/sites-forms.4e6aa42497.css +10 -0
  4. package/dist/assets/sites-forms.css +1 -1
  5. package/dist/assets/sites.css +1 -1
  6. package/dist/assets/sites.e1ffd2708b.css +2 -0
  7. package/dist/blocks.d.ts +1 -1
  8. package/dist/blocks.js +5 -1
  9. package/dist/blocks.js.map +1 -1
  10. package/dist/chunk-3VKTBE7S.js +69 -0
  11. package/dist/chunk-3VKTBE7S.js.map +1 -0
  12. package/dist/chunk-C375ZPU2.js +2241 -0
  13. package/dist/chunk-C375ZPU2.js.map +1 -0
  14. package/dist/{chunk-GA7U3CIN.js → chunk-IXMY4B56.js} +229 -10
  15. package/dist/chunk-IXMY4B56.js.map +1 -0
  16. package/dist/chunk-VZUDRPFG.js +13 -0
  17. package/dist/chunk-VZUDRPFG.js.map +1 -0
  18. package/dist/{chunk-KEF3V5ZN.js → chunk-ZGWGQGT2.js} +169 -73
  19. package/dist/chunk-ZGWGQGT2.js.map +1 -0
  20. package/dist/import.d.ts +130 -0
  21. package/dist/import.js +330 -0
  22. package/dist/import.js.map +1 -0
  23. package/dist/index.d.ts +40 -7
  24. package/dist/index.js +5 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/{registry-CdgVymsu.d.ts → registry-D_DCWRTc.d.ts} +274 -8
  27. package/dist/sections.d.ts +422 -6
  28. package/dist/sections.js +4 -2
  29. package/dist/{store-BzGw2i5J.d.ts → store-DkSycDhq.d.ts} +119 -53
  30. package/dist/supabase.d.ts +5 -5
  31. package/dist/supabase.js +115 -6
  32. package/dist/supabase.js.map +1 -1
  33. package/dist/web.d.ts +26 -8
  34. package/dist/web.js +142 -18
  35. package/dist/web.js.map +1 -1
  36. package/migrations/0001_genesis_sites.sql +64 -6
  37. package/migrations/0002_genesis_sites_posts.sql +404 -0
  38. package/migrations/tests/0001_genesis_sites.test.sql +30 -1
  39. package/migrations/tests/0002_genesis_sites_posts.test.sql +242 -0
  40. package/package.json +18 -10
  41. package/dist/assets/islands.230b20b9c4.js +0 -1
  42. package/dist/assets/sites-forms.5e6ebf31c3.css +0 -10
  43. package/dist/assets/sites.b28b796c6f.css +0 -2
  44. package/dist/chunk-43XUAO63.js +0 -1255
  45. package/dist/chunk-43XUAO63.js.map +0 -1
  46. package/dist/chunk-GA7U3CIN.js.map +0 -1
  47. package/dist/chunk-KEF3V5ZN.js.map +0 -1
@@ -1,7 +1,7 @@
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';
1
+ import { Y as SectionDefinition, d as Link, O as RenderContext, S as SectionNode, a6 as Surface, I as Image, F as FileRef, A as AnySectionDefinition } from './registry-D_DCWRTc.js';
2
+ import { z } from 'zod';
2
3
  import * as lucide_react from 'lucide-react';
3
4
  import * as React from 'react';
4
- import { z } from 'zod';
5
5
  import { BandProps } from '@marktiderman/genesis-ui/band';
6
6
  import { HeaderSlotProps } from '@marktiderman/genesis-forms-web';
7
7
 
@@ -11,6 +11,9 @@ declare const ctaSection: Readonly<SectionDefinition<{
11
11
  label: string;
12
12
  href: string;
13
13
  newTab?: boolean | undefined;
14
+ target?: "_self" | "_blank" | undefined;
15
+ external?: boolean | undefined;
16
+ event?: string | undefined;
14
17
  };
15
18
  surface: "base" | "muted" | "accent" | "inverse";
16
19
  body?: string | undefined;
@@ -18,6 +21,9 @@ declare const ctaSection: Readonly<SectionDefinition<{
18
21
  label: string;
19
22
  href: string;
20
23
  newTab?: boolean | undefined;
24
+ target?: "_self" | "_blank" | undefined;
25
+ external?: boolean | undefined;
26
+ event?: string | undefined;
21
27
  } | undefined;
22
28
  anchor?: string | undefined;
23
29
  }>>;
@@ -54,12 +60,33 @@ declare const featuresSection: Readonly<SectionDefinition<{
54
60
  label: string;
55
61
  href: string;
56
62
  newTab?: boolean | undefined;
63
+ target?: "_self" | "_blank" | undefined;
64
+ external?: boolean | undefined;
65
+ event?: string | undefined;
66
+ } | undefined;
67
+ cta?: {
68
+ label: string;
69
+ href: string;
70
+ newTab?: boolean | undefined;
71
+ target?: "_self" | "_blank" | undefined;
72
+ external?: boolean | undefined;
73
+ event?: string | undefined;
57
74
  } | undefined;
75
+ note?: string | undefined;
58
76
  }[];
59
77
  columns: 2 | 4 | 3;
78
+ numbered: boolean;
60
79
  surface: "base" | "muted" | "accent" | "inverse";
61
80
  eyebrow?: string | undefined;
62
81
  body?: string | undefined;
82
+ cta?: {
83
+ label: string;
84
+ href: string;
85
+ newTab?: boolean | undefined;
86
+ target?: "_self" | "_blank" | undefined;
87
+ external?: boolean | undefined;
88
+ event?: string | undefined;
89
+ } | undefined;
63
90
  anchor?: string | undefined;
64
91
  }>>;
65
92
 
@@ -70,12 +97,18 @@ declare const footerSection: Readonly<SectionDefinition<{
70
97
  label: string;
71
98
  href: string;
72
99
  newTab?: boolean | undefined;
100
+ target?: "_self" | "_blank" | undefined;
101
+ external?: boolean | undefined;
102
+ event?: string | undefined;
73
103
  }[];
74
104
  }[];
75
105
  links: {
76
106
  label: string;
77
107
  href: string;
78
108
  newTab?: boolean | undefined;
109
+ target?: "_self" | "_blank" | undefined;
110
+ external?: boolean | undefined;
111
+ event?: string | undefined;
79
112
  }[];
80
113
  surface: "base" | "muted" | "accent" | "inverse";
81
114
  tagline?: string | undefined;
@@ -117,11 +150,17 @@ declare const heroSection: Readonly<SectionDefinition<{
117
150
  label: string;
118
151
  href: string;
119
152
  newTab?: boolean | undefined;
153
+ target?: "_self" | "_blank" | undefined;
154
+ external?: boolean | undefined;
155
+ event?: string | undefined;
120
156
  } | undefined;
121
157
  secondaryCta?: {
122
158
  label: string;
123
159
  href: string;
124
160
  newTab?: boolean | undefined;
161
+ target?: "_self" | "_blank" | undefined;
162
+ external?: boolean | undefined;
163
+ event?: string | undefined;
125
164
  } | undefined;
126
165
  image?: {
127
166
  src: string;
@@ -140,7 +179,7 @@ declare const heroSection: Readonly<SectionDefinition<{
140
179
  declare const logosSection: Readonly<SectionDefinition<{
141
180
  items: {
142
181
  name: string;
143
- image: {
182
+ image?: {
144
183
  src: string;
145
184
  alt: string;
146
185
  decorative?: boolean | undefined;
@@ -150,11 +189,12 @@ declare const logosSection: Readonly<SectionDefinition<{
150
189
  x: number;
151
190
  y: number;
152
191
  } | undefined;
153
- };
192
+ } | undefined;
154
193
  href?: string | undefined;
155
194
  }[];
156
195
  surface: "base" | "muted" | "accent" | "inverse";
157
196
  heading?: string | undefined;
197
+ claim?: string | undefined;
158
198
  anchor?: string | undefined;
159
199
  }>>;
160
200
 
@@ -175,6 +215,9 @@ declare const navSection: Readonly<SectionDefinition<{
175
215
  label: string;
176
216
  href: string;
177
217
  newTab?: boolean | undefined;
218
+ target?: "_self" | "_blank" | undefined;
219
+ external?: boolean | undefined;
220
+ event?: string | undefined;
178
221
  } | undefined;
179
222
  }>>;
180
223
 
@@ -190,10 +233,39 @@ declare const pricingSection: Readonly<SectionDefinition<{
190
233
  label: string;
191
234
  href: string;
192
235
  newTab?: boolean | undefined;
236
+ target?: "_self" | "_blank" | undefined;
237
+ external?: boolean | undefined;
238
+ event?: string | undefined;
193
239
  } | undefined;
194
240
  highlighted?: boolean | undefined;
241
+ badge?: string | undefined;
242
+ }[];
243
+ groups: {
244
+ heading: string;
245
+ tiers: {
246
+ name: string;
247
+ price: string;
248
+ features: string[];
249
+ period?: string | undefined;
250
+ description?: string | undefined;
251
+ cta?: {
252
+ label: string;
253
+ href: string;
254
+ newTab?: boolean | undefined;
255
+ target?: "_self" | "_blank" | undefined;
256
+ external?: boolean | undefined;
257
+ event?: string | undefined;
258
+ } | undefined;
259
+ highlighted?: boolean | undefined;
260
+ badge?: string | undefined;
261
+ }[];
262
+ eyebrow?: string | undefined;
263
+ body?: string | undefined;
264
+ note?: string | undefined;
265
+ anchor?: string | undefined;
195
266
  }[];
196
267
  surface: "base" | "muted" | "accent" | "inverse";
268
+ eyebrow?: string | undefined;
197
269
  body?: string | undefined;
198
270
  note?: string | undefined;
199
271
  anchor?: string | undefined;
@@ -243,6 +315,338 @@ declare const testimonialsSection: Readonly<SectionDefinition<{
243
315
  anchor?: string | undefined;
244
316
  }>>;
245
317
 
318
+ /** A post's date as the page says it, in UTC so every visitor sees the same day. */
319
+ declare function formatPostDate(iso: string, lang: string): string;
320
+ declare const blogListSection: Readonly<SectionDefinition<{
321
+ heading: string;
322
+ perPage: number;
323
+ paginate: boolean;
324
+ showExcerpt: boolean;
325
+ showDate: boolean;
326
+ emptyText: string;
327
+ surface: "base" | "muted" | "accent" | "inverse";
328
+ eyebrow?: string | undefined;
329
+ body?: string | undefined;
330
+ category?: string | undefined;
331
+ cta?: {
332
+ label: string;
333
+ href: string;
334
+ newTab?: boolean | undefined;
335
+ target?: "_self" | "_blank" | undefined;
336
+ external?: boolean | undefined;
337
+ event?: string | undefined;
338
+ } | undefined;
339
+ anchor?: string | undefined;
340
+ }>>;
341
+
342
+ declare const fileSection: Readonly<SectionDefinition<{
343
+ heading: string;
344
+ files: {
345
+ label: string;
346
+ file: {
347
+ src: string;
348
+ mime: "application/pdf" | "image/png" | "image/jpeg" | "image/webp" | "image/avif" | "image/gif";
349
+ bytes?: number | undefined;
350
+ };
351
+ description?: string | undefined;
352
+ }[];
353
+ surface: "base" | "muted" | "accent" | "inverse";
354
+ eyebrow?: string | undefined;
355
+ body?: string | undefined;
356
+ anchor?: string | undefined;
357
+ }>>;
358
+
359
+ declare const MAP_PROVIDERS: {
360
+ readonly openstreetmap: {
361
+ readonly name: "OpenStreetMap";
362
+ readonly origin: "https://www.openstreetmap.org";
363
+ };
364
+ readonly google: {
365
+ readonly name: "Google Maps";
366
+ readonly origin: "https://www.google.com";
367
+ };
368
+ };
369
+ type MapProvider = keyof typeof MAP_PROVIDERS;
370
+ declare const schema: z.ZodObject<{
371
+ eyebrow: z.ZodOptional<z.ZodString>;
372
+ heading: z.ZodString;
373
+ body: z.ZodOptional<z.ZodString>;
374
+ address: z.ZodArray<z.ZodString>;
375
+ provider: z.ZodDefault<z.ZodEnum<{
376
+ openstreetmap: "openstreetmap";
377
+ google: "google";
378
+ }>>;
379
+ query: z.ZodOptional<z.ZodString>;
380
+ lat: z.ZodOptional<z.ZodNumber>;
381
+ lng: z.ZodOptional<z.ZodNumber>;
382
+ zoom: z.ZodDefault<z.ZodNumber>;
383
+ title: z.ZodOptional<z.ZodString>;
384
+ image: z.ZodOptional<z.ZodObject<{
385
+ src: z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>;
386
+ alt: z.ZodDefault<z.ZodString>;
387
+ decorative: z.ZodOptional<z.ZodBoolean>;
388
+ width: z.ZodOptional<z.ZodNumber>;
389
+ height: z.ZodOptional<z.ZodNumber>;
390
+ focal: z.ZodOptional<z.ZodObject<{
391
+ x: z.ZodNumber;
392
+ y: z.ZodNumber;
393
+ }, z.core.$strip>>;
394
+ }, z.core.$strip>>;
395
+ contact: z.ZodDefault<z.ZodArray<z.ZodObject<{
396
+ label: z.ZodString;
397
+ href: z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>;
398
+ newTab: z.ZodOptional<z.ZodBoolean>;
399
+ target: z.ZodOptional<z.ZodEnum<{
400
+ _self: "_self";
401
+ _blank: "_blank";
402
+ }>>;
403
+ external: z.ZodOptional<z.ZodBoolean>;
404
+ event: z.ZodOptional<z.ZodString>;
405
+ }, z.core.$strip>>>;
406
+ primaryCta: z.ZodOptional<z.ZodObject<{
407
+ label: z.ZodString;
408
+ href: z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>;
409
+ newTab: z.ZodOptional<z.ZodBoolean>;
410
+ target: z.ZodOptional<z.ZodEnum<{
411
+ _self: "_self";
412
+ _blank: "_blank";
413
+ }>>;
414
+ external: z.ZodOptional<z.ZodBoolean>;
415
+ event: z.ZodOptional<z.ZodString>;
416
+ }, z.core.$strip>>;
417
+ secondaryCta: z.ZodOptional<z.ZodObject<{
418
+ label: z.ZodString;
419
+ href: z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>;
420
+ newTab: z.ZodOptional<z.ZodBoolean>;
421
+ target: z.ZodOptional<z.ZodEnum<{
422
+ _self: "_self";
423
+ _blank: "_blank";
424
+ }>>;
425
+ external: z.ZodOptional<z.ZodBoolean>;
426
+ event: z.ZodOptional<z.ZodString>;
427
+ }, z.core.$strip>>;
428
+ loadLabel: z.ZodDefault<z.ZodString>;
429
+ consentNote: z.ZodOptional<z.ZodString>;
430
+ surface: z.ZodDefault<z.ZodEnum<{
431
+ base: "base";
432
+ muted: "muted";
433
+ accent: "accent";
434
+ inverse: "inverse";
435
+ }>>;
436
+ anchor: z.ZodOptional<z.ZodString>;
437
+ }, z.core.$strip>;
438
+ type Props = z.infer<typeof schema>;
439
+ /** The provider's embed URL for these props: built here, never typed by an editor. */
440
+ declare function mapEmbedUrl(props: Pick<Props, "provider" | "query" | "address" | "lat" | "lng" | "zoom">): string;
441
+ /** The provider's own page for the place: the link that works without script. */
442
+ declare function mapPageUrl(props: Pick<Props, "provider" | "query" | "address" | "lat" | "lng" | "zoom">): string;
443
+ declare const mapSection: Readonly<SectionDefinition<{
444
+ heading: string;
445
+ address: string[];
446
+ provider: "openstreetmap" | "google";
447
+ zoom: number;
448
+ contact: {
449
+ label: string;
450
+ href: string;
451
+ newTab?: boolean | undefined;
452
+ target?: "_self" | "_blank" | undefined;
453
+ external?: boolean | undefined;
454
+ event?: string | undefined;
455
+ }[];
456
+ loadLabel: string;
457
+ surface: "base" | "muted" | "accent" | "inverse";
458
+ eyebrow?: string | undefined;
459
+ body?: string | undefined;
460
+ query?: string | undefined;
461
+ lat?: number | undefined;
462
+ lng?: number | undefined;
463
+ title?: string | undefined;
464
+ image?: {
465
+ src: string;
466
+ alt: string;
467
+ decorative?: boolean | undefined;
468
+ width?: number | undefined;
469
+ height?: number | undefined;
470
+ focal?: {
471
+ x: number;
472
+ y: number;
473
+ } | undefined;
474
+ } | undefined;
475
+ primaryCta?: {
476
+ label: string;
477
+ href: string;
478
+ newTab?: boolean | undefined;
479
+ target?: "_self" | "_blank" | undefined;
480
+ external?: boolean | undefined;
481
+ event?: string | undefined;
482
+ } | undefined;
483
+ secondaryCta?: {
484
+ label: string;
485
+ href: string;
486
+ newTab?: boolean | undefined;
487
+ target?: "_self" | "_blank" | undefined;
488
+ external?: boolean | undefined;
489
+ event?: string | undefined;
490
+ } | undefined;
491
+ consentNote?: string | undefined;
492
+ anchor?: string | undefined;
493
+ }>>;
494
+
495
+ declare const postBodySection: Readonly<SectionDefinition<{
496
+ showCover: boolean;
497
+ showAuthor: boolean;
498
+ showDate: boolean;
499
+ backLabel: string;
500
+ surface: "base" | "muted" | "accent" | "inverse";
501
+ }>>;
502
+
503
+ declare const WEEKDAYS: readonly ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
504
+ type Weekday = (typeof WEEKDAYS)[number];
505
+ /** How a class type's chip is drawn, from the brand's own colours. */
506
+ declare const CHIP_TONES: readonly ["primary", "inverse", "soft", "outline", "plain"];
507
+ declare const Session: z.ZodObject<{
508
+ day: z.ZodEnum<{
509
+ mon: "mon";
510
+ tue: "tue";
511
+ wed: "wed";
512
+ thu: "thu";
513
+ fri: "fri";
514
+ sat: "sat";
515
+ sun: "sun";
516
+ }>;
517
+ start: z.ZodString;
518
+ end: z.ZodOptional<z.ZodString>;
519
+ title: z.ZodString;
520
+ type: z.ZodOptional<z.ZodString>;
521
+ coach: z.ZodOptional<z.ZodString>;
522
+ location: z.ZodOptional<z.ZodString>;
523
+ note: z.ZodOptional<z.ZodString>;
524
+ link: z.ZodOptional<z.ZodObject<{
525
+ label: z.ZodString;
526
+ href: z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>;
527
+ newTab: z.ZodOptional<z.ZodBoolean>;
528
+ target: z.ZodOptional<z.ZodEnum<{
529
+ _self: "_self";
530
+ _blank: "_blank";
531
+ }>>;
532
+ external: z.ZodOptional<z.ZodBoolean>;
533
+ event: z.ZodOptional<z.ZodString>;
534
+ }, z.core.$strip>>;
535
+ }, z.core.$strip>;
536
+ type ScheduleSession = z.infer<typeof Session>;
537
+ /** `06:15` as the page says it: `6:15 am` or `06:15`. */
538
+ declare function formatTime(time: string, clock: "12h" | "24h"): string;
539
+ declare const scheduleSection: Readonly<SectionDefinition<{
540
+ heading: string;
541
+ days: ("mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun")[];
542
+ clock: "12h" | "24h";
543
+ types: {
544
+ id: string;
545
+ name: string;
546
+ tone: "inverse" | "primary" | "soft" | "outline" | "plain";
547
+ description?: string | undefined;
548
+ }[];
549
+ sessions: {
550
+ day: "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun";
551
+ start: string;
552
+ title: string;
553
+ end?: string | undefined;
554
+ type?: string | undefined;
555
+ coach?: string | undefined;
556
+ location?: string | undefined;
557
+ note?: string | undefined;
558
+ link?: {
559
+ label: string;
560
+ href: string;
561
+ newTab?: boolean | undefined;
562
+ target?: "_self" | "_blank" | undefined;
563
+ external?: boolean | undefined;
564
+ event?: string | undefined;
565
+ } | undefined;
566
+ }[];
567
+ emptyText: string;
568
+ surface: "base" | "muted" | "accent" | "inverse";
569
+ eyebrow?: string | undefined;
570
+ body?: string | undefined;
571
+ dayNames?: Partial<Record<"mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun", string>> | undefined;
572
+ footnote?: string | undefined;
573
+ anchor?: string | undefined;
574
+ }>>;
575
+
576
+ declare const teamSection: Readonly<SectionDefinition<{
577
+ heading: string;
578
+ members: {
579
+ name: string;
580
+ role?: string | undefined;
581
+ credentials?: string | undefined;
582
+ photo?: {
583
+ src: string;
584
+ alt: string;
585
+ decorative?: boolean | undefined;
586
+ width?: number | undefined;
587
+ height?: number | undefined;
588
+ focal?: {
589
+ x: number;
590
+ y: number;
591
+ } | undefined;
592
+ } | undefined;
593
+ summary?: string | undefined;
594
+ bio?: string | undefined;
595
+ quote?: {
596
+ text: string;
597
+ cite?: string | undefined;
598
+ } | undefined;
599
+ profile?: string | undefined;
600
+ cta?: {
601
+ label: string;
602
+ href: string;
603
+ newTab?: boolean | undefined;
604
+ target?: "_self" | "_blank" | undefined;
605
+ external?: boolean | undefined;
606
+ event?: string | undefined;
607
+ } | undefined;
608
+ anchor?: string | undefined;
609
+ }[];
610
+ columns: 2 | 4 | 3;
611
+ surface: "base" | "muted" | "accent" | "inverse";
612
+ eyebrow?: string | undefined;
613
+ body?: string | undefined;
614
+ anchor?: string | undefined;
615
+ }>>;
616
+
617
+ declare const timelineSection: Readonly<SectionDefinition<{
618
+ heading: string;
619
+ steps: {
620
+ title: string;
621
+ label?: string | undefined;
622
+ body?: string | undefined;
623
+ image?: {
624
+ src: string;
625
+ alt: string;
626
+ decorative?: boolean | undefined;
627
+ width?: number | undefined;
628
+ height?: number | undefined;
629
+ focal?: {
630
+ x: number;
631
+ y: number;
632
+ } | undefined;
633
+ } | undefined;
634
+ cta?: {
635
+ label: string;
636
+ href: string;
637
+ newTab?: boolean | undefined;
638
+ target?: "_self" | "_blank" | undefined;
639
+ external?: boolean | undefined;
640
+ event?: string | undefined;
641
+ } | undefined;
642
+ }[];
643
+ numbered: boolean;
644
+ surface: "base" | "muted" | "accent" | "inverse";
645
+ eyebrow?: string | undefined;
646
+ body?: string | undefined;
647
+ anchor?: string | undefined;
648
+ }>>;
649
+
246
650
  /** An in-page anchor (`#contact`): lowercase letters, digits and hyphens. */
247
651
  declare const Anchor: z.ZodOptional<z.ZodString>;
248
652
  declare const ICONS: {
@@ -296,6 +700,14 @@ declare const IconName: z.ZodEnum<{
296
700
  * paths. An unsafe link renders as an inert `#` and is logged.
297
701
  */
298
702
  declare function resolveHref(href: string, ctx: RenderContext): string;
703
+ /**
704
+ * A link's attributes: its checked href, and for an http(s) link, `rel` and
705
+ * `target`. An outbound link (`external`), or one that opens a new tab,
706
+ * gets `rel="noopener noreferrer"` and `data-gs-outbound` (for analytics);
707
+ * any other absolute link `rel="noopener"`. An outbound link whose href
708
+ * isn't http(s) (a document that skipped the schema) renders inert.
709
+ */
710
+ declare function linkAttrs(link: Link, ctx: RenderContext, defaultEvent?: string): Record<string, string>;
299
711
  type ButtonTone = "primary" | "secondary" | "outline" | "inverse" | "ghost";
300
712
  /** A link drawn as a button: at least 44px tall, with the focus ring. */
301
713
  declare function ButtonLink({ link, ctx, tone, className }: {
@@ -310,6 +722,10 @@ declare function TextLink({ link, ctx, className }: {
310
722
  ctx: RenderContext;
311
723
  className?: string;
312
724
  }): React.JSX.Element;
725
+ /** "PDF, 1.2 MB": what a download is, said beside its link. */
726
+ declare function fileDescription(file: FileRef): string;
727
+ /** A file's href: checked again, under the base path when it is a site path. Null when it isn't safe. */
728
+ declare function fileHref(file: FileRef, ctx: RenderContext): string | null;
313
729
  interface SiteImageProps {
314
730
  image: Image;
315
731
  className?: string;
@@ -372,7 +788,7 @@ declare const siteFormSlots: {
372
788
  /**
373
789
  * @marktiderman/genesis-sites/sections: the built-in section catalog.
374
790
  *
375
- * Importing this module registers the 13 built-in sections (unless a host
791
+ * Importing this module registers the 20 built-in sections (unless a host
376
792
  * registered a replacement first, with `{ replace: true }`). Each is
377
793
  * server-safe React on genesis-ui's `Band` and `Display`, mobile first, with
378
794
  * 2–4 variants and presets for the editor's Add picker.
@@ -383,4 +799,4 @@ declare const siteFormSlots: {
383
799
  /** The built-in sections, in the editor's order. */
384
800
  declare const builtInSections: readonly AnySectionDefinition[];
385
801
 
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 };
802
+ export { Anchor, ButtonLink, CHIP_TONES, HiddenTitle, ICONS, IconName, ItemTitle, MAP_PROVIDERS, type MapProvider, type ScheduleSession, SectionBand, SectionIntro, SectionTitle, SiteFormHeader, SiteImage, TextLink, WEEKDAYS, type Weekday, blogListSection, builtInSections, ctaSection, faqSection, featuresSection, fileDescription, fileHref, fileSection, footerSection, formEmbedSection, formatPostDate, formatTime, gallerySection, heroSection, linkAttrs, logosSection, mapEmbedUrl, mapPageUrl, mapSection, navSection, postBodySection, pricingSection, resolveHref, richTextSection, scheduleSection, siteFormSlots, statsSection, teamSection, testimonialsSection, timelineSection, titleId };
package/dist/sections.js CHANGED
@@ -1,4 +1,6 @@
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';
1
+ export { Anchor, ButtonLink, CHIP_TONES, HiddenTitle, ICONS, IconName, ItemTitle, MAP_PROVIDERS, SectionBand, SectionIntro, SectionTitle, SiteFormHeader, SiteImage, TextLink, WEEKDAYS, blogListSection, builtInSections, ctaSection, faqSection, featuresSection, fileDescription, fileHref, fileSection, footerSection, formEmbedSection, formatPostDate, formatTime, gallerySection, heroSection, linkAttrs, logosSection, mapEmbedUrl, mapPageUrl, mapSection, navSection, postBodySection, pricingSection, resolveHref, richTextSection, scheduleSection, siteFormSlots, statsSection, teamSection, testimonialsSection, timelineSection, titleId } from './chunk-C375ZPU2.js';
2
+ import './chunk-VZUDRPFG.js';
3
+ import './chunk-ZGWGQGT2.js';
4
+ import './chunk-3VKTBE7S.js';
3
5
  //# sourceMappingURL=sections.js.map
4
6
  //# sourceMappingURL=sections.js.map