@janga/norna 0.7.2 → 0.7.3

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 (145) hide show
  1. package/README.md +16 -16
  2. package/bin/norna-cli.mjs +12 -7
  3. package/docs/README.md +10 -11
  4. package/docs/commands.md +8 -8
  5. package/docs/configuration.md +13 -145
  6. package/docs/content.md +17 -15
  7. package/docs/design/command-organization.md +55 -55
  8. package/docs/design/site-examples-structure.md +2 -2
  9. package/docs/engine-development.md +5 -5
  10. package/docs/getting-started.md +19 -26
  11. package/docs/images-and-metadata.md +1 -1
  12. package/docs/local-development.md +2 -2
  13. package/docs/publishing.md +1 -1
  14. package/docs/routes.md +2 -2
  15. package/docs/site-structure.md +8 -7
  16. package/docs/theme.md +149 -7
  17. package/docs/typography.md +47 -28
  18. package/examples/dog-gallery/.astro/collections/site.schema.json +802 -0
  19. package/examples/dog-gallery/.astro/collections/theme.schema.json +714 -0
  20. package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
  21. package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
  22. package/examples/dog-gallery/.astro/content.d.ts +175 -0
  23. package/examples/dog-gallery/.astro/data-store.json +1 -0
  24. package/examples/dog-gallery/.astro/dev-local.json +8 -0
  25. package/examples/dog-gallery/.astro/dev.json +13 -0
  26. package/examples/dog-gallery/.astro/dev.log +49 -0
  27. package/examples/dog-gallery/.astro/settings.json +5 -0
  28. package/examples/dog-gallery/.astro/types.d.ts +2 -0
  29. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
  30. package/examples/dog-gallery/dist/_astro/SitePage.BFHZm5UG.css +1 -0
  31. package/examples/dog-gallery/dist/dog-care/index.html +15 -0
  32. package/examples/dog-gallery/dist/favicon.svg +7 -0
  33. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  34. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  35. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  36. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  37. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  38. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  39. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  40. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  41. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  42. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  43. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  44. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  45. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  46. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  47. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  48. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  49. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  50. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  51. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  52. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  53. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  54. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  55. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  56. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  57. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  58. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  59. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  60. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  61. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  62. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  63. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  64. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  65. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  66. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  67. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  68. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  69. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  70. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  71. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  72. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  73. package/examples/dog-gallery/dist/index.html +43 -0
  74. package/examples/dog-gallery/dist/robots.txt +2 -0
  75. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
  76. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  77. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  78. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  79. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  80. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  81. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  82. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  83. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  84. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  85. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  86. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  87. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  88. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  89. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  90. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  91. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  92. package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
  93. package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  94. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  95. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  96. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  97. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  98. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  99. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  100. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  101. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  102. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  103. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  104. package/examples/dog-gallery/site/config.mjs +12 -42
  105. package/examples/dog-gallery/site/content.md +27 -5
  106. package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
  107. package/examples/dog-gallery/site/theme.md +85 -26
  108. package/fixtures/basic/site/config.mjs +2 -22
  109. package/fixtures/basic/site/content.md +1 -1
  110. package/fixtures/basic/site/theme.md +7 -3
  111. package/package.json +3 -3
  112. package/scripts/check-config.mjs +3 -3
  113. package/scripts/deploy-site.mjs +3 -3
  114. package/scripts/init-site.mjs +10 -8
  115. package/scripts/lib/frontmatter-yaml.mjs +85 -0
  116. package/scripts/lib/presentation.mjs +10 -11
  117. package/scripts/lib/project-config.mjs +91 -45
  118. package/scripts/lib/site-content.mjs +20 -2
  119. package/scripts/lib/theme-config.mjs +34 -0
  120. package/scripts/lib/typography.mjs +100 -20
  121. package/scripts/show-typography.mjs +58 -154
  122. package/scripts/sync-content-sections.mjs +6 -6
  123. package/scripts/test-content-check.mjs +3 -4
  124. package/scripts/test-engine-commands.mjs +2 -2
  125. package/scripts/test-package-check.mjs +17 -16
  126. package/scripts/test-temporary-visibility.mjs +2 -3
  127. package/src/components/SitePage.astro +2 -3
  128. package/src/components/SiteSection.astro +39 -5
  129. package/src/content.config.ts +60 -2
  130. package/src/layouts/BaseLayout.astro +17 -0
  131. package/src/styles/global.css +54 -50
  132. package/starters/basic/README.md +10 -15
  133. package/starters/basic/package.json +2 -2
  134. package/starters/basic/site/config.mjs +3 -24
  135. package/starters/basic/site/content.md +40 -7
  136. package/starters/basic/site/theme.md +110 -17
  137. package/starters/project/.github/workflows/deploy.yml +65 -0
  138. package/starters/project/README.md +72 -0
  139. package/starters/project/package-lock.json +4296 -0
  140. package/starters/project/package.json +35 -0
  141. package/starters/project/site/config.mjs +43 -0
  142. package/starters/project/site/content.md +88 -0
  143. package/starters/project/site/public/robots.txt +2 -0
  144. package/starters/project/site/routes/guide/route-content.md +58 -0
  145. package/starters/project/site/theme.md +15 -0
