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