@prosophia/lab-techy 0.0.2 → 0.0.4

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,1319 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/schemas/index.ts
21
+ var schemas_exports = {};
22
+ __export(schemas_exports, {
23
+ ctaButton: () => ctaButton_default,
24
+ event: () => event_default,
25
+ galleryItem: () => galleryItem_default,
26
+ link: () => link_default,
27
+ newsArticle: () => newsArticle_default,
28
+ portableText: () => portableText_default,
29
+ publication: () => publication_default,
30
+ researchArea: () => researchArea_default,
31
+ researchProject: () => researchProject_default,
32
+ schemaTypes: () => schemaTypes,
33
+ schemas: () => schemaTypes,
34
+ siteSettings: () => siteSettings_default,
35
+ socialLink: () => socialLink_default,
36
+ stat: () => stat_default,
37
+ teamMember: () => teamMember_default
38
+ });
39
+ module.exports = __toCommonJS(schemas_exports);
40
+
41
+ // src/schemas/schemas/objects/link.ts
42
+ var import_sanity = require("sanity");
43
+ var link_default = (0, import_sanity.defineType)({
44
+ name: "link",
45
+ title: "Link",
46
+ type: "object",
47
+ fields: [
48
+ (0, import_sanity.defineField)({
49
+ name: "label",
50
+ title: "Label",
51
+ type: "string",
52
+ validation: (Rule) => Rule.required()
53
+ }),
54
+ (0, import_sanity.defineField)({
55
+ name: "url",
56
+ title: "URL",
57
+ type: "url",
58
+ validation: (Rule) => Rule.required().uri({ allowRelative: true })
59
+ })
60
+ ],
61
+ preview: {
62
+ select: { title: "label", subtitle: "url" }
63
+ }
64
+ });
65
+
66
+ // src/schemas/schemas/objects/socialLink.ts
67
+ var import_sanity2 = require("sanity");
68
+ var socialLink_default = (0, import_sanity2.defineType)({
69
+ name: "socialLink",
70
+ title: "Social Link",
71
+ type: "object",
72
+ fields: [
73
+ (0, import_sanity2.defineField)({
74
+ name: "platform",
75
+ title: "Platform",
76
+ type: "string",
77
+ options: {
78
+ list: [
79
+ { title: "Twitter/X", value: "twitter" },
80
+ { title: "LinkedIn", value: "linkedin" },
81
+ { title: "GitHub", value: "github" },
82
+ { title: "Google Scholar", value: "scholar" },
83
+ { title: "ORCID", value: "orcid" },
84
+ { title: "Personal Website", value: "website" },
85
+ { title: "Email", value: "email" },
86
+ { title: "YouTube", value: "youtube" },
87
+ { title: "Instagram", value: "instagram" }
88
+ ]
89
+ },
90
+ validation: (Rule) => Rule.required()
91
+ }),
92
+ (0, import_sanity2.defineField)({
93
+ name: "url",
94
+ title: "URL",
95
+ type: "url",
96
+ validation: (Rule) => Rule.required()
97
+ })
98
+ ],
99
+ preview: {
100
+ select: { title: "platform", subtitle: "url" }
101
+ }
102
+ });
103
+
104
+ // src/schemas/schemas/objects/stat.ts
105
+ var import_sanity3 = require("sanity");
106
+ var stat_default = (0, import_sanity3.defineType)({
107
+ name: "stat",
108
+ title: "Statistic",
109
+ type: "object",
110
+ fields: [
111
+ (0, import_sanity3.defineField)({
112
+ name: "value",
113
+ title: "Value",
114
+ type: "string",
115
+ description: 'e.g., "120+", "15", "$2M"',
116
+ validation: (Rule) => Rule.required()
117
+ }),
118
+ (0, import_sanity3.defineField)({
119
+ name: "label",
120
+ title: "Label",
121
+ type: "string",
122
+ description: 'e.g., "Published Papers", "Active Grants"',
123
+ validation: (Rule) => Rule.required()
124
+ })
125
+ ],
126
+ preview: {
127
+ select: { title: "value", subtitle: "label" }
128
+ }
129
+ });
130
+
131
+ // src/schemas/schemas/objects/researchArea.ts
132
+ var import_sanity4 = require("sanity");
133
+ var researchArea_default = (0, import_sanity4.defineType)({
134
+ name: "researchArea",
135
+ title: "Research Area",
136
+ type: "object",
137
+ fields: [
138
+ (0, import_sanity4.defineField)({
139
+ name: "icon",
140
+ title: "Material Icon Name",
141
+ type: "string",
142
+ description: 'Material Symbols icon name (e.g., "visibility", "precision_manufacturing", "chat")',
143
+ validation: (Rule) => Rule.required()
144
+ }),
145
+ (0, import_sanity4.defineField)({
146
+ name: "title",
147
+ title: "Title",
148
+ type: "string",
149
+ validation: (Rule) => Rule.required()
150
+ }),
151
+ (0, import_sanity4.defineField)({
152
+ name: "description",
153
+ title: "Description",
154
+ type: "text",
155
+ rows: 3,
156
+ validation: (Rule) => Rule.required().max(300)
157
+ })
158
+ ],
159
+ preview: {
160
+ select: { title: "title", subtitle: "description" }
161
+ }
162
+ });
163
+
164
+ // src/schemas/schemas/objects/ctaButton.ts
165
+ var import_sanity5 = require("sanity");
166
+ var ctaButton_default = (0, import_sanity5.defineType)({
167
+ name: "ctaButton",
168
+ title: "CTA Button",
169
+ type: "object",
170
+ fields: [
171
+ (0, import_sanity5.defineField)({
172
+ name: "label",
173
+ title: "Button Label",
174
+ type: "string",
175
+ validation: (Rule) => Rule.required()
176
+ }),
177
+ (0, import_sanity5.defineField)({
178
+ name: "href",
179
+ title: "Link URL",
180
+ type: "string",
181
+ description: "Internal path (e.g., /publications) or external URL",
182
+ validation: (Rule) => Rule.required()
183
+ }),
184
+ (0, import_sanity5.defineField)({
185
+ name: "variant",
186
+ title: "Button Style",
187
+ type: "string",
188
+ options: {
189
+ list: [
190
+ { title: "Primary (Filled)", value: "primary" },
191
+ { title: "Secondary (Outline)", value: "secondary" }
192
+ ],
193
+ layout: "radio"
194
+ },
195
+ initialValue: "primary"
196
+ })
197
+ ],
198
+ preview: {
199
+ select: { title: "label", subtitle: "href" }
200
+ }
201
+ });
202
+
203
+ // src/schemas/schemas/objects/portableText.ts
204
+ var import_sanity6 = require("sanity");
205
+ var portableText_default = (0, import_sanity6.defineType)({
206
+ name: "portableText",
207
+ title: "Rich Text",
208
+ type: "array",
209
+ of: [
210
+ (0, import_sanity6.defineArrayMember)({
211
+ type: "block",
212
+ styles: [
213
+ { title: "Normal", value: "normal" },
214
+ { title: "Heading 2", value: "h2" },
215
+ { title: "Heading 3", value: "h3" },
216
+ { title: "Quote", value: "blockquote" }
217
+ ],
218
+ lists: [
219
+ { title: "Bullet", value: "bullet" },
220
+ { title: "Numbered", value: "number" }
221
+ ],
222
+ marks: {
223
+ decorators: [
224
+ { title: "Bold", value: "strong" },
225
+ { title: "Italic", value: "em" },
226
+ { title: "Code", value: "code" }
227
+ ],
228
+ annotations: [
229
+ {
230
+ name: "link",
231
+ type: "object",
232
+ title: "Link",
233
+ fields: [
234
+ {
235
+ name: "href",
236
+ type: "url",
237
+ title: "URL"
238
+ }
239
+ ]
240
+ }
241
+ ]
242
+ }
243
+ }),
244
+ (0, import_sanity6.defineArrayMember)({
245
+ type: "image",
246
+ options: { hotspot: true },
247
+ fields: [
248
+ {
249
+ name: "caption",
250
+ type: "string",
251
+ title: "Caption"
252
+ },
253
+ {
254
+ name: "alt",
255
+ type: "string",
256
+ title: "Alt Text"
257
+ }
258
+ ]
259
+ }),
260
+ (0, import_sanity6.defineArrayMember)({
261
+ name: "note",
262
+ title: "Note Block",
263
+ type: "object",
264
+ fields: [
265
+ { name: "title", type: "string", title: "Note Title" },
266
+ { name: "text", type: "text", title: "Note Content" }
267
+ ],
268
+ preview: {
269
+ select: { title: "title" },
270
+ prepare: ({ title }) => ({ title: `Note: ${title || "Untitled"}` })
271
+ }
272
+ })
273
+ ]
274
+ });
275
+
276
+ // src/schemas/schemas/documents/publication.ts
277
+ var import_sanity7 = require("sanity");
278
+ var publication_default = (0, import_sanity7.defineType)({
279
+ name: "publication",
280
+ title: "Publication",
281
+ type: "document",
282
+ icon: () => "\u{1F4C4}",
283
+ groups: [
284
+ { name: "content", title: "Content", default: true },
285
+ { name: "metadata", title: "Metadata" },
286
+ { name: "links", title: "Links" }
287
+ ],
288
+ fields: [
289
+ (0, import_sanity7.defineField)({
290
+ name: "title",
291
+ title: "Paper Title",
292
+ type: "string",
293
+ group: "content",
294
+ validation: (Rule) => Rule.required()
295
+ }),
296
+ (0, import_sanity7.defineField)({
297
+ name: "authors",
298
+ title: "Authors",
299
+ type: "array",
300
+ of: [{ type: "string" }],
301
+ group: "content",
302
+ description: "List authors in order. First author will be highlighted.",
303
+ validation: (Rule) => Rule.required().min(1)
304
+ }),
305
+ (0, import_sanity7.defineField)({
306
+ name: "abstract",
307
+ title: "Abstract",
308
+ type: "text",
309
+ group: "content",
310
+ rows: 6
311
+ }),
312
+ (0, import_sanity7.defineField)({
313
+ name: "venue",
314
+ title: "Venue",
315
+ type: "string",
316
+ group: "metadata",
317
+ description: 'Conference, journal, or workshop name (e.g., "CVPR 2024", "Nature Machine Intelligence")',
318
+ validation: (Rule) => Rule.required()
319
+ }),
320
+ (0, import_sanity7.defineField)({
321
+ name: "venueType",
322
+ title: "Venue Type",
323
+ type: "string",
324
+ group: "metadata",
325
+ options: {
326
+ list: [
327
+ { title: "Conference", value: "conference" },
328
+ { title: "Journal", value: "journal" },
329
+ { title: "Workshop", value: "workshop" }
330
+ ],
331
+ layout: "radio"
332
+ },
333
+ validation: (Rule) => Rule.required()
334
+ }),
335
+ (0, import_sanity7.defineField)({
336
+ name: "venueColor",
337
+ title: "Badge Color",
338
+ type: "string",
339
+ group: "metadata",
340
+ options: {
341
+ list: [
342
+ { title: "Blue", value: "blue" },
343
+ { title: "Purple", value: "purple" },
344
+ { title: "Amber", value: "amber" },
345
+ { title: "Rose", value: "rose" },
346
+ { title: "Green", value: "green" }
347
+ ]
348
+ },
349
+ initialValue: "blue"
350
+ }),
351
+ (0, import_sanity7.defineField)({
352
+ name: "year",
353
+ title: "Publication Year",
354
+ type: "number",
355
+ group: "metadata",
356
+ validation: (Rule) => Rule.required().min(1990).max(2100)
357
+ }),
358
+ (0, import_sanity7.defineField)({
359
+ name: "oral",
360
+ title: "Oral Presentation",
361
+ type: "boolean",
362
+ group: "metadata",
363
+ description: "Check if this was an oral/spotlight presentation",
364
+ initialValue: false
365
+ }),
366
+ (0, import_sanity7.defineField)({
367
+ name: "links",
368
+ title: "Resource Links",
369
+ type: "array",
370
+ group: "links",
371
+ of: [
372
+ {
373
+ type: "object",
374
+ fields: [
375
+ {
376
+ name: "label",
377
+ title: "Label",
378
+ type: "string",
379
+ options: {
380
+ list: ["PDF", "Code", "BibTeX", "Dataset", "Project Page", "Video", "Slides", "arXiv"]
381
+ }
382
+ },
383
+ { name: "url", title: "URL", type: "url" }
384
+ ],
385
+ preview: {
386
+ select: { title: "label", subtitle: "url" }
387
+ }
388
+ }
389
+ ]
390
+ })
391
+ ],
392
+ preview: {
393
+ select: {
394
+ title: "title",
395
+ venue: "venue",
396
+ year: "year"
397
+ },
398
+ prepare: ({ title, venue, year }) => ({
399
+ title,
400
+ subtitle: `${venue} (${year})`
401
+ })
402
+ },
403
+ orderings: [
404
+ {
405
+ title: "Year, New First",
406
+ name: "yearDesc",
407
+ by: [{ field: "year", direction: "desc" }]
408
+ }
409
+ ]
410
+ });
411
+
412
+ // src/schemas/schemas/documents/teamMember.ts
413
+ var import_sanity8 = require("sanity");
414
+ var teamMember_default = (0, import_sanity8.defineType)({
415
+ name: "teamMember",
416
+ title: "Team Member",
417
+ type: "document",
418
+ icon: () => "\u{1F464}",
419
+ groups: [
420
+ { name: "basic", title: "Basic Info", default: true },
421
+ { name: "details", title: "Details" },
422
+ { name: "alumni", title: "Alumni Info" },
423
+ { name: "social", title: "Links" }
424
+ ],
425
+ fields: [
426
+ (0, import_sanity8.defineField)({
427
+ name: "name",
428
+ title: "Full Name",
429
+ type: "string",
430
+ group: "basic",
431
+ validation: (Rule) => Rule.required()
432
+ }),
433
+ (0, import_sanity8.defineField)({
434
+ name: "role",
435
+ title: "Role/Title",
436
+ type: "string",
437
+ group: "basic",
438
+ description: 'e.g., "PhD Candidate", "Postdoctoral Researcher", "Principal Investigator"',
439
+ validation: (Rule) => Rule.required()
440
+ }),
441
+ (0, import_sanity8.defineField)({
442
+ name: "category",
443
+ title: "Category",
444
+ type: "string",
445
+ group: "basic",
446
+ options: {
447
+ list: [
448
+ { title: "Principal Investigator", value: "pi" },
449
+ { title: "Postdoc", value: "postdoc" },
450
+ { title: "PhD Student", value: "phd" },
451
+ { title: "Masters Student", value: "masters" },
452
+ { title: "Undergraduate", value: "undergrad" },
453
+ { title: "Research Staff", value: "staff" },
454
+ { title: "Alumni", value: "alumni" }
455
+ ]
456
+ },
457
+ validation: (Rule) => Rule.required()
458
+ }),
459
+ (0, import_sanity8.defineField)({
460
+ name: "image",
461
+ title: "Profile Photo",
462
+ type: "image",
463
+ group: "basic",
464
+ options: {
465
+ hotspot: true
466
+ },
467
+ fields: [
468
+ {
469
+ name: "alt",
470
+ type: "string",
471
+ title: "Alt Text"
472
+ }
473
+ ]
474
+ }),
475
+ (0, import_sanity8.defineField)({
476
+ name: "bio",
477
+ title: "Short Biography",
478
+ type: "text",
479
+ group: "details",
480
+ rows: 4,
481
+ description: "Brief description or research focus (for team cards)"
482
+ }),
483
+ (0, import_sanity8.defineField)({
484
+ name: "extendedBio",
485
+ title: "Extended Biography",
486
+ type: "portableText",
487
+ group: "details",
488
+ description: "Full biography (for PI profile section)"
489
+ }),
490
+ (0, import_sanity8.defineField)({
491
+ name: "isAlumni",
492
+ title: "Alumni Status",
493
+ type: "boolean",
494
+ group: "alumni",
495
+ initialValue: false
496
+ }),
497
+ (0, import_sanity8.defineField)({
498
+ name: "graduationYear",
499
+ title: "Graduation Year",
500
+ type: "number",
501
+ group: "alumni",
502
+ hidden: ({ document }) => !document?.isAlumni
503
+ }),
504
+ (0, import_sanity8.defineField)({
505
+ name: "currentPosition",
506
+ title: "Current Position",
507
+ type: "string",
508
+ group: "alumni",
509
+ description: 'e.g., "Data Scientist at DeepMind"',
510
+ hidden: ({ document }) => !document?.isAlumni
511
+ }),
512
+ (0, import_sanity8.defineField)({
513
+ name: "socialLinks",
514
+ title: "Social & Academic Links",
515
+ type: "array",
516
+ group: "social",
517
+ of: [{ type: "socialLink" }]
518
+ }),
519
+ (0, import_sanity8.defineField)({
520
+ name: "email",
521
+ title: "Email",
522
+ type: "email",
523
+ group: "social"
524
+ }),
525
+ (0, import_sanity8.defineField)({
526
+ name: "order",
527
+ title: "Display Order",
528
+ type: "number",
529
+ group: "basic",
530
+ description: "Lower numbers appear first within category"
531
+ })
532
+ ],
533
+ preview: {
534
+ select: {
535
+ title: "name",
536
+ subtitle: "role",
537
+ media: "image"
538
+ }
539
+ },
540
+ orderings: [
541
+ {
542
+ title: "Display Order",
543
+ name: "orderAsc",
544
+ by: [
545
+ { field: "order", direction: "asc" },
546
+ { field: "name", direction: "asc" }
547
+ ]
548
+ }
549
+ ]
550
+ });
551
+
552
+ // src/schemas/schemas/documents/newsArticle.ts
553
+ var import_sanity9 = require("sanity");
554
+ var newsArticle_default = (0, import_sanity9.defineType)({
555
+ name: "newsArticle",
556
+ title: "News Article",
557
+ type: "document",
558
+ icon: () => "\u{1F4F0}",
559
+ groups: [
560
+ { name: "content", title: "Content", default: true },
561
+ { name: "metadata", title: "Metadata" },
562
+ { name: "seo", title: "SEO" }
563
+ ],
564
+ fields: [
565
+ (0, import_sanity9.defineField)({
566
+ name: "title",
567
+ title: "Title",
568
+ type: "string",
569
+ group: "content",
570
+ validation: (Rule) => Rule.required().max(100)
571
+ }),
572
+ (0, import_sanity9.defineField)({
573
+ name: "slug",
574
+ title: "Slug",
575
+ type: "slug",
576
+ group: "content",
577
+ options: {
578
+ source: "title",
579
+ maxLength: 96
580
+ },
581
+ validation: (Rule) => Rule.required()
582
+ }),
583
+ (0, import_sanity9.defineField)({
584
+ name: "excerpt",
585
+ title: "Excerpt",
586
+ type: "text",
587
+ group: "content",
588
+ rows: 3,
589
+ description: "Brief summary for article cards (max 200 characters)",
590
+ validation: (Rule) => Rule.required().max(300)
591
+ }),
592
+ (0, import_sanity9.defineField)({
593
+ name: "image",
594
+ title: "Featured Image",
595
+ type: "image",
596
+ group: "content",
597
+ options: { hotspot: true },
598
+ fields: [
599
+ { name: "alt", type: "string", title: "Alt Text" },
600
+ { name: "caption", type: "string", title: "Caption" }
601
+ ],
602
+ validation: (Rule) => Rule.required()
603
+ }),
604
+ (0, import_sanity9.defineField)({
605
+ name: "content",
606
+ title: "Article Content",
607
+ type: "portableText",
608
+ group: "content"
609
+ }),
610
+ (0, import_sanity9.defineField)({
611
+ name: "date",
612
+ title: "Publication Date",
613
+ type: "date",
614
+ group: "metadata",
615
+ validation: (Rule) => Rule.required()
616
+ }),
617
+ (0, import_sanity9.defineField)({
618
+ name: "author",
619
+ title: "Author",
620
+ type: "reference",
621
+ group: "metadata",
622
+ to: [{ type: "teamMember" }]
623
+ }),
624
+ (0, import_sanity9.defineField)({
625
+ name: "tags",
626
+ title: "Tags",
627
+ type: "array",
628
+ group: "metadata",
629
+ of: [{ type: "string" }],
630
+ options: {
631
+ layout: "tags"
632
+ }
633
+ }),
634
+ (0, import_sanity9.defineField)({
635
+ name: "filterCategory",
636
+ title: "Filter Category",
637
+ type: "string",
638
+ group: "metadata",
639
+ options: {
640
+ list: [
641
+ { title: "Publications", value: "publications" },
642
+ { title: "Grants", value: "grants" },
643
+ { title: "Events", value: "events" },
644
+ { title: "General", value: "general" }
645
+ ]
646
+ },
647
+ validation: (Rule) => Rule.required()
648
+ }),
649
+ (0, import_sanity9.defineField)({
650
+ name: "displayCategory",
651
+ title: "Display Category Label",
652
+ type: "string",
653
+ group: "metadata",
654
+ description: 'Category shown on card (e.g., "Featured News", "Publications", "Team")'
655
+ }),
656
+ (0, import_sanity9.defineField)({
657
+ name: "featured",
658
+ title: "Featured Article",
659
+ type: "boolean",
660
+ group: "metadata",
661
+ description: "Show as featured hero article on news page",
662
+ initialValue: false
663
+ }),
664
+ (0, import_sanity9.defineField)({
665
+ name: "readTime",
666
+ title: "Read Time",
667
+ type: "string",
668
+ group: "metadata",
669
+ description: 'e.g., "6 min read"'
670
+ })
671
+ ],
672
+ preview: {
673
+ select: {
674
+ title: "title",
675
+ date: "date",
676
+ media: "image",
677
+ featured: "featured"
678
+ },
679
+ prepare: ({ title, date, media, featured }) => ({
680
+ title: featured ? `\u2B50 ${title}` : title,
681
+ subtitle: date,
682
+ media
683
+ })
684
+ },
685
+ orderings: [
686
+ {
687
+ title: "Date, New First",
688
+ name: "dateDesc",
689
+ by: [{ field: "date", direction: "desc" }]
690
+ }
691
+ ]
692
+ });
693
+
694
+ // src/schemas/schemas/documents/galleryItem.ts
695
+ var import_sanity10 = require("sanity");
696
+ var galleryItem_default = (0, import_sanity10.defineType)({
697
+ name: "galleryItem",
698
+ title: "Gallery Item",
699
+ type: "document",
700
+ icon: () => "\u{1F5BC}\uFE0F",
701
+ fields: [
702
+ (0, import_sanity10.defineField)({
703
+ name: "title",
704
+ title: "Title",
705
+ type: "string",
706
+ validation: (Rule) => Rule.required()
707
+ }),
708
+ (0, import_sanity10.defineField)({
709
+ name: "description",
710
+ title: "Description",
711
+ type: "text",
712
+ rows: 2,
713
+ validation: (Rule) => Rule.required().max(200)
714
+ }),
715
+ (0, import_sanity10.defineField)({
716
+ name: "category",
717
+ title: "Category",
718
+ type: "string",
719
+ options: {
720
+ list: [
721
+ { title: "Facility", value: "Facility" },
722
+ { title: "Equipment", value: "Equipment" },
723
+ { title: "Team", value: "Team" },
724
+ { title: "Infrastructure", value: "Infrastructure" },
725
+ { title: "Events", value: "Events" },
726
+ { title: "Research", value: "Research" }
727
+ ]
728
+ },
729
+ validation: (Rule) => Rule.required()
730
+ }),
731
+ (0, import_sanity10.defineField)({
732
+ name: "categoryColor",
733
+ title: "Category Badge Color",
734
+ type: "string",
735
+ options: {
736
+ list: [
737
+ { title: "Blue", value: "blue" },
738
+ { title: "Purple", value: "purple" },
739
+ { title: "Emerald", value: "emerald" }
740
+ ]
741
+ },
742
+ initialValue: "blue"
743
+ }),
744
+ (0, import_sanity10.defineField)({
745
+ name: "image",
746
+ title: "Image",
747
+ type: "image",
748
+ options: { hotspot: true },
749
+ fields: [
750
+ { name: "alt", type: "string", title: "Alt Text" }
751
+ ],
752
+ validation: (Rule) => Rule.required()
753
+ }),
754
+ (0, import_sanity10.defineField)({
755
+ name: "featured",
756
+ title: "Featured (Large)",
757
+ type: "boolean",
758
+ description: "Display as large featured item in grid",
759
+ initialValue: false
760
+ }),
761
+ (0, import_sanity10.defineField)({
762
+ name: "wide",
763
+ title: "Wide Layout",
764
+ type: "boolean",
765
+ description: "Span two columns",
766
+ initialValue: false
767
+ }),
768
+ (0, import_sanity10.defineField)({
769
+ name: "tall",
770
+ title: "Tall Layout",
771
+ type: "boolean",
772
+ description: "Span two rows",
773
+ initialValue: false
774
+ }),
775
+ (0, import_sanity10.defineField)({
776
+ name: "order",
777
+ title: "Display Order",
778
+ type: "number",
779
+ description: "Lower numbers appear first"
780
+ })
781
+ ],
782
+ preview: {
783
+ select: {
784
+ title: "title",
785
+ subtitle: "category",
786
+ media: "image"
787
+ }
788
+ },
789
+ orderings: [
790
+ {
791
+ title: "Order",
792
+ name: "orderAsc",
793
+ by: [{ field: "order", direction: "asc" }]
794
+ }
795
+ ]
796
+ });
797
+
798
+ // src/schemas/schemas/documents/researchProject.ts
799
+ var import_sanity11 = require("sanity");
800
+ var researchProject_default = (0, import_sanity11.defineType)({
801
+ name: "researchProject",
802
+ title: "Research Project",
803
+ type: "document",
804
+ icon: () => "\u{1F52C}",
805
+ groups: [
806
+ { name: "content", title: "Content", default: true },
807
+ { name: "metadata", title: "Metadata" },
808
+ { name: "relations", title: "Related Items" }
809
+ ],
810
+ fields: [
811
+ (0, import_sanity11.defineField)({
812
+ name: "title",
813
+ title: "Project Title",
814
+ type: "string",
815
+ group: "content",
816
+ validation: (Rule) => Rule.required()
817
+ }),
818
+ (0, import_sanity11.defineField)({
819
+ name: "slug",
820
+ title: "Slug",
821
+ type: "slug",
822
+ group: "content",
823
+ options: { source: "title", maxLength: 96 },
824
+ validation: (Rule) => Rule.required()
825
+ }),
826
+ (0, import_sanity11.defineField)({
827
+ name: "description",
828
+ title: "Short Description",
829
+ type: "text",
830
+ group: "content",
831
+ rows: 3,
832
+ validation: (Rule) => Rule.required().max(400)
833
+ }),
834
+ (0, import_sanity11.defineField)({
835
+ name: "fullDescription",
836
+ title: "Full Description",
837
+ type: "portableText",
838
+ group: "content"
839
+ }),
840
+ (0, import_sanity11.defineField)({
841
+ name: "image",
842
+ title: "Project Image",
843
+ type: "image",
844
+ group: "content",
845
+ options: { hotspot: true },
846
+ fields: [{ name: "alt", type: "string", title: "Alt Text" }]
847
+ }),
848
+ (0, import_sanity11.defineField)({
849
+ name: "status",
850
+ title: "Project Status",
851
+ type: "string",
852
+ group: "metadata",
853
+ options: {
854
+ list: [
855
+ { title: "Active", value: "active" },
856
+ { title: "Completed", value: "completed" },
857
+ { title: "On Hold", value: "onhold" }
858
+ ],
859
+ layout: "radio"
860
+ },
861
+ initialValue: "active"
862
+ }),
863
+ (0, import_sanity11.defineField)({
864
+ name: "startDate",
865
+ title: "Start Date",
866
+ type: "date",
867
+ group: "metadata"
868
+ }),
869
+ (0, import_sanity11.defineField)({
870
+ name: "endDate",
871
+ title: "End Date",
872
+ type: "date",
873
+ group: "metadata"
874
+ }),
875
+ (0, import_sanity11.defineField)({
876
+ name: "tags",
877
+ title: "Tags",
878
+ type: "array",
879
+ group: "metadata",
880
+ of: [{ type: "string" }],
881
+ options: { layout: "tags" }
882
+ }),
883
+ (0, import_sanity11.defineField)({
884
+ name: "teamMembers",
885
+ title: "Team Members",
886
+ type: "array",
887
+ group: "relations",
888
+ of: [{ type: "reference", to: [{ type: "teamMember" }] }]
889
+ }),
890
+ (0, import_sanity11.defineField)({
891
+ name: "publications",
892
+ title: "Related Publications",
893
+ type: "array",
894
+ group: "relations",
895
+ of: [{ type: "reference", to: [{ type: "publication" }] }]
896
+ }),
897
+ (0, import_sanity11.defineField)({
898
+ name: "externalLinks",
899
+ title: "External Links",
900
+ type: "array",
901
+ group: "relations",
902
+ of: [{ type: "link" }]
903
+ }),
904
+ (0, import_sanity11.defineField)({
905
+ name: "order",
906
+ title: "Display Order",
907
+ type: "number",
908
+ group: "metadata",
909
+ description: "Lower numbers appear first"
910
+ })
911
+ ],
912
+ preview: {
913
+ select: {
914
+ title: "title",
915
+ status: "status",
916
+ media: "image"
917
+ },
918
+ prepare: ({ title, status, media }) => ({
919
+ title,
920
+ subtitle: status ? status.charAt(0).toUpperCase() + status.slice(1) : "Unknown",
921
+ media
922
+ })
923
+ },
924
+ orderings: [
925
+ {
926
+ title: "Display Order",
927
+ name: "orderAsc",
928
+ by: [{ field: "order", direction: "asc" }]
929
+ },
930
+ {
931
+ title: "Start Date, New First",
932
+ name: "startDateDesc",
933
+ by: [{ field: "startDate", direction: "desc" }]
934
+ }
935
+ ]
936
+ });
937
+
938
+ // src/schemas/schemas/documents/event.ts
939
+ var import_sanity12 = require("sanity");
940
+ var event_default = (0, import_sanity12.defineType)({
941
+ name: "event",
942
+ title: "Event",
943
+ type: "document",
944
+ icon: () => "\u{1F4C5}",
945
+ fields: [
946
+ (0, import_sanity12.defineField)({
947
+ name: "title",
948
+ title: "Event Title",
949
+ type: "string",
950
+ validation: (Rule) => Rule.required()
951
+ }),
952
+ (0, import_sanity12.defineField)({
953
+ name: "slug",
954
+ title: "Slug",
955
+ type: "slug",
956
+ options: { source: "title", maxLength: 96 },
957
+ validation: (Rule) => Rule.required()
958
+ }),
959
+ (0, import_sanity12.defineField)({
960
+ name: "description",
961
+ title: "Description",
962
+ type: "portableText"
963
+ }),
964
+ (0, import_sanity12.defineField)({
965
+ name: "excerpt",
966
+ title: "Short Excerpt",
967
+ type: "text",
968
+ rows: 2,
969
+ description: "Brief description for event cards"
970
+ }),
971
+ (0, import_sanity12.defineField)({
972
+ name: "date",
973
+ title: "Start Date & Time",
974
+ type: "datetime",
975
+ validation: (Rule) => Rule.required()
976
+ }),
977
+ (0, import_sanity12.defineField)({
978
+ name: "endDate",
979
+ title: "End Date & Time",
980
+ type: "datetime"
981
+ }),
982
+ (0, import_sanity12.defineField)({
983
+ name: "location",
984
+ title: "Location",
985
+ type: "string",
986
+ description: 'Physical location or "Virtual"'
987
+ }),
988
+ (0, import_sanity12.defineField)({
989
+ name: "type",
990
+ title: "Event Type",
991
+ type: "string",
992
+ options: {
993
+ list: [
994
+ { title: "Seminar", value: "seminar" },
995
+ { title: "Conference", value: "conference" },
996
+ { title: "Workshop", value: "workshop" },
997
+ { title: "Social", value: "social" },
998
+ { title: "Open House", value: "openhouse" },
999
+ { title: "Defense", value: "defense" },
1000
+ { title: "Lecture", value: "lecture" }
1001
+ ]
1002
+ }
1003
+ }),
1004
+ (0, import_sanity12.defineField)({
1005
+ name: "image",
1006
+ title: "Event Image",
1007
+ type: "image",
1008
+ options: { hotspot: true },
1009
+ fields: [{ name: "alt", type: "string", title: "Alt Text" }]
1010
+ }),
1011
+ (0, import_sanity12.defineField)({
1012
+ name: "registrationUrl",
1013
+ title: "Registration URL",
1014
+ type: "url",
1015
+ description: "Link to registration form or event page"
1016
+ }),
1017
+ (0, import_sanity12.defineField)({
1018
+ name: "speakers",
1019
+ title: "Speakers",
1020
+ type: "array",
1021
+ of: [{ type: "reference", to: [{ type: "teamMember" }] }]
1022
+ }),
1023
+ (0, import_sanity12.defineField)({
1024
+ name: "externalSpeakers",
1025
+ title: "External Speakers",
1026
+ type: "array",
1027
+ of: [{
1028
+ type: "object",
1029
+ fields: [
1030
+ { name: "name", type: "string", title: "Name" },
1031
+ { name: "affiliation", type: "string", title: "Affiliation" }
1032
+ ],
1033
+ preview: {
1034
+ select: { title: "name", subtitle: "affiliation" }
1035
+ }
1036
+ }]
1037
+ })
1038
+ ],
1039
+ preview: {
1040
+ select: {
1041
+ title: "title",
1042
+ date: "date",
1043
+ type: "type",
1044
+ media: "image"
1045
+ },
1046
+ prepare: ({ title, date, type, media }) => ({
1047
+ title,
1048
+ subtitle: `${type || "Event"} - ${date ? new Date(date).toLocaleDateString() : "TBD"}`,
1049
+ media
1050
+ })
1051
+ },
1052
+ orderings: [
1053
+ {
1054
+ title: "Date, Upcoming First",
1055
+ name: "dateAsc",
1056
+ by: [{ field: "date", direction: "asc" }]
1057
+ },
1058
+ {
1059
+ title: "Date, Recent First",
1060
+ name: "dateDesc",
1061
+ by: [{ field: "date", direction: "desc" }]
1062
+ }
1063
+ ]
1064
+ });
1065
+
1066
+ // src/schemas/schemas/singletons/siteSettings.ts
1067
+ var import_sanity13 = require("sanity");
1068
+ var siteSettings_default = (0, import_sanity13.defineType)({
1069
+ name: "siteSettings",
1070
+ title: "Site Settings",
1071
+ type: "document",
1072
+ icon: () => "\u2699\uFE0F",
1073
+ groups: [
1074
+ { name: "general", title: "General", default: true },
1075
+ { name: "hero", title: "Homepage Hero" },
1076
+ { name: "stats", title: "Statistics" },
1077
+ { name: "research", title: "Research Areas" },
1078
+ { name: "contact", title: "Contact Info" },
1079
+ { name: "navigation", title: "Navigation" },
1080
+ { name: "theme", title: "Theme" },
1081
+ { name: "footer", title: "Footer" }
1082
+ ],
1083
+ fields: [
1084
+ // General
1085
+ (0, import_sanity13.defineField)({
1086
+ name: "labName",
1087
+ title: "Lab Name",
1088
+ type: "string",
1089
+ group: "general",
1090
+ initialValue: "Prosophia Research Lab"
1091
+ }),
1092
+ (0, import_sanity13.defineField)({
1093
+ name: "tagline",
1094
+ title: "Tagline",
1095
+ type: "string",
1096
+ group: "general"
1097
+ }),
1098
+ (0, import_sanity13.defineField)({
1099
+ name: "logo",
1100
+ title: "Logo",
1101
+ type: "image",
1102
+ group: "general",
1103
+ options: { hotspot: true }
1104
+ }),
1105
+ (0, import_sanity13.defineField)({
1106
+ name: "favicon",
1107
+ title: "Favicon",
1108
+ type: "image",
1109
+ group: "general"
1110
+ }),
1111
+ (0, import_sanity13.defineField)({
1112
+ name: "siteDescription",
1113
+ title: "Site Description (SEO)",
1114
+ type: "text",
1115
+ group: "general",
1116
+ rows: 2,
1117
+ description: "Used for search engine results"
1118
+ }),
1119
+ // Hero Section
1120
+ (0, import_sanity13.defineField)({
1121
+ name: "heroTitle",
1122
+ title: "Hero Title",
1123
+ type: "string",
1124
+ group: "hero",
1125
+ description: "Main headline on homepage"
1126
+ }),
1127
+ (0, import_sanity13.defineField)({
1128
+ name: "heroHighlight",
1129
+ title: "Highlighted Text in Title",
1130
+ type: "string",
1131
+ group: "hero",
1132
+ description: "Text that appears highlighted/colored in the title"
1133
+ }),
1134
+ (0, import_sanity13.defineField)({
1135
+ name: "heroSubtitle",
1136
+ title: "Hero Subtitle",
1137
+ type: "text",
1138
+ group: "hero",
1139
+ rows: 2
1140
+ }),
1141
+ (0, import_sanity13.defineField)({
1142
+ name: "heroButtons",
1143
+ title: "Hero CTA Buttons",
1144
+ type: "array",
1145
+ group: "hero",
1146
+ of: [{ type: "ctaButton" }],
1147
+ validation: (Rule) => Rule.max(2)
1148
+ }),
1149
+ (0, import_sanity13.defineField)({
1150
+ name: "heroImage",
1151
+ title: "Hero Background Image",
1152
+ type: "image",
1153
+ group: "hero",
1154
+ options: { hotspot: true }
1155
+ }),
1156
+ // Stats
1157
+ (0, import_sanity13.defineField)({
1158
+ name: "stats",
1159
+ title: "Statistics",
1160
+ type: "array",
1161
+ group: "stats",
1162
+ of: [{ type: "stat" }],
1163
+ validation: (Rule) => Rule.max(6),
1164
+ description: 'Key metrics displayed on homepage (e.g., "120+ Papers")'
1165
+ }),
1166
+ // Research Areas
1167
+ (0, import_sanity13.defineField)({
1168
+ name: "researchAreas",
1169
+ title: "Research Areas",
1170
+ type: "array",
1171
+ group: "research",
1172
+ of: [{ type: "researchArea" }],
1173
+ description: "Main research focus areas shown on homepage"
1174
+ }),
1175
+ // Contact
1176
+ (0, import_sanity13.defineField)({
1177
+ name: "email",
1178
+ title: "General Email",
1179
+ type: "email",
1180
+ group: "contact"
1181
+ }),
1182
+ (0, import_sanity13.defineField)({
1183
+ name: "phone",
1184
+ title: "Phone Number",
1185
+ type: "string",
1186
+ group: "contact"
1187
+ }),
1188
+ (0, import_sanity13.defineField)({
1189
+ name: "address",
1190
+ title: "Address",
1191
+ type: "text",
1192
+ group: "contact",
1193
+ rows: 3
1194
+ }),
1195
+ (0, import_sanity13.defineField)({
1196
+ name: "mapImage",
1197
+ title: "Map Image",
1198
+ type: "image",
1199
+ group: "contact",
1200
+ description: "Static map image for contact page"
1201
+ }),
1202
+ (0, import_sanity13.defineField)({
1203
+ name: "socialLinks",
1204
+ title: "Social Media Links",
1205
+ type: "array",
1206
+ group: "contact",
1207
+ of: [{ type: "socialLink" }]
1208
+ }),
1209
+ // Navigation
1210
+ (0, import_sanity13.defineField)({
1211
+ name: "mainNavigation",
1212
+ title: "Main Navigation Items",
1213
+ type: "array",
1214
+ group: "navigation",
1215
+ of: [
1216
+ {
1217
+ type: "object",
1218
+ fields: [
1219
+ { name: "label", type: "string", title: "Label" },
1220
+ { name: "href", type: "string", title: "Path (e.g., /publications)" }
1221
+ ],
1222
+ preview: {
1223
+ select: { title: "label", subtitle: "href" }
1224
+ }
1225
+ }
1226
+ ]
1227
+ }),
1228
+ // Theme
1229
+ (0, import_sanity13.defineField)({
1230
+ name: "primaryColor",
1231
+ title: "Primary Color",
1232
+ type: "color",
1233
+ group: "theme",
1234
+ description: "Main accent color (default: gold #D4A012)"
1235
+ }),
1236
+ (0, import_sanity13.defineField)({
1237
+ name: "primaryDarkColor",
1238
+ title: "Primary Dark Color",
1239
+ type: "color",
1240
+ group: "theme",
1241
+ description: "Darker shade for hover states"
1242
+ }),
1243
+ (0, import_sanity13.defineField)({
1244
+ name: "fontFamily",
1245
+ title: "Primary Font",
1246
+ type: "string",
1247
+ group: "theme",
1248
+ options: {
1249
+ list: [
1250
+ { title: "Inter", value: "Inter" },
1251
+ { title: "Roboto", value: "Roboto" },
1252
+ { title: "Open Sans", value: "Open Sans" },
1253
+ { title: "Lato", value: "Lato" },
1254
+ { title: "Poppins", value: "Poppins" }
1255
+ ]
1256
+ },
1257
+ initialValue: "Inter"
1258
+ }),
1259
+ // Footer
1260
+ (0, import_sanity13.defineField)({
1261
+ name: "footerText",
1262
+ title: "Footer Copyright Text",
1263
+ type: "string",
1264
+ group: "footer",
1265
+ description: 'e.g., "\xA9 2024 Research Lab. All rights reserved."'
1266
+ }),
1267
+ (0, import_sanity13.defineField)({
1268
+ name: "footerLinks",
1269
+ title: "Footer Links",
1270
+ type: "array",
1271
+ group: "footer",
1272
+ of: [{ type: "link" }]
1273
+ })
1274
+ ],
1275
+ preview: {
1276
+ prepare: () => ({
1277
+ title: "Site Settings",
1278
+ subtitle: "Global site configuration"
1279
+ })
1280
+ }
1281
+ });
1282
+
1283
+ // src/schemas/schemas/index.ts
1284
+ var schemaTypes = [
1285
+ // Objects (must come first as they're referenced by documents)
1286
+ link_default,
1287
+ socialLink_default,
1288
+ stat_default,
1289
+ researchArea_default,
1290
+ ctaButton_default,
1291
+ portableText_default,
1292
+ // Documents
1293
+ publication_default,
1294
+ teamMember_default,
1295
+ newsArticle_default,
1296
+ galleryItem_default,
1297
+ researchProject_default,
1298
+ event_default,
1299
+ // Singletons
1300
+ siteSettings_default
1301
+ ];
1302
+ // Annotate the CommonJS export names for ESM import in node:
1303
+ 0 && (module.exports = {
1304
+ ctaButton,
1305
+ event,
1306
+ galleryItem,
1307
+ link,
1308
+ newsArticle,
1309
+ portableText,
1310
+ publication,
1311
+ researchArea,
1312
+ researchProject,
1313
+ schemaTypes,
1314
+ schemas,
1315
+ siteSettings,
1316
+ socialLink,
1317
+ stat,
1318
+ teamMember
1319
+ });