@vectoriox/iox-ui 5.26.0 → 5.27.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,1111 @@
1
+ // GENERATED from iox-ai-guidance flavor-spec.v1.json — do not edit; re-run scripts/gen-flavor-spec.mjs
2
+ // (npm run gen:flavor-spec). The JSON is itself generated by iox-ai-guidance
3
+ // architecture/builder/design-system/build-spec.mjs: change a value THERE, then regenerate both.
4
+ /* eslint-disable */
5
+ export const SPEC_SITE_PLAN_SHAPE = {
6
+ "version": "1",
7
+ "source": "{ kind: 'template', templateId, templateVersion } | { kind: 'ai', runId }",
8
+ "business": "{ name (required), tagline?, facts: { email?, phone?, city? } }",
9
+ "design": "{ flavorId, seed, pairId, shape, density, motion, pillButtons, mode } — the DesignChoices of the design system",
10
+ "contentTypes": "ContentTypePlan[] — { name, label, fields[], seed }",
11
+ "dataSources": "DataSourcePlan[] — merged by alias into the org library",
12
+ "pages": "PagePlan[] — { key, name, route, isHome?, template?, routeSource?, sections: { pattern, slots?, binding?, without? }[] }",
13
+ "globals": "{ header: patternId, footer: patternId }"
14
+ } as const;
15
+
16
+ export const SPEC_SITE_FACTS = {
17
+ "email": "Email address",
18
+ "phone": "Phone number",
19
+ "city": "City or area"
20
+ } as const;
21
+
22
+ export const SPEC_SITE_PATTERNS = {
23
+ "nav.inline-cta": {
24
+ "family": "nav",
25
+ "label": "Navigation bar",
26
+ "global": "before",
27
+ "node": {
28
+ "t": "Container",
29
+ "es": "nav",
30
+ "tag": "nav",
31
+ "lay": {
32
+ "display": "flex",
33
+ "justifyContent": "space-between",
34
+ "alignItems": "center",
35
+ "gap": "var(--iox-space-gap)"
36
+ },
37
+ "c": [
38
+ {
39
+ "t": "LinkedContainer",
40
+ "es": "box",
41
+ "href": "/",
42
+ "c": [
43
+ {
44
+ "t": "Heading",
45
+ "es": "h3",
46
+ "level": "h3",
47
+ "slot": "brand",
48
+ "fromBusiness": "name"
49
+ }
50
+ ]
51
+ },
52
+ {
53
+ "t": "Container",
54
+ "es": "box",
55
+ "lay": {
56
+ "display": "flex",
57
+ "flexWrap": "wrap",
58
+ "gap": "28px",
59
+ "alignItems": "center"
60
+ },
61
+ "c": [
62
+ {
63
+ "t": "Repeater",
64
+ "src": "$navPages",
65
+ "c": [
66
+ {
67
+ "t": "Link",
68
+ "es": "link",
69
+ "bind": "page.name",
70
+ "href": "$page.route"
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "t": "ButtonBlock",
76
+ "es": "button-primary",
77
+ "href": "/contact",
78
+ "slot": "cta",
79
+ "text": "Get in touch"
80
+ }
81
+ ]
82
+ }
83
+ ]
84
+ }
85
+ },
86
+ "footer.columns": {
87
+ "family": "footer",
88
+ "label": "Footer, three columns",
89
+ "global": "after",
90
+ "node": {
91
+ "t": "Section",
92
+ "es": "section",
93
+ "scheme": "inverse",
94
+ "c": [
95
+ {
96
+ "t": "Container",
97
+ "es": "box",
98
+ "lay": {
99
+ "display": "grid",
100
+ "gridTemplateColumns": "2fr 1fr 1fr",
101
+ "gap": "var(--iox-space-gap)"
102
+ },
103
+ "resp": {
104
+ "mobile": {
105
+ "gridTemplateColumns": "minmax(0, 1fr)"
106
+ }
107
+ },
108
+ "c": [
109
+ {
110
+ "t": "Container",
111
+ "es": "box",
112
+ "lay": {
113
+ "display": "flex",
114
+ "flexDirection": "column",
115
+ "gap": "8px"
116
+ },
117
+ "c": [
118
+ {
119
+ "t": "Heading",
120
+ "es": "h3",
121
+ "level": "h3",
122
+ "slot": "brand",
123
+ "fromBusiness": "name"
124
+ },
125
+ {
126
+ "t": "Text",
127
+ "es": "small",
128
+ "slot": "tagline",
129
+ "fromBusiness": "tagline",
130
+ "ph": "copy"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "t": "Container",
136
+ "es": "box",
137
+ "lay": {
138
+ "display": "flex",
139
+ "flexDirection": "column",
140
+ "gap": "8px"
141
+ },
142
+ "c": [
143
+ {
144
+ "t": "Heading",
145
+ "es": "eyebrow",
146
+ "level": "h4",
147
+ "text": "Pages"
148
+ },
149
+ {
150
+ "t": "Repeater",
151
+ "src": "$navPages",
152
+ "c": [
153
+ {
154
+ "t": "Link",
155
+ "es": "link",
156
+ "bind": "page.name",
157
+ "href": "$page.route"
158
+ }
159
+ ]
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ "t": "Container",
165
+ "es": "box",
166
+ "lay": {
167
+ "display": "flex",
168
+ "flexDirection": "column",
169
+ "gap": "8px"
170
+ },
171
+ "c": [
172
+ {
173
+ "t": "Heading",
174
+ "es": "eyebrow",
175
+ "level": "h4",
176
+ "text": "Contact"
177
+ },
178
+ {
179
+ "t": "Text",
180
+ "es": "small",
181
+ "ph": "email"
182
+ },
183
+ {
184
+ "t": "Text",
185
+ "es": "small",
186
+ "ph": "phone"
187
+ },
188
+ {
189
+ "t": "Text",
190
+ "es": "small",
191
+ "ph": "city"
192
+ }
193
+ ]
194
+ }
195
+ ]
196
+ },
197
+ {
198
+ "t": "Divider",
199
+ "es": "rule"
200
+ },
201
+ {
202
+ "t": "Text",
203
+ "es": "small",
204
+ "slot": "copyright",
205
+ "fromBusiness": "copyright"
206
+ }
207
+ ],
208
+ "lay": {
209
+ "display": "flex",
210
+ "flexDirection": "column",
211
+ "gap": "32px"
212
+ }
213
+ }
214
+ },
215
+ "hero.split": {
216
+ "family": "hero",
217
+ "label": "Hero — text beside an image",
218
+ "node": {
219
+ "t": "Section",
220
+ "es": "section",
221
+ "c": [
222
+ {
223
+ "t": "Container",
224
+ "es": "box",
225
+ "lay": {
226
+ "display": "grid",
227
+ "gridTemplateColumns": "1.1fr 0.9fr",
228
+ "gap": "48px",
229
+ "alignItems": "center"
230
+ },
231
+ "resp": {
232
+ "mobile": {
233
+ "gridTemplateColumns": "minmax(0, 1fr)"
234
+ }
235
+ },
236
+ "c": [
237
+ {
238
+ "t": "Container",
239
+ "es": "box",
240
+ "lay": {
241
+ "display": "flex",
242
+ "flexDirection": "column",
243
+ "gap": "22px"
244
+ },
245
+ "c": [
246
+ {
247
+ "t": "Heading",
248
+ "es": "eyebrow",
249
+ "level": "h4",
250
+ "slot": "eyebrow",
251
+ "ph": "copy",
252
+ "text": "What you do · where"
253
+ },
254
+ {
255
+ "t": "Heading",
256
+ "es": "display",
257
+ "level": "h1",
258
+ "slot": "headline",
259
+ "fromBusiness": "name"
260
+ },
261
+ {
262
+ "t": "Text",
263
+ "es": "lead",
264
+ "slot": "lead",
265
+ "fromBusiness": "tagline",
266
+ "ph": "copy"
267
+ },
268
+ {
269
+ "t": "Container",
270
+ "es": "box",
271
+ "lay": {
272
+ "display": "flex",
273
+ "flexWrap": "wrap",
274
+ "gap": "12px",
275
+ "alignItems": "center"
276
+ },
277
+ "c": [
278
+ {
279
+ "t": "ButtonBlock",
280
+ "es": "button-primary",
281
+ "href": "/work",
282
+ "text": "See our work"
283
+ },
284
+ {
285
+ "t": "ButtonBlock",
286
+ "es": "button-secondary",
287
+ "href": "/contact",
288
+ "text": "Get in touch"
289
+ }
290
+ ]
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ "t": "Image",
296
+ "es": "media",
297
+ "ph": "image",
298
+ "aspect": "4 / 5"
299
+ }
300
+ ]
301
+ }
302
+ ]
303
+ }
304
+ },
305
+ "projects.grid": {
306
+ "family": "collection",
307
+ "label": "Project cards, three across",
308
+ "node": {
309
+ "t": "Section",
310
+ "es": "section",
311
+ "c": [
312
+ {
313
+ "t": "Container",
314
+ "es": "box",
315
+ "optional": "header",
316
+ "lay": {
317
+ "display": "flex",
318
+ "justifyContent": "space-between",
319
+ "alignItems": "baseline",
320
+ "gap": "16px",
321
+ "flexWrap": "wrap"
322
+ },
323
+ "c": [
324
+ {
325
+ "t": "Heading",
326
+ "es": "h2",
327
+ "level": "h2",
328
+ "slot": "title",
329
+ "text": "Selected work"
330
+ },
331
+ {
332
+ "t": "Link",
333
+ "es": "link",
334
+ "href": "/work",
335
+ "text": "All projects"
336
+ }
337
+ ]
338
+ },
339
+ {
340
+ "t": "Repeater",
341
+ "src": "$binding",
342
+ "lay": {
343
+ "display": "grid",
344
+ "gridTemplateColumns": "repeat(3, minmax(0, 1fr))",
345
+ "gap": "var(--iox-space-gap)"
346
+ },
347
+ "resp": {
348
+ "mobile": {
349
+ "gridTemplateColumns": "minmax(0, 1fr)"
350
+ }
351
+ },
352
+ "c": [
353
+ {
354
+ "t": "LinkedContainer",
355
+ "es": "card",
356
+ "href": "/work/:slug",
357
+ "param": "item.slug",
358
+ "lay": {
359
+ "display": "flex",
360
+ "flexDirection": "column",
361
+ "gap": "12px"
362
+ },
363
+ "c": [
364
+ {
365
+ "t": "Image",
366
+ "es": "media",
367
+ "bind": "item.cover",
368
+ "aspect": "4 / 3"
369
+ },
370
+ {
371
+ "t": "Heading",
372
+ "es": "h3",
373
+ "level": "h3",
374
+ "bind": "item.title"
375
+ },
376
+ {
377
+ "t": "Text",
378
+ "es": "small",
379
+ "bind": "item.summary"
380
+ }
381
+ ]
382
+ }
383
+ ]
384
+ }
385
+ ],
386
+ "lay": {
387
+ "display": "flex",
388
+ "flexDirection": "column",
389
+ "gap": "32px"
390
+ }
391
+ }
392
+ },
393
+ "services.three": {
394
+ "family": "features",
395
+ "label": "Three services",
396
+ "node": {
397
+ "t": "Section",
398
+ "es": "section",
399
+ "scheme": "subtle",
400
+ "c": [
401
+ {
402
+ "t": "Heading",
403
+ "es": "h2",
404
+ "level": "h2",
405
+ "slot": "title",
406
+ "text": "What we do"
407
+ },
408
+ {
409
+ "t": "Container",
410
+ "es": "box",
411
+ "lay": {
412
+ "display": "grid",
413
+ "gridTemplateColumns": "repeat(3, minmax(0, 1fr))",
414
+ "gap": "var(--iox-space-gap)"
415
+ },
416
+ "resp": {
417
+ "mobile": {
418
+ "gridTemplateColumns": "minmax(0, 1fr)"
419
+ }
420
+ },
421
+ "c": [
422
+ {
423
+ "t": "Container",
424
+ "es": "card",
425
+ "lay": {
426
+ "display": "flex",
427
+ "flexDirection": "column",
428
+ "gap": "10px"
429
+ },
430
+ "c": [
431
+ {
432
+ "t": "Heading",
433
+ "es": "h3",
434
+ "level": "h3",
435
+ "ph": "copy",
436
+ "text": "Name a service"
437
+ },
438
+ {
439
+ "t": "Text",
440
+ "es": "body",
441
+ "ph": "copy",
442
+ "text": "Describe it in two sentences."
443
+ }
444
+ ]
445
+ },
446
+ {
447
+ "t": "Container",
448
+ "es": "card",
449
+ "lay": {
450
+ "display": "flex",
451
+ "flexDirection": "column",
452
+ "gap": "10px"
453
+ },
454
+ "c": [
455
+ {
456
+ "t": "Heading",
457
+ "es": "h3",
458
+ "level": "h3",
459
+ "ph": "copy",
460
+ "text": "Name a service"
461
+ },
462
+ {
463
+ "t": "Text",
464
+ "es": "body",
465
+ "ph": "copy",
466
+ "text": "Describe it in two sentences."
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "t": "Container",
472
+ "es": "card",
473
+ "lay": {
474
+ "display": "flex",
475
+ "flexDirection": "column",
476
+ "gap": "10px"
477
+ },
478
+ "c": [
479
+ {
480
+ "t": "Heading",
481
+ "es": "h3",
482
+ "level": "h3",
483
+ "ph": "copy",
484
+ "text": "Name a service"
485
+ },
486
+ {
487
+ "t": "Text",
488
+ "es": "body",
489
+ "ph": "copy",
490
+ "text": "Describe it in two sentences."
491
+ }
492
+ ]
493
+ }
494
+ ]
495
+ }
496
+ ],
497
+ "lay": {
498
+ "display": "flex",
499
+ "flexDirection": "column",
500
+ "gap": "32px"
501
+ }
502
+ }
503
+ },
504
+ "cta.band": {
505
+ "family": "cta",
506
+ "label": "Call to action band",
507
+ "node": {
508
+ "t": "Section",
509
+ "es": "section",
510
+ "scheme": "inverse",
511
+ "c": [
512
+ {
513
+ "t": "Container",
514
+ "es": "box",
515
+ "lay": {
516
+ "display": "grid",
517
+ "gridTemplateColumns": "1fr auto",
518
+ "gap": "32px",
519
+ "alignItems": "center"
520
+ },
521
+ "resp": {
522
+ "mobile": {
523
+ "gridTemplateColumns": "minmax(0, 1fr)"
524
+ }
525
+ },
526
+ "c": [
527
+ {
528
+ "t": "Container",
529
+ "es": "box",
530
+ "lay": {
531
+ "display": "flex",
532
+ "flexDirection": "column",
533
+ "gap": "12px"
534
+ },
535
+ "c": [
536
+ {
537
+ "t": "Heading",
538
+ "es": "eyebrow",
539
+ "level": "h4",
540
+ "text": "Start a project"
541
+ },
542
+ {
543
+ "t": "Heading",
544
+ "es": "h2",
545
+ "level": "h2",
546
+ "slot": "title",
547
+ "text": "Tell us about your project."
548
+ }
549
+ ]
550
+ },
551
+ {
552
+ "t": "ButtonBlock",
553
+ "es": "button-primary",
554
+ "href": "/contact",
555
+ "text": "Get in touch"
556
+ }
557
+ ]
558
+ }
559
+ ]
560
+ }
561
+ },
562
+ "page-header.simple": {
563
+ "family": "header",
564
+ "label": "Page header",
565
+ "node": {
566
+ "t": "Section",
567
+ "es": "section",
568
+ "c": [
569
+ {
570
+ "t": "Container",
571
+ "es": "box",
572
+ "lay": {
573
+ "display": "flex",
574
+ "flexDirection": "column",
575
+ "gap": "14px",
576
+ "maxWidth": "760px"
577
+ },
578
+ "c": [
579
+ {
580
+ "t": "Heading",
581
+ "es": "eyebrow",
582
+ "level": "h4",
583
+ "slot": "eyebrow"
584
+ },
585
+ {
586
+ "t": "Heading",
587
+ "es": "h1",
588
+ "level": "h1",
589
+ "slot": "title"
590
+ },
591
+ {
592
+ "t": "Text",
593
+ "es": "lead",
594
+ "slot": "lead",
595
+ "ph": "copy",
596
+ "text": "One or two sentences that introduce this page."
597
+ }
598
+ ]
599
+ }
600
+ ]
601
+ }
602
+ },
603
+ "project.hero": {
604
+ "family": "detail",
605
+ "label": "Project hero (bound to the route item)",
606
+ "node": {
607
+ "t": "Section",
608
+ "es": "section",
609
+ "c": [
610
+ {
611
+ "t": "Container",
612
+ "es": "box",
613
+ "lay": {
614
+ "display": "flex",
615
+ "flexDirection": "column",
616
+ "gap": "16px",
617
+ "maxWidth": "860px"
618
+ },
619
+ "c": [
620
+ {
621
+ "t": "Heading",
622
+ "es": "eyebrow",
623
+ "level": "h4",
624
+ "bind": "route.location"
625
+ },
626
+ {
627
+ "t": "Heading",
628
+ "es": "h1",
629
+ "level": "h1",
630
+ "bind": "route.title"
631
+ },
632
+ {
633
+ "t": "Text",
634
+ "es": "lead",
635
+ "bind": "route.summary"
636
+ },
637
+ {
638
+ "t": "Text",
639
+ "es": "small",
640
+ "bind": "route.year"
641
+ }
642
+ ]
643
+ },
644
+ {
645
+ "t": "Image",
646
+ "es": "media",
647
+ "bind": "route.cover",
648
+ "aspect": "16 / 9"
649
+ }
650
+ ],
651
+ "lay": {
652
+ "display": "flex",
653
+ "flexDirection": "column",
654
+ "gap": "32px"
655
+ }
656
+ }
657
+ },
658
+ "project.gallery": {
659
+ "family": "media",
660
+ "label": "Project gallery (the item's images)",
661
+ "node": {
662
+ "t": "Section",
663
+ "es": "section",
664
+ "c": [
665
+ {
666
+ "t": "Repeater",
667
+ "src": "route.gallery",
668
+ "lay": {
669
+ "display": "grid",
670
+ "gridTemplateColumns": "repeat(2, minmax(0, 1fr))",
671
+ "gap": "var(--iox-space-gap)"
672
+ },
673
+ "resp": {
674
+ "mobile": {
675
+ "gridTemplateColumns": "minmax(0, 1fr)"
676
+ }
677
+ },
678
+ "c": [
679
+ {
680
+ "t": "Image",
681
+ "es": "media",
682
+ "bind": "item",
683
+ "aspect": "4 / 3"
684
+ }
685
+ ]
686
+ }
687
+ ]
688
+ }
689
+ },
690
+ "project.next": {
691
+ "family": "detail",
692
+ "label": "Next project",
693
+ "node": {
694
+ "t": "Section",
695
+ "es": "section",
696
+ "c": [
697
+ {
698
+ "t": "Divider",
699
+ "es": "rule"
700
+ },
701
+ {
702
+ "t": "LinkedContainer",
703
+ "es": "box",
704
+ "href": "/work/:slug",
705
+ "param": "next.slug",
706
+ "lay": {
707
+ "display": "flex",
708
+ "flexDirection": "column",
709
+ "gap": "6px",
710
+ "padding": "24px 0px 0px 0px"
711
+ },
712
+ "c": [
713
+ {
714
+ "t": "Text",
715
+ "es": "small",
716
+ "text": "Next project"
717
+ },
718
+ {
719
+ "t": "Heading",
720
+ "es": "h2",
721
+ "level": "h2",
722
+ "bind": "next.title"
723
+ }
724
+ ]
725
+ }
726
+ ],
727
+ "lay": {
728
+ "display": "flex",
729
+ "flexDirection": "column",
730
+ "gap": "32px"
731
+ }
732
+ }
733
+ },
734
+ "about.story": {
735
+ "family": "content",
736
+ "label": "Story beside an image",
737
+ "node": {
738
+ "t": "Section",
739
+ "es": "section",
740
+ "c": [
741
+ {
742
+ "t": "Container",
743
+ "es": "box",
744
+ "lay": {
745
+ "display": "grid",
746
+ "gridTemplateColumns": "1fr 1fr",
747
+ "gap": "48px",
748
+ "alignItems": "start"
749
+ },
750
+ "resp": {
751
+ "mobile": {
752
+ "gridTemplateColumns": "minmax(0, 1fr)"
753
+ }
754
+ },
755
+ "c": [
756
+ {
757
+ "t": "Container",
758
+ "es": "box",
759
+ "lay": {
760
+ "display": "flex",
761
+ "flexDirection": "column",
762
+ "gap": "16px"
763
+ },
764
+ "c": [
765
+ {
766
+ "t": "Heading",
767
+ "es": "h2",
768
+ "level": "h2",
769
+ "ph": "copy",
770
+ "text": "How the studio started"
771
+ },
772
+ {
773
+ "t": "Text",
774
+ "es": "body",
775
+ "ph": "copy",
776
+ "text": "Tell your story in your own words: who you are, how you work, what you care about."
777
+ }
778
+ ]
779
+ },
780
+ {
781
+ "t": "Image",
782
+ "es": "media",
783
+ "ph": "image",
784
+ "aspect": "4 / 3"
785
+ }
786
+ ]
787
+ }
788
+ ]
789
+ }
790
+ },
791
+ "contact.split": {
792
+ "family": "contact",
793
+ "label": "Contact details beside a form",
794
+ "node": {
795
+ "t": "Section",
796
+ "es": "section",
797
+ "c": [
798
+ {
799
+ "t": "Container",
800
+ "es": "box",
801
+ "lay": {
802
+ "display": "grid",
803
+ "gridTemplateColumns": "0.9fr 1.1fr",
804
+ "gap": "48px",
805
+ "alignItems": "start"
806
+ },
807
+ "resp": {
808
+ "mobile": {
809
+ "gridTemplateColumns": "minmax(0, 1fr)"
810
+ }
811
+ },
812
+ "c": [
813
+ {
814
+ "t": "Container",
815
+ "es": "box",
816
+ "lay": {
817
+ "display": "flex",
818
+ "flexDirection": "column",
819
+ "gap": "16px"
820
+ },
821
+ "c": [
822
+ {
823
+ "t": "Heading",
824
+ "es": "h1",
825
+ "level": "h1",
826
+ "text": "Get in touch"
827
+ },
828
+ {
829
+ "t": "Text",
830
+ "es": "lead",
831
+ "ph": "copy",
832
+ "text": "Say how and when people can expect to hear back."
833
+ },
834
+ {
835
+ "t": "Text",
836
+ "es": "body",
837
+ "ph": "email"
838
+ },
839
+ {
840
+ "t": "Text",
841
+ "es": "body",
842
+ "ph": "phone"
843
+ },
844
+ {
845
+ "t": "Text",
846
+ "es": "body",
847
+ "ph": "city"
848
+ }
849
+ ]
850
+ },
851
+ {
852
+ "t": "Container",
853
+ "es": "card",
854
+ "c": [
855
+ {
856
+ "t": "Form",
857
+ "preset": "contact",
858
+ "c": [
859
+ {
860
+ "t": "Field",
861
+ "control": "text",
862
+ "label": "Name",
863
+ "required": true
864
+ },
865
+ {
866
+ "t": "Field",
867
+ "control": "email",
868
+ "label": "Email",
869
+ "required": true
870
+ },
871
+ {
872
+ "t": "Field",
873
+ "control": "textarea",
874
+ "label": "Message",
875
+ "required": true
876
+ },
877
+ {
878
+ "t": "SubmitButton",
879
+ "es": "button-primary",
880
+ "text": "Send"
881
+ }
882
+ ]
883
+ }
884
+ ]
885
+ }
886
+ ]
887
+ }
888
+ ]
889
+ }
890
+ }
891
+ } as const;
892
+
893
+ export const SPEC_SITE_TEMPLATES = {
894
+ "studio": {
895
+ "id": "studio",
896
+ "version": 1,
897
+ "label": "Studio",
898
+ "blurb": "A portfolio for a studio or service business: your work, what you do, and a way to reach you.",
899
+ "bestFor": [
900
+ "Architecture & interiors",
901
+ "Design studios",
902
+ "Photographers",
903
+ "Agencies",
904
+ "Consultants"
905
+ ],
906
+ "contentTypes": [
907
+ {
908
+ "name": "projects",
909
+ "label": "Projects",
910
+ "previewTextField": "title",
911
+ "previewImageField": "cover",
912
+ "fields": [
913
+ {
914
+ "name": "title",
915
+ "type": "string",
916
+ "controller": "text",
917
+ "required": true
918
+ },
919
+ {
920
+ "name": "slug",
921
+ "type": "string",
922
+ "controller": "text",
923
+ "required": true,
924
+ "note": "derived from title at seed; no slug controller exists yet (gap)"
925
+ },
926
+ {
927
+ "name": "summary",
928
+ "type": "string",
929
+ "controller": "textarea"
930
+ },
931
+ {
932
+ "name": "cover",
933
+ "type": "string",
934
+ "controller": "image"
935
+ },
936
+ {
937
+ "name": "gallery",
938
+ "type": "array",
939
+ "controller": "mediaList"
940
+ },
941
+ {
942
+ "name": "year",
943
+ "type": "string",
944
+ "controller": "text"
945
+ },
946
+ {
947
+ "name": "location",
948
+ "type": "string",
949
+ "controller": "text"
950
+ }
951
+ ],
952
+ "seed": {
953
+ "count": 6,
954
+ "sample": true,
955
+ "isPublished": true,
956
+ "title": "Sample project {n}",
957
+ "slug": "sample-project-{n}",
958
+ "summary": "Replace this with a sentence about the project.",
959
+ "cover": "{sampleImage:n}",
960
+ "gallery": [
961
+ "{sampleImage:n+1}",
962
+ "{sampleImage:n+2}"
963
+ ],
964
+ "year": "",
965
+ "location": ""
966
+ }
967
+ }
968
+ ],
969
+ "dataSources": [
970
+ {
971
+ "alias": "projects",
972
+ "type": "cms",
973
+ "mode": "query",
974
+ "contentType": "projects"
975
+ },
976
+ {
977
+ "alias": "projectsLatest",
978
+ "type": "cms",
979
+ "mode": "query",
980
+ "contentType": "projects",
981
+ "limit": 3
982
+ },
983
+ {
984
+ "alias": "project",
985
+ "type": "cms",
986
+ "mode": "single",
987
+ "contentType": "projects",
988
+ "filterByRouteParam": {
989
+ "field": "slug",
990
+ "routeParam": "slug"
991
+ }
992
+ },
993
+ {
994
+ "alias": "projectNext",
995
+ "type": "relative",
996
+ "of": "project",
997
+ "op": "$siblings.next",
998
+ "within": "projects"
999
+ }
1000
+ ],
1001
+ "pages": [
1002
+ {
1003
+ "key": "home",
1004
+ "name": "Home",
1005
+ "route": "/",
1006
+ "isHome": true,
1007
+ "required": true,
1008
+ "inNav": false,
1009
+ "sections": [
1010
+ {
1011
+ "pattern": "hero.split"
1012
+ },
1013
+ {
1014
+ "pattern": "projects.grid",
1015
+ "binding": "projectsLatest"
1016
+ },
1017
+ {
1018
+ "pattern": "services.three"
1019
+ },
1020
+ {
1021
+ "pattern": "cta.band"
1022
+ }
1023
+ ]
1024
+ },
1025
+ {
1026
+ "key": "work",
1027
+ "name": "Work",
1028
+ "route": "/work",
1029
+ "required": true,
1030
+ "inNav": true,
1031
+ "sections": [
1032
+ {
1033
+ "pattern": "page-header.simple",
1034
+ "slots": {
1035
+ "eyebrow": "Portfolio",
1036
+ "title": "Work"
1037
+ }
1038
+ },
1039
+ {
1040
+ "pattern": "projects.grid",
1041
+ "binding": "projects",
1042
+ "without": [
1043
+ "header"
1044
+ ]
1045
+ }
1046
+ ]
1047
+ },
1048
+ {
1049
+ "key": "project",
1050
+ "name": "Project",
1051
+ "route": "/work/:slug",
1052
+ "required": true,
1053
+ "inNav": false,
1054
+ "template": "projects",
1055
+ "routeSource": "project",
1056
+ "sections": [
1057
+ {
1058
+ "pattern": "project.hero"
1059
+ },
1060
+ {
1061
+ "pattern": "project.gallery"
1062
+ },
1063
+ {
1064
+ "pattern": "project.next"
1065
+ },
1066
+ {
1067
+ "pattern": "cta.band"
1068
+ }
1069
+ ]
1070
+ },
1071
+ {
1072
+ "key": "about",
1073
+ "name": "About",
1074
+ "route": "/about",
1075
+ "required": false,
1076
+ "inNav": true,
1077
+ "sections": [
1078
+ {
1079
+ "pattern": "page-header.simple",
1080
+ "slots": {
1081
+ "eyebrow": "About",
1082
+ "title": "About the studio"
1083
+ }
1084
+ },
1085
+ {
1086
+ "pattern": "about.story"
1087
+ },
1088
+ {
1089
+ "pattern": "cta.band"
1090
+ }
1091
+ ]
1092
+ },
1093
+ {
1094
+ "key": "contact",
1095
+ "name": "Contact",
1096
+ "route": "/contact",
1097
+ "required": false,
1098
+ "inNav": true,
1099
+ "sections": [
1100
+ {
1101
+ "pattern": "contact.split"
1102
+ }
1103
+ ]
1104
+ }
1105
+ ],
1106
+ "globals": {
1107
+ "header": "nav.inline-cta",
1108
+ "footer": "footer.columns"
1109
+ }
1110
+ }
1111
+ } as const;