sanity-plugin-seofields 1.5.4 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +4 -4
  2. package/dist/SeoHealthDashboard-7XMPVJRX.cjs +10 -0
  3. package/dist/{SeoHealthDashboard-KPBNXSL4.cjs.map → SeoHealthDashboard-7XMPVJRX.cjs.map} +1 -1
  4. package/dist/SeoHealthDashboard-UWPLB5DM.js +4 -0
  5. package/dist/{SeoHealthDashboard-QKVB5HK3.js.map → SeoHealthDashboard-UWPLB5DM.js.map} +1 -1
  6. package/dist/{SeoHealthTool-ON3SRXCF.cjs → SeoHealthTool-2H4XZR4I.cjs} +4 -4
  7. package/dist/{SeoHealthTool-ON3SRXCF.cjs.map → SeoHealthTool-2H4XZR4I.cjs.map} +1 -1
  8. package/dist/{SeoHealthTool-EPPOEDTW.js → SeoHealthTool-XCXINAQI.js} +3 -3
  9. package/dist/{SeoHealthTool-EPPOEDTW.js.map → SeoHealthTool-XCXINAQI.js.map} +1 -1
  10. package/dist/{SeoPreview-G3LPA7GV.js → SeoPreview-F6GGPZWI.js} +2 -2
  11. package/dist/SeoPreview-F6GGPZWI.js.map +1 -0
  12. package/dist/{SeoPreview-Y3CFDVBR.cjs → SeoPreview-JDROKZLP.cjs} +2 -2
  13. package/dist/SeoPreview-JDROKZLP.cjs.map +1 -0
  14. package/dist/chunk-6NIHHOVS.js +3918 -0
  15. package/dist/chunk-6NIHHOVS.js.map +1 -0
  16. package/dist/chunk-7HCP5O62.cjs +4027 -0
  17. package/dist/chunk-7HCP5O62.cjs.map +1 -0
  18. package/dist/{chunk-527WXITP.js → chunk-KWUITSHS.js} +218 -54
  19. package/dist/chunk-KWUITSHS.js.map +1 -0
  20. package/dist/{chunk-UCVSMPEJ.js → chunk-NHJBEV3A.js} +2 -2
  21. package/dist/{chunk-UCVSMPEJ.js.map → chunk-NHJBEV3A.js.map} +1 -1
  22. package/dist/chunk-WCLEWFAJ.cjs +669 -0
  23. package/dist/chunk-WCLEWFAJ.cjs.map +1 -0
  24. package/dist/{chunk-G2SVI2SP.cjs → chunk-Z74QPO75.cjs} +2 -2
  25. package/dist/{chunk-G2SVI2SP.cjs.map → chunk-Z74QPO75.cjs.map} +1 -1
  26. package/dist/cli.js +25 -25
  27. package/dist/component-7rqDvuy2.d.ts +534 -0
  28. package/dist/component-J2nEQkOw.d.cts +534 -0
  29. package/dist/index.cjs +159 -185
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +43 -51
  32. package/dist/index.d.ts +43 -51
  33. package/dist/index.js +159 -185
  34. package/dist/index.js.map +1 -1
  35. package/dist/next.cjs +155 -51
  36. package/dist/next.d.cts +3 -3
  37. package/dist/next.d.ts +3 -3
  38. package/dist/next.js +2 -2
  39. package/dist/schema/next.cjs +171 -52
  40. package/dist/schema/next.cjs.map +1 -1
  41. package/dist/schema/next.d.cts +12 -428
  42. package/dist/schema/next.d.ts +12 -428
  43. package/dist/schema/next.js +20 -2
  44. package/dist/schema/next.js.map +1 -1
  45. package/dist/schema.cjs +831 -156
  46. package/dist/schema.cjs.map +1 -1
  47. package/dist/schema.d.cts +318 -41
  48. package/dist/schema.d.ts +318 -41
  49. package/dist/schema.js +567 -86
  50. package/dist/schema.js.map +1 -1
  51. package/dist/types-BRn3hfQb.d.ts +24 -0
  52. package/dist/types-BSgolLj3.d.cts +24 -0
  53. package/dist/{types-R3n9Fu4w.d.cts → types-BtSRRG6C.d.cts} +1 -1
  54. package/dist/{types-R3n9Fu4w.d.ts → types-BtSRRG6C.d.ts} +1 -1
  55. package/dist/types-DnVvOp3o.d.ts +1215 -0
  56. package/dist/types-DoUYMRVf.d.cts +1215 -0
  57. package/package.json +2 -1
  58. package/dist/SeoHealthDashboard-KPBNXSL4.cjs +0 -10
  59. package/dist/SeoHealthDashboard-QKVB5HK3.js +0 -4
  60. package/dist/SeoPreview-G3LPA7GV.js.map +0 -1
  61. package/dist/SeoPreview-Y3CFDVBR.cjs.map +0 -1
  62. package/dist/chunk-527WXITP.js.map +0 -1
  63. package/dist/chunk-6CYMVS3O.js +0 -1245
  64. package/dist/chunk-6CYMVS3O.js.map +0 -1
  65. package/dist/chunk-D2GWRRK5.cjs +0 -1293
  66. package/dist/chunk-D2GWRRK5.cjs.map +0 -1
  67. package/dist/chunk-L3L3FSPJ.cjs +0 -478
  68. package/dist/chunk-L3L3FSPJ.cjs.map +0 -1
  69. package/dist/types-CVaAX7uy.d.cts +0 -589
  70. package/dist/types-Ci-ZZT7A.d.ts +0 -589