@@ -0,0 +1,802 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "title": {
6
+ "type": "string"
7
+ },
8
+ "description": {
9
+ "type": "string"
10
+ },
11
+ "slug": {
12
+ "type": "string",
13
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
14
+ },
15
+ "navigation": {
16
+ "type": "object",
17
+ "properties": {
18
+ "include": {
19
+ "type": "boolean"
20
+ },
21
+ "label": {
22
+ "type": "string"
23
+ },
24
+ "order": {
25
+ "type": "integer",
26
+ "minimum": -9007199254740991,
27
+ "maximum": 9007199254740991
28
+ }
29
+ },
30
+ "additionalProperties": false
31
+ },
32
+ "presentation": {
33
+ "type": "object",
34
+ "properties": {
35
+ "backgroundColor": {
36
+ "type": "string",
37
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
38
+ },
39
+ "textColor": {
40
+ "type": "string",
41
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
42
+ },
43
+ "typography": {
44
+ "type": "object",
45
+ "properties": {
46
+ "preset": {
47
+ "type": "string",
48
+ "enum": [
49
+ "quiet-gallery",
50
+ "compact-gallery",
51
+ "text-forward",
52
+ "statement"
53
+ ]
54
+ },
55
+ "overrides": {
56
+ "type": "object",
57
+ "properties": {
58
+ "headings": {
59
+ "type": "object",
60
+ "properties": {
61
+ "h1": {
62
+ "type": "object",
63
+ "properties": {
64
+ "align": {
65
+ "type": "object",
66
+ "properties": {
67
+ "desktop": {
68
+ "type": "string",
69
+ "enum": [
70
+ "left",
71
+ "center",
72
+ "right"
73
+ ]
74
+ },
75
+ "mobile": {
76
+ "type": "string",
77
+ "enum": [
78
+ "left",
79
+ "center",
80
+ "right"
81
+ ]
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+ "size": {
87
+ "type": "string",
88
+ "enum": [
89
+ "small",
90
+ "medium",
91
+ "large",
92
+ "xlarge"
93
+ ]
94
+ },
95
+ "lineHeight": {
96
+ "type": "number",
97
+ "minimum": 1,
98
+ "maximum": 3
99
+ },
100
+ "spacing": {
101
+ "type": "string",
102
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
103
+ }
104
+ },
105
+ "additionalProperties": false
106
+ },
107
+ "h2": {
108
+ "type": "object",
109
+ "properties": {
110
+ "align": {
111
+ "type": "object",
112
+ "properties": {
113
+ "desktop": {
114
+ "type": "string",
115
+ "enum": [
116
+ "left",
117
+ "center",
118
+ "right"
119
+ ]
120
+ },
121
+ "mobile": {
122
+ "type": "string",
123
+ "enum": [
124
+ "left",
125
+ "center",
126
+ "right"
127
+ ]
128
+ }
129
+ },
130
+ "additionalProperties": false
131
+ },
132
+ "size": {
133
+ "type": "string",
134
+ "enum": [
135
+ "small",
136
+ "medium",
137
+ "large",
138
+ "xlarge"
139
+ ]
140
+ },
141
+ "lineHeight": {
142
+ "type": "number",
143
+ "minimum": 1,
144
+ "maximum": 3
145
+ },
146
+ "spacing": {
147
+ "type": "string",
148
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
149
+ }
150
+ },
151
+ "additionalProperties": false
152
+ },
153
+ "h3": {
154
+ "type": "object",
155
+ "properties": {
156
+ "align": {
157
+ "type": "object",
158
+ "properties": {
159
+ "desktop": {
160
+ "type": "string",
161
+ "enum": [
162
+ "left",
163
+ "center",
164
+ "right"
165
+ ]
166
+ },
167
+ "mobile": {
168
+ "type": "string",
169
+ "enum": [
170
+ "left",
171
+ "center",
172
+ "right"
173
+ ]
174
+ }
175
+ },
176
+ "additionalProperties": false
177
+ },
178
+ "size": {
179
+ "type": "string",
180
+ "enum": [
181
+ "small",
182
+ "medium",
183
+ "large",
184
+ "xlarge"
185
+ ]
186
+ },
187
+ "lineHeight": {
188
+ "type": "number",
189
+ "minimum": 1,
190
+ "maximum": 3
191
+ },
192
+ "spacing": {
193
+ "type": "string",
194
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
195
+ }
196
+ },
197
+ "additionalProperties": false
198
+ },
199
+ "h4": {
200
+ "type": "object",
201
+ "properties": {
202
+ "align": {
203
+ "type": "object",
204
+ "properties": {
205
+ "desktop": {
206
+ "type": "string",
207
+ "enum": [
208
+ "left",
209
+ "center",
210
+ "right"
211
+ ]
212
+ },
213
+ "mobile": {
214
+ "type": "string",
215
+ "enum": [
216
+ "left",
217
+ "center",
218
+ "right"
219
+ ]
220
+ }
221
+ },
222
+ "additionalProperties": false
223
+ },
224
+ "size": {
225
+ "type": "string",
226
+ "enum": [
227
+ "small",
228
+ "medium",
229
+ "large",
230
+ "xlarge"
231
+ ]
232
+ },
233
+ "lineHeight": {
234
+ "type": "number",
235
+ "minimum": 1,
236
+ "maximum": 3
237
+ },
238
+ "spacing": {
239
+ "type": "string",
240
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
241
+ }
242
+ },
243
+ "additionalProperties": false
244
+ }
245
+ },
246
+ "additionalProperties": false
247
+ },
248
+ "body": {
249
+ "type": "object",
250
+ "properties": {
251
+ "align": {
252
+ "type": "object",
253
+ "properties": {
254
+ "desktop": {
255
+ "type": "string",
256
+ "enum": [
257
+ "left",
258
+ "center",
259
+ "right"
260
+ ]
261
+ },
262
+ "mobile": {
263
+ "type": "string",
264
+ "enum": [
265
+ "left",
266
+ "center",
267
+ "right"
268
+ ]
269
+ }
270
+ },
271
+ "additionalProperties": false
272
+ },
273
+ "size": {
274
+ "type": "string",
275
+ "enum": [
276
+ "small",
277
+ "medium",
278
+ "large",
279
+ "xlarge"
280
+ ]
281
+ },
282
+ "lineHeight": {
283
+ "type": "number",
284
+ "minimum": 1,
285
+ "maximum": 3
286
+ },
287
+ "paragraphSpacing": {
288
+ "type": "string",
289
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
290
+ }
291
+ },
292
+ "additionalProperties": false
293
+ },
294
+ "caption": {
295
+ "type": "object",
296
+ "properties": {
297
+ "align": {
298
+ "type": "object",
299
+ "properties": {
300
+ "desktop": {
301
+ "type": "string",
302
+ "enum": [
303
+ "left",
304
+ "center",
305
+ "right"
306
+ ]
307
+ },
308
+ "mobile": {
309
+ "type": "string",
310
+ "enum": [
311
+ "left",
312
+ "center",
313
+ "right"
314
+ ]
315
+ }
316
+ },
317
+ "additionalProperties": false
318
+ },
319
+ "size": {
320
+ "type": "string",
321
+ "enum": [
322
+ "small",
323
+ "medium",
324
+ "large",
325
+ "xlarge"
326
+ ]
327
+ },
328
+ "lineHeight": {
329
+ "type": "number",
330
+ "minimum": 1,
331
+ "maximum": 3
332
+ },
333
+ "spacing": {
334
+ "type": "string",
335
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
336
+ }
337
+ },
338
+ "additionalProperties": false
339
+ }
340
+ },
341
+ "additionalProperties": false
342
+ }
343
+ },
344
+ "additionalProperties": false
345
+ }
346
+ },
347
+ "additionalProperties": false
348
+ },
349
+ "frame": {
350
+ "type": "object",
351
+ "properties": {
352
+ "colors": {
353
+ "anyOf": [
354
+ {
355
+ "type": "string",
356
+ "enum": [
357
+ "theme",
358
+ "presentation"
359
+ ]
360
+ },
361
+ {
362
+ "type": "object",
363
+ "properties": {
364
+ "backgroundColor": {
365
+ "type": "string",
366
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
367
+ },
368
+ "textColor": {
369
+ "type": "string",
370
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
371
+ }
372
+ },
373
+ "required": [
374
+ "backgroundColor",
375
+ "textColor"
376
+ ],
377
+ "additionalProperties": false
378
+ }
379
+ ]
380
+ }
381
+ },
382
+ "additionalProperties": false
383
+ },
384
+ "sections": {
385
+ "minItems": 1,
386
+ "type": "array",
387
+ "items": {
388
+ "type": "object",
389
+ "properties": {
390
+ "id": {
391
+ "type": "string",
392
+ "pattern": "^[a-z0-9-]+$"
393
+ },
394
+ "visible": {
395
+ "type": "object",
396
+ "properties": {
397
+ "from": {
398
+ "type": "string",
399
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
400
+ },
401
+ "until": {
402
+ "type": "string",
403
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
404
+ }
405
+ },
406
+ "additionalProperties": false
407
+ },
408
+ "presentation": {
409
+ "type": "object",
410
+ "properties": {
411
+ "backgroundColor": {
412
+ "type": "string",
413
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
414
+ },
415
+ "textColor": {
416
+ "type": "string",
417
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
418
+ },
419
+ "typography": {
420
+ "type": "object",
421
+ "properties": {
422
+ "preset": {
423
+ "type": "string",
424
+ "enum": [
425
+ "quiet-gallery",
426
+ "compact-gallery",
427
+ "text-forward",
428
+ "statement"
429
+ ]
430
+ },
431
+ "overrides": {
432
+ "type": "object",
433
+ "properties": {
434
+ "headings": {
435
+ "type": "object",
436
+ "properties": {
437
+ "h1": {
438
+ "type": "object",
439
+ "properties": {
440
+ "align": {
441
+ "type": "object",
442
+ "properties": {
443
+ "desktop": {
444
+ "type": "string",
445
+ "enum": [
446
+ "left",
447
+ "center",
448
+ "right"
449
+ ]
450
+ },
451
+ "mobile": {
452
+ "type": "string",
453
+ "enum": [
454
+ "left",
455
+ "center",
456
+ "right"
457
+ ]
458
+ }
459
+ },
460
+ "additionalProperties": false
461
+ },
462
+ "size": {
463
+ "type": "string",
464
+ "enum": [
465
+ "small",
466
+ "medium",
467
+ "large",
468
+ "xlarge"
469
+ ]
470
+ },
471
+ "lineHeight": {
472
+ "type": "number",
473
+ "minimum": 1,
474
+ "maximum": 3
475
+ },
476
+ "spacing": {
477
+ "type": "string",
478
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
479
+ }
480
+ },
481
+ "additionalProperties": false
482
+ },
483
+ "h2": {
484
+ "type": "object",
485
+ "properties": {
486
+ "align": {
487
+ "type": "object",
488
+ "properties": {
489
+ "desktop": {
490
+ "type": "string",
491
+ "enum": [
492
+ "left",
493
+ "center",
494
+ "right"
495
+ ]
496
+ },
497
+ "mobile": {
498
+ "type": "string",
499
+ "enum": [
500
+ "left",
501
+ "center",
502
+ "right"
503
+ ]
504
+ }
505
+ },
506
+ "additionalProperties": false
507
+ },
508
+ "size": {
509
+ "type": "string",
510
+ "enum": [
511
+ "small",
512
+ "medium",
513
+ "large",
514
+ "xlarge"
515
+ ]
516
+ },
517
+ "lineHeight": {
518
+ "type": "number",
519
+ "minimum": 1,
520
+ "maximum": 3
521
+ },
522
+ "spacing": {
523
+ "type": "string",
524
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
525
+ }
526
+ },
527
+ "additionalProperties": false
528
+ },
529
+ "h3": {
530
+ "type": "object",
531
+ "properties": {
532
+ "align": {
533
+ "type": "object",
534
+ "properties": {
535
+ "desktop": {
536
+ "type": "string",
537
+ "enum": [
538
+ "left",
539
+ "center",
540
+ "right"
541
+ ]
542
+ },
543
+ "mobile": {
544
+ "type": "string",
545
+ "enum": [
546
+ "left",
547
+ "center",
548
+ "right"
549
+ ]
550
+ }
551
+ },
552
+ "additionalProperties": false
553
+ },
554
+ "size": {
555
+ "type": "string",
556
+ "enum": [
557
+ "small",
558
+ "medium",
559
+ "large",
560
+ "xlarge"
561
+ ]
562
+ },
563
+ "lineHeight": {
564
+ "type": "number",
565
+ "minimum": 1,
566
+ "maximum": 3
567
+ },
568
+ "spacing": {
569
+ "type": "string",
570
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
571
+ }
572
+ },
573
+ "additionalProperties": false
574
+ },
575
+ "h4": {
576
+ "type": "object",
577
+ "properties": {
578
+ "align": {
579
+ "type": "object",
580
+ "properties": {
581
+ "desktop": {
582
+ "type": "string",
583
+ "enum": [
584
+ "left",
585
+ "center",
586
+ "right"
587
+ ]
588
+ },
589
+ "mobile": {
590
+ "type": "string",
591
+ "enum": [
592
+ "left",
593
+ "center",
594
+ "right"
595
+ ]
596
+ }
597
+ },
598
+ "additionalProperties": false
599
+ },
600
+ "size": {
601
+ "type": "string",
602
+ "enum": [
603
+ "small",
604
+ "medium",
605
+ "large",
606
+ "xlarge"
607
+ ]
608
+ },
609
+ "lineHeight": {
610
+ "type": "number",
611
+ "minimum": 1,
612
+ "maximum": 3
613
+ },
614
+ "spacing": {
615
+ "type": "string",
616
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
617
+ }
618
+ },
619
+ "additionalProperties": false
620
+ }
621
+ },
622
+ "additionalProperties": false
623
+ },
624
+ "body": {
625
+ "type": "object",
626
+ "properties": {
627
+ "align": {
628
+ "type": "object",
629
+ "properties": {
630
+ "desktop": {
631
+ "type": "string",
632
+ "enum": [
633
+ "left",
634
+ "center",
635
+ "right"
636
+ ]
637
+ },
638
+ "mobile": {
639
+ "type": "string",
640
+ "enum": [
641
+ "left",
642
+ "center",
643
+ "right"
644
+ ]
645
+ }
646
+ },
647
+ "additionalProperties": false
648
+ },
649
+ "size": {
650
+ "type": "string",
651
+ "enum": [
652
+ "small",
653
+ "medium",
654
+ "large",
655
+ "xlarge"
656
+ ]
657
+ },
658
+ "lineHeight": {
659
+ "type": "number",
660
+ "minimum": 1,
661
+ "maximum": 3
662
+ },
663
+ "paragraphSpacing": {
664
+ "type": "string",
665
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
666
+ }
667
+ },
668
+ "additionalProperties": false
669
+ },
670
+ "caption": {
671
+ "type": "object",
672
+ "properties": {
673
+ "align": {
674
+ "type": "object",
675
+ "properties": {
676
+ "desktop": {
677
+ "type": "string",
678
+ "enum": [
679
+ "left",
680
+ "center",
681
+ "right"
682
+ ]
683
+ },
684
+ "mobile": {
685
+ "type": "string",
686
+ "enum": [
687
+ "left",
688
+ "center",
689
+ "right"
690
+ ]
691
+ }
692
+ },
693
+ "additionalProperties": false
694
+ },
695
+ "size": {
696
+ "type": "string",
697
+ "enum": [
698
+ "small",
699
+ "medium",
700
+ "large",
701
+ "xlarge"
702
+ ]
703
+ },
704
+ "lineHeight": {
705
+ "type": "number",
706
+ "minimum": 1,
707
+ "maximum": 3
708
+ },
709
+ "spacing": {
710
+ "type": "string",
711
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
712
+ }
713
+ },
714
+ "additionalProperties": false
715
+ }
716
+ },
717
+ "additionalProperties": false
718
+ }
719
+ },
720
+ "additionalProperties": false
721
+ }
722
+ },
723
+ "additionalProperties": false
724
+ },
725
+ "gallery": {
726
+ "default": [],
727
+ "type": "array",
728
+ "items": {
729
+ "anyOf": [
730
+ {
731
+ "type": "object",
732
+ "properties": {
733
+ "image": {
734
+ "type": "string",
735
+ "pattern": "^[a-z0-9][a-z0-9.-]*\\.(jpe?g|png)$"
736
+ },
737
+ "alt": {
738
+ "type": "string"
739
+ },
740
+ "caption": {
741
+ "type": "string"
742
+ }
743
+ },
744
+ "required": [
745
+ "image",
746
+ "alt"
747
+ ],
748
+ "additionalProperties": false
749
+ },
750
+ {
751
+ "type": "object",
752
+ "properties": {
753
+ "carousel": {
754
+ "minItems": 2,
755
+ "type": "array",
756
+ "items": {
757
+ "type": "object",
758
+ "properties": {
759
+ "image": {
760
+ "type": "string",
761
+ "pattern": "^[a-z0-9][a-z0-9.-]*\\.(jpe?g|png)$"
762
+ },
763
+ "alt": {
764
+ "type": "string"
765
+ },
766
+ "caption": {
767
+ "type": "string"
768
+ }
769
+ },
770
+ "required": [
771
+ "image",
772
+ "alt"
773
+ ],
774
+ "additionalProperties": false
775
+ }
776
+ }
777
+ },
778
+ "required": [
779
+ "carousel"
780
+ ],
781
+ "additionalProperties": false
782
+ }
783
+ ]
784
+ }
785
+ }
786
+ },
787
+ "required": [
788
+ "id"
789
+ ],
790
+ "additionalProperties": false
791
+ }
792
+ },
793
+ "$schema": {
794
+ "type": "string"
795
+ }
796
+ },
797
+ "required": [
798
+ "title",
799
+ "description",
800
+ "sections"
801
+ ]
802
+ }