@prosophia/lab-minimal 0.0.3 → 0.0.5
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/BookPage.module.css +314 -0
- package/dist/ContactCTA.module.css +99 -0
- package/dist/ContactPage.module.css +169 -0
- package/dist/Footer.module.css +157 -0
- package/dist/HomePage.module.css +479 -0
- package/dist/Layout.module.css +256 -0
- package/dist/LegalPage.module.css +213 -0
- package/dist/NewsArticlePage.module.css +165 -0
- package/dist/NewsPage.module.css +136 -0
- package/dist/PastMembersPage.module.css +146 -0
- package/dist/PeoplePage.module.css +277 -0
- package/dist/PicturesPage.module.css +170 -0
- package/dist/PublicationDetailPage.module.css +213 -0
- package/dist/PublicationsPage.module.css +126 -0
- package/dist/ResearchPage.module.css +131 -0
- package/dist/ThemeToggle.module.css +114 -0
- package/dist/index-CSdV51Jq.d.mts +26 -0
- package/dist/index-CSdV51Jq.d.ts +26 -0
- package/dist/index.d.mts +289 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.js +1008 -268
- package/dist/index.mjs +978 -279
- package/dist/layouts/index.d.mts +13 -0
- package/dist/layouts/index.d.ts +13 -0
- package/dist/layouts/index.js +380 -0
- package/dist/layouts/index.mjs +344 -0
- package/dist/schemas/index.d.mts +182 -0
- package/dist/schemas/index.d.ts +182 -0
- package/dist/schemas/index.js +942 -0
- package/dist/schemas/index.mjs +904 -0
- package/package.json +14 -3
package/dist/schemas/index.js
CHANGED
|
@@ -1 +1,943 @@
|
|
|
1
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
|
+
blockContent: () => blockContent_default,
|
|
24
|
+
bookPage: () => bookPage_default,
|
|
25
|
+
contactPage: () => contactPage_default,
|
|
26
|
+
galleryImage: () => galleryImage_default,
|
|
27
|
+
homePage: () => homePage_default,
|
|
28
|
+
legalPage: () => legalPage_default,
|
|
29
|
+
newsArticle: () => newsArticle_default,
|
|
30
|
+
person: () => person_default,
|
|
31
|
+
publication: () => publication_default,
|
|
32
|
+
researchPage: () => researchPage_default,
|
|
33
|
+
schemaTypes: () => schemaTypes,
|
|
34
|
+
schemas: () => schemaTypes,
|
|
35
|
+
siteSettings: () => siteSettings_default
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(schemas_exports);
|
|
38
|
+
|
|
39
|
+
// src/schemas/schemaTypes/publication.ts
|
|
40
|
+
var import_sanity = require("sanity");
|
|
41
|
+
var publication_default = (0, import_sanity.defineType)({
|
|
42
|
+
name: "publication",
|
|
43
|
+
title: "Publication",
|
|
44
|
+
type: "document",
|
|
45
|
+
fields: [
|
|
46
|
+
(0, import_sanity.defineField)({
|
|
47
|
+
name: "title",
|
|
48
|
+
title: "Title",
|
|
49
|
+
type: "string",
|
|
50
|
+
validation: (Rule) => Rule.required()
|
|
51
|
+
}),
|
|
52
|
+
(0, import_sanity.defineField)({
|
|
53
|
+
name: "slug",
|
|
54
|
+
title: "Slug",
|
|
55
|
+
type: "slug",
|
|
56
|
+
options: {
|
|
57
|
+
source: "title",
|
|
58
|
+
maxLength: 96
|
|
59
|
+
},
|
|
60
|
+
description: 'A unique URL-friendly version of the title. Click "Generate".',
|
|
61
|
+
validation: (Rule) => Rule.required()
|
|
62
|
+
}),
|
|
63
|
+
(0, import_sanity.defineField)({
|
|
64
|
+
name: "authors",
|
|
65
|
+
title: "Authors",
|
|
66
|
+
type: "string",
|
|
67
|
+
description: "List the authors as they should appear, e.g., Rutherford, N., Doe, J., Smith, A.",
|
|
68
|
+
validation: (Rule) => Rule.required()
|
|
69
|
+
}),
|
|
70
|
+
(0, import_sanity.defineField)({
|
|
71
|
+
name: "journal",
|
|
72
|
+
title: "Journal or Conference",
|
|
73
|
+
type: "string",
|
|
74
|
+
validation: (Rule) => Rule.required()
|
|
75
|
+
}),
|
|
76
|
+
(0, import_sanity.defineField)({
|
|
77
|
+
name: "publicationDate",
|
|
78
|
+
title: "Publication Date",
|
|
79
|
+
type: "date",
|
|
80
|
+
options: {
|
|
81
|
+
dateFormat: "YYYY-MM"
|
|
82
|
+
// Format for year and month
|
|
83
|
+
},
|
|
84
|
+
validation: (Rule) => Rule.required()
|
|
85
|
+
}),
|
|
86
|
+
(0, import_sanity.defineField)({
|
|
87
|
+
name: "abstract",
|
|
88
|
+
title: "Abstract",
|
|
89
|
+
type: "text"
|
|
90
|
+
// Use 'text' for longer paragraphs
|
|
91
|
+
}),
|
|
92
|
+
(0, import_sanity.defineField)({
|
|
93
|
+
name: "journalLink",
|
|
94
|
+
title: "Link to Journal/Article",
|
|
95
|
+
type: "url",
|
|
96
|
+
validation: (Rule) => Rule.required()
|
|
97
|
+
})
|
|
98
|
+
],
|
|
99
|
+
// Sort publications by date by default in the studio
|
|
100
|
+
orderings: [
|
|
101
|
+
{
|
|
102
|
+
title: "Publication Date, Newest",
|
|
103
|
+
name: "publicationDateDesc",
|
|
104
|
+
by: [{ field: "publicationDate", direction: "desc" }]
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// src/schemas/schemaTypes/person.ts
|
|
110
|
+
var import_sanity2 = require("sanity");
|
|
111
|
+
var person_default = (0, import_sanity2.defineType)({
|
|
112
|
+
name: "person",
|
|
113
|
+
title: "Person",
|
|
114
|
+
type: "document",
|
|
115
|
+
fields: [
|
|
116
|
+
(0, import_sanity2.defineField)({
|
|
117
|
+
name: "name",
|
|
118
|
+
title: "Name",
|
|
119
|
+
type: "string",
|
|
120
|
+
validation: (Rule) => Rule.required()
|
|
121
|
+
}),
|
|
122
|
+
(0, import_sanity2.defineField)({
|
|
123
|
+
name: "role",
|
|
124
|
+
title: "Role / Position",
|
|
125
|
+
type: "string",
|
|
126
|
+
description: "E.g., Principal Investigator, PhD Candidate, Postdoc",
|
|
127
|
+
validation: (Rule) => Rule.required()
|
|
128
|
+
}),
|
|
129
|
+
(0, import_sanity2.defineField)({
|
|
130
|
+
name: "image",
|
|
131
|
+
title: "Image",
|
|
132
|
+
type: "image",
|
|
133
|
+
options: {
|
|
134
|
+
hotspot: true
|
|
135
|
+
// Allows for better image cropping in the studio
|
|
136
|
+
}
|
|
137
|
+
}),
|
|
138
|
+
(0, import_sanity2.defineField)({
|
|
139
|
+
name: "status",
|
|
140
|
+
title: "Status",
|
|
141
|
+
type: "string",
|
|
142
|
+
options: {
|
|
143
|
+
list: [
|
|
144
|
+
{ title: "Principal Investigator", value: "PI" },
|
|
145
|
+
{ title: "Current Member", value: "Current" },
|
|
146
|
+
{ title: "Past Member (Alumni)", value: "Past" }
|
|
147
|
+
],
|
|
148
|
+
layout: "radio"
|
|
149
|
+
// Makes it a radio button selector
|
|
150
|
+
},
|
|
151
|
+
initialValue: "Current",
|
|
152
|
+
validation: (Rule) => Rule.required()
|
|
153
|
+
}),
|
|
154
|
+
(0, import_sanity2.defineField)({
|
|
155
|
+
name: "currentPosition",
|
|
156
|
+
title: "Current Position (for Alumni)",
|
|
157
|
+
type: "string",
|
|
158
|
+
description: "E.g., Assistant Professor, Stanford University",
|
|
159
|
+
// This field will only show up if the status is 'Past'
|
|
160
|
+
hidden: ({ document }) => document?.status !== "Past"
|
|
161
|
+
})
|
|
162
|
+
],
|
|
163
|
+
preview: {
|
|
164
|
+
select: {
|
|
165
|
+
title: "name",
|
|
166
|
+
subtitle: "role",
|
|
167
|
+
media: "image"
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
orderings: [
|
|
171
|
+
{
|
|
172
|
+
title: "Name, A-Z",
|
|
173
|
+
name: "nameAsc",
|
|
174
|
+
by: [{ field: "name", direction: "asc" }]
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// src/schemas/schemaTypes/blockContent.ts
|
|
180
|
+
var import_sanity3 = require("sanity");
|
|
181
|
+
var blockContent_default = (0, import_sanity3.defineType)({
|
|
182
|
+
title: "Block Content",
|
|
183
|
+
name: "blockContent",
|
|
184
|
+
type: "array",
|
|
185
|
+
of: [
|
|
186
|
+
(0, import_sanity3.defineArrayMember)({
|
|
187
|
+
title: "Block",
|
|
188
|
+
type: "block",
|
|
189
|
+
// Styles let you set what is available in the dropdown box.
|
|
190
|
+
styles: [
|
|
191
|
+
{ title: "Normal", value: "normal" },
|
|
192
|
+
{ title: "H2", value: "h2" },
|
|
193
|
+
{ title: "H3", value: "h3" },
|
|
194
|
+
{ title: "Quote", value: "blockquote" }
|
|
195
|
+
],
|
|
196
|
+
lists: [{ title: "Bullet", value: "bullet" }],
|
|
197
|
+
// Marks let you mark up inline text in the Portable Text editor.
|
|
198
|
+
marks: {
|
|
199
|
+
// Decorators let you change the inline styling of text.
|
|
200
|
+
decorators: [
|
|
201
|
+
{ title: "Strong", value: "strong" },
|
|
202
|
+
{ title: "Emphasis", value: "em" }
|
|
203
|
+
],
|
|
204
|
+
// Annotations are links that can be applied to inline text.
|
|
205
|
+
annotations: [
|
|
206
|
+
{
|
|
207
|
+
title: "URL",
|
|
208
|
+
name: "link",
|
|
209
|
+
type: "object",
|
|
210
|
+
fields: [
|
|
211
|
+
{
|
|
212
|
+
title: "URL",
|
|
213
|
+
name: "href",
|
|
214
|
+
type: "url"
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
}
|
|
220
|
+
}),
|
|
221
|
+
// You can also allow editors to embed images directly in the article body
|
|
222
|
+
(0, import_sanity3.defineArrayMember)({
|
|
223
|
+
type: "image",
|
|
224
|
+
options: { hotspot: true }
|
|
225
|
+
})
|
|
226
|
+
]
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// src/schemas/schemaTypes/newsArticle.ts
|
|
230
|
+
var import_sanity4 = require("sanity");
|
|
231
|
+
var newsArticle_default = (0, import_sanity4.defineType)({
|
|
232
|
+
name: "newsArticle",
|
|
233
|
+
title: "News Article",
|
|
234
|
+
type: "document",
|
|
235
|
+
fields: [
|
|
236
|
+
(0, import_sanity4.defineField)({
|
|
237
|
+
name: "title",
|
|
238
|
+
title: "Title",
|
|
239
|
+
type: "string",
|
|
240
|
+
validation: (Rule) => Rule.required()
|
|
241
|
+
}),
|
|
242
|
+
(0, import_sanity4.defineField)({
|
|
243
|
+
name: "slug",
|
|
244
|
+
title: "Slug",
|
|
245
|
+
type: "slug",
|
|
246
|
+
options: {
|
|
247
|
+
source: "title",
|
|
248
|
+
maxLength: 96
|
|
249
|
+
},
|
|
250
|
+
description: 'A unique URL-friendly identifier for the article. Click "Generate" to create from title.',
|
|
251
|
+
validation: (Rule) => Rule.required()
|
|
252
|
+
}),
|
|
253
|
+
(0, import_sanity4.defineField)({
|
|
254
|
+
name: "publicationDate",
|
|
255
|
+
title: "Publication Date",
|
|
256
|
+
type: "date",
|
|
257
|
+
validation: (Rule) => Rule.required()
|
|
258
|
+
}),
|
|
259
|
+
(0, import_sanity4.defineField)({
|
|
260
|
+
name: "author",
|
|
261
|
+
title: "Author",
|
|
262
|
+
type: "string",
|
|
263
|
+
description: "E.g., Dr. Rutherford, Lab Announcement, Jane Doe",
|
|
264
|
+
initialValue: "Lab Announcement"
|
|
265
|
+
}),
|
|
266
|
+
(0, import_sanity4.defineField)({
|
|
267
|
+
name: "featuredImage",
|
|
268
|
+
title: "Featured Image",
|
|
269
|
+
type: "image",
|
|
270
|
+
options: {
|
|
271
|
+
hotspot: true
|
|
272
|
+
}
|
|
273
|
+
}),
|
|
274
|
+
(0, import_sanity4.defineField)({
|
|
275
|
+
name: "summary",
|
|
276
|
+
title: "Summary",
|
|
277
|
+
type: "text",
|
|
278
|
+
description: "A short summary of the article for the main news list page.",
|
|
279
|
+
validation: (Rule) => Rule.required()
|
|
280
|
+
}),
|
|
281
|
+
(0, import_sanity4.defineField)({
|
|
282
|
+
name: "content",
|
|
283
|
+
title: "Content",
|
|
284
|
+
type: "blockContent",
|
|
285
|
+
// This references the schema we created in Step 1
|
|
286
|
+
validation: (Rule) => Rule.required()
|
|
287
|
+
})
|
|
288
|
+
],
|
|
289
|
+
preview: {
|
|
290
|
+
select: {
|
|
291
|
+
title: "title",
|
|
292
|
+
subtitle: "publicationDate",
|
|
293
|
+
media: "featuredImage"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
orderings: [
|
|
297
|
+
{
|
|
298
|
+
title: "Publication Date, Newest",
|
|
299
|
+
name: "publicationDateDesc",
|
|
300
|
+
by: [{ field: "publicationDate", direction: "desc" }]
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
// src/schemas/schemaTypes/researchPage.ts
|
|
306
|
+
var import_sanity5 = require("sanity");
|
|
307
|
+
var researchPage_default = (0, import_sanity5.defineType)({
|
|
308
|
+
name: "researchPage",
|
|
309
|
+
title: "Research Page",
|
|
310
|
+
type: "document",
|
|
311
|
+
fields: [
|
|
312
|
+
(0, import_sanity5.defineField)({
|
|
313
|
+
name: "title",
|
|
314
|
+
title: "Title",
|
|
315
|
+
type: "string",
|
|
316
|
+
initialValue: "Research Page Content",
|
|
317
|
+
hidden: true
|
|
318
|
+
}),
|
|
319
|
+
(0, import_sanity5.defineField)({
|
|
320
|
+
name: "pageContent",
|
|
321
|
+
title: "Page Content",
|
|
322
|
+
description: "The entire content for the Research page. Use headings (H2, H3) to structure the different sections.",
|
|
323
|
+
type: "blockContent",
|
|
324
|
+
validation: (Rule) => Rule.required()
|
|
325
|
+
})
|
|
326
|
+
],
|
|
327
|
+
// REMOVED the deprecated __experimental_actions property
|
|
328
|
+
preview: {
|
|
329
|
+
select: {
|
|
330
|
+
title: "title"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
// src/schemas/schemaTypes/bookPage.ts
|
|
336
|
+
var import_sanity6 = require("sanity");
|
|
337
|
+
var bookPage_default = (0, import_sanity6.defineType)({
|
|
338
|
+
name: "bookPage",
|
|
339
|
+
title: "Book Page",
|
|
340
|
+
type: "document",
|
|
341
|
+
fields: [
|
|
342
|
+
(0, import_sanity6.defineField)({
|
|
343
|
+
name: "title",
|
|
344
|
+
title: "Title",
|
|
345
|
+
type: "string",
|
|
346
|
+
initialValue: "Book Page Content",
|
|
347
|
+
hidden: true
|
|
348
|
+
}),
|
|
349
|
+
(0, import_sanity6.defineField)({
|
|
350
|
+
name: "bookTitle",
|
|
351
|
+
title: "Book Title",
|
|
352
|
+
type: "string",
|
|
353
|
+
validation: (Rule) => Rule.required()
|
|
354
|
+
}),
|
|
355
|
+
(0, import_sanity6.defineField)({
|
|
356
|
+
name: "bookCover",
|
|
357
|
+
title: "Book Cover Image",
|
|
358
|
+
type: "image",
|
|
359
|
+
options: {
|
|
360
|
+
hotspot: true
|
|
361
|
+
},
|
|
362
|
+
validation: (Rule) => Rule.required()
|
|
363
|
+
}),
|
|
364
|
+
(0, import_sanity6.defineField)({
|
|
365
|
+
name: "amazonLink",
|
|
366
|
+
title: "Amazon Purchase Link",
|
|
367
|
+
type: "url",
|
|
368
|
+
validation: (Rule) => Rule.required()
|
|
369
|
+
}),
|
|
370
|
+
(0, import_sanity6.defineField)({
|
|
371
|
+
name: "cambridgeLink",
|
|
372
|
+
title: "Cambridge Press Purchase Link",
|
|
373
|
+
type: "url",
|
|
374
|
+
validation: (Rule) => Rule.required()
|
|
375
|
+
}),
|
|
376
|
+
(0, import_sanity6.defineField)({
|
|
377
|
+
name: "description",
|
|
378
|
+
title: "Description (Frontmatter)",
|
|
379
|
+
type: "text",
|
|
380
|
+
// Simple long-form text is sufficient here
|
|
381
|
+
validation: (Rule) => Rule.required()
|
|
382
|
+
})
|
|
383
|
+
],
|
|
384
|
+
preview: {
|
|
385
|
+
select: {
|
|
386
|
+
title: "bookTitle",
|
|
387
|
+
media: "bookCover"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
// src/schemas/schemaTypes/contactPage.ts
|
|
393
|
+
var import_sanity7 = require("sanity");
|
|
394
|
+
var contactPage_default = (0, import_sanity7.defineType)({
|
|
395
|
+
name: "contactPage",
|
|
396
|
+
title: "Contact Page",
|
|
397
|
+
type: "document",
|
|
398
|
+
fields: [
|
|
399
|
+
(0, import_sanity7.defineField)({
|
|
400
|
+
name: "title",
|
|
401
|
+
title: "Title",
|
|
402
|
+
type: "string",
|
|
403
|
+
initialValue: "Contact Page Content",
|
|
404
|
+
hidden: true
|
|
405
|
+
// For internal CMS use only
|
|
406
|
+
}),
|
|
407
|
+
(0, import_sanity7.defineField)({
|
|
408
|
+
name: "piName",
|
|
409
|
+
title: "Principal Investigator Name",
|
|
410
|
+
type: "string",
|
|
411
|
+
description: "e.g., Ioannis Rutherford, Ph.D.",
|
|
412
|
+
validation: (Rule) => Rule.required()
|
|
413
|
+
}),
|
|
414
|
+
(0, import_sanity7.defineField)({
|
|
415
|
+
name: "email",
|
|
416
|
+
title: "Contact Email",
|
|
417
|
+
type: "string",
|
|
418
|
+
validation: (Rule) => Rule.email().required()
|
|
419
|
+
}),
|
|
420
|
+
(0, import_sanity7.defineField)({
|
|
421
|
+
name: "labAddress",
|
|
422
|
+
title: "Lab Address",
|
|
423
|
+
type: "text",
|
|
424
|
+
description: "The physical address of the lab, including line breaks.",
|
|
425
|
+
validation: (Rule) => Rule.required()
|
|
426
|
+
}),
|
|
427
|
+
(0, import_sanity7.defineField)({
|
|
428
|
+
name: "googleMapsLink",
|
|
429
|
+
title: "Google Maps Link",
|
|
430
|
+
type: "url",
|
|
431
|
+
description: 'The URL for the "View on Google Maps" button.',
|
|
432
|
+
validation: (Rule) => Rule.required()
|
|
433
|
+
}),
|
|
434
|
+
(0, import_sanity7.defineField)({
|
|
435
|
+
name: "googleMapsEmbedUrl",
|
|
436
|
+
title: "Google Maps Embed URL",
|
|
437
|
+
type: "url",
|
|
438
|
+
description: "From Google Maps, click Share > Embed a map > Copy HTML. Paste the src URL here.",
|
|
439
|
+
validation: (Rule) => Rule.required()
|
|
440
|
+
}),
|
|
441
|
+
(0, import_sanity7.defineField)({
|
|
442
|
+
name: "guidanceText",
|
|
443
|
+
title: "Guidance for Applicants",
|
|
444
|
+
description: "The section with information for prospective students and collaborators.",
|
|
445
|
+
type: "blockContent"
|
|
446
|
+
// Reusing our rich text editor
|
|
447
|
+
})
|
|
448
|
+
]
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
// src/schemas/schemaTypes/galleryImage.ts
|
|
452
|
+
var import_sanity8 = require("sanity");
|
|
453
|
+
var galleryImage_default = (0, import_sanity8.defineType)({
|
|
454
|
+
name: "galleryImage",
|
|
455
|
+
title: "Gallery Image",
|
|
456
|
+
type: "document",
|
|
457
|
+
fields: [
|
|
458
|
+
(0, import_sanity8.defineField)({
|
|
459
|
+
name: "image",
|
|
460
|
+
title: "Image",
|
|
461
|
+
type: "image",
|
|
462
|
+
options: {
|
|
463
|
+
hotspot: true
|
|
464
|
+
// This allows for better cropping
|
|
465
|
+
},
|
|
466
|
+
validation: (Rule) => Rule.required()
|
|
467
|
+
}),
|
|
468
|
+
(0, import_sanity8.defineField)({
|
|
469
|
+
name: "caption",
|
|
470
|
+
title: "Caption / Description",
|
|
471
|
+
type: "string",
|
|
472
|
+
description: 'A short description of the picture (e.g., "Lab retreat, Fall 2025").'
|
|
473
|
+
}),
|
|
474
|
+
(0, import_sanity8.defineField)({
|
|
475
|
+
name: "altText",
|
|
476
|
+
title: "Alternative Text",
|
|
477
|
+
type: "string",
|
|
478
|
+
description: "A descriptive text for screen readers. Important for accessibility.",
|
|
479
|
+
validation: (Rule) => Rule.required()
|
|
480
|
+
})
|
|
481
|
+
],
|
|
482
|
+
orderings: [
|
|
483
|
+
{
|
|
484
|
+
title: "Date Created, Newest",
|
|
485
|
+
name: "dateCreatedDesc",
|
|
486
|
+
by: [{ field: "_createdAt", direction: "desc" }]
|
|
487
|
+
}
|
|
488
|
+
]
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
// src/schemas/schemaTypes/siteSettings.ts
|
|
492
|
+
var import_sanity9 = require("sanity");
|
|
493
|
+
var siteSettings_default = (0, import_sanity9.defineType)({
|
|
494
|
+
name: "siteSettings",
|
|
495
|
+
title: "Site Settings",
|
|
496
|
+
type: "document",
|
|
497
|
+
groups: [
|
|
498
|
+
{ name: "general", title: "General" },
|
|
499
|
+
{ name: "theme", title: "Theme & Design" },
|
|
500
|
+
{ name: "seo", title: "SEO & Social" },
|
|
501
|
+
{ name: "legal", title: "Legal Pages" }
|
|
502
|
+
],
|
|
503
|
+
fields: [
|
|
504
|
+
// --- General Settings ---
|
|
505
|
+
(0, import_sanity9.defineField)({
|
|
506
|
+
name: "labName",
|
|
507
|
+
title: "Lab Name",
|
|
508
|
+
type: "string",
|
|
509
|
+
description: 'The primary name of the lab (e.g., "Rutherford")',
|
|
510
|
+
group: "general",
|
|
511
|
+
validation: (Rule) => Rule.required()
|
|
512
|
+
}),
|
|
513
|
+
(0, import_sanity9.defineField)({
|
|
514
|
+
name: "labNameAccent",
|
|
515
|
+
title: "Lab Name Accent",
|
|
516
|
+
type: "string",
|
|
517
|
+
description: 'The second part of the name to be styled differently (e.g., "Lab")',
|
|
518
|
+
group: "general"
|
|
519
|
+
}),
|
|
520
|
+
(0, import_sanity9.defineField)({
|
|
521
|
+
name: "labNameDescription",
|
|
522
|
+
title: "Lab Description",
|
|
523
|
+
type: "text",
|
|
524
|
+
description: "A brief description of the research group (shown in footer and meta)",
|
|
525
|
+
group: "general"
|
|
526
|
+
}),
|
|
527
|
+
(0, import_sanity9.defineField)({
|
|
528
|
+
name: "footerText",
|
|
529
|
+
title: "Footer Copyright Text",
|
|
530
|
+
type: "string",
|
|
531
|
+
description: "Custom copyright text. Leave blank for default.",
|
|
532
|
+
group: "general"
|
|
533
|
+
}),
|
|
534
|
+
(0, import_sanity9.defineField)({
|
|
535
|
+
name: "heroImage",
|
|
536
|
+
title: "Homepage Hero Image",
|
|
537
|
+
type: "image",
|
|
538
|
+
description: "The main hero image displayed on the homepage.",
|
|
539
|
+
group: "general",
|
|
540
|
+
options: {
|
|
541
|
+
hotspot: true
|
|
542
|
+
}
|
|
543
|
+
}),
|
|
544
|
+
// --- Theme Settings ---
|
|
545
|
+
(0, import_sanity9.defineField)({
|
|
546
|
+
name: "colorTheme",
|
|
547
|
+
title: "Color Theme",
|
|
548
|
+
type: "string",
|
|
549
|
+
description: "Choose a color scheme for your website. Each theme includes matching light and dark mode colors.",
|
|
550
|
+
group: "theme",
|
|
551
|
+
initialValue: "ocean",
|
|
552
|
+
options: {
|
|
553
|
+
list: [
|
|
554
|
+
{ title: "\u{1F30A} Ocean (Blue) - Professional, trustworthy", value: "ocean" },
|
|
555
|
+
{ title: "\u{1F33F} Verdant (Green) - Nature-inspired, calming", value: "verdant" },
|
|
556
|
+
{ title: "\u{1F305} Sunset (Orange) - Warm, energetic", value: "sunset" },
|
|
557
|
+
{ title: "\u{1F49C} Violet (Purple) - Creative, innovative", value: "violet" },
|
|
558
|
+
{ title: "\u{1F338} Rose (Pink) - Modern, distinctive", value: "rose" },
|
|
559
|
+
{ title: "\u{1F537} Slate (Gray) - Neutral, corporate", value: "slate" },
|
|
560
|
+
{ title: "\u{1F949} Copper (Bronze) - Elegant, sophisticated", value: "copper" },
|
|
561
|
+
{ title: "\u{1F332} Forest (Dark Green) - Deep, scholarly", value: "forest" }
|
|
562
|
+
],
|
|
563
|
+
layout: "dropdown"
|
|
564
|
+
}
|
|
565
|
+
}),
|
|
566
|
+
// --- SEO Settings ---
|
|
567
|
+
(0, import_sanity9.defineField)({
|
|
568
|
+
name: "seoTitle",
|
|
569
|
+
title: "SEO Title",
|
|
570
|
+
type: "string",
|
|
571
|
+
description: "Title for search engines (50-60 characters recommended)",
|
|
572
|
+
group: "seo",
|
|
573
|
+
validation: (Rule) => Rule.max(60).warning("SEO titles should be under 60 characters")
|
|
574
|
+
}),
|
|
575
|
+
(0, import_sanity9.defineField)({
|
|
576
|
+
name: "seoDescription",
|
|
577
|
+
title: "SEO Description",
|
|
578
|
+
type: "text",
|
|
579
|
+
description: "Description for search engines (150-160 characters recommended)",
|
|
580
|
+
group: "seo",
|
|
581
|
+
validation: (Rule) => Rule.max(160).warning("SEO descriptions should be under 160 characters")
|
|
582
|
+
}),
|
|
583
|
+
(0, import_sanity9.defineField)({
|
|
584
|
+
name: "seoKeywords",
|
|
585
|
+
title: "SEO Keywords",
|
|
586
|
+
type: "array",
|
|
587
|
+
of: [{ type: "string" }],
|
|
588
|
+
description: "Keywords for search engines",
|
|
589
|
+
group: "seo",
|
|
590
|
+
options: {
|
|
591
|
+
layout: "tags"
|
|
592
|
+
}
|
|
593
|
+
}),
|
|
594
|
+
(0, import_sanity9.defineField)({
|
|
595
|
+
name: "socialImage",
|
|
596
|
+
title: "Social Share Image",
|
|
597
|
+
type: "image",
|
|
598
|
+
description: "Image shown when sharing on social media (1200x630px recommended)",
|
|
599
|
+
group: "seo",
|
|
600
|
+
options: {
|
|
601
|
+
hotspot: true
|
|
602
|
+
}
|
|
603
|
+
}),
|
|
604
|
+
(0, import_sanity9.defineField)({
|
|
605
|
+
name: "twitterHandle",
|
|
606
|
+
title: "Twitter Handle",
|
|
607
|
+
type: "string",
|
|
608
|
+
description: "Twitter/X username (e.g., @labname)",
|
|
609
|
+
group: "seo"
|
|
610
|
+
}),
|
|
611
|
+
(0, import_sanity9.defineField)({
|
|
612
|
+
name: "linkedinUrl",
|
|
613
|
+
title: "LinkedIn URL",
|
|
614
|
+
type: "url",
|
|
615
|
+
description: "Full LinkedIn page URL",
|
|
616
|
+
group: "seo"
|
|
617
|
+
}),
|
|
618
|
+
// --- Legal Pages Settings ---
|
|
619
|
+
(0, import_sanity9.defineField)({
|
|
620
|
+
name: "showPrivacyPolicy",
|
|
621
|
+
title: "Show Privacy Policy Link",
|
|
622
|
+
type: "boolean",
|
|
623
|
+
description: "Display the Privacy Policy link in the footer",
|
|
624
|
+
group: "legal",
|
|
625
|
+
initialValue: true
|
|
626
|
+
}),
|
|
627
|
+
(0, import_sanity9.defineField)({
|
|
628
|
+
name: "privacyPolicyUrl",
|
|
629
|
+
title: "External Privacy Policy URL",
|
|
630
|
+
type: "url",
|
|
631
|
+
description: "Optional: Use an external URL instead of the built-in page",
|
|
632
|
+
group: "legal",
|
|
633
|
+
hidden: ({ document }) => !document?.showPrivacyPolicy
|
|
634
|
+
}),
|
|
635
|
+
(0, import_sanity9.defineField)({
|
|
636
|
+
name: "showTerms",
|
|
637
|
+
title: "Show Terms & Conditions Link",
|
|
638
|
+
type: "boolean",
|
|
639
|
+
description: "Display the Terms & Conditions link in the footer",
|
|
640
|
+
group: "legal",
|
|
641
|
+
initialValue: true
|
|
642
|
+
}),
|
|
643
|
+
(0, import_sanity9.defineField)({
|
|
644
|
+
name: "termsUrl",
|
|
645
|
+
title: "External Terms & Conditions URL",
|
|
646
|
+
type: "url",
|
|
647
|
+
description: "Optional: Use an external URL instead of the built-in page",
|
|
648
|
+
group: "legal",
|
|
649
|
+
hidden: ({ document }) => !document?.showTerms
|
|
650
|
+
})
|
|
651
|
+
],
|
|
652
|
+
preview: {
|
|
653
|
+
select: {
|
|
654
|
+
title: "labName",
|
|
655
|
+
subtitle: "labNameAccent"
|
|
656
|
+
},
|
|
657
|
+
prepare({ title, subtitle }) {
|
|
658
|
+
return {
|
|
659
|
+
title: `${title || "Site"} ${subtitle || ""} Settings`
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
|
|
665
|
+
// src/schemas/schemaTypes/homePage.ts
|
|
666
|
+
var import_sanity10 = require("sanity");
|
|
667
|
+
var homePage_default = (0, import_sanity10.defineType)({
|
|
668
|
+
name: "homePage",
|
|
669
|
+
title: "Home Page",
|
|
670
|
+
type: "document",
|
|
671
|
+
groups: [
|
|
672
|
+
{ name: "hero", title: "Hero Section" },
|
|
673
|
+
{ name: "research", title: "Research Areas" },
|
|
674
|
+
{ name: "stats", title: "Statistics" }
|
|
675
|
+
],
|
|
676
|
+
fields: [
|
|
677
|
+
// Internal title for CMS organization
|
|
678
|
+
(0, import_sanity10.defineField)({
|
|
679
|
+
name: "title",
|
|
680
|
+
title: "Title",
|
|
681
|
+
type: "string",
|
|
682
|
+
initialValue: "Home Page Content",
|
|
683
|
+
hidden: true
|
|
684
|
+
}),
|
|
685
|
+
// --- Hero Section ---
|
|
686
|
+
(0, import_sanity10.defineField)({
|
|
687
|
+
name: "heroTagline",
|
|
688
|
+
title: "Hero Tagline",
|
|
689
|
+
type: "string",
|
|
690
|
+
description: 'Small text above the main heading (e.g., "#1 Research Lab in the Field")',
|
|
691
|
+
group: "hero"
|
|
692
|
+
}),
|
|
693
|
+
(0, import_sanity10.defineField)({
|
|
694
|
+
name: "heroHeading",
|
|
695
|
+
title: "Hero Heading",
|
|
696
|
+
type: "string",
|
|
697
|
+
description: 'Main heading text (e.g., "Empowering innovation with the knowledge of")',
|
|
698
|
+
group: "hero",
|
|
699
|
+
validation: (Rule) => Rule.required()
|
|
700
|
+
}),
|
|
701
|
+
(0, import_sanity10.defineField)({
|
|
702
|
+
name: "heroHeadingAccent",
|
|
703
|
+
title: "Hero Heading Accent Word",
|
|
704
|
+
type: "string",
|
|
705
|
+
description: 'The highlighted word in the heading (e.g., "Matter")',
|
|
706
|
+
group: "hero",
|
|
707
|
+
validation: (Rule) => Rule.required()
|
|
708
|
+
}),
|
|
709
|
+
(0, import_sanity10.defineField)({
|
|
710
|
+
name: "heroDescription",
|
|
711
|
+
title: "Hero Description",
|
|
712
|
+
type: "text",
|
|
713
|
+
description: "Supporting text below the main heading",
|
|
714
|
+
group: "hero",
|
|
715
|
+
validation: (Rule) => Rule.required()
|
|
716
|
+
}),
|
|
717
|
+
(0, import_sanity10.defineField)({
|
|
718
|
+
name: "heroCtaText",
|
|
719
|
+
title: "Hero CTA Button Text",
|
|
720
|
+
type: "string",
|
|
721
|
+
description: "Text for the primary call-to-action button",
|
|
722
|
+
initialValue: "Explore Our Work",
|
|
723
|
+
group: "hero"
|
|
724
|
+
}),
|
|
725
|
+
(0, import_sanity10.defineField)({
|
|
726
|
+
name: "heroCtaLink",
|
|
727
|
+
title: "Hero CTA Button Link",
|
|
728
|
+
type: "string",
|
|
729
|
+
description: 'Link for the primary CTA (e.g., "/research")',
|
|
730
|
+
initialValue: "/research",
|
|
731
|
+
group: "hero"
|
|
732
|
+
}),
|
|
733
|
+
(0, import_sanity10.defineField)({
|
|
734
|
+
name: "heroImage",
|
|
735
|
+
title: "Hero Image",
|
|
736
|
+
type: "image",
|
|
737
|
+
options: {
|
|
738
|
+
hotspot: true
|
|
739
|
+
},
|
|
740
|
+
description: "Main image for the hero section",
|
|
741
|
+
group: "hero"
|
|
742
|
+
}),
|
|
743
|
+
// --- Research Areas ---
|
|
744
|
+
(0, import_sanity10.defineField)({
|
|
745
|
+
name: "researchAreasTitle",
|
|
746
|
+
title: "Research Areas Section Title",
|
|
747
|
+
type: "string",
|
|
748
|
+
initialValue: "Research Focus Areas",
|
|
749
|
+
group: "research"
|
|
750
|
+
}),
|
|
751
|
+
(0, import_sanity10.defineField)({
|
|
752
|
+
name: "researchAreas",
|
|
753
|
+
title: "Research Areas",
|
|
754
|
+
type: "array",
|
|
755
|
+
group: "research",
|
|
756
|
+
of: [
|
|
757
|
+
{
|
|
758
|
+
type: "object",
|
|
759
|
+
fields: [
|
|
760
|
+
{
|
|
761
|
+
name: "title",
|
|
762
|
+
title: "Title",
|
|
763
|
+
type: "string",
|
|
764
|
+
validation: (Rule) => Rule.required()
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
name: "description",
|
|
768
|
+
title: "Description",
|
|
769
|
+
type: "text",
|
|
770
|
+
validation: (Rule) => Rule.required()
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
name: "icon",
|
|
774
|
+
title: "Icon",
|
|
775
|
+
type: "string",
|
|
776
|
+
description: "Icon key: microscope, atom, dna, brain, flask, chart",
|
|
777
|
+
options: {
|
|
778
|
+
list: [
|
|
779
|
+
{ title: "Microscope", value: "microscope" },
|
|
780
|
+
{ title: "Atom", value: "atom" },
|
|
781
|
+
{ title: "DNA", value: "dna" },
|
|
782
|
+
{ title: "Brain", value: "brain" },
|
|
783
|
+
{ title: "Flask", value: "flask" },
|
|
784
|
+
{ title: "Chart", value: "chart" }
|
|
785
|
+
]
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
],
|
|
789
|
+
preview: {
|
|
790
|
+
select: {
|
|
791
|
+
title: "title",
|
|
792
|
+
subtitle: "description"
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
],
|
|
797
|
+
validation: (Rule) => Rule.max(6)
|
|
798
|
+
}),
|
|
799
|
+
// --- Statistics ---
|
|
800
|
+
(0, import_sanity10.defineField)({
|
|
801
|
+
name: "statsEnabled",
|
|
802
|
+
title: "Show Statistics Section",
|
|
803
|
+
type: "boolean",
|
|
804
|
+
initialValue: true,
|
|
805
|
+
group: "stats"
|
|
806
|
+
}),
|
|
807
|
+
(0, import_sanity10.defineField)({
|
|
808
|
+
name: "stats",
|
|
809
|
+
title: "Statistics",
|
|
810
|
+
type: "array",
|
|
811
|
+
group: "stats",
|
|
812
|
+
of: [
|
|
813
|
+
{
|
|
814
|
+
type: "object",
|
|
815
|
+
fields: [
|
|
816
|
+
{
|
|
817
|
+
name: "value",
|
|
818
|
+
title: "Value",
|
|
819
|
+
type: "string",
|
|
820
|
+
description: 'The number or value to display (e.g., "150+", "$12M")',
|
|
821
|
+
validation: (Rule) => Rule.required()
|
|
822
|
+
},
|
|
823
|
+
{
|
|
824
|
+
name: "label",
|
|
825
|
+
title: "Label",
|
|
826
|
+
type: "string",
|
|
827
|
+
description: 'Description of the stat (e.g., "Publications")',
|
|
828
|
+
validation: (Rule) => Rule.required()
|
|
829
|
+
}
|
|
830
|
+
],
|
|
831
|
+
preview: {
|
|
832
|
+
select: {
|
|
833
|
+
title: "value",
|
|
834
|
+
subtitle: "label"
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
],
|
|
839
|
+
validation: (Rule) => Rule.max(4)
|
|
840
|
+
})
|
|
841
|
+
],
|
|
842
|
+
preview: {
|
|
843
|
+
select: {
|
|
844
|
+
title: "heroHeading",
|
|
845
|
+
media: "heroImage"
|
|
846
|
+
},
|
|
847
|
+
prepare({ title, media }) {
|
|
848
|
+
return {
|
|
849
|
+
title: "Home Page",
|
|
850
|
+
subtitle: title,
|
|
851
|
+
media
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
});
|
|
856
|
+
|
|
857
|
+
// src/schemas/schemaTypes/legalPage.ts
|
|
858
|
+
var import_sanity11 = require("sanity");
|
|
859
|
+
var legalPage_default = (0, import_sanity11.defineType)({
|
|
860
|
+
name: "legalPage",
|
|
861
|
+
title: "Legal Pages",
|
|
862
|
+
type: "document",
|
|
863
|
+
fields: [
|
|
864
|
+
(0, import_sanity11.defineField)({
|
|
865
|
+
name: "pageType",
|
|
866
|
+
title: "Page Type",
|
|
867
|
+
type: "string",
|
|
868
|
+
options: {
|
|
869
|
+
list: [
|
|
870
|
+
{ title: "Privacy Policy", value: "privacy" },
|
|
871
|
+
{ title: "Terms & Conditions", value: "terms" }
|
|
872
|
+
],
|
|
873
|
+
layout: "radio"
|
|
874
|
+
},
|
|
875
|
+
validation: (Rule) => Rule.required()
|
|
876
|
+
}),
|
|
877
|
+
(0, import_sanity11.defineField)({
|
|
878
|
+
name: "title",
|
|
879
|
+
title: "Page Title",
|
|
880
|
+
type: "string",
|
|
881
|
+
description: "The title displayed at the top of the page",
|
|
882
|
+
validation: (Rule) => Rule.required()
|
|
883
|
+
}),
|
|
884
|
+
(0, import_sanity11.defineField)({
|
|
885
|
+
name: "lastUpdated",
|
|
886
|
+
title: "Last Updated",
|
|
887
|
+
type: "date",
|
|
888
|
+
description: "When this policy was last updated"
|
|
889
|
+
}),
|
|
890
|
+
(0, import_sanity11.defineField)({
|
|
891
|
+
name: "content",
|
|
892
|
+
title: "Content",
|
|
893
|
+
type: "blockContent",
|
|
894
|
+
description: "The full content of the legal page"
|
|
895
|
+
})
|
|
896
|
+
],
|
|
897
|
+
preview: {
|
|
898
|
+
select: {
|
|
899
|
+
title: "title",
|
|
900
|
+
pageType: "pageType"
|
|
901
|
+
},
|
|
902
|
+
prepare({ title, pageType }) {
|
|
903
|
+
return {
|
|
904
|
+
title: title || (pageType === "privacy" ? "Privacy Policy" : "Terms & Conditions"),
|
|
905
|
+
subtitle: pageType === "privacy" ? "Privacy Policy" : "Terms & Conditions"
|
|
906
|
+
};
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
});
|
|
910
|
+
|
|
911
|
+
// src/schemas/schemaTypes/index.ts
|
|
912
|
+
var schemaTypes = [
|
|
913
|
+
// Singleton Pages
|
|
914
|
+
siteSettings_default,
|
|
915
|
+
homePage_default,
|
|
916
|
+
researchPage_default,
|
|
917
|
+
bookPage_default,
|
|
918
|
+
contactPage_default,
|
|
919
|
+
// Document Collections
|
|
920
|
+
publication_default,
|
|
921
|
+
person_default,
|
|
922
|
+
newsArticle_default,
|
|
923
|
+
galleryImage_default,
|
|
924
|
+
legalPage_default,
|
|
925
|
+
// Content Types
|
|
926
|
+
blockContent_default
|
|
927
|
+
];
|
|
928
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
929
|
+
0 && (module.exports = {
|
|
930
|
+
blockContent,
|
|
931
|
+
bookPage,
|
|
932
|
+
contactPage,
|
|
933
|
+
galleryImage,
|
|
934
|
+
homePage,
|
|
935
|
+
legalPage,
|
|
936
|
+
newsArticle,
|
|
937
|
+
person,
|
|
938
|
+
publication,
|
|
939
|
+
researchPage,
|
|
940
|
+
schemaTypes,
|
|
941
|
+
schemas,
|
|
942
|
+
siteSettings
|
|
943
|
+
});
|