@@ -0,0 +1,3918 @@
1
+ import { __spreadValues, __spreadProps } from './chunk-2NMEKWO5.js';
2
+ import { defineType, defineField } from 'sanity';
3
+ import { PackageIcon, PlayIcon, UserIcon, ListIcon, DocumentTextIcon, BookIcon, HomeIcon, ClipboardIcon, EarthGlobeIcon, MasterDetailIcon, DesktopIcon, CodeBlockIcon, ApiIcon, CalendarIcon, MarkerIcon, RobotIcon, HeartFilledIcon, BarChartIcon, TagIcon, CommentIcon, HelpCircleIcon, VideoIcon, ImageIcon, LinkIcon, SparkleIcon, ComponentIcon } from '@sanity/icons';
4
+
5
+ // src/schema/_shared.ts
6
+ var imageObjectInnerFields = [
7
+ {
8
+ name: "url",
9
+ title: "URL",
10
+ type: "url",
11
+ description: "URL of the image.",
12
+ required: { key: "imageObjectUrlRequired", message: "Image URL is required." }
13
+ },
14
+ { name: "contentUrl", title: "Content URL", type: "url", description: "Direct URL to the file." },
15
+ { name: "caption", title: "Caption", type: "string", description: "Caption / alt text." },
16
+ { name: "name", title: "Name", type: "string" },
17
+ { name: "description", title: "Description", type: "text", rows: 2 },
18
+ { name: "width", title: "Width (px)", type: "number" },
19
+ { name: "height", title: "Height (px)", type: "number" },
20
+ {
21
+ name: "encodingFormat",
22
+ title: "Encoding Format",
23
+ type: "string",
24
+ description: "e.g. image/jpeg"
25
+ },
26
+ { name: "contentLocation", title: "Content Location", type: "string" },
27
+ { name: "datePublished", title: "Date Published", type: "date" },
28
+ { name: "creditText", title: "Credit Text", type: "string" },
29
+ { name: "license", title: "License URL", type: "url" },
30
+ { name: "acquireLicensePage", title: "Acquire License Page", type: "url" },
31
+ { name: "copyrightNotice", title: "Copyright Notice", type: "string" },
32
+ {
33
+ name: "representativeOfPage",
34
+ title: "Representative of Page",
35
+ type: "boolean",
36
+ description: "Whether this image is the main / lead image for the page."
37
+ },
38
+ { name: "embedUrl", title: "Embed URL", type: "url" },
39
+ { name: "thumbnailUrl", title: "Thumbnail URL", type: "url" }
40
+ ];
41
+ var personInnerFields = [
42
+ {
43
+ name: "name",
44
+ title: "Full Name",
45
+ type: "string",
46
+ required: { key: "personNameRequired", message: "Person name is required." }
47
+ },
48
+ { name: "jobTitle", title: "Job Title", type: "string" },
49
+ { name: "url", title: "Profile URL", type: "url" },
50
+ { name: "image", title: "Image URL", type: "url" },
51
+ { name: "email", title: "Email", type: "string" },
52
+ { name: "telephone", title: "Telephone", type: "string" },
53
+ { name: "description", title: "Bio", type: "text", rows: 3 },
54
+ {
55
+ name: "sameAs",
56
+ title: "Same As URL",
57
+ type: "url",
58
+ description: "LinkedIn, Twitter, GitHub, or any page about this person.",
59
+ urlValidation: { schemes: ["http", "https"] }
60
+ }
61
+ ];
62
+ var organizationInnerFields = [
63
+ {
64
+ name: "name",
65
+ title: "Organization Name",
66
+ type: "string",
67
+ required: { key: "organizationNameRequired", message: "Organization name is required." }
68
+ },
69
+ { name: "url", title: "Website URL", type: "url" },
70
+ { name: "logo", title: "Logo URL", type: "url" },
71
+ { name: "description", title: "Description", type: "text", rows: 2 },
72
+ { name: "email", title: "Email", type: "string" },
73
+ { name: "telephone", title: "Telephone", type: "string" },
74
+ {
75
+ name: "sameAs",
76
+ title: "Same As URL",
77
+ type: "url",
78
+ description: "A page about this organization (e.g. Wikipedia, Wikidata, social profile).",
79
+ urlValidation: { schemes: ["http", "https"] }
80
+ }
81
+ ];
82
+ function polymorphicImage(opts = {}) {
83
+ var _a, _b, _c;
84
+ return {
85
+ name: (_a = opts.name) != null ? _a : "image",
86
+ title: (_b = opts.title) != null ? _b : "Image",
87
+ type: "select",
88
+ description: (_c = opts.description) != null ? _c : "Provide either a plain URL or a full ImageObject.",
89
+ defaultVariant: "url",
90
+ variants: [
91
+ {
92
+ value: "url",
93
+ title: "URL",
94
+ fields: [
95
+ {
96
+ name: "url",
97
+ title: "Image URL",
98
+ type: "url",
99
+ description: "Direct URL to the image.",
100
+ urlValidation: { schemes: ["http", "https"] }
101
+ }
102
+ ]
103
+ },
104
+ {
105
+ value: "imageObject",
106
+ title: "ImageObject (detailed)",
107
+ jsonLdType: "ImageObject",
108
+ fields: imageObjectInnerFields
109
+ }
110
+ ]
111
+ };
112
+ }
113
+ function polymorphicAuthor(opts = {}) {
114
+ var _a, _b, _c;
115
+ return {
116
+ name: (_a = opts.name) != null ? _a : "author",
117
+ title: (_b = opts.title) != null ? _b : "Author",
118
+ type: "select",
119
+ description: (_c = opts.description) != null ? _c : "The author \u2014 choose Person or Organization.",
120
+ defaultVariant: "person",
121
+ variants: [
122
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields },
123
+ {
124
+ value: "organization",
125
+ title: "Organization",
126
+ jsonLdType: "Organization",
127
+ fields: organizationInnerFields
128
+ }
129
+ ]
130
+ };
131
+ }
132
+ function polymorphicPublisher(opts = {}) {
133
+ var _a, _b, _c;
134
+ return {
135
+ name: (_a = opts.name) != null ? _a : "publisher",
136
+ title: (_b = opts.title) != null ? _b : "Publisher",
137
+ type: "select",
138
+ description: (_c = opts.description) != null ? _c : "The publisher \u2014 choose Person or Organization.",
139
+ defaultVariant: "organization",
140
+ variants: [
141
+ {
142
+ value: "organization",
143
+ title: "Organization",
144
+ jsonLdType: "Organization",
145
+ fields: organizationInnerFields
146
+ },
147
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields }
148
+ ]
149
+ };
150
+ }
151
+ function polymorphicGenre(opts = {}) {
152
+ var _a, _b, _c;
153
+ return {
154
+ name: (_a = opts.name) != null ? _a : "genre",
155
+ title: (_b = opts.title) != null ? _b : "Genre",
156
+ type: "select",
157
+ description: (_c = opts.description) != null ? _c : "Genre \u2014 provide as text or a URL.",
158
+ defaultVariant: "text",
159
+ variants: [
160
+ { value: "text", title: "Text", fields: [{ name: "text", title: "Genre", type: "string" }] },
161
+ { value: "url", title: "URL", fields: [{ name: "url", title: "Genre URL", type: "url" }] }
162
+ ]
163
+ };
164
+ }
165
+ function polymorphicKeywords(opts = {}) {
166
+ var _a, _b, _c;
167
+ return {
168
+ name: (_a = opts.name) != null ? _a : "keywords",
169
+ title: (_b = opts.title) != null ? _b : "Keywords",
170
+ type: "select",
171
+ description: (_c = opts.description) != null ? _c : "Keywords describing the content \u2014 comma-separated text or a URL.",
172
+ defaultVariant: "text",
173
+ variants: [
174
+ {
175
+ value: "text",
176
+ title: "Text",
177
+ fields: [
178
+ {
179
+ name: "text",
180
+ title: "Keywords",
181
+ type: "string",
182
+ description: 'Comma-separated list, e.g. "react, sanity, seo".'
183
+ }
184
+ ]
185
+ },
186
+ { value: "url", title: "URL", fields: [{ name: "url", title: "Keywords URL", type: "url" }] }
187
+ ]
188
+ };
189
+ }
190
+ function polymorphicAdditionalType(opts = {}) {
191
+ var _a, _b, _c;
192
+ return {
193
+ name: (_a = opts.name) != null ? _a : "additionalType",
194
+ title: (_b = opts.title) != null ? _b : "Additional Type",
195
+ type: "select",
196
+ description: (_c = opts.description) != null ? _c : "An additional Schema.org type \u2014 provide as text or a URL (e.g. a Wikidata URI).",
197
+ defaultVariant: "text",
198
+ variants: [
199
+ {
200
+ value: "text",
201
+ title: "Text",
202
+ fields: [{ name: "text", title: "Type", type: "string" }]
203
+ },
204
+ {
205
+ value: "url",
206
+ title: "URL",
207
+ fields: [
208
+ {
209
+ name: "url",
210
+ title: "Type URL",
211
+ type: "url",
212
+ urlValidation: { schemes: ["http", "https"] }
213
+ }
214
+ ]
215
+ }
216
+ ]
217
+ };
218
+ }
219
+ function polymorphicContributor(opts = {}) {
220
+ var _a, _b, _c;
221
+ return {
222
+ name: (_a = opts.name) != null ? _a : "contributor",
223
+ title: (_b = opts.title) != null ? _b : "Contributor",
224
+ type: "select",
225
+ description: (_c = opts.description) != null ? _c : "A secondary contributor \u2014 choose Person or Organization.",
226
+ defaultVariant: "person",
227
+ variants: [
228
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields },
229
+ {
230
+ value: "organization",
231
+ title: "Organization",
232
+ jsonLdType: "Organization",
233
+ fields: organizationInnerFields
234
+ }
235
+ ]
236
+ };
237
+ }
238
+ function polymorphicCreator(opts = {}) {
239
+ var _a, _b, _c;
240
+ return {
241
+ name: (_a = opts.name) != null ? _a : "creator",
242
+ title: (_b = opts.title) != null ? _b : "Creator",
243
+ type: "select",
244
+ description: (_c = opts.description) != null ? _c : "The creator \u2014 choose Person or Organization.",
245
+ defaultVariant: "person",
246
+ variants: [
247
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields },
248
+ {
249
+ value: "organization",
250
+ title: "Organization",
251
+ jsonLdType: "Organization",
252
+ fields: organizationInnerFields
253
+ }
254
+ ]
255
+ };
256
+ }
257
+ function polymorphicMaintainer(opts = {}) {
258
+ var _a, _b, _c;
259
+ return {
260
+ name: (_a = opts.name) != null ? _a : "maintainer",
261
+ title: (_b = opts.title) != null ? _b : "Maintainer",
262
+ type: "select",
263
+ description: (_c = opts.description) != null ? _c : "The maintainer \u2014 choose Person or Organization.",
264
+ defaultVariant: "organization",
265
+ variants: [
266
+ {
267
+ value: "organization",
268
+ title: "Organization",
269
+ jsonLdType: "Organization",
270
+ fields: organizationInnerFields
271
+ },
272
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields }
273
+ ]
274
+ };
275
+ }
276
+ function polymorphicSponsor(opts = {}) {
277
+ var _a, _b, _c;
278
+ return {
279
+ name: (_a = opts.name) != null ? _a : "sponsor",
280
+ title: (_b = opts.title) != null ? _b : "Sponsor",
281
+ type: "select",
282
+ description: (_c = opts.description) != null ? _c : "A sponsor \u2014 choose Person or Organization.",
283
+ defaultVariant: "organization",
284
+ variants: [
285
+ {
286
+ value: "organization",
287
+ title: "Organization",
288
+ jsonLdType: "Organization",
289
+ fields: organizationInnerFields
290
+ },
291
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields }
292
+ ]
293
+ };
294
+ }
295
+ function polymorphicFunder(opts = {}) {
296
+ var _a, _b, _c;
297
+ return {
298
+ name: (_a = opts.name) != null ? _a : "funder",
299
+ title: (_b = opts.title) != null ? _b : "Funder",
300
+ type: "select",
301
+ description: (_c = opts.description) != null ? _c : "A funder or sponsor \u2014 choose Person or Organization.",
302
+ defaultVariant: "organization",
303
+ variants: [
304
+ {
305
+ value: "organization",
306
+ title: "Organization",
307
+ jsonLdType: "Organization",
308
+ fields: organizationInnerFields
309
+ },
310
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields }
311
+ ]
312
+ };
313
+ }
314
+ function polymorphicCopyrightHolder(opts = {}) {
315
+ var _a, _b, _c;
316
+ return {
317
+ name: (_a = opts.name) != null ? _a : "copyrightHolder",
318
+ title: (_b = opts.title) != null ? _b : "Copyright Holder",
319
+ type: "select",
320
+ description: (_c = opts.description) != null ? _c : "The copyright holder \u2014 choose Person or Organization.",
321
+ defaultVariant: "organization",
322
+ variants: [
323
+ {
324
+ value: "organization",
325
+ title: "Organization",
326
+ jsonLdType: "Organization",
327
+ fields: organizationInnerFields
328
+ },
329
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields }
330
+ ]
331
+ };
332
+ }
333
+ function polymorphicIdentifier(opts = {}) {
334
+ var _a, _b, _c;
335
+ return {
336
+ name: (_a = opts.name) != null ? _a : "identifier",
337
+ title: (_b = opts.title) != null ? _b : "Identifier",
338
+ type: "select",
339
+ description: (_c = opts.description) != null ? _c : "A unique identifier for this item \u2014 text (e.g. ISBN, GTIN) or a URL.",
340
+ defaultVariant: "text",
341
+ variants: [
342
+ {
343
+ value: "text",
344
+ title: "Text",
345
+ fields: [
346
+ {
347
+ name: "text",
348
+ title: "Identifier",
349
+ type: "string",
350
+ description: "e.g. ISBN, GTIN-13, MPN, SKU"
351
+ }
352
+ ]
353
+ },
354
+ {
355
+ value: "url",
356
+ title: "URL",
357
+ fields: [
358
+ {
359
+ name: "url",
360
+ title: "Identifier URL",
361
+ type: "url",
362
+ urlValidation: { schemes: ["http", "https"] }
363
+ }
364
+ ]
365
+ }
366
+ ]
367
+ };
368
+ }
369
+ function polymorphicOwner(opts = {}) {
370
+ var _a, _b, _c;
371
+ return {
372
+ name: (_a = opts.name) != null ? _a : "owner",
373
+ title: (_b = opts.title) != null ? _b : "Owner",
374
+ type: "select",
375
+ description: (_c = opts.description) != null ? _c : "The owner of this item \u2014 choose Person or Organization.",
376
+ defaultVariant: "person",
377
+ variants: [
378
+ { value: "person", title: "Person", jsonLdType: "Person", fields: personInnerFields },
379
+ {
380
+ value: "organization",
381
+ title: "Organization",
382
+ jsonLdType: "Organization",
383
+ fields: organizationInnerFields
384
+ }
385
+ ]
386
+ };
387
+ }
388
+ function polymorphicCitation(opts = {}) {
389
+ var _a, _b, _c;
390
+ return {
391
+ name: (_a = opts.name) != null ? _a : "citation",
392
+ title: (_b = opts.title) != null ? _b : "Citation",
393
+ type: "select",
394
+ description: (_c = opts.description) != null ? _c : "A citation for this work \u2014 text reference or URL to the cited work.",
395
+ defaultVariant: "text",
396
+ variants: [
397
+ {
398
+ value: "text",
399
+ title: "Text",
400
+ fields: [
401
+ {
402
+ name: "text",
403
+ title: "Citation Text",
404
+ type: "string",
405
+ description: 'e.g. "Smith, J. (2020). Title. Journal, 1(1), 1\u201310."'
406
+ }
407
+ ]
408
+ },
409
+ {
410
+ value: "url",
411
+ title: "URL",
412
+ fields: [
413
+ {
414
+ name: "url",
415
+ title: "Citation URL",
416
+ type: "url",
417
+ urlValidation: { schemes: ["http", "https"] }
418
+ }
419
+ ]
420
+ }
421
+ ]
422
+ };
423
+ }
424
+ function polymorphicContentRating(opts = {}) {
425
+ var _a, _b, _c;
426
+ return {
427
+ name: (_a = opts.name) != null ? _a : "contentRating",
428
+ title: (_b = opts.title) != null ? _b : "Content Rating",
429
+ type: "select",
430
+ description: (_c = opts.description) != null ? _c : "A rating for the content \u2014 e.g. MPAA, ESRB, PEGI.",
431
+ defaultVariant: "text",
432
+ variants: [
433
+ {
434
+ value: "text",
435
+ title: "Text",
436
+ fields: [
437
+ {
438
+ name: "text",
439
+ title: "Rating",
440
+ type: "string",
441
+ description: 'e.g. "PG-13", "PEGI 12", "TV-MA"'
442
+ }
443
+ ]
444
+ },
445
+ {
446
+ value: "rating",
447
+ title: "Rating (detailed)",
448
+ jsonLdType: "Rating",
449
+ fields: [
450
+ {
451
+ name: "ratingValue",
452
+ title: "Rating Value",
453
+ type: "string",
454
+ description: 'Numeric or descriptive value, e.g. "4.5" or "PG-13".'
455
+ },
456
+ {
457
+ name: "bestRating",
458
+ title: "Best Rating",
459
+ type: "string",
460
+ description: 'Highest value allowed, e.g. "5".'
461
+ },
462
+ {
463
+ name: "worstRating",
464
+ title: "Worst Rating",
465
+ type: "string",
466
+ description: 'Lowest value allowed, e.g. "1".'
467
+ },
468
+ { name: "ratingExplanation", title: "Rating Explanation", type: "text", rows: 2 },
469
+ {
470
+ name: "author",
471
+ title: "Rating Author",
472
+ type: "string",
473
+ description: "Name of the rating organization or author."
474
+ }
475
+ ]
476
+ }
477
+ ]
478
+ };
479
+ }
480
+ function polymorphicArchivedAt(opts = {}) {
481
+ var _a, _b, _c;
482
+ return {
483
+ name: (_a = opts.name) != null ? _a : "archivedAt",
484
+ title: (_b = opts.title) != null ? _b : "Archived At",
485
+ type: "select",
486
+ description: (_c = opts.description) != null ? _c : "A URL where this content is archived, or a WebPage reference.",
487
+ defaultVariant: "url",
488
+ variants: [
489
+ {
490
+ value: "url",
491
+ title: "URL",
492
+ fields: [
493
+ {
494
+ name: "url",
495
+ title: "Archive URL",
496
+ type: "url",
497
+ urlValidation: { schemes: ["http", "https"] }
498
+ }
499
+ ]
500
+ },
501
+ {
502
+ value: "webPage",
503
+ title: "WebPage",
504
+ jsonLdType: "WebPage",
505
+ fields: [
506
+ {
507
+ name: "url",
508
+ title: "Web Page URL",
509
+ type: "url",
510
+ urlValidation: { schemes: ["http", "https"] }
511
+ },
512
+ { name: "name", title: "Page Name", type: "string" },
513
+ { name: "description", title: "Page Description", type: "text", rows: 2 }
514
+ ]
515
+ }
516
+ ]
517
+ };
518
+ }
519
+ function polymorphicIsBasedOn(opts = {}) {
520
+ var _a, _b, _c;
521
+ return {
522
+ name: (_a = opts.name) != null ? _a : "isBasedOn",
523
+ title: (_b = opts.title) != null ? _b : "Is Based On",
524
+ type: "select",
525
+ description: (_c = opts.description) != null ? _c : "A resource used in the creation of this resource \u2014 URL or text reference.",
526
+ defaultVariant: "url",
527
+ variants: [
528
+ {
529
+ value: "url",
530
+ title: "URL",
531
+ fields: [
532
+ {
533
+ name: "url",
534
+ title: "Source URL",
535
+ type: "url",
536
+ urlValidation: { schemes: ["http", "https"] }
537
+ }
538
+ ]
539
+ },
540
+ {
541
+ value: "text",
542
+ title: "Text",
543
+ fields: [{ name: "text", title: "Source Reference", type: "string" }]
544
+ }
545
+ ]
546
+ };
547
+ }
548
+ function polymorphicIsPartOf(opts = {}) {
549
+ var _a, _b, _c;
550
+ return {
551
+ name: (_a = opts.name) != null ? _a : "isPartOf",
552
+ title: (_b = opts.title) != null ? _b : "Is Part Of",
553
+ type: "select",
554
+ description: (_c = opts.description) != null ? _c : "A parent CreativeWork this work is part of \u2014 URL or text reference.",
555
+ defaultVariant: "url",
556
+ variants: [
557
+ {
558
+ value: "url",
559
+ title: "URL",
560
+ fields: [
561
+ {
562
+ name: "url",
563
+ title: "Parent URL",
564
+ type: "url",
565
+ urlValidation: { schemes: ["http", "https"] }
566
+ }
567
+ ]
568
+ },
569
+ {
570
+ value: "text",
571
+ title: "Text",
572
+ fields: [{ name: "text", title: "Parent Reference", type: "string" }]
573
+ }
574
+ ]
575
+ };
576
+ }
577
+ function polymorphicLicense(opts = {}) {
578
+ var _a, _b, _c;
579
+ return {
580
+ name: (_a = opts.name) != null ? _a : "license",
581
+ title: (_b = opts.title) != null ? _b : "License",
582
+ type: "select",
583
+ description: (_c = opts.description) != null ? _c : "A license for the content \u2014 URL to license document or text name.",
584
+ defaultVariant: "url",
585
+ variants: [
586
+ {
587
+ value: "url",
588
+ title: "URL",
589
+ fields: [
590
+ {
591
+ name: "url",
592
+ title: "License URL",
593
+ type: "url",
594
+ description: "e.g. https://creativecommons.org/licenses/by/4.0/",
595
+ urlValidation: { schemes: ["http", "https"] }
596
+ }
597
+ ]
598
+ },
599
+ {
600
+ value: "text",
601
+ title: "Text",
602
+ fields: [
603
+ {
604
+ name: "text",
605
+ title: "License Name",
606
+ type: "string",
607
+ description: 'e.g. "CC BY 4.0", "MIT", "Apache 2.0"'
608
+ }
609
+ ]
610
+ }
611
+ ]
612
+ };
613
+ }
614
+ function polymorphicLocationCreated(opts = {}) {
615
+ var _a, _b, _c;
616
+ return {
617
+ name: (_a = opts.name) != null ? _a : "locationCreated",
618
+ title: (_b = opts.title) != null ? _b : "Location Created",
619
+ type: "select",
620
+ description: (_c = opts.description) != null ? _c : "The location where this work was created \u2014 text or URL to a Place.",
621
+ defaultVariant: "text",
622
+ variants: [
623
+ {
624
+ value: "text",
625
+ title: "Text",
626
+ fields: [
627
+ {
628
+ name: "text",
629
+ title: "Location",
630
+ type: "string",
631
+ description: 'e.g. "New York, USA"'
632
+ }
633
+ ]
634
+ },
635
+ {
636
+ value: "url",
637
+ title: "URL",
638
+ fields: [
639
+ {
640
+ name: "url",
641
+ title: "Location URL",
642
+ type: "url",
643
+ description: "URL to the place (e.g. Wikidata, GeoNames).",
644
+ urlValidation: { schemes: ["http", "https"] }
645
+ }
646
+ ]
647
+ }
648
+ ]
649
+ };
650
+ }
651
+ function polymorphicMaterial(opts = {}) {
652
+ var _a, _b, _c;
653
+ return {
654
+ name: (_a = opts.name) != null ? _a : "material",
655
+ title: (_b = opts.title) != null ? _b : "Material",
656
+ type: "select",
657
+ description: (_c = opts.description) != null ? _c : "A material used in the creation of this work \u2014 text or URL.",
658
+ defaultVariant: "text",
659
+ variants: [
660
+ {
661
+ value: "text",
662
+ title: "Text",
663
+ fields: [{ name: "text", title: "Material", type: "string" }]
664
+ },
665
+ {
666
+ value: "url",
667
+ title: "URL",
668
+ fields: [
669
+ {
670
+ name: "url",
671
+ title: "Material URL",
672
+ type: "url",
673
+ urlValidation: { schemes: ["http", "https"] }
674
+ }
675
+ ]
676
+ }
677
+ ]
678
+ };
679
+ }
680
+ var IETF_LANGUAGE_OPTIONS = [
681
+ { title: "English", value: "en" },
682
+ { title: "Spanish", value: "es" },
683
+ { title: "French", value: "fr" },
684
+ { title: "German", value: "de" },
685
+ { title: "Portuguese", value: "pt" },
686
+ { title: "Italian", value: "it" },
687
+ { title: "Dutch", value: "nl" },
688
+ { title: "Japanese", value: "ja" },
689
+ { title: "Chinese (Simplified)", value: "zh" },
690
+ { title: "Korean", value: "ko" },
691
+ { title: "Hindi", value: "hi" },
692
+ { title: "Arabic", value: "ar" },
693
+ { title: "Russian", value: "ru" },
694
+ { title: "Polish", value: "pl" },
695
+ { title: "Turkish", value: "tr" },
696
+ { title: "Swedish", value: "sv" },
697
+ { title: "Norwegian", value: "no" },
698
+ { title: "Danish", value: "da" },
699
+ { title: "Finnish", value: "fi" },
700
+ { title: "Greek", value: "el" },
701
+ { title: "Czech", value: "cs" },
702
+ { title: "Hungarian", value: "hu" },
703
+ { title: "Romanian", value: "ro" },
704
+ { title: "Ukrainian", value: "uk" },
705
+ { title: "Hebrew", value: "he" },
706
+ { title: "Indonesian", value: "id" },
707
+ { title: "Thai", value: "th" },
708
+ { title: "Vietnamese", value: "vi" },
709
+ { title: "Bengali", value: "bn" }
710
+ ];
711
+ function inLanguageField(opts = {}) {
712
+ var _a, _b, _c, _d;
713
+ return {
714
+ name: "inLanguage",
715
+ title: (_a = opts.title) != null ? _a : "Language",
716
+ type: "string",
717
+ description: (_b = opts.description) != null ? _b : 'Content language (IETF BCP 47 tag), e.g. "en".',
718
+ initialValue: (_c = opts.initialValue) != null ? _c : "en",
719
+ options: [...IETF_LANGUAGE_OPTIONS, ...(_d = opts.extraOptions) != null ? _d : []]
720
+ };
721
+ }
722
+ function nameField(opts = {}) {
723
+ var _a, _b;
724
+ return __spreadValues({
725
+ name: "name",
726
+ title: (_a = opts.title) != null ? _a : "Name",
727
+ type: "string",
728
+ description: (_b = opts.description) != null ? _b : "The name of the item."
729
+ }, opts.required ? { required: opts.required } : {});
730
+ }
731
+ function potentialActionSearch(opts = {}) {
732
+ var _a, _b, _c;
733
+ return {
734
+ name: (_a = opts.name) != null ? _a : "potentialAction",
735
+ title: (_b = opts.title) != null ? _b : "Site Search (SearchAction)",
736
+ type: "object",
737
+ description: (_c = opts.description) != null ? _c : "Enables the sitelinks search box in Google. Configure the search URL template.",
738
+ jsonLdType: "SearchAction",
739
+ fields: [
740
+ {
741
+ name: "target",
742
+ title: "Search URL Template",
743
+ type: "url",
744
+ description: 'URL with {search_term_string} placeholder, e.g. "https://example.com/search?q={search_term_string}".'
745
+ }
746
+ ]
747
+ };
748
+ }
749
+ function descriptionField(opts = {}) {
750
+ var _a, _b;
751
+ return __spreadValues({
752
+ name: "description",
753
+ title: (_a = opts.title) != null ? _a : "Description",
754
+ type: "text",
755
+ rows: 3,
756
+ description: (_b = opts.description) != null ? _b : "A description of the item."
757
+ }, opts.required ? { required: opts.required } : {});
758
+ }
759
+ function urlField(opts = {}) {
760
+ var _a, _b;
761
+ return __spreadValues({
762
+ name: "url",
763
+ title: (_a = opts.title) != null ? _a : "URL",
764
+ type: "url",
765
+ description: (_b = opts.description) != null ? _b : "URL of the item.",
766
+ urlValidation: { schemes: ["http", "https"] }
767
+ }, opts.required ? { required: opts.required } : {});
768
+ }
769
+ function headlineField(opts = {}) {
770
+ var _a, _b;
771
+ return __spreadValues({
772
+ name: "headline",
773
+ title: (_a = opts.title) != null ? _a : "Headline",
774
+ type: "string",
775
+ description: (_b = opts.description) != null ? _b : "The headline of the content."
776
+ }, opts.required ? { required: opts.required } : {});
777
+ }
778
+ function datePublishedField(opts = {}) {
779
+ var _a, _b, _c, _d;
780
+ return __spreadValues({
781
+ name: (_a = opts.name) != null ? _a : "datePublished",
782
+ title: (_b = opts.title) != null ? _b : "Date Published",
783
+ type: (_c = opts.dateType) != null ? _c : "date",
784
+ description: (_d = opts.description) != null ? _d : "The date the content was published."
785
+ }, opts.required ? { required: opts.required } : {});
786
+ }
787
+ var thingInnerFields = [
788
+ { name: "name", title: "Name", type: "string" },
789
+ { name: "description", title: "Description", type: "text", rows: 2 },
790
+ { name: "url", title: "URL", type: "url", urlValidation: { schemes: ["http", "https"] } },
791
+ {
792
+ name: "sameAs",
793
+ title: "Same As URL",
794
+ type: "url",
795
+ description: "URL of another page about this same entity.",
796
+ urlValidation: { schemes: ["http", "https"] }
797
+ },
798
+ {
799
+ name: "identifier",
800
+ title: "Identifier",
801
+ type: "string",
802
+ description: "e.g. ISBN, GTIN, Wikidata QID"
803
+ }
804
+ ];
805
+ var thingCommonFields = [
806
+ {
807
+ name: "name",
808
+ title: "Name",
809
+ type: "string",
810
+ description: "The name of the item."
811
+ },
812
+ {
813
+ name: "alternateName",
814
+ title: "Alternate Name",
815
+ type: "string",
816
+ description: "An alias for the item."
817
+ },
818
+ polymorphicAdditionalType(),
819
+ {
820
+ name: "description",
821
+ title: "Description",
822
+ type: "text",
823
+ rows: 3,
824
+ description: "A description of the item."
825
+ },
826
+ {
827
+ name: "disambiguatingDescription",
828
+ title: "Disambiguating Description",
829
+ type: "text",
830
+ rows: 2,
831
+ description: "Used to disambiguate from other items with the same name."
832
+ },
833
+ polymorphicImage({ description: "An image of the item \u2014 choose URL or full ImageObject." }),
834
+ {
835
+ name: "url",
836
+ title: "URL",
837
+ type: "url",
838
+ description: "URL of the item.",
839
+ urlValidation: { schemes: ["http", "https"] }
840
+ },
841
+ {
842
+ name: "sameAs",
843
+ title: "Same As URL",
844
+ type: "url",
845
+ description: "URL to another page about this item (Wikipedia, Wikidata, social profile).",
846
+ urlValidation: { schemes: ["http", "https"] }
847
+ },
848
+ polymorphicIdentifier(),
849
+ polymorphicOwner()
850
+ ];
851
+ function withThingCommons(fields) {
852
+ const existing = new Set(fields.map((f) => f.name));
853
+ return [...fields, ...thingCommonFields.filter((f) => !existing.has(f.name))];
854
+ }
855
+ var creativeWorkCommonFields = withThingCommons([
856
+ // ── Internal field (not Schema.org) ────────────────────────────────────────
857
+ {
858
+ name: "alternateType",
859
+ title: "Alternate @type",
860
+ type: "string",
861
+ description: 'Override the emitted Schema.org @type, e.g. "NewsArticle" instead of "Article".'
862
+ },
863
+ // ── Schema.org CreativeWork fields (alphabetical) ──────────────────────────
864
+ {
865
+ name: "about",
866
+ title: "About",
867
+ type: "object",
868
+ description: "The subject matter of the content.",
869
+ jsonLdType: "Thing",
870
+ fields: thingInnerFields
871
+ },
872
+ {
873
+ name: "accountablePerson",
874
+ title: "Accountable Person",
875
+ type: "object",
876
+ description: "Person primarily accountable for this content.",
877
+ jsonLdType: "Person",
878
+ fields: personInnerFields
879
+ },
880
+ {
881
+ name: "aggregateRating",
882
+ title: "Aggregate Rating",
883
+ type: "object",
884
+ description: "The overall rating based on a collection of reviews/ratings.",
885
+ jsonLdType: "AggregateRating",
886
+ fields: [
887
+ { name: "ratingValue", title: "Rating Value", type: "string", description: 'e.g. "4.5"' },
888
+ {
889
+ name: "ratingCount",
890
+ title: "Rating Count",
891
+ type: "number",
892
+ description: "Number of ratings."
893
+ },
894
+ {
895
+ name: "reviewCount",
896
+ title: "Review Count",
897
+ type: "number",
898
+ description: "Number of written reviews."
899
+ },
900
+ {
901
+ name: "bestRating",
902
+ title: "Best Rating",
903
+ type: "string",
904
+ description: 'Highest value allowed, e.g. "5".'
905
+ },
906
+ {
907
+ name: "worstRating",
908
+ title: "Worst Rating",
909
+ type: "string",
910
+ description: 'Lowest value allowed, e.g. "1".'
911
+ },
912
+ { name: "ratingExplanation", title: "Rating Explanation", type: "text", rows: 2 }
913
+ ]
914
+ },
915
+ {
916
+ name: "alternativeHeadline",
917
+ title: "Alternative Headline",
918
+ type: "string",
919
+ description: "A secondary title or sub-headline for the work."
920
+ },
921
+ polymorphicArchivedAt(),
922
+ polymorphicAuthor(),
923
+ {
924
+ name: "award",
925
+ title: "Awards",
926
+ type: "array",
927
+ of: [{ type: "string" }],
928
+ description: "Awards won by or for this item."
929
+ },
930
+ {
931
+ name: "backstory",
932
+ title: "Backstory",
933
+ type: "text",
934
+ rows: 3,
935
+ description: "A backstory of the article (sources, context, etc.)."
936
+ },
937
+ {
938
+ name: "character",
939
+ title: "Character",
940
+ type: "object",
941
+ description: "Fictional person connected with this creative work.",
942
+ jsonLdType: "Person",
943
+ fields: personInnerFields
944
+ },
945
+ polymorphicCitation(),
946
+ polymorphicContentRating(),
947
+ {
948
+ name: "contentReferenceTime",
949
+ title: "Content Reference Time",
950
+ type: "datetime",
951
+ description: "The specific time described by this work (for time-sensitive content)."
952
+ },
953
+ polymorphicContributor(),
954
+ polymorphicCopyrightHolder(),
955
+ {
956
+ name: "copyrightNotice",
957
+ title: "Copyright Notice",
958
+ type: "string",
959
+ description: "Text of any copyright notice associated with the work."
960
+ },
961
+ {
962
+ name: "copyrightYear",
963
+ title: "Copyright Year",
964
+ type: "copyrightYear",
965
+ description: 'Year of copyright. Toggle "Use current year" to emit the current year automatically.'
966
+ },
967
+ polymorphicCreator(),
968
+ {
969
+ name: "creditText",
970
+ title: "Credit Text",
971
+ type: "string",
972
+ description: "Text giving credit to the creator (e.g. for image attribution)."
973
+ },
974
+ {
975
+ name: "dateCreated",
976
+ title: "Date Created",
977
+ type: "datetime",
978
+ description: "The date on which the work was created."
979
+ },
980
+ {
981
+ name: "dateModified",
982
+ title: "Date Modified",
983
+ type: "datetime",
984
+ description: "The date on which the work was most recently modified."
985
+ },
986
+ {
987
+ name: "datePublished",
988
+ title: "Date Published",
989
+ type: "datetime",
990
+ description: "The date on which the work was first published."
991
+ },
992
+ {
993
+ name: "discussionUrl",
994
+ title: "Discussion URL",
995
+ type: "url",
996
+ description: "A link to the page that contains the review or comments about this item.",
997
+ urlValidation: { schemes: ["http", "https"] }
998
+ },
999
+ {
1000
+ name: "editor",
1001
+ title: "Editor",
1002
+ type: "object",
1003
+ description: "Specifies the Person who edited the work.",
1004
+ jsonLdType: "Person",
1005
+ fields: personInnerFields
1006
+ },
1007
+ polymorphicFunder(),
1008
+ polymorphicGenre(),
1009
+ {
1010
+ name: "headline",
1011
+ title: "Headline",
1012
+ type: "string",
1013
+ description: "Headline of the article."
1014
+ },
1015
+ {
1016
+ name: "isAccessibleForFree",
1017
+ title: "Is Accessible For Free",
1018
+ type: "boolean",
1019
+ description: "Whether the work is accessible without paying."
1020
+ },
1021
+ polymorphicIsBasedOn(),
1022
+ {
1023
+ name: "isFamilyFriendly",
1024
+ title: "Is Family Friendly",
1025
+ type: "boolean",
1026
+ description: "Whether the content is suitable for family / children."
1027
+ },
1028
+ polymorphicIsPartOf(),
1029
+ polymorphicKeywords(),
1030
+ {
1031
+ name: "learningResourceType",
1032
+ title: "Learning Resource Type",
1033
+ type: "string",
1034
+ description: 'The predominant type of learning resource (e.g. "Video", "Exercise", "Exam").'
1035
+ },
1036
+ polymorphicLicense(),
1037
+ polymorphicLocationCreated(),
1038
+ {
1039
+ name: "mainEntity",
1040
+ title: "Main Entity",
1041
+ type: "object",
1042
+ description: "Indicates the primary entity described in this work.",
1043
+ jsonLdType: "Thing",
1044
+ fields: thingInnerFields
1045
+ },
1046
+ polymorphicMaintainer(),
1047
+ polymorphicMaterial(),
1048
+ {
1049
+ name: "thumbnailUrl",
1050
+ title: "Thumbnail URL",
1051
+ type: "url",
1052
+ description: "URL of a thumbnail image.",
1053
+ urlValidation: { schemes: ["http", "https"] }
1054
+ }
1055
+ ]);
1056
+ function withCreativeWorkCommons(fields) {
1057
+ const existing = new Set(fields.map((f) => f.name));
1058
+ return [...fields, ...creativeWorkCommonFields.filter((f) => !existing.has(f.name))];
1059
+ }
1060
+ function resolvePolymorphicPersonOrOrg(input) {
1061
+ if (input === null || typeof input !== "object") return null;
1062
+ const obj = input;
1063
+ const variant = obj.variant;
1064
+ if (variant === "person" && obj.person && typeof obj.person === "object") {
1065
+ return __spreadValues({ "@type": "Person" }, stripEmpty(obj.person));
1066
+ }
1067
+ if (variant === "organization" && obj.organization && typeof obj.organization === "object") {
1068
+ return __spreadValues({ "@type": "Organization" }, stripEmpty(obj.organization));
1069
+ }
1070
+ return null;
1071
+ }
1072
+ function stripEmpty(obj, exclude = []) {
1073
+ const out = {};
1074
+ for (const [k, v] of Object.entries(obj)) {
1075
+ if (exclude.includes(k)) continue;
1076
+ if (v === void 0 || v === null || v === "") continue;
1077
+ if (Array.isArray(v) && v.length === 0) continue;
1078
+ out[k] = v;
1079
+ }
1080
+ return out;
1081
+ }
1082
+ function issnField(opts = {}) {
1083
+ var _a, _b;
1084
+ return __spreadValues({
1085
+ name: "issn",
1086
+ title: (_a = opts.title) != null ? _a : "ISSN",
1087
+ type: "string",
1088
+ description: (_b = opts.description) != null ? _b : "International Standard Serial Number (ISSN) for periodicals."
1089
+ }, opts.required ? { required: opts.required } : {});
1090
+ }
1091
+ function licenseUrlField(opts = {}) {
1092
+ var _a, _b;
1093
+ return __spreadValues({
1094
+ name: "license",
1095
+ title: (_a = opts.title) != null ? _a : "License URL",
1096
+ type: "url",
1097
+ description: (_b = opts.description) != null ? _b : "URL of the license under which the content is published.",
1098
+ urlValidation: { schemes: ["http", "https"] }
1099
+ }, opts.required ? { required: opts.required } : {});
1100
+ }
1101
+ function buildField(fieldDef, validation) {
1102
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1103
+ if (fieldDef.type === "select" && ((_a = fieldDef.variants) == null ? void 0 : _a.length)) {
1104
+ const variants = fieldDef.variants;
1105
+ const defaultVariant = (_b = fieldDef.defaultVariant) != null ? _b : variants[0].value;
1106
+ const innerFields = [
1107
+ {
1108
+ name: "variant",
1109
+ title: "Type",
1110
+ type: "string",
1111
+ description: "Choose how to provide this value.",
1112
+ initialValue: defaultVariant,
1113
+ options: variants.map((v) => ({ title: v.title, value: v.value })),
1114
+ layout: "radio"
1115
+ },
1116
+ ...variants.map((v) => {
1117
+ if (v.fields.length === 1 && v.fields[0].name === v.value) {
1118
+ return v.fields[0];
1119
+ }
1120
+ return {
1121
+ name: v.value,
1122
+ title: v.title,
1123
+ type: "object",
1124
+ jsonLdType: v.jsonLdType,
1125
+ fields: v.fields
1126
+ };
1127
+ })
1128
+ ];
1129
+ const base2 = {
1130
+ name: fieldDef.name,
1131
+ title: fieldDef.title,
1132
+ type: "object",
1133
+ fields: innerFields.map((child) => {
1134
+ const built = buildField(child, validation);
1135
+ if (child.name !== "variant") {
1136
+ const dv = defaultVariant;
1137
+ built.hidden = ({ parent }) => {
1138
+ var _a2;
1139
+ return ((_a2 = parent == null ? void 0 : parent.variant) != null ? _a2 : dv) !== child.name;
1140
+ };
1141
+ }
1142
+ return built;
1143
+ })
1144
+ };
1145
+ if (fieldDef.description) base2.description = fieldDef.description;
1146
+ return defineField(base2);
1147
+ }
1148
+ if (fieldDef.type === "copyrightYear") {
1149
+ const base2 = {
1150
+ name: fieldDef.name,
1151
+ title: fieldDef.title,
1152
+ type: "object",
1153
+ description: (_c = fieldDef.description) != null ? _c : 'Copyright year. Toggle "Use current year" to emit the current year dynamically.',
1154
+ fields: [
1155
+ defineField({
1156
+ name: "useDynamicYear",
1157
+ title: "Use current year (dynamic)",
1158
+ type: "boolean",
1159
+ initialValue: false
1160
+ }),
1161
+ defineField({
1162
+ name: "year",
1163
+ title: "Static year",
1164
+ type: "number",
1165
+ hidden: ({ parent }) => (parent == null ? void 0 : parent.useDynamicYear) === true
1166
+ })
1167
+ ]
1168
+ };
1169
+ return defineField(base2);
1170
+ }
1171
+ const base = {
1172
+ name: fieldDef.name,
1173
+ title: fieldDef.title,
1174
+ type: fieldDef.type
1175
+ };
1176
+ if (fieldDef.description) base.description = fieldDef.description;
1177
+ if (fieldDef.initialValue !== void 0) base.initialValue = fieldDef.initialValue;
1178
+ if (fieldDef.rows) base.rows = fieldDef.rows;
1179
+ if (fieldDef.options) {
1180
+ base.options = __spreadValues({ list: fieldDef.options }, fieldDef.layout && { layout: fieldDef.layout });
1181
+ }
1182
+ if (fieldDef.type === "array" && ((_d = fieldDef.fields) == null ? void 0 : _d.length) && !fieldDef.of) {
1183
+ base.of = [
1184
+ {
1185
+ type: "object",
1186
+ fields: fieldDef.fields.map((child) => buildField(child, validation))
1187
+ }
1188
+ ];
1189
+ } else if (fieldDef.of) {
1190
+ base.of = fieldDef.of;
1191
+ }
1192
+ if (fieldDef.type !== "array" && ((_e = fieldDef.fields) == null ? void 0 : _e.length)) {
1193
+ base.fields = fieldDef.fields.map((child) => buildField(child, validation));
1194
+ }
1195
+ if (fieldDef.type === "url" && (fieldDef.required || fieldDef.urlValidation)) {
1196
+ const required = fieldDef.required;
1197
+ const requiredMsg = required ? (_f = validation == null ? void 0 : validation[required.key]) != null ? _f : required.message : void 0;
1198
+ const schemes = (_h = (_g = fieldDef.urlValidation) == null ? void 0 : _g.schemes) != null ? _h : ["http", "https"];
1199
+ const allowRelative = (_j = (_i = fieldDef.urlValidation) == null ? void 0 : _i.allowRelative) != null ? _j : false;
1200
+ base.validation = (Rule) => {
1201
+ const checks = [];
1202
+ if (requiredMsg) checks.push(Rule.required().error(requiredMsg));
1203
+ checks.push(
1204
+ Rule.uri({ scheme: schemes, allowRelative }).error(
1205
+ `Must be a valid URL (${schemes.join(", ")}).`
1206
+ )
1207
+ );
1208
+ return checks;
1209
+ };
1210
+ } else if (fieldDef.required) {
1211
+ const msg = (_k = validation == null ? void 0 : validation[fieldDef.required.key]) != null ? _k : fieldDef.required.message;
1212
+ base.validation = (Rule) => Rule.required().error(msg);
1213
+ }
1214
+ return defineField(base);
1215
+ }
1216
+ function mapNameToSameValue(...items) {
1217
+ return items.reduce(
1218
+ (acc, item) => {
1219
+ acc[item.name] = item.name;
1220
+ return acc;
1221
+ },
1222
+ {}
1223
+ );
1224
+ }
1225
+ function generateSchemaType(def, config = {}) {
1226
+ return defineType(__spreadProps(__spreadValues({
1227
+ name: def.name,
1228
+ title: def.title,
1229
+ type: "object"
1230
+ }, def.icon && { icon: def.icon }), {
1231
+ fields: def.fields.map((f) => buildField(f, config.validation)),
1232
+ preview: {
1233
+ select: mapNameToSameValue(...def.fields),
1234
+ prepare(selection) {
1235
+ return __spreadValues({
1236
+ title: def.title,
1237
+ subtitle: (def == null ? void 0 : def.customPrepareSubtitle) ? def.customPrepareSubtitle(selection) : `@type: ${def.title}`
1238
+ }, def.icon && { media: def.icon });
1239
+ }
1240
+ }
1241
+ }));
1242
+ }
1243
+ var SANITY_INTERNAL_KEYS = /* @__PURE__ */ new Set([
1244
+ "_key",
1245
+ "_type",
1246
+ "_ref",
1247
+ "_id",
1248
+ "_rev",
1249
+ "_createdAt",
1250
+ "_updatedAt"
1251
+ ]);
1252
+ function handleSelectVariant(field, value, result, key) {
1253
+ var _a;
1254
+ if (field.type !== "select" || !((_a = field.variants) == null ? void 0 : _a.length)) return false;
1255
+ if (typeof value !== "object" || Array.isArray(value)) return false;
1256
+ const obj = value;
1257
+ if (typeof obj.variant !== "string") return false;
1258
+ const active = field.variants.find((v) => v.value === obj.variant);
1259
+ if (!active) return false;
1260
+ if (active.fields.length === 1 && active.fields[0].name === active.value) {
1261
+ const inlineVal = obj[active.value];
1262
+ if (inlineVal !== void 0 && inlineVal !== null && inlineVal !== "") {
1263
+ result[key] = inlineVal;
1264
+ }
1265
+ return true;
1266
+ }
1267
+ const nestedSrc = obj[active.value];
1268
+ if (typeof nestedSrc !== "object" || nestedSrc === null) return false;
1269
+ const nested = buildNestedJsonLd(
1270
+ nestedSrc,
1271
+ active.fields,
1272
+ active.jsonLdType
1273
+ );
1274
+ if (Object.keys(nested).length > (active.jsonLdType ? 1 : 0)) {
1275
+ result[key] = nested;
1276
+ }
1277
+ return true;
1278
+ }
1279
+ function handleCopyrightYear(field, value, result, key) {
1280
+ if (field.type !== "copyrightYear") return false;
1281
+ if (typeof value === "number") {
1282
+ result[key] = value;
1283
+ return true;
1284
+ }
1285
+ if (typeof value === "object" && value !== null) {
1286
+ const obj = value;
1287
+ if (obj.useDynamicYear) {
1288
+ result[key] = (/* @__PURE__ */ new Date()).getFullYear();
1289
+ } else if (typeof obj.year === "number") {
1290
+ result[key] = obj.year;
1291
+ }
1292
+ return true;
1293
+ }
1294
+ return false;
1295
+ }
1296
+ function buildNestedJsonLd(data, fieldDefs, jsonLdType) {
1297
+ var _a;
1298
+ const result = jsonLdType ? { "@type": jsonLdType } : {};
1299
+ for (const field of fieldDefs) {
1300
+ const value = data[field.name];
1301
+ if (value === void 0 || value === null || value === "") continue;
1302
+ const key = (_a = field.jsonLdKey) != null ? _a : field.name;
1303
+ if (handleSelectVariant(field, value, result, key)) continue;
1304
+ if (handleCopyrightYear(field, value, result, key)) continue;
1305
+ if (field.type === "object" && field.fields && typeof value === "object" && !Array.isArray(value)) {
1306
+ const nested = buildNestedJsonLd(
1307
+ value,
1308
+ field.fields,
1309
+ field.jsonLdType
1310
+ );
1311
+ const minKeys = field.jsonLdType ? 1 : 0;
1312
+ if (Object.keys(nested).length > minKeys) {
1313
+ result[key] = nested;
1314
+ }
1315
+ } else if (field.type === "array" && Array.isArray(value)) {
1316
+ if (field.fields && field.jsonLdType) {
1317
+ const items = value.filter(
1318
+ (item) => typeof item === "object" && item !== null
1319
+ ).map((item) => buildNestedJsonLd(item, field.fields, field.jsonLdType));
1320
+ if (items.length) result[key] = items;
1321
+ } else if (value.length) {
1322
+ result[key] = value.filter((v) => v !== void 0 && v !== null && v !== "");
1323
+ }
1324
+ } else if (!SANITY_INTERNAL_KEYS.has(field.name)) {
1325
+ result[key] = value;
1326
+ }
1327
+ }
1328
+ return result;
1329
+ }
1330
+ function buildGenericJsonLd(schemaType, data, fieldDefs, requiredFields = []) {
1331
+ if (!data) return null;
1332
+ for (const req of requiredFields) {
1333
+ if (!data[req]) return null;
1334
+ }
1335
+ const body = buildNestedJsonLd(data, fieldDefs);
1336
+ return __spreadValues({
1337
+ "@context": "https://schema.org",
1338
+ "@type": schemaType
1339
+ }, body);
1340
+ }
1341
+ var SchemaOrgIcons = {
1342
+ // Website & WebPage
1343
+ website: EarthGlobeIcon,
1344
+ webPage: DocumentTextIcon,
1345
+ // Organization & Business
1346
+ organization: ComponentIcon,
1347
+ localBusiness: HomeIcon,
1348
+ brand: SparkleIcon,
1349
+ // People
1350
+ person: UserIcon,
1351
+ // Navigation
1352
+ breadcrumbList: LinkIcon,
1353
+ // Media
1354
+ imageObject: ImageIcon,
1355
+ videoObject: VideoIcon,
1356
+ // Content
1357
+ article: DocumentTextIcon,
1358
+ blogPosting: BookIcon,
1359
+ faqPage: HelpCircleIcon,
1360
+ howTo: ListIcon,
1361
+ recipe: BookIcon,
1362
+ socialMediaPosting: CommentIcon,
1363
+ // Commerce
1364
+ product: PackageIcon,
1365
+ offer: TagIcon,
1366
+ aggregateRating: BarChartIcon,
1367
+ review: HeartFilledIcon,
1368
+ service: RobotIcon,
1369
+ // Location
1370
+ postalAddress: MarkerIcon,
1371
+ place: MarkerIcon,
1372
+ event: CalendarIcon,
1373
+ // Contact
1374
+ contactPoint: ApiIcon,
1375
+ // Software
1376
+ softwareApplication: CodeBlockIcon,
1377
+ webApplication: DesktopIcon,
1378
+ // Education
1379
+ course: BookIcon,
1380
+ // Legal & geographic
1381
+ legalService: MasterDetailIcon,
1382
+ country: EarthGlobeIcon,
1383
+ // New types
1384
+ jobPosting: ClipboardIcon,
1385
+ restaurant: HomeIcon,
1386
+ movie: PlayIcon,
1387
+ book: BookIcon,
1388
+ newsArticle: DocumentTextIcon,
1389
+ itemList: ListIcon,
1390
+ profilePage: UserIcon,
1391
+ musicRecording: PlayIcon,
1392
+ musicAlbum: PackageIcon
1393
+ };
1394
+
1395
+ // src/schema/aggregateRating/schema.ts
1396
+ var aggregateRatingFields = [
1397
+ {
1398
+ name: "ratingValue",
1399
+ title: "Rating Value",
1400
+ type: "string",
1401
+ description: 'The average rating value, e.g. "4.5".',
1402
+ required: {
1403
+ key: "ratingValueRequired",
1404
+ message: "Rating value is required for Schema.org."
1405
+ }
1406
+ },
1407
+ {
1408
+ name: "bestRating",
1409
+ title: "Best Rating",
1410
+ type: "string",
1411
+ description: 'The highest value allowed in this rating system, e.g. "5".',
1412
+ initialValue: "5"
1413
+ },
1414
+ {
1415
+ name: "worstRating",
1416
+ title: "Worst Rating",
1417
+ type: "string",
1418
+ description: 'The lowest value allowed in this rating system, e.g. "1".',
1419
+ initialValue: "1"
1420
+ },
1421
+ {
1422
+ name: "ratingCount",
1423
+ title: "Rating Count",
1424
+ type: "string",
1425
+ description: "The total number of ratings."
1426
+ },
1427
+ {
1428
+ name: "reviewCount",
1429
+ title: "Review Count",
1430
+ type: "string",
1431
+ description: 'The total number of reviews, e.g. "120".'
1432
+ },
1433
+ {
1434
+ name: "ratingExplanation",
1435
+ title: "Rating Explanation",
1436
+ type: "text",
1437
+ rows: 3,
1438
+ description: 'A short explanation (e.g. "Based on 120 verified purchases").'
1439
+ },
1440
+ polymorphicAuthor({
1441
+ description: "The author of the rating \u2014 choose Person or Organization."
1442
+ })
1443
+ ];
1444
+ function schemaOrgAggregateRating(config = {}) {
1445
+ return generateSchemaType(
1446
+ {
1447
+ name: "schemaOrgAggregateRating",
1448
+ title: "AggregateRating",
1449
+ icon: SchemaOrgIcons.aggregateRating,
1450
+ fields: aggregateRatingFields,
1451
+ customPrepareSubtitle: (document) => {
1452
+ const ratingValue = document.ratingValue ? `Rating: ${document.ratingValue}${document.bestRating ? `/${document.bestRating}` : ""}` : "No rating value";
1453
+ let count = "";
1454
+ if (document.reviewCount) {
1455
+ count = `Reviews: ${document.reviewCount}`;
1456
+ } else if (document.ratingCount) {
1457
+ count = `Ratings: ${document.ratingCount}`;
1458
+ }
1459
+ return count ? `${ratingValue} | ${count}` : ratingValue;
1460
+ }
1461
+ },
1462
+ config
1463
+ );
1464
+ }
1465
+
1466
+ // src/schema/article/schema.ts
1467
+ var articleFields = [
1468
+ headlineField({
1469
+ title: "Headline",
1470
+ description: "The headline of the article.",
1471
+ required: { key: "headlineRequired", message: "Headline is required for Schema.org Article." }
1472
+ }),
1473
+ descriptionField({
1474
+ title: "Description",
1475
+ description: "A description of the article.",
1476
+ required: {
1477
+ key: "descriptionRequired",
1478
+ message: "Description is required for Schema.org Article."
1479
+ }
1480
+ }),
1481
+ polymorphicImage(),
1482
+ polymorphicAuthor(),
1483
+ polymorphicPublisher(),
1484
+ datePublishedField(),
1485
+ {
1486
+ name: "articleSection",
1487
+ title: "Article Section",
1488
+ type: "string",
1489
+ description: 'The section of the publication this article belongs to (e.g. "Sports", "Business").'
1490
+ }
1491
+ ];
1492
+ function schemaOrgArticle(config = {}) {
1493
+ return generateSchemaType(
1494
+ {
1495
+ name: "schemaOrgArticle",
1496
+ title: "Article",
1497
+ icon: SchemaOrgIcons.article,
1498
+ fields: articleFields,
1499
+ customPrepareSubtitle: (document) => {
1500
+ const headline = document.headline || "Untitled article";
1501
+ const section = document.articleSection ? ` \xB7 ${document.articleSection}` : "";
1502
+ return `${headline}${section}`;
1503
+ }
1504
+ },
1505
+ config
1506
+ );
1507
+ }
1508
+
1509
+ // src/schema/blogPosting/schema.ts
1510
+ var blogPostingFields = [
1511
+ headlineField({
1512
+ required: {
1513
+ key: "headlineRequired",
1514
+ message: "Headline is required for Schema.org BlogPosting."
1515
+ }
1516
+ }),
1517
+ descriptionField({
1518
+ description: "A description of the blog post.",
1519
+ required: {
1520
+ key: "descriptionRequired",
1521
+ message: "Description is required for Schema.org BlogPosting."
1522
+ }
1523
+ }),
1524
+ polymorphicImage(),
1525
+ polymorphicAuthor(),
1526
+ polymorphicPublisher(),
1527
+ datePublishedField(),
1528
+ {
1529
+ name: "mainEntityOfPage",
1530
+ title: "Main Entity of Page",
1531
+ type: "object",
1532
+ jsonLdType: "WebPage",
1533
+ fields: [
1534
+ {
1535
+ name: "id",
1536
+ title: "Page URL",
1537
+ type: "url",
1538
+ jsonLdKey: "@id"
1539
+ }
1540
+ ]
1541
+ }
1542
+ ];
1543
+ function schemaOrgBlogPosting(config = {}) {
1544
+ return generateSchemaType(
1545
+ {
1546
+ name: "schemaOrgBlogPosting",
1547
+ title: "BlogPosting",
1548
+ icon: SchemaOrgIcons.blogPosting,
1549
+ fields: blogPostingFields,
1550
+ customPrepareSubtitle: (document) => document.headline || "Untitled blog post"
1551
+ },
1552
+ config
1553
+ );
1554
+ }
1555
+
1556
+ // src/schema/book/schema.ts
1557
+ var bookFields = [
1558
+ nameField({
1559
+ title: "Book Title",
1560
+ description: "The title of the book.",
1561
+ required: { key: "nameRequired", message: "Book title is required." }
1562
+ }),
1563
+ {
1564
+ name: "description",
1565
+ title: "Description",
1566
+ type: "text",
1567
+ rows: 4,
1568
+ description: "A description or summary of the book."
1569
+ },
1570
+ polymorphicImage({ description: "Cover image of the book." }),
1571
+ polymorphicAuthor({ description: "The author of the book." }),
1572
+ polymorphicPublisher({ description: "The publisher of the book." }),
1573
+ {
1574
+ name: "isbn",
1575
+ title: "ISBN",
1576
+ type: "string",
1577
+ description: "International Standard Book Number."
1578
+ },
1579
+ {
1580
+ name: "bookFormat",
1581
+ title: "Book Format",
1582
+ type: "string",
1583
+ description: "The format of the book.",
1584
+ options: [
1585
+ { title: "Hardcover", value: "https://schema.org/Hardcover" },
1586
+ { title: "Paperback", value: "https://schema.org/Paperback" },
1587
+ { title: "EBook", value: "https://schema.org/EBook" },
1588
+ { title: "AudiobookFormat", value: "https://schema.org/AudiobookFormat" },
1589
+ { title: "GraphicNovel", value: "https://schema.org/GraphicNovel" }
1590
+ ]
1591
+ }
1592
+ ];
1593
+ function schemaOrgBook(config = {}) {
1594
+ return generateSchemaType(
1595
+ {
1596
+ name: "schemaOrgBook",
1597
+ title: "Book",
1598
+ icon: SchemaOrgIcons.book,
1599
+ fields: bookFields,
1600
+ customPrepareSubtitle: (document) => {
1601
+ const name = document.name || "Untitled";
1602
+ const isbn = document.isbn ? ` \xB7 ISBN: ${document.isbn}` : "";
1603
+ return `${name}${isbn}`;
1604
+ }
1605
+ },
1606
+ config
1607
+ );
1608
+ }
1609
+
1610
+ // src/schema/brand/schema.ts
1611
+ var brandFields = [
1612
+ nameField({
1613
+ title: "Brand Name",
1614
+ description: "The name of the brand.",
1615
+ required: { key: "nameRequired", message: "Brand name is required for Schema.org." }
1616
+ }),
1617
+ {
1618
+ name: "slogan",
1619
+ title: "Slogan",
1620
+ type: "string",
1621
+ description: "A slogan or tagline for the brand."
1622
+ },
1623
+ polymorphicImage({
1624
+ description: "An image that represents the brand, such as a logo.",
1625
+ title: "Logo"
1626
+ })
1627
+ ];
1628
+ function schemaOrgBrand(config = {}) {
1629
+ return generateSchemaType(
1630
+ {
1631
+ name: "schemaOrgBrand",
1632
+ title: "Brand",
1633
+ icon: SchemaOrgIcons.brand,
1634
+ fields: brandFields,
1635
+ customPrepareSubtitle: (document) => document.name ? `Brand \xB7 ${document.name}` : "Untitled brand"
1636
+ },
1637
+ config
1638
+ );
1639
+ }
1640
+
1641
+ // src/schema/breadcrumbList/schema.ts
1642
+ var breadcrumbListFields = [
1643
+ {
1644
+ name: "itemListElement",
1645
+ title: "Breadcrumb Items",
1646
+ type: "array",
1647
+ jsonLdType: "ListItem",
1648
+ fields: [
1649
+ {
1650
+ name: "position",
1651
+ title: "Position",
1652
+ type: "number",
1653
+ required: { key: "positionRequired", message: "Position is required." }
1654
+ },
1655
+ {
1656
+ name: "name",
1657
+ title: "Label",
1658
+ type: "string",
1659
+ required: { key: "nameRequired", message: "Label is required." }
1660
+ },
1661
+ {
1662
+ name: "item",
1663
+ title: "URL",
1664
+ type: "url"
1665
+ }
1666
+ ]
1667
+ }
1668
+ ];
1669
+ function schemaOrgBreadcrumbList(config = {}) {
1670
+ return generateSchemaType(
1671
+ {
1672
+ name: "schemaOrgBreadcrumbList",
1673
+ title: "BreadcrumbList",
1674
+ icon: SchemaOrgIcons.breadcrumbList,
1675
+ fields: breadcrumbListFields,
1676
+ customPrepareSubtitle: (document) => {
1677
+ var _a;
1678
+ const items = (_a = document.itemListElement) != null ? _a : [];
1679
+ if (!items.length) return "No breadcrumb items";
1680
+ return `${items.length} item${items.length === 1 ? "" : "s"}`;
1681
+ }
1682
+ },
1683
+ config
1684
+ );
1685
+ }
1686
+
1687
+ // src/schema/contactPoint/schema.ts
1688
+ var contactPointFields = [
1689
+ {
1690
+ name: "contactType",
1691
+ title: "Contact Type",
1692
+ type: "string",
1693
+ description: 'The type of contact, e.g. "customer support", "sales".',
1694
+ required: { key: "contactTypeRequired", message: "Contact type is required for Schema.org." },
1695
+ initialValue: "customer support",
1696
+ options: [
1697
+ { title: "Customer Support", value: "customer support" },
1698
+ { title: "Sales", value: "sales" },
1699
+ { title: "Technical Support", value: "technical support" },
1700
+ { title: "Billing", value: "billing" },
1701
+ { title: "General Inquiry", value: "general inquiry" }
1702
+ ]
1703
+ },
1704
+ {
1705
+ name: "email",
1706
+ title: "Email",
1707
+ type: "string",
1708
+ description: "Contact email address."
1709
+ },
1710
+ {
1711
+ name: "faxNumber",
1712
+ title: "Fax Number",
1713
+ type: "string",
1714
+ description: "Contact fax number."
1715
+ },
1716
+ {
1717
+ name: "telephone",
1718
+ title: "Telephone",
1719
+ type: "string",
1720
+ description: "Contact telephone number."
1721
+ },
1722
+ {
1723
+ name: "availableLanguage",
1724
+ title: "Available Languages",
1725
+ type: "array",
1726
+ of: [{ type: "string" }],
1727
+ description: 'Languages supported by this contact point, e.g. "English", "Spanish".',
1728
+ initialValue: ["English"]
1729
+ }
1730
+ ];
1731
+ function schemaOrgContactPoint(config = {}) {
1732
+ return generateSchemaType(
1733
+ {
1734
+ name: "schemaOrgContactPoint",
1735
+ title: "ContactPoint",
1736
+ icon: SchemaOrgIcons.contactPoint,
1737
+ fields: contactPointFields,
1738
+ customPrepareSubtitle: (document) => {
1739
+ var _a, _b;
1740
+ const type = (_a = document.contactType) != null ? _a : "contact";
1741
+ const handle = (_b = document.email) != null ? _b : document.telephone;
1742
+ return handle ? `${type} \xB7 ${handle}` : type;
1743
+ }
1744
+ },
1745
+ config
1746
+ );
1747
+ }
1748
+
1749
+ // src/schema/country/schema.ts
1750
+ var countryFields = [
1751
+ nameField({
1752
+ title: "Country Name",
1753
+ description: 'The common English name of the country, e.g. "United States".',
1754
+ required: { key: "nameRequired", message: "Country name is required for Schema.org." }
1755
+ }),
1756
+ {
1757
+ name: "alternateName",
1758
+ title: "Alternate Name",
1759
+ type: "string",
1760
+ description: "Alternate name (e.g. native name or abbreviation)."
1761
+ },
1762
+ polymorphicIdentifier({
1763
+ title: "Country Code",
1764
+ description: 'ISO 3166-1 alpha-2 code, e.g. "US", "DE", "JP".'
1765
+ }),
1766
+ {
1767
+ name: "description",
1768
+ title: "Description",
1769
+ type: "text",
1770
+ rows: 3,
1771
+ description: "A short description."
1772
+ },
1773
+ {
1774
+ name: "url",
1775
+ title: "URL",
1776
+ type: "url",
1777
+ description: "Canonical URL (e.g. Wikipedia page or official government site)."
1778
+ },
1779
+ // {
1780
+ // name: 'image',
1781
+ // title: 'Flag Image URL',
1782
+ // type: 'url',
1783
+ // description: 'URL to the country flag image.',
1784
+ // },
1785
+ polymorphicImage({
1786
+ title: "Flag Image",
1787
+ description: "An image representing the country, such as a flag."
1788
+ }),
1789
+ {
1790
+ name: "sameAs",
1791
+ title: "Same As URL",
1792
+ type: "url",
1793
+ description: "URLs to authoritative pages (Wikidata, Wikipedia, GeoNames, etc.).",
1794
+ urlValidation: { schemes: ["http", "https"] }
1795
+ },
1796
+ {
1797
+ name: "address",
1798
+ title: "Address",
1799
+ type: "object",
1800
+ description: "Address \u2014 typically just the country code.",
1801
+ jsonLdType: "PostalAddress",
1802
+ fields: [
1803
+ {
1804
+ name: "addressCountry",
1805
+ title: "Country Code",
1806
+ type: "string",
1807
+ description: 'ISO country code, e.g. "US".'
1808
+ }
1809
+ ]
1810
+ }
1811
+ ];
1812
+ function schemaOrgCountry(config = {}) {
1813
+ return generateSchemaType(
1814
+ {
1815
+ name: "schemaOrgCountry",
1816
+ title: "Country",
1817
+ icon: SchemaOrgIcons.country,
1818
+ fields: countryFields,
1819
+ customPrepareSubtitle: (document) => {
1820
+ var _a;
1821
+ const name = (_a = document.name) != null ? _a : "Untitled country";
1822
+ return document.identifier ? `${name} \xB7 ${document.identifier}` : name;
1823
+ }
1824
+ },
1825
+ config
1826
+ );
1827
+ }
1828
+
1829
+ // src/schema/course/schema.ts
1830
+ var courseFields = [
1831
+ nameField({
1832
+ title: "Course Name",
1833
+ description: "The name of the course.",
1834
+ required: { key: "nameRequired", message: "Course name is required for Schema.org." }
1835
+ }),
1836
+ {
1837
+ name: "courseCode",
1838
+ title: "Course Code",
1839
+ type: "string",
1840
+ description: "An alphanumeric code that uniquely identifies the course."
1841
+ },
1842
+ descriptionField({
1843
+ description: "A description of the course.",
1844
+ required: {
1845
+ key: "descriptionRequired",
1846
+ message: "Course description is required for Schema.org."
1847
+ }
1848
+ }),
1849
+ polymorphicOwner({
1850
+ description: "The person or organization that offers the course.",
1851
+ title: "Owner"
1852
+ }),
1853
+ {
1854
+ name: "provider",
1855
+ title: "Provider",
1856
+ type: "object",
1857
+ jsonLdType: "Organization",
1858
+ description: "The organization that offers the course.",
1859
+ fields: [
1860
+ {
1861
+ name: "name",
1862
+ title: "Organization Name",
1863
+ type: "string",
1864
+ required: { key: "providerNameRequired", message: "Provider name is required." }
1865
+ },
1866
+ {
1867
+ name: "sameAs",
1868
+ title: "Organization URL",
1869
+ type: "url",
1870
+ description: "URL of the organization."
1871
+ }
1872
+ ]
1873
+ }
1874
+ ];
1875
+ function schemaOrgCourse(config = {}) {
1876
+ return generateSchemaType(
1877
+ {
1878
+ name: "schemaOrgCourse",
1879
+ title: "Course",
1880
+ icon: SchemaOrgIcons.course,
1881
+ fields: courseFields,
1882
+ customPrepareSubtitle: (document) => document.name || "Untitled course"
1883
+ },
1884
+ config
1885
+ );
1886
+ }
1887
+
1888
+ // src/schema/event/schema.ts
1889
+ var eventFields = [
1890
+ nameField({
1891
+ title: "Event Name",
1892
+ description: "The name of the event.",
1893
+ required: { key: "nameRequired", message: "Event name is required for Schema.org." }
1894
+ }),
1895
+ {
1896
+ name: "startDate",
1897
+ title: "Start Date",
1898
+ type: "date",
1899
+ description: "The start date of the event."
1900
+ },
1901
+ polymorphicSponsor({
1902
+ description: "The person or organization that sponsors the event.",
1903
+ title: "Sponsor"
1904
+ }),
1905
+ {
1906
+ name: "location",
1907
+ title: "Location",
1908
+ type: "object",
1909
+ description: "The location where the event takes place.",
1910
+ jsonLdType: "Place",
1911
+ fields: [
1912
+ {
1913
+ name: "name",
1914
+ title: "Venue Name",
1915
+ type: "string",
1916
+ description: "Name of the venue or location."
1917
+ },
1918
+ {
1919
+ name: "address",
1920
+ title: "Address",
1921
+ type: "string",
1922
+ description: "Full address as a single string."
1923
+ }
1924
+ ]
1925
+ }
1926
+ ];
1927
+ function schemaOrgEvent(config = {}) {
1928
+ return generateSchemaType(
1929
+ {
1930
+ name: "schemaOrgEvent",
1931
+ title: "Event",
1932
+ icon: SchemaOrgIcons.event,
1933
+ fields: eventFields,
1934
+ customPrepareSubtitle: (document) => {
1935
+ var _a;
1936
+ const name = (_a = document.name) != null ? _a : "Untitled event";
1937
+ const date = document.startDate ? ` \xB7 ${document.startDate}` : "";
1938
+ return `${name}${date}`;
1939
+ }
1940
+ },
1941
+ config
1942
+ );
1943
+ }
1944
+
1945
+ // src/schema/faqPage/schema.ts
1946
+ var faqPageFields = [
1947
+ {
1948
+ name: "mainEntity",
1949
+ title: "FAQ Items",
1950
+ type: "array",
1951
+ jsonLdType: "Question",
1952
+ fields: [
1953
+ {
1954
+ name: "name",
1955
+ title: "Question",
1956
+ type: "string",
1957
+ required: { key: "questionRequired", message: "Question text is required." }
1958
+ },
1959
+ {
1960
+ name: "acceptedAnswer",
1961
+ title: "Accepted Answer",
1962
+ type: "object",
1963
+ jsonLdType: "Answer",
1964
+ fields: [
1965
+ {
1966
+ name: "text",
1967
+ title: "Answer Text",
1968
+ type: "text",
1969
+ rows: 3
1970
+ }
1971
+ ]
1972
+ }
1973
+ ]
1974
+ }
1975
+ ];
1976
+ function schemaOrgFAQPage(config = {}) {
1977
+ return generateSchemaType(
1978
+ {
1979
+ name: "schemaOrgFAQPage",
1980
+ title: "FAQPage",
1981
+ icon: SchemaOrgIcons.faqPage,
1982
+ fields: faqPageFields,
1983
+ customPrepareSubtitle: (document) => {
1984
+ var _a;
1985
+ const items = (_a = document.mainEntity) != null ? _a : [];
1986
+ if (!items.length) return "No FAQ items";
1987
+ return `${items.length} question${items.length === 1 ? "" : "s"}`;
1988
+ }
1989
+ },
1990
+ config
1991
+ );
1992
+ }
1993
+
1994
+ // src/schema/howTo/schema.ts
1995
+ var howToFields = [
1996
+ nameField({
1997
+ title: "HowTo Name",
1998
+ description: "The name of the how-to guide.",
1999
+ required: { key: "nameRequired", message: "Name is required for Schema.org HowTo." }
2000
+ }),
2001
+ descriptionField({
2002
+ required: {
2003
+ key: "descriptionRequired",
2004
+ message: "Description is required for Schema.org HowTo."
2005
+ }
2006
+ }),
2007
+ polymorphicImage({ description: "Image for this how-to guide." }),
2008
+ {
2009
+ name: "totalTime",
2010
+ title: "Total Time",
2011
+ type: "string",
2012
+ description: 'Total time to complete, in ISO 8601 duration format (e.g. "PT30M" for 30 min).'
2013
+ },
2014
+ {
2015
+ name: "estimatedCost",
2016
+ title: "Estimated Cost",
2017
+ type: "object",
2018
+ description: "The estimated cost to complete this how-to.",
2019
+ jsonLdType: "MonetaryAmount",
2020
+ fields: [
2021
+ {
2022
+ name: "currency",
2023
+ title: "Currency",
2024
+ type: "string",
2025
+ description: 'ISO 4217 currency code, e.g. "USD".',
2026
+ initialValue: "USD"
2027
+ },
2028
+ {
2029
+ name: "value",
2030
+ title: "Value",
2031
+ type: "string",
2032
+ description: 'The cost amount, e.g. "25.00".'
2033
+ }
2034
+ ]
2035
+ },
2036
+ {
2037
+ name: "supply",
2038
+ title: "Supplies",
2039
+ type: "array",
2040
+ description: "Supplies needed for this how-to.",
2041
+ jsonLdType: "HowToSupply",
2042
+ fields: [
2043
+ {
2044
+ name: "name",
2045
+ title: "Supply Name",
2046
+ type: "string"
2047
+ }
2048
+ ]
2049
+ },
2050
+ {
2051
+ name: "tool",
2052
+ title: "Tools",
2053
+ type: "array",
2054
+ description: "Tools needed for this how-to.",
2055
+ jsonLdType: "HowToTool",
2056
+ fields: [
2057
+ {
2058
+ name: "name",
2059
+ title: "Tool Name",
2060
+ type: "string"
2061
+ }
2062
+ ]
2063
+ },
2064
+ {
2065
+ name: "step",
2066
+ title: "Steps",
2067
+ type: "array",
2068
+ jsonLdType: "HowToStep",
2069
+ fields: [
2070
+ {
2071
+ name: "name",
2072
+ title: "Step Name",
2073
+ type: "string",
2074
+ required: { key: "stepNameRequired", message: "Step name is required." }
2075
+ },
2076
+ {
2077
+ name: "text",
2078
+ title: "Step Description",
2079
+ type: "text",
2080
+ rows: 2
2081
+ },
2082
+ {
2083
+ name: "url",
2084
+ title: "Step URL",
2085
+ type: "url",
2086
+ description: "URL for this specific step (if applicable)."
2087
+ },
2088
+ {
2089
+ name: "image",
2090
+ title: "Step Image URL",
2091
+ type: "url",
2092
+ description: "URL of an image for this step."
2093
+ }
2094
+ ]
2095
+ }
2096
+ ];
2097
+ function schemaOrgHowTo(config = {}) {
2098
+ return generateSchemaType(
2099
+ {
2100
+ name: "schemaOrgHowTo",
2101
+ title: "HowTo",
2102
+ icon: SchemaOrgIcons.howTo,
2103
+ fields: howToFields,
2104
+ customPrepareSubtitle: (document) => {
2105
+ const name = document.name || "Untitled how-to";
2106
+ const steps = Array.isArray(document.step) ? ` \xB7 ${document.step.length} steps` : "";
2107
+ return `${name}${steps}`;
2108
+ }
2109
+ },
2110
+ config
2111
+ );
2112
+ }
2113
+
2114
+ // src/schema/imageObject/schema.ts
2115
+ var imageObjectFields = [
2116
+ {
2117
+ name: "url",
2118
+ title: "Image URL",
2119
+ type: "url",
2120
+ description: "The URL of the image.",
2121
+ required: { key: "urlRequired", message: "Image URL is required for Schema.org ImageObject." },
2122
+ urlValidation: { schemes: ["http", "https"] }
2123
+ },
2124
+ {
2125
+ name: "width",
2126
+ title: "Width",
2127
+ type: "number",
2128
+ description: "Image width in pixels."
2129
+ },
2130
+ {
2131
+ name: "height",
2132
+ title: "Height",
2133
+ type: "number",
2134
+ description: "Image height in pixels."
2135
+ },
2136
+ {
2137
+ name: "caption",
2138
+ title: "Caption",
2139
+ type: "string",
2140
+ description: "A caption for the image."
2141
+ },
2142
+ nameField({
2143
+ title: "Image Name",
2144
+ description: "A descriptive name for the image."
2145
+ }),
2146
+ descriptionField({
2147
+ title: "Image Description",
2148
+ description: "A description of the image."
2149
+ })
2150
+ ];
2151
+ function schemaOrgImageObject(config = {}) {
2152
+ return generateSchemaType(
2153
+ {
2154
+ name: "schemaOrgImageObject",
2155
+ title: "ImageObject",
2156
+ icon: SchemaOrgIcons.imageObject,
2157
+ fields: imageObjectFields,
2158
+ customPrepareSubtitle: (document) => {
2159
+ const name = document.name || document.url || "No URL";
2160
+ const dims = document.width && document.height ? ` \xB7 ${document.width}\xD7${document.height}` : "";
2161
+ return `${name}${dims}`;
2162
+ }
2163
+ },
2164
+ config
2165
+ );
2166
+ }
2167
+
2168
+ // src/schema/itemList/schema.ts
2169
+ var itemListFields = [
2170
+ nameField({
2171
+ title: "List Name",
2172
+ description: "The name of the list.",
2173
+ required: { key: "nameRequired", message: "List name is required for Schema.org." }
2174
+ }),
2175
+ descriptionField({
2176
+ title: "List Description",
2177
+ description: "A description of the list.",
2178
+ required: { key: "descriptionRequired", message: "List description is required for Schema.org." }
2179
+ }),
2180
+ {
2181
+ name: "itemListOrder",
2182
+ title: "Item List Order",
2183
+ type: "string",
2184
+ description: "How items in this list are ordered.",
2185
+ options: [
2186
+ { title: "Ascending", value: "https://schema.org/ItemListOrderAscending" },
2187
+ { title: "Descending", value: "https://schema.org/ItemListOrderDescending" },
2188
+ { title: "Unordered", value: "https://schema.org/ItemListUnordered" }
2189
+ ]
2190
+ },
2191
+ {
2192
+ name: "numberOfItems",
2193
+ title: "Number of Items",
2194
+ type: "number",
2195
+ description: "Total number of items in the list."
2196
+ },
2197
+ {
2198
+ name: "itemListElement",
2199
+ title: "List Items",
2200
+ type: "array",
2201
+ jsonLdType: "ListItem",
2202
+ description: "Items in the list. Position is auto-set if not provided.",
2203
+ fields: [
2204
+ { name: "position", title: "Position", type: "number", description: "Order in the list." },
2205
+ { name: "name", title: "Item Name", type: "string" },
2206
+ {
2207
+ name: "url",
2208
+ title: "Item URL",
2209
+ type: "url",
2210
+ description: "Link to the item.",
2211
+ urlValidation: { schemes: ["http", "https"] }
2212
+ },
2213
+ { name: "image", title: "Image URL", type: "url", description: "Image for this item." },
2214
+ { name: "description", title: "Description", type: "text", rows: 2 }
2215
+ ]
2216
+ }
2217
+ ];
2218
+ function schemaOrgItemList(config = {}) {
2219
+ return generateSchemaType(
2220
+ {
2221
+ name: "schemaOrgItemList",
2222
+ title: "ItemList",
2223
+ icon: SchemaOrgIcons.itemList,
2224
+ fields: itemListFields,
2225
+ customPrepareSubtitle: (document) => {
2226
+ var _a, _b, _c;
2227
+ const name = (_a = document.name) != null ? _a : "Untitled list";
2228
+ const count = (_c = (_b = document.itemListElement) == null ? void 0 : _b.length) != null ? _c : document.numberOfItems;
2229
+ const countStr = count === null ? "" : ` \xB7 ${count} items`;
2230
+ return `${name}${countStr}`;
2231
+ }
2232
+ },
2233
+ config
2234
+ );
2235
+ }
2236
+
2237
+ // src/schema/jobPosting/schema.ts
2238
+ var jobPostingFields = [
2239
+ {
2240
+ name: "title",
2241
+ title: "Job Title",
2242
+ type: "string",
2243
+ description: 'The title of the job, e.g. "Senior Software Engineer".',
2244
+ required: { key: "titleRequired", message: "Job title is required." }
2245
+ },
2246
+ descriptionField({
2247
+ title: "Job Description",
2248
+ description: "Full description of the job \u2014 responsibilities, qualifications, etc.",
2249
+ required: { key: "descriptionRequired", message: "Job description is required." }
2250
+ }),
2251
+ {
2252
+ name: "datePosted",
2253
+ title: "Date Posted",
2254
+ type: "date",
2255
+ description: "The date the job was posted (ISO 8601).",
2256
+ required: { key: "datePostedRequired", message: "Date posted is required." }
2257
+ },
2258
+ {
2259
+ name: "validThrough",
2260
+ title: "Valid Through",
2261
+ type: "datetime",
2262
+ description: "The date after which the posting is no longer valid."
2263
+ },
2264
+ {
2265
+ name: "employmentType",
2266
+ title: "Employment Type",
2267
+ type: "string",
2268
+ description: "Type of employment.",
2269
+ options: [
2270
+ { title: "Full-time", value: "FULL_TIME" },
2271
+ { title: "Part-time", value: "PART_TIME" },
2272
+ { title: "Contract", value: "CONTRACTOR" },
2273
+ { title: "Temporary", value: "TEMPORARY" },
2274
+ { title: "Intern", value: "INTERN" },
2275
+ { title: "Volunteer", value: "VOLUNTEER" },
2276
+ { title: "Per Diem", value: "PER_DIEM" },
2277
+ { title: "Other", value: "OTHER" }
2278
+ ]
2279
+ },
2280
+ polymorphicPublisher({
2281
+ name: "hiringOrganization",
2282
+ title: "Hiring Organization",
2283
+ description: "The organization offering the job."
2284
+ }),
2285
+ {
2286
+ name: "jobLocation",
2287
+ title: "Job Location",
2288
+ type: "object",
2289
+ jsonLdType: "Place",
2290
+ description: "The physical location of the job.",
2291
+ fields: [
2292
+ {
2293
+ name: "address",
2294
+ title: "Address",
2295
+ type: "object",
2296
+ jsonLdType: "PostalAddress",
2297
+ fields: [
2298
+ { name: "streetAddress", title: "Street Address", type: "string" },
2299
+ { name: "addressLocality", title: "City", type: "string" },
2300
+ { name: "addressRegion", title: "State/Region", type: "string" },
2301
+ { name: "postalCode", title: "Postal Code", type: "string" },
2302
+ { name: "addressCountry", title: "Country", type: "string" }
2303
+ ]
2304
+ }
2305
+ ]
2306
+ }
2307
+ ];
2308
+ function schemaOrgJobPosting(config = {}) {
2309
+ return generateSchemaType(
2310
+ {
2311
+ name: "schemaOrgJobPosting",
2312
+ title: "JobPosting",
2313
+ icon: SchemaOrgIcons.jobPosting,
2314
+ fields: jobPostingFields,
2315
+ customPrepareSubtitle: (document) => {
2316
+ const title = document.title || "Untitled";
2317
+ const type = document.employmentType ? ` \xB7 ${document.employmentType}` : "";
2318
+ return `${title}${type}`;
2319
+ }
2320
+ },
2321
+ config
2322
+ );
2323
+ }
2324
+
2325
+ // src/schema/legalService/schema.ts
2326
+ var legalServiceFields = [
2327
+ nameField({
2328
+ title: "Firm Name",
2329
+ description: "The official name of the legal service / firm.",
2330
+ required: { key: "nameRequired", message: "Firm name is required for Schema.org." }
2331
+ }),
2332
+ descriptionField({
2333
+ title: "Description",
2334
+ description: "A brief description of the legal service or firm.",
2335
+ required: { key: "descriptionRequired", message: "Description is required for Schema.org." }
2336
+ }),
2337
+ polymorphicImage({
2338
+ title: "Image",
2339
+ description: "An image representing the legal service, such as a logo or office photo."
2340
+ }),
2341
+ {
2342
+ name: "telephone",
2343
+ title: "Telephone",
2344
+ type: "string",
2345
+ description: "Primary contact telephone."
2346
+ },
2347
+ {
2348
+ name: "url",
2349
+ title: "Website URL",
2350
+ type: "url",
2351
+ description: "The firm website URL."
2352
+ },
2353
+ polymorphicImage({
2354
+ title: "Logo",
2355
+ description: "An image that represents the firm, such as a logo."
2356
+ }),
2357
+ {
2358
+ name: "priceRange",
2359
+ title: "Price Range",
2360
+ type: "string",
2361
+ description: 'Price range, e.g. "$$" or "$100-$500".'
2362
+ },
2363
+ {
2364
+ name: "address",
2365
+ title: "Address",
2366
+ type: "object",
2367
+ description: "Physical address of the firm.",
2368
+ jsonLdType: "PostalAddress",
2369
+ fields: [
2370
+ { name: "streetAddress", title: "Street Address", type: "string" },
2371
+ { name: "addressLocality", title: "Locality", type: "string" },
2372
+ { name: "addressRegion", title: "Region / State", type: "string" },
2373
+ { name: "postalCode", title: "Postal Code", type: "string" },
2374
+ {
2375
+ name: "addressCountry",
2376
+ title: "Country",
2377
+ type: "string",
2378
+ description: 'Country code, e.g. "US".'
2379
+ }
2380
+ ]
2381
+ },
2382
+ {
2383
+ name: "geo",
2384
+ title: "Geo Coordinates",
2385
+ type: "object",
2386
+ description: "Geographic coordinates.",
2387
+ jsonLdType: "GeoCoordinates",
2388
+ fields: [
2389
+ { name: "latitude", title: "Latitude", type: "string" },
2390
+ { name: "longitude", title: "Longitude", type: "string" }
2391
+ ]
2392
+ },
2393
+ {
2394
+ name: "hasMap",
2395
+ title: "Map URL",
2396
+ type: "url",
2397
+ description: "URL to a map of the location."
2398
+ },
2399
+ {
2400
+ name: "knowsAbout",
2401
+ title: "Areas of Expertise",
2402
+ type: "array",
2403
+ of: [{ type: "string" }],
2404
+ description: 'Topics the firm specialises in (e.g. "Family Law", "IP Litigation").'
2405
+ },
2406
+ {
2407
+ name: "knowsLanguage",
2408
+ title: "Languages",
2409
+ type: "array",
2410
+ of: [{ type: "string" }],
2411
+ description: "Languages the firm operates in."
2412
+ },
2413
+ {
2414
+ name: "areaServed",
2415
+ title: "Areas Served",
2416
+ type: "array",
2417
+ of: [{ type: "string" }],
2418
+ description: "Geographic areas where the firm offers services."
2419
+ },
2420
+ {
2421
+ name: "openingHoursSpecification",
2422
+ title: "Opening Hours",
2423
+ type: "array",
2424
+ description: "Opening hours for each day.",
2425
+ jsonLdType: "OpeningHoursSpecification",
2426
+ fields: [
2427
+ {
2428
+ name: "dayOfWeek",
2429
+ title: "Day of Week",
2430
+ type: "string",
2431
+ options: [
2432
+ { title: "Monday", value: "Monday" },
2433
+ { title: "Tuesday", value: "Tuesday" },
2434
+ { title: "Wednesday", value: "Wednesday" },
2435
+ { title: "Thursday", value: "Thursday" },
2436
+ { title: "Friday", value: "Friday" },
2437
+ { title: "Saturday", value: "Saturday" },
2438
+ { title: "Sunday", value: "Sunday" }
2439
+ ]
2440
+ },
2441
+ { name: "opens", title: "Opens", type: "string", description: 'e.g. "09:00".' },
2442
+ { name: "closes", title: "Closes", type: "string", description: 'e.g. "17:00".' }
2443
+ ]
2444
+ },
2445
+ {
2446
+ name: "sameAs",
2447
+ title: "Same As URL",
2448
+ type: "url",
2449
+ description: "URLs to social media profiles, directory listings, etc.",
2450
+ urlValidation: { schemes: ["http", "https"] }
2451
+ }
2452
+ ];
2453
+ function schemaOrgLegalService(config = {}) {
2454
+ return generateSchemaType(
2455
+ {
2456
+ name: "schemaOrgLegalService",
2457
+ title: "LegalService",
2458
+ icon: SchemaOrgIcons.legalService,
2459
+ fields: legalServiceFields,
2460
+ customPrepareSubtitle: (document) => {
2461
+ var _a, _b;
2462
+ const name = (_a = document.name) != null ? _a : "Untitled firm";
2463
+ const city = (_b = document.address) == null ? void 0 : _b.addressLocality;
2464
+ return city ? `${name} \xB7 ${city}` : name;
2465
+ }
2466
+ },
2467
+ config
2468
+ );
2469
+ }
2470
+
2471
+ // src/schema/localBusiness/schema.ts
2472
+ var localBusinessFields = [
2473
+ nameField({
2474
+ title: "Business Name",
2475
+ description: "The official name of the business.",
2476
+ required: { key: "nameRequired", message: "Business name is required for Schema.org." }
2477
+ }),
2478
+ polymorphicImage({
2479
+ description: "An image of the business, such as a storefront or logo.",
2480
+ title: "Business Image"
2481
+ }),
2482
+ {
2483
+ name: "telephone",
2484
+ title: "Telephone",
2485
+ type: "string",
2486
+ description: "The telephone number of the business."
2487
+ },
2488
+ {
2489
+ name: "address",
2490
+ title: "Address",
2491
+ type: "object",
2492
+ description: "The physical address of the business.",
2493
+ jsonLdType: "PostalAddress",
2494
+ fields: [
2495
+ {
2496
+ name: "streetAddress",
2497
+ title: "Street Address",
2498
+ type: "string"
2499
+ },
2500
+ {
2501
+ name: "addressLocality",
2502
+ title: "Locality",
2503
+ type: "string",
2504
+ description: "City or town."
2505
+ },
2506
+ {
2507
+ name: "addressCountry",
2508
+ title: "Country",
2509
+ type: "string",
2510
+ description: 'Country code, e.g. "US".'
2511
+ }
2512
+ ]
2513
+ },
2514
+ {
2515
+ name: "url",
2516
+ title: "Website URL",
2517
+ type: "url",
2518
+ description: "The website URL of the business."
2519
+ },
2520
+ polymorphicImage({
2521
+ title: "Logo",
2522
+ description: "An image that represents the business, such as a logo."
2523
+ }),
2524
+ {
2525
+ name: "priceRange",
2526
+ title: "Price Range",
2527
+ type: "string",
2528
+ description: 'The price range of the business, e.g. "$$" or "$10-$50".'
2529
+ },
2530
+ {
2531
+ name: "geo",
2532
+ title: "Geo Coordinates",
2533
+ type: "object",
2534
+ description: "Geographic coordinates of the business.",
2535
+ jsonLdType: "GeoCoordinates",
2536
+ fields: [
2537
+ {
2538
+ name: "latitude",
2539
+ title: "Latitude",
2540
+ type: "string",
2541
+ description: 'e.g. "40.7128".'
2542
+ },
2543
+ {
2544
+ name: "longitude",
2545
+ title: "Longitude",
2546
+ type: "string",
2547
+ description: 'e.g. "-74.0060".'
2548
+ }
2549
+ ]
2550
+ },
2551
+ {
2552
+ name: "hasMap",
2553
+ title: "Map URL",
2554
+ type: "url",
2555
+ description: "URL to a map of the business location (e.g. Google Maps link)."
2556
+ },
2557
+ {
2558
+ name: "openingHoursSpecification",
2559
+ title: "Opening Hours",
2560
+ type: "array",
2561
+ description: "Business opening hours for each day.",
2562
+ jsonLdType: "OpeningHoursSpecification",
2563
+ fields: [
2564
+ {
2565
+ name: "dayOfWeek",
2566
+ title: "Day of Week",
2567
+ type: "string",
2568
+ options: [
2569
+ { title: "Monday", value: "Monday" },
2570
+ { title: "Tuesday", value: "Tuesday" },
2571
+ { title: "Wednesday", value: "Wednesday" },
2572
+ { title: "Thursday", value: "Thursday" },
2573
+ { title: "Friday", value: "Friday" },
2574
+ { title: "Saturday", value: "Saturday" },
2575
+ { title: "Sunday", value: "Sunday" }
2576
+ ]
2577
+ },
2578
+ {
2579
+ name: "opens",
2580
+ title: "Opens",
2581
+ type: "string",
2582
+ description: 'Opening time, e.g. "09:00".'
2583
+ },
2584
+ {
2585
+ name: "closes",
2586
+ title: "Closes",
2587
+ type: "string",
2588
+ description: 'Closing time, e.g. "17:00".'
2589
+ }
2590
+ ]
2591
+ },
2592
+ {
2593
+ name: "sameAs",
2594
+ title: "Same As URL",
2595
+ type: "url",
2596
+ description: "URLs of social media profiles (Facebook, Instagram, Yelp, etc.).",
2597
+ urlValidation: { schemes: ["http", "https"] }
2598
+ }
2599
+ ];
2600
+ function schemaOrgLocalBusiness(config = {}) {
2601
+ return generateSchemaType(
2602
+ {
2603
+ name: "schemaOrgLocalBusiness",
2604
+ title: "LocalBusiness",
2605
+ icon: SchemaOrgIcons.localBusiness,
2606
+ fields: localBusinessFields,
2607
+ customPrepareSubtitle: (document) => {
2608
+ var _a, _b;
2609
+ const name = (_a = document.name) != null ? _a : "Untitled business";
2610
+ const city = (_b = document.address) == null ? void 0 : _b.addressLocality;
2611
+ return city ? `${name} \xB7 ${city}` : name;
2612
+ }
2613
+ },
2614
+ config
2615
+ );
2616
+ }
2617
+
2618
+ // src/schema/movie/schema.ts
2619
+ var movieFields = [
2620
+ nameField({
2621
+ title: "Movie Title",
2622
+ description: "The title of the movie.",
2623
+ required: { key: "nameRequired", message: "Movie title is required." }
2624
+ }),
2625
+ descriptionField({
2626
+ title: "Plot Summary",
2627
+ description: "A plot summary or synopsis of the movie.",
2628
+ required: {
2629
+ key: "descriptionRequired",
2630
+ message: "Description is required for Schema.org Movie."
2631
+ }
2632
+ }),
2633
+ polymorphicImage({ description: "Poster or still from the movie." }),
2634
+ {
2635
+ name: "dateCreated",
2636
+ title: "Date Created",
2637
+ type: "date",
2638
+ description: "The date the movie was released or created."
2639
+ },
2640
+ polymorphicAuthor({
2641
+ name: "director",
2642
+ title: "Director",
2643
+ description: "The director of the movie."
2644
+ }),
2645
+ {
2646
+ name: "duration",
2647
+ title: "Duration",
2648
+ type: "string",
2649
+ description: 'ISO 8601 duration, e.g. "PT2H30M" for 2h 30m.'
2650
+ },
2651
+ {
2652
+ name: "contentRating",
2653
+ title: "Content Rating",
2654
+ type: "string",
2655
+ description: 'e.g. "PG-13", "R", "U/A".'
2656
+ }
2657
+ ];
2658
+ function schemaOrgMovie(config = {}) {
2659
+ return generateSchemaType(
2660
+ {
2661
+ name: "schemaOrgMovie",
2662
+ title: "Movie",
2663
+ icon: SchemaOrgIcons.movie,
2664
+ fields: movieFields,
2665
+ customPrepareSubtitle: (document) => {
2666
+ const name = document.name || "Untitled";
2667
+ const year = document.dateCreated ? ` (${document.dateCreated.slice(0, 4)})` : "";
2668
+ return `${name}${year}`;
2669
+ }
2670
+ },
2671
+ config
2672
+ );
2673
+ }
2674
+
2675
+ // src/schema/musicAlbum/schema.ts
2676
+ var musicAlbumFields = [
2677
+ nameField({
2678
+ title: "Album Name",
2679
+ description: "The name of the album.",
2680
+ required: { key: "nameRequired", message: "Album name is required." }
2681
+ }),
2682
+ descriptionField({
2683
+ title: "Album Description",
2684
+ description: "A description of the album.",
2685
+ required: {
2686
+ key: "descriptionRequired",
2687
+ message: "Album description is required."
2688
+ }
2689
+ }),
2690
+ polymorphicImage({ description: "Album cover art." }),
2691
+ polymorphicAuthor({
2692
+ name: "byArtist",
2693
+ title: "By Artist",
2694
+ description: "The artist who created this album."
2695
+ }),
2696
+ {
2697
+ name: "numTracks",
2698
+ title: "Number of Tracks",
2699
+ type: "number",
2700
+ description: "Total number of tracks."
2701
+ },
2702
+ {
2703
+ name: "albumProductionType",
2704
+ title: "Album Production Type",
2705
+ type: "string",
2706
+ description: "How the album was produced.",
2707
+ options: [
2708
+ { title: "Studio Album", value: "https://schema.org/StudioAlbum" },
2709
+ { title: "Live Album", value: "https://schema.org/LiveAlbum" },
2710
+ { title: "Compilation Album", value: "https://schema.org/CompilationAlbum" },
2711
+ { title: "DJ Mix Album", value: "https://schema.org/DJMixAlbum" },
2712
+ { title: "Demo Album", value: "https://schema.org/DemoAlbum" },
2713
+ { title: "Mixtape Album", value: "https://schema.org/MixtapeAlbum" },
2714
+ { title: "Remix Album", value: "https://schema.org/RemixAlbum" },
2715
+ { title: "Soundtrack Album", value: "https://schema.org/SoundtrackAlbum" },
2716
+ { title: "Spoken Word Album", value: "https://schema.org/SpokenWordAlbum" }
2717
+ ]
2718
+ },
2719
+ datePublishedField({ description: "Release date of the album." })
2720
+ ];
2721
+ function schemaOrgMusicAlbum(config = {}) {
2722
+ return generateSchemaType(
2723
+ {
2724
+ name: "schemaOrgMusicAlbum",
2725
+ title: "MusicAlbum",
2726
+ icon: SchemaOrgIcons.musicAlbum,
2727
+ fields: musicAlbumFields,
2728
+ customPrepareSubtitle: (document) => {
2729
+ const name = document.name || "Untitled";
2730
+ const tracks = document.numTracks ? ` \xB7 ${document.numTracks} tracks` : "";
2731
+ return `${name}${tracks}`;
2732
+ }
2733
+ },
2734
+ config
2735
+ );
2736
+ }
2737
+
2738
+ // src/schema/musicRecording/schema.ts
2739
+ var musicRecordingFields = [
2740
+ nameField({
2741
+ title: "Track Name",
2742
+ description: "The name of the music recording.",
2743
+ required: { key: "nameRequired", message: "Track name is required." }
2744
+ }),
2745
+ descriptionField({
2746
+ title: "Track Description",
2747
+ description: "A description of the music recording."
2748
+ }),
2749
+ polymorphicImage({ description: "Cover art or image for the recording." }),
2750
+ polymorphicAuthor({
2751
+ name: "byArtist",
2752
+ title: "By Artist",
2753
+ description: "The artist who performed this track."
2754
+ }),
2755
+ {
2756
+ name: "duration",
2757
+ title: "Duration",
2758
+ type: "string",
2759
+ description: 'ISO 8601 duration, e.g. "PT3M45S" for 3m 45s.'
2760
+ },
2761
+ {
2762
+ name: "inAlbum",
2763
+ title: "In Album",
2764
+ type: "string",
2765
+ description: "The album this recording appears in."
2766
+ },
2767
+ datePublishedField({ description: "Release date of this recording." })
2768
+ ];
2769
+ function schemaOrgMusicRecording(config = {}) {
2770
+ return generateSchemaType(
2771
+ {
2772
+ name: "schemaOrgMusicRecording",
2773
+ title: "MusicRecording",
2774
+ icon: SchemaOrgIcons.musicRecording,
2775
+ fields: musicRecordingFields,
2776
+ customPrepareSubtitle: (document) => {
2777
+ const name = document.name || "Untitled";
2778
+ const album = document.inAlbum ? ` \xB7 ${document.inAlbum}` : "";
2779
+ return `${name}${album}`;
2780
+ }
2781
+ },
2782
+ config
2783
+ );
2784
+ }
2785
+
2786
+ // src/schema/newsArticle/schema.ts
2787
+ var newsArticleFields = [
2788
+ headlineField({
2789
+ required: { key: "headlineRequired", message: "Headline is required." },
2790
+ description: "The headline of the news article (max 110 characters recommended)."
2791
+ }),
2792
+ descriptionField({
2793
+ description: "A short summary of the news article (max 200 characters recommended)."
2794
+ }),
2795
+ polymorphicImage({ description: "Lead image for the article." }),
2796
+ polymorphicAuthor({ description: "The author of the article." }),
2797
+ polymorphicPublisher({ description: "The publisher of the article." }),
2798
+ datePublishedField({
2799
+ dateType: "datetime",
2800
+ description: "When the article was first published.",
2801
+ required: { key: "datePublishedRequired", message: "Publication date is required." }
2802
+ }),
2803
+ {
2804
+ name: "dateModified",
2805
+ title: "Date Modified",
2806
+ type: "datetime",
2807
+ description: "When the article was last modified."
2808
+ },
2809
+ {
2810
+ name: "articleSection",
2811
+ title: "Article Section",
2812
+ type: "string",
2813
+ description: 'The section of the publication, e.g. "Politics", "Sports".'
2814
+ }
2815
+ ];
2816
+ function schemaOrgNewsArticle(config = {}) {
2817
+ return generateSchemaType(
2818
+ {
2819
+ name: "schemaOrgNewsArticle",
2820
+ title: "NewsArticle",
2821
+ icon: SchemaOrgIcons.newsArticle,
2822
+ fields: newsArticleFields,
2823
+ customPrepareSubtitle: (document) => {
2824
+ const headline = document.headline || "Untitled";
2825
+ const section = document.articleSection ? ` \xB7 ${document.articleSection}` : "";
2826
+ return `${headline}${section}`;
2827
+ }
2828
+ },
2829
+ config
2830
+ );
2831
+ }
2832
+
2833
+ // src/schema/offer/schema.ts
2834
+ var offerFields = [
2835
+ {
2836
+ name: "price",
2837
+ title: "Price",
2838
+ type: "string",
2839
+ description: 'The price of the offer, e.g. "199.99".',
2840
+ required: { key: "priceRequired", message: "Price is required for Schema.org." }
2841
+ },
2842
+ {
2843
+ name: "priceCurrency",
2844
+ title: "Currency",
2845
+ type: "string",
2846
+ description: 'The currency of the price, e.g. "USD".',
2847
+ initialValue: "USD",
2848
+ options: [
2849
+ { title: "USD", value: "USD" },
2850
+ { title: "EUR", value: "EUR" },
2851
+ { title: "GBP", value: "GBP" },
2852
+ { title: "INR", value: "INR" },
2853
+ { title: "JPY", value: "JPY" },
2854
+ { title: "CAD", value: "CAD" },
2855
+ { title: "AUD", value: "AUD" }
2856
+ ]
2857
+ },
2858
+ {
2859
+ name: "availability",
2860
+ title: "Availability",
2861
+ type: "url",
2862
+ description: 'Schema.org availability URL, e.g. "https://schema.org/InStock".'
2863
+ },
2864
+ {
2865
+ name: "url",
2866
+ title: "Offer URL",
2867
+ type: "url",
2868
+ description: "URL of the offer page."
2869
+ }
2870
+ ];
2871
+ function schemaOrgOffer(config = {}) {
2872
+ return generateSchemaType(
2873
+ {
2874
+ name: "schemaOrgOffer",
2875
+ title: "Offer",
2876
+ icon: SchemaOrgIcons.offer,
2877
+ fields: offerFields,
2878
+ customPrepareSubtitle: (document) => {
2879
+ var _a;
2880
+ if (!document.price) return "No price set";
2881
+ return `${document.price} ${(_a = document.priceCurrency) != null ? _a : ""}`.trim();
2882
+ }
2883
+ },
2884
+ config
2885
+ );
2886
+ }
2887
+
2888
+ // src/schema/person/schema.ts
2889
+ var personFields = [
2890
+ nameField({
2891
+ title: "Full Name",
2892
+ description: "The full name of the person.",
2893
+ required: { key: "nameRequired", message: "Person name is required for Schema.org." }
2894
+ }),
2895
+ {
2896
+ name: "jobTitle",
2897
+ title: "Job Title",
2898
+ type: "string",
2899
+ description: "The job title or role of the person."
2900
+ },
2901
+ {
2902
+ name: "url",
2903
+ title: "Profile URL",
2904
+ type: "url",
2905
+ description: "URL of the person's profile or personal website."
2906
+ },
2907
+ {
2908
+ name: "imageUrl",
2909
+ title: "Image URL",
2910
+ type: "url",
2911
+ description: "URL to a photo/image of this person.",
2912
+ jsonLdKey: "image"
2913
+ },
2914
+ {
2915
+ name: "sameAs",
2916
+ title: "Same As URL",
2917
+ type: "url",
2918
+ description: "URLs of social media profiles and other authoritative pages (LinkedIn, GitHub, etc.).",
2919
+ urlValidation: { schemes: ["http", "https"] }
2920
+ },
2921
+ {
2922
+ name: "worksFor",
2923
+ title: "Works For",
2924
+ type: "object",
2925
+ description: "The organization this person works for.",
2926
+ jsonLdType: "Organization",
2927
+ fields: [
2928
+ {
2929
+ name: "name",
2930
+ title: "Organization Name",
2931
+ type: "string",
2932
+ description: "Name of the organization."
2933
+ }
2934
+ ]
2935
+ },
2936
+ {
2937
+ name: "email",
2938
+ title: "Email",
2939
+ type: "string",
2940
+ description: "Email address of the person."
2941
+ },
2942
+ // fax Number
2943
+ {
2944
+ name: "faxNumber",
2945
+ title: "Fax Number",
2946
+ type: "string",
2947
+ description: "Fax number of the person."
2948
+ },
2949
+ {
2950
+ name: "telephone",
2951
+ title: "Telephone",
2952
+ type: "string",
2953
+ description: "Phone number of the person."
2954
+ },
2955
+ {
2956
+ name: "description",
2957
+ title: "Description",
2958
+ type: "text",
2959
+ rows: 3,
2960
+ description: "A short bio or description of the person."
2961
+ },
2962
+ {
2963
+ name: "gender",
2964
+ title: "Gender",
2965
+ type: "string",
2966
+ description: "Gender of the person."
2967
+ },
2968
+ {
2969
+ name: "birthDate",
2970
+ title: "Birth Date",
2971
+ type: "date",
2972
+ description: "Date of birth."
2973
+ },
2974
+ {
2975
+ name: "address",
2976
+ title: "Address",
2977
+ type: "object",
2978
+ description: "The postal address of the person.",
2979
+ jsonLdType: "PostalAddress",
2980
+ fields: [
2981
+ {
2982
+ name: "streetAddress",
2983
+ title: "Street Address",
2984
+ type: "string"
2985
+ },
2986
+ {
2987
+ name: "addressLocality",
2988
+ title: "City",
2989
+ type: "string"
2990
+ },
2991
+ {
2992
+ name: "addressCountry",
2993
+ title: "Country",
2994
+ type: "string",
2995
+ description: 'Country code, e.g. "US".'
2996
+ }
2997
+ ]
2998
+ }
2999
+ ];
3000
+ function schemaOrgPerson(config = {}) {
3001
+ return generateSchemaType(
3002
+ {
3003
+ name: "schemaOrgPerson",
3004
+ title: "Person",
3005
+ icon: SchemaOrgIcons.person,
3006
+ fields: personFields,
3007
+ customPrepareSubtitle: (document) => {
3008
+ var _a;
3009
+ const name = (_a = document.name) != null ? _a : "Untitled person";
3010
+ return document.jobTitle ? `${name} \xB7 ${document.jobTitle}` : name;
3011
+ }
3012
+ },
3013
+ config
3014
+ );
3015
+ }
3016
+
3017
+ // src/schema/place/schema.ts
3018
+ var placeFields = [
3019
+ {
3020
+ name: "name",
3021
+ title: "Place Name",
3022
+ type: "string",
3023
+ description: "The name of the place.",
3024
+ required: { key: "nameRequired", message: "Place name is required for Schema.org." }
3025
+ },
3026
+ {
3027
+ name: "address",
3028
+ title: "Address",
3029
+ type: "object",
3030
+ description: "The physical address of the place.",
3031
+ jsonLdType: "PostalAddress",
3032
+ fields: [
3033
+ {
3034
+ name: "addressLocality",
3035
+ title: "Locality",
3036
+ type: "string",
3037
+ description: "City or town."
3038
+ },
3039
+ {
3040
+ name: "addressCountry",
3041
+ title: "Country",
3042
+ type: "string",
3043
+ description: 'Country code, e.g. "US".'
3044
+ }
3045
+ ]
3046
+ }
3047
+ ];
3048
+ function schemaOrgPlace(config = {}) {
3049
+ return generateSchemaType(
3050
+ {
3051
+ name: "schemaOrgPlace",
3052
+ title: "Place",
3053
+ icon: SchemaOrgIcons.place,
3054
+ fields: placeFields,
3055
+ customPrepareSubtitle: (document) => {
3056
+ var _a, _b;
3057
+ const name = (_a = document.name) != null ? _a : "Untitled place";
3058
+ const city = (_b = document.address) == null ? void 0 : _b.addressLocality;
3059
+ return city ? `${name} \xB7 ${city}` : name;
3060
+ }
3061
+ },
3062
+ config
3063
+ );
3064
+ }
3065
+
3066
+ // src/schema/postalAddress/schema.ts
3067
+ var postalAddressFields = [
3068
+ {
3069
+ name: "streetAddress",
3070
+ title: "Street Address",
3071
+ type: "string",
3072
+ description: 'The street address, e.g. "123 Main St".'
3073
+ },
3074
+ {
3075
+ name: "addressLocality",
3076
+ title: "City / Locality",
3077
+ type: "string",
3078
+ description: 'The city or locality, e.g. "New York".'
3079
+ },
3080
+ {
3081
+ name: "postalCode",
3082
+ title: "Postal Code",
3083
+ type: "string",
3084
+ description: 'The postal or ZIP code, e.g. "10001".'
3085
+ },
3086
+ {
3087
+ name: "addressCountry",
3088
+ title: "Country",
3089
+ type: "string",
3090
+ description: 'The country code, e.g. "US".'
3091
+ }
3092
+ ];
3093
+ function schemaOrgPostalAddress(config = {}) {
3094
+ return generateSchemaType(
3095
+ {
3096
+ name: "schemaOrgPostalAddress",
3097
+ title: "PostalAddress",
3098
+ icon: SchemaOrgIcons.postalAddress,
3099
+ fields: postalAddressFields,
3100
+ customPrepareSubtitle: (document) => [document.streetAddress, document.addressLocality, document.addressCountry].filter(Boolean).join(", ") || "No address set"
3101
+ },
3102
+ config
3103
+ );
3104
+ }
3105
+
3106
+ // src/schema/product/schema.ts
3107
+ var productFields = [
3108
+ nameField({
3109
+ title: "Product Name",
3110
+ description: "The name of the product.",
3111
+ required: { key: "nameRequired", message: "Product name is required for Schema.org." }
3112
+ }),
3113
+ polymorphicImage({
3114
+ name: "image",
3115
+ title: "Image",
3116
+ description: "Product image \u2014 choose URL or full ImageObject."
3117
+ }),
3118
+ descriptionField({
3119
+ title: "Description",
3120
+ description: "A description of the product."
3121
+ }),
3122
+ {
3123
+ name: "brand",
3124
+ title: "Brand",
3125
+ type: "object",
3126
+ description: "The brand of the product.",
3127
+ jsonLdType: "Brand",
3128
+ fields: [
3129
+ {
3130
+ name: "name",
3131
+ title: "Brand Name",
3132
+ type: "string",
3133
+ description: "Name of the brand."
3134
+ }
3135
+ ]
3136
+ },
3137
+ {
3138
+ name: "sku",
3139
+ title: "SKU",
3140
+ type: "string",
3141
+ description: "Stock Keeping Unit \u2014 a unique identifier for the product."
3142
+ },
3143
+ {
3144
+ name: "gtin",
3145
+ title: "GTIN",
3146
+ type: "string",
3147
+ description: "Global Trade Item Number (covers GTIN-8, GTIN-13, GTIN-14)."
3148
+ },
3149
+ {
3150
+ name: "mpn",
3151
+ title: "MPN",
3152
+ type: "string",
3153
+ description: "Manufacturer Part Number."
3154
+ },
3155
+ {
3156
+ name: "offers",
3157
+ title: "Offers",
3158
+ type: "object",
3159
+ description: "Pricing and availability information.",
3160
+ jsonLdType: "Offer",
3161
+ fields: [
3162
+ {
3163
+ name: "price",
3164
+ title: "Price",
3165
+ type: "string",
3166
+ description: 'The price of the product, e.g. "29.99".'
3167
+ },
3168
+ {
3169
+ name: "priceCurrency",
3170
+ title: "Currency",
3171
+ type: "string",
3172
+ description: 'ISO 4217 currency code, e.g. "USD".',
3173
+ initialValue: "USD"
3174
+ },
3175
+ {
3176
+ name: "availability",
3177
+ title: "Availability",
3178
+ type: "string",
3179
+ description: "Product availability status.",
3180
+ options: [
3181
+ { title: "In Stock", value: "https://schema.org/InStock" },
3182
+ { title: "Out of Stock", value: "https://schema.org/OutOfStock" },
3183
+ { title: "Pre-Order", value: "https://schema.org/PreOrder" },
3184
+ { title: "Back Order", value: "https://schema.org/BackOrder" },
3185
+ { title: "Discontinued", value: "https://schema.org/Discontinued" }
3186
+ ]
3187
+ },
3188
+ {
3189
+ name: "url",
3190
+ title: "Offer URL",
3191
+ type: "url",
3192
+ description: "URL of the product offer page."
3193
+ },
3194
+ {
3195
+ name: "itemCondition",
3196
+ title: "Item Condition",
3197
+ type: "string",
3198
+ description: "The condition of the product.",
3199
+ options: [
3200
+ { title: "New", value: "https://schema.org/NewCondition" },
3201
+ { title: "Used", value: "https://schema.org/UsedCondition" },
3202
+ { title: "Refurbished", value: "https://schema.org/RefurbishedCondition" }
3203
+ ]
3204
+ }
3205
+ ]
3206
+ },
3207
+ {
3208
+ name: "aggregateRating",
3209
+ title: "Aggregate Rating",
3210
+ type: "object",
3211
+ description: "Overall rating based on a collection of reviews.",
3212
+ jsonLdType: "AggregateRating",
3213
+ fields: [
3214
+ {
3215
+ name: "ratingValue",
3216
+ title: "Rating Value",
3217
+ type: "string",
3218
+ description: 'The average rating, e.g. "4.5".'
3219
+ },
3220
+ {
3221
+ name: "reviewCount",
3222
+ title: "Review Count",
3223
+ type: "string",
3224
+ description: "Total number of reviews."
3225
+ },
3226
+ {
3227
+ name: "bestRating",
3228
+ title: "Best Rating",
3229
+ type: "string",
3230
+ description: 'The highest possible rating, e.g. "5".',
3231
+ initialValue: "5"
3232
+ }
3233
+ ]
3234
+ },
3235
+ {
3236
+ name: "review",
3237
+ title: "Reviews",
3238
+ type: "array",
3239
+ description: "Product reviews.",
3240
+ jsonLdType: "Review",
3241
+ fields: [
3242
+ {
3243
+ name: "author",
3244
+ title: "Reviewer Name",
3245
+ type: "string",
3246
+ jsonLdKey: "author"
3247
+ },
3248
+ {
3249
+ name: "reviewRating",
3250
+ title: "Rating",
3251
+ type: "string",
3252
+ description: 'Rating value, e.g. "5".'
3253
+ },
3254
+ {
3255
+ name: "reviewBody",
3256
+ title: "Review Text",
3257
+ type: "text",
3258
+ rows: 2
3259
+ }
3260
+ ]
3261
+ }
3262
+ ];
3263
+ function schemaOrgProduct(config = {}) {
3264
+ return generateSchemaType(
3265
+ {
3266
+ name: "schemaOrgProduct",
3267
+ title: "Product",
3268
+ icon: SchemaOrgIcons.product,
3269
+ fields: productFields,
3270
+ customPrepareSubtitle: (document) => {
3271
+ var _a, _b, _c;
3272
+ const name = document.name || "Untitled product";
3273
+ const brand = ((_a = document.brand) == null ? void 0 : _a.name) ? ` \xB7 ${document.brand.name}` : "";
3274
+ const price = ((_b = document.offers) == null ? void 0 : _b.price) && ((_c = document.offers) == null ? void 0 : _c.priceCurrency) ? ` \xB7 ${document.offers.priceCurrency} ${document.offers.price}` : "";
3275
+ return `${name}${brand}${price}`;
3276
+ }
3277
+ },
3278
+ config
3279
+ );
3280
+ }
3281
+
3282
+ // src/schema/profilePage/schema.ts
3283
+ var profilePageFields = [
3284
+ nameField({
3285
+ title: "Page Title",
3286
+ description: "Title of the profile page.",
3287
+ required: { key: "nameRequired", message: "Page title is required for Schema.org." }
3288
+ }),
3289
+ {
3290
+ name: "dateCreated",
3291
+ title: "Date Created",
3292
+ type: "datetime",
3293
+ description: "When this profile page was created."
3294
+ },
3295
+ {
3296
+ name: "dateModified",
3297
+ title: "Date Modified",
3298
+ type: "datetime",
3299
+ description: "When this profile page was last modified."
3300
+ },
3301
+ {
3302
+ name: "mainEntity",
3303
+ title: "Profile (Person)",
3304
+ type: "object",
3305
+ jsonLdType: "Person",
3306
+ description: "The person who is the subject of this profile page.",
3307
+ fields: [
3308
+ {
3309
+ name: "name",
3310
+ title: "Full Name",
3311
+ type: "string",
3312
+ required: { key: "personNameRequired", message: "Person name is required." }
3313
+ },
3314
+ { name: "url", title: "Website URL", type: "url" },
3315
+ { name: "image", title: "Profile Image URL", type: "url" },
3316
+ { name: "description", title: "Bio", type: "text", rows: 3 },
3317
+ { name: "jobTitle", title: "Job Title", type: "string" },
3318
+ {
3319
+ name: "sameAs",
3320
+ title: "Same As URL",
3321
+ type: "url",
3322
+ description: "Social media URL (LinkedIn, Twitter, etc.)."
3323
+ }
3324
+ ]
3325
+ }
3326
+ ];
3327
+ function schemaOrgProfilePage(config = {}) {
3328
+ return generateSchemaType(
3329
+ {
3330
+ name: "schemaOrgProfilePage",
3331
+ title: "ProfilePage",
3332
+ icon: SchemaOrgIcons.profilePage,
3333
+ fields: profilePageFields,
3334
+ customPrepareSubtitle: (document) => {
3335
+ var _a;
3336
+ const personName = (_a = document.mainEntity) == null ? void 0 : _a.name;
3337
+ return personName ? `Profile: ${personName}` : "No profile set";
3338
+ }
3339
+ },
3340
+ config
3341
+ );
3342
+ }
3343
+
3344
+ // src/schema/recipe/schema.ts
3345
+ var recipeFields = [
3346
+ nameField({
3347
+ title: "Recipe Name",
3348
+ description: "The name of the recipe.",
3349
+ required: { key: "nameRequired", message: "Recipe name is required for Schema.org." }
3350
+ }),
3351
+ descriptionField({
3352
+ title: "Description",
3353
+ description: "A description of the recipe."
3354
+ }),
3355
+ polymorphicImage({ description: "Image of the finished recipe." }),
3356
+ polymorphicAuthor({ description: "The author of the recipe." }),
3357
+ {
3358
+ name: "totalTime",
3359
+ title: "Total Time",
3360
+ type: "string",
3361
+ description: "e.g. PT45M for 45 minutes"
3362
+ },
3363
+ {
3364
+ name: "recipeCategory",
3365
+ title: "Recipe Category",
3366
+ type: "string",
3367
+ description: "e.g. Dessert",
3368
+ options: [
3369
+ { title: "Appetizer", value: "Appetizer" },
3370
+ { title: "Main Course", value: "Main Course" },
3371
+ { title: "Dessert", value: "Dessert" },
3372
+ { title: "Side Dish", value: "Side Dish" },
3373
+ { title: "Snack", value: "Snack" },
3374
+ { title: "Breakfast", value: "Breakfast" },
3375
+ { title: "Beverage", value: "Beverage" }
3376
+ ]
3377
+ },
3378
+ {
3379
+ name: "recipeIngredient",
3380
+ title: "Ingredients",
3381
+ type: "array",
3382
+ description: "List of ingredients.",
3383
+ of: [{ type: "string" }]
3384
+ },
3385
+ {
3386
+ name: "recipeInstructions",
3387
+ title: "Instructions",
3388
+ type: "array",
3389
+ description: "Step-by-step instructions.",
3390
+ jsonLdType: "HowToStep",
3391
+ fields: [
3392
+ {
3393
+ name: "name",
3394
+ title: "Step Name",
3395
+ type: "string",
3396
+ description: "Name of this step."
3397
+ },
3398
+ {
3399
+ name: "text",
3400
+ title: "Step Text",
3401
+ type: "text",
3402
+ rows: 2,
3403
+ description: "Detailed instruction for this step."
3404
+ }
3405
+ ]
3406
+ }
3407
+ ];
3408
+ function schemaOrgRecipe(config = {}) {
3409
+ return generateSchemaType(
3410
+ {
3411
+ name: "schemaOrgRecipe",
3412
+ title: "Recipe",
3413
+ icon: SchemaOrgIcons.recipe,
3414
+ fields: recipeFields,
3415
+ customPrepareSubtitle: (document) => {
3416
+ const name = document.name || "Untitled";
3417
+ const category = document.recipeCategory ? ` \xB7 ${document.recipeCategory}` : "";
3418
+ return `${name}${category}`;
3419
+ }
3420
+ },
3421
+ config
3422
+ );
3423
+ }
3424
+
3425
+ // src/schema/restaurant/schema.ts
3426
+ var restaurantFields = [
3427
+ nameField({
3428
+ title: "Restaurant Name",
3429
+ description: "The name of the restaurant.",
3430
+ required: { key: "nameRequired", message: "Restaurant name is required." }
3431
+ }),
3432
+ descriptionField({
3433
+ title: "Description",
3434
+ description: "A description of the restaurant."
3435
+ }),
3436
+ polymorphicImage({ description: "Photo of the restaurant." }),
3437
+ {
3438
+ name: "servesCuisine",
3439
+ title: "Serves Cuisine",
3440
+ type: "string",
3441
+ description: 'The cuisine of the restaurant, e.g. "Italian", "Japanese".'
3442
+ },
3443
+ {
3444
+ name: "priceRange",
3445
+ title: "Price Range",
3446
+ type: "string",
3447
+ description: 'e.g. "$", "$$", "$$$", "$$$$".'
3448
+ },
3449
+ { name: "telephone", title: "Telephone", type: "string" },
3450
+ {
3451
+ name: "address",
3452
+ title: "Address",
3453
+ type: "object",
3454
+ jsonLdType: "PostalAddress",
3455
+ fields: [
3456
+ { name: "streetAddress", title: "Street Address", type: "string" },
3457
+ { name: "addressLocality", title: "City", type: "string" },
3458
+ { name: "addressRegion", title: "State/Region", type: "string" },
3459
+ { name: "postalCode", title: "Postal Code", type: "string" },
3460
+ { name: "addressCountry", title: "Country", type: "string" }
3461
+ ]
3462
+ }
3463
+ ];
3464
+ function schemaOrgRestaurant(config = {}) {
3465
+ return generateSchemaType(
3466
+ {
3467
+ name: "schemaOrgRestaurant",
3468
+ title: "Restaurant",
3469
+ icon: SchemaOrgIcons.restaurant,
3470
+ fields: restaurantFields,
3471
+ customPrepareSubtitle: (document) => {
3472
+ const name = document.name || "Untitled";
3473
+ const cuisine = document.servesCuisine ? ` \xB7 ${document.servesCuisine}` : "";
3474
+ const price = document.priceRange ? ` ${document.priceRange}` : "";
3475
+ return `${name}${cuisine}${price}`;
3476
+ }
3477
+ },
3478
+ config
3479
+ );
3480
+ }
3481
+
3482
+ // src/schema/review/schema.ts
3483
+ var reviewFields = [
3484
+ {
3485
+ name: "reviewRating",
3486
+ title: "Review Rating",
3487
+ type: "object",
3488
+ jsonLdType: "Rating",
3489
+ fields: [
3490
+ {
3491
+ name: "ratingValue",
3492
+ title: "Rating Value",
3493
+ type: "string",
3494
+ required: {
3495
+ key: "ratingValueRequired",
3496
+ message: "Rating value is required for Schema.org Review."
3497
+ }
3498
+ }
3499
+ ]
3500
+ },
3501
+ polymorphicAuthor({ description: "The author of the review (Person or Organization)." }),
3502
+ {
3503
+ name: "reviewBody",
3504
+ title: "Review Body",
3505
+ type: "text",
3506
+ rows: 3
3507
+ },
3508
+ {
3509
+ name: "itemReviewed",
3510
+ title: "Item Reviewed",
3511
+ type: "object",
3512
+ description: "The item that is being reviewed.",
3513
+ jsonLdType: "Thing",
3514
+ fields: [
3515
+ {
3516
+ name: "name",
3517
+ title: "Item Name",
3518
+ type: "string",
3519
+ description: "Name of the reviewed item."
3520
+ },
3521
+ {
3522
+ name: "url",
3523
+ title: "Item URL",
3524
+ type: "url",
3525
+ description: "URL of the reviewed item."
3526
+ }
3527
+ ]
3528
+ },
3529
+ polymorphicPublisher({ description: "The publisher of the review." })
3530
+ ];
3531
+ function schemaOrgReview(config = {}) {
3532
+ return generateSchemaType(
3533
+ {
3534
+ name: "schemaOrgReview",
3535
+ title: "Review",
3536
+ icon: SchemaOrgIcons.review,
3537
+ fields: reviewFields,
3538
+ customPrepareSubtitle: (document) => {
3539
+ var _a, _b;
3540
+ const item = ((_a = document.itemReviewed) == null ? void 0 : _a.name) || "Untitled item";
3541
+ const rating = ((_b = document.reviewRating) == null ? void 0 : _b.ratingValue) ? ` \xB7 ${document.reviewRating.ratingValue}\u2605` : "";
3542
+ return `${item}${rating}`;
3543
+ }
3544
+ },
3545
+ config
3546
+ );
3547
+ }
3548
+
3549
+ // src/schema/service/schema.ts
3550
+ var serviceFields = [
3551
+ nameField({
3552
+ title: "Service Name",
3553
+ description: "The name of the service.",
3554
+ required: { key: "nameRequired", message: "Service name is required for Schema.org." }
3555
+ }),
3556
+ {
3557
+ name: "serviceType",
3558
+ title: "Service Type",
3559
+ type: "string",
3560
+ description: "The type of service."
3561
+ },
3562
+ descriptionField({
3563
+ title: "Description",
3564
+ description: "A description of the service."
3565
+ }),
3566
+ {
3567
+ name: "url",
3568
+ title: "Service URL",
3569
+ type: "url",
3570
+ description: "URL of the service page."
3571
+ },
3572
+ {
3573
+ name: "provider",
3574
+ title: "Provider",
3575
+ type: "object",
3576
+ description: "The organization that provides the service.",
3577
+ jsonLdType: "Organization",
3578
+ fields: [
3579
+ {
3580
+ name: "name",
3581
+ title: "Provider Name",
3582
+ type: "string",
3583
+ description: "Name of the provider organization."
3584
+ },
3585
+ {
3586
+ name: "url",
3587
+ title: "Provider URL",
3588
+ type: "url",
3589
+ description: "URL of the provider organization."
3590
+ }
3591
+ ]
3592
+ },
3593
+ {
3594
+ name: "areaServed",
3595
+ title: "Area Served",
3596
+ type: "string",
3597
+ description: "The geographic area where the service is available."
3598
+ },
3599
+ {
3600
+ name: "hasOfferCatalog",
3601
+ title: "Offer Catalog",
3602
+ type: "object",
3603
+ description: "The catalog of offers for the service.",
3604
+ jsonLdType: "OfferCatalog",
3605
+ fields: [
3606
+ {
3607
+ name: "name",
3608
+ title: "Catalog Name",
3609
+ type: "string",
3610
+ description: "Name of the offer catalog."
3611
+ },
3612
+ {
3613
+ name: "itemListElement",
3614
+ title: "Offers",
3615
+ type: "array",
3616
+ description: "List of offers in the catalog.",
3617
+ jsonLdType: "Offer",
3618
+ fields: [
3619
+ {
3620
+ name: "name",
3621
+ title: "Offer Name",
3622
+ type: "string",
3623
+ description: "Name of the offer."
3624
+ }
3625
+ ]
3626
+ }
3627
+ ]
3628
+ }
3629
+ ];
3630
+ function schemaOrgService(config = {}) {
3631
+ return generateSchemaType(
3632
+ {
3633
+ name: "schemaOrgService",
3634
+ title: "Service",
3635
+ icon: SchemaOrgIcons.service,
3636
+ fields: serviceFields,
3637
+ customPrepareSubtitle: (document) => {
3638
+ var _a;
3639
+ const name = (_a = document.name) != null ? _a : "Untitled service";
3640
+ return document.serviceType ? `${name} \xB7 ${document.serviceType}` : name;
3641
+ }
3642
+ },
3643
+ config
3644
+ );
3645
+ }
3646
+
3647
+ // src/schema/socialMediaPosting/schema.ts
3648
+ var socialMediaPostingFields = [
3649
+ headlineField({
3650
+ required: { key: "headlineRequired", message: "Post headline is required for Schema.org." },
3651
+ description: "The headline of the post."
3652
+ }),
3653
+ {
3654
+ name: "description",
3655
+ title: "Description",
3656
+ type: "text",
3657
+ rows: 3,
3658
+ description: "A short description of the post."
3659
+ },
3660
+ polymorphicImage({ description: "Image for the post." }),
3661
+ polymorphicAuthor({ description: "The author of the post." }),
3662
+ polymorphicPublisher({ description: "The publisher of the post." }),
3663
+ datePublishedField({
3664
+ dateType: "datetime",
3665
+ description: "The date the post was published."
3666
+ }),
3667
+ {
3668
+ name: "dateModified",
3669
+ title: "Date Modified",
3670
+ type: "datetime",
3671
+ description: "The date the post was last modified."
3672
+ },
3673
+ {
3674
+ name: "sharedContent",
3675
+ title: "Shared Content",
3676
+ type: "array",
3677
+ description: "Content shared in the post.",
3678
+ jsonLdType: "WebPage",
3679
+ fields: [
3680
+ {
3681
+ name: "url",
3682
+ title: "Page URL",
3683
+ type: "url",
3684
+ description: "URL of the shared page."
3685
+ },
3686
+ {
3687
+ name: "headline",
3688
+ title: "Page Headline",
3689
+ type: "string",
3690
+ description: "Headline of the shared page."
3691
+ }
3692
+ ]
3693
+ }
3694
+ ];
3695
+ function schemaOrgSocialMediaPosting(config = {}) {
3696
+ return generateSchemaType(
3697
+ {
3698
+ name: "schemaOrgSocialMediaPosting",
3699
+ title: "SocialMediaPosting",
3700
+ icon: SchemaOrgIcons.socialMediaPosting,
3701
+ fields: socialMediaPostingFields,
3702
+ customPrepareSubtitle: (document) => document.headline || "Untitled post"
3703
+ },
3704
+ config
3705
+ );
3706
+ }
3707
+
3708
+ // src/schema/softwareApplication/schema.ts
3709
+ var softwareApplicationFields = [
3710
+ nameField({
3711
+ title: "Application Name",
3712
+ description: "The name of the software application.",
3713
+ required: { key: "nameRequired", message: "Application name is required for Schema.org." }
3714
+ }),
3715
+ {
3716
+ name: "applicationCategory",
3717
+ title: "Application Category",
3718
+ type: "string",
3719
+ description: "The category of the application.",
3720
+ options: [
3721
+ { title: "Developer Application", value: "DeveloperApplication" },
3722
+ { title: "Business Application", value: "BusinessApplication" },
3723
+ { title: "Game Application", value: "GameApplication" },
3724
+ { title: "Educational Application", value: "EducationalApplication" },
3725
+ { title: "Utilities Application", value: "UtilitiesApplication" },
3726
+ { title: "Social Networking Application", value: "SocialNetworkingApplication" }
3727
+ ]
3728
+ },
3729
+ {
3730
+ name: "operatingSystem",
3731
+ title: "Operating System",
3732
+ type: "string",
3733
+ description: 'The supported operating systems, e.g. "Windows, macOS".'
3734
+ },
3735
+ {
3736
+ name: "url",
3737
+ title: "Application URL",
3738
+ type: "url",
3739
+ description: "URL of the software application."
3740
+ }
3741
+ ];
3742
+ function schemaOrgSoftwareApplication(config = {}) {
3743
+ return generateSchemaType(
3744
+ {
3745
+ name: "schemaOrgSoftwareApplication",
3746
+ title: "SoftwareApplication",
3747
+ icon: SchemaOrgIcons.softwareApplication,
3748
+ fields: softwareApplicationFields,
3749
+ customPrepareSubtitle: (document) => {
3750
+ var _a;
3751
+ const name = (_a = document.name) != null ? _a : "Untitled application";
3752
+ return document.applicationCategory ? `${name} \xB7 ${document.applicationCategory}` : name;
3753
+ }
3754
+ },
3755
+ config
3756
+ );
3757
+ }
3758
+
3759
+ // src/schema/videoObject/schema.ts
3760
+ var videoObjectFields = [
3761
+ nameField({
3762
+ title: "Video Name",
3763
+ description: "The name of the video.",
3764
+ required: { key: "nameRequired", message: "Video name is required for Schema.org." }
3765
+ }),
3766
+ {
3767
+ name: "description",
3768
+ title: "Description",
3769
+ type: "text",
3770
+ rows: 3,
3771
+ description: "A description of the video."
3772
+ },
3773
+ {
3774
+ name: "thumbnailUrl",
3775
+ title: "Thumbnail URL",
3776
+ type: "url",
3777
+ description: "URL of the video thumbnail image.",
3778
+ required: { key: "thumbnailUrlRequired", message: "Thumbnail URL is required for Schema.org." },
3779
+ urlValidation: { schemes: ["http", "https"] }
3780
+ },
3781
+ {
3782
+ name: "uploadDate",
3783
+ title: "Upload Date",
3784
+ type: "date",
3785
+ description: "The date the video was uploaded.",
3786
+ required: { key: "uploadDateRequired", message: "Upload date is required for Schema.org." }
3787
+ },
3788
+ {
3789
+ name: "contentUrl",
3790
+ title: "Content URL",
3791
+ type: "url",
3792
+ description: "URL to the actual video file.",
3793
+ urlValidation: { schemes: ["http", "https"] }
3794
+ },
3795
+ {
3796
+ name: "duration",
3797
+ title: "Duration",
3798
+ type: "string",
3799
+ description: 'Video duration in ISO 8601 format, e.g. "PT1H30M" for 1 hour 30 minutes.'
3800
+ },
3801
+ polymorphicPublisher({ description: "The organization or person that published the video." })
3802
+ ];
3803
+ function schemaOrgVideoObject(config = {}) {
3804
+ return generateSchemaType(
3805
+ {
3806
+ name: "schemaOrgVideoObject",
3807
+ title: "VideoObject",
3808
+ icon: SchemaOrgIcons.videoObject,
3809
+ fields: videoObjectFields,
3810
+ customPrepareSubtitle: (document) => {
3811
+ const name = document.name || "Untitled video";
3812
+ const duration = document.duration ? ` \xB7 ${document.duration}` : "";
3813
+ return `${name}${duration}`;
3814
+ }
3815
+ },
3816
+ config
3817
+ );
3818
+ }
3819
+
3820
+ // src/schema/webApplication/schema.ts
3821
+ var webApplicationFields = [
3822
+ {
3823
+ name: "name",
3824
+ title: "Application Name",
3825
+ type: "string",
3826
+ description: "The name of the web application.",
3827
+ required: {
3828
+ key: "nameRequired",
3829
+ message: "Application name is required for Schema.org."
3830
+ }
3831
+ },
3832
+ {
3833
+ name: "url",
3834
+ title: "Application URL",
3835
+ type: "url",
3836
+ description: "URL of the web application.",
3837
+ required: { key: "urlRequired", message: "Application URL is required for Schema.org." }
3838
+ },
3839
+ {
3840
+ name: "applicationCategory",
3841
+ title: "Application Category",
3842
+ type: "string",
3843
+ description: "The category of the application.",
3844
+ options: [
3845
+ { title: "Developer Application", value: "DeveloperApplication" },
3846
+ { title: "Business Application", value: "BusinessApplication" },
3847
+ { title: "Game Application", value: "GameApplication" },
3848
+ { title: "Educational Application", value: "EducationalApplication" },
3849
+ { title: "Utilities Application", value: "UtilitiesApplication" },
3850
+ { title: "Social Networking Application", value: "SocialNetworkingApplication" }
3851
+ ]
3852
+ },
3853
+ {
3854
+ name: "operatingSystem",
3855
+ title: "Operating System",
3856
+ type: "string",
3857
+ description: "The supported operating systems.",
3858
+ initialValue: "All"
3859
+ }
3860
+ ];
3861
+ function schemaOrgWebApplication(config = {}) {
3862
+ return generateSchemaType(
3863
+ {
3864
+ name: "schemaOrgWebApplication",
3865
+ title: "WebApplication",
3866
+ icon: SchemaOrgIcons.webApplication,
3867
+ fields: webApplicationFields,
3868
+ customPrepareSubtitle: (document) => {
3869
+ var _a;
3870
+ const name = (_a = document.name) != null ? _a : "Untitled web app";
3871
+ return document.url ? `${name} \xB7 ${document.url}` : name;
3872
+ }
3873
+ },
3874
+ config
3875
+ );
3876
+ }
3877
+
3878
+ // src/schema/webPage/schema.ts
3879
+ var webPageFields = [
3880
+ nameField({
3881
+ title: "Page Name",
3882
+ description: "The title of the page.",
3883
+ required: { key: "nameRequired", message: "Page name is required for Schema.org." }
3884
+ }),
3885
+ urlField({
3886
+ title: "Page URL",
3887
+ description: "The full URL of the page.",
3888
+ required: { key: "urlRequired", message: "Page URL is required for Schema.org." }
3889
+ }),
3890
+ descriptionField({
3891
+ description: "A short description of the page."
3892
+ }),
3893
+ inLanguageField({ description: 'The language of the page content, e.g. "en".' }),
3894
+ polymorphicPublisher({ description: "The organization or person that published this page." }),
3895
+ licenseUrlField({
3896
+ description: "The URL of the license for this page, if applicable."
3897
+ })
3898
+ ];
3899
+ function schemaOrgWebPage(config = {}) {
3900
+ return generateSchemaType(
3901
+ {
3902
+ name: "schemaOrgWebPage",
3903
+ title: "WebPage",
3904
+ icon: SchemaOrgIcons.webPage,
3905
+ fields: webPageFields,
3906
+ customPrepareSubtitle: (document) => {
3907
+ const name = document.name || "Untitled page";
3908
+ const type = document.pageType ? ` \xB7 ${document.pageType}` : "";
3909
+ return `${name}${type}`;
3910
+ }
3911
+ },
3912
+ config
3913
+ );
3914
+ }
3915
+
3916
+ export { IETF_LANGUAGE_OPTIONS, SchemaOrgIcons, aggregateRatingFields, articleFields, blogPostingFields, bookFields, brandFields, breadcrumbListFields, buildGenericJsonLd, contactPointFields, countryFields, courseFields, datePublishedField, descriptionField, eventFields, faqPageFields, generateSchemaType, headlineField, howToFields, imageObjectFields, inLanguageField, issnField, itemListFields, jobPostingFields, legalServiceFields, localBusinessFields, movieFields, musicAlbumFields, musicRecordingFields, nameField, newsArticleFields, offerFields, personFields, placeFields, polymorphicAdditionalType, polymorphicArchivedAt, polymorphicAuthor, polymorphicCitation, polymorphicContentRating, polymorphicContributor, polymorphicCopyrightHolder, polymorphicCreator, polymorphicFunder, polymorphicGenre, polymorphicIdentifier, polymorphicImage, polymorphicIsBasedOn, polymorphicIsPartOf, polymorphicKeywords, polymorphicLicense, polymorphicLocationCreated, polymorphicMaintainer, polymorphicMaterial, polymorphicOwner, polymorphicPublisher, postalAddressFields, potentialActionSearch, productFields, profilePageFields, recipeFields, resolvePolymorphicPersonOrOrg, restaurantFields, reviewFields, schemaOrgAggregateRating, schemaOrgArticle, schemaOrgBlogPosting, schemaOrgBook, schemaOrgBrand, schemaOrgBreadcrumbList, schemaOrgContactPoint, schemaOrgCountry, schemaOrgCourse, schemaOrgEvent, schemaOrgFAQPage, schemaOrgHowTo, schemaOrgImageObject, schemaOrgItemList, schemaOrgJobPosting, schemaOrgLegalService, schemaOrgLocalBusiness, schemaOrgMovie, schemaOrgMusicAlbum, schemaOrgMusicRecording, schemaOrgNewsArticle, schemaOrgOffer, schemaOrgPerson, schemaOrgPlace, schemaOrgPostalAddress, schemaOrgProduct, schemaOrgProfilePage, schemaOrgRecipe, schemaOrgRestaurant, schemaOrgReview, schemaOrgService, schemaOrgSocialMediaPosting, schemaOrgSoftwareApplication, schemaOrgVideoObject, schemaOrgWebApplication, schemaOrgWebPage, serviceFields, socialMediaPostingFields, softwareApplicationFields, urlField, videoObjectFields, webApplicationFields, webPageFields, withCreativeWorkCommons, withThingCommons };
3917
+ //# sourceMappingURL=chunk-6NIHHOVS.js.map
3918
+ //# sourceMappingURL=chunk-6NIHHOVS.js.map