@janga/norna 0.7.16 → 0.7.17

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 (200) hide show
  1. package/README.md +6 -6
  2. package/astro.config.mjs +35 -3
  3. package/docs/README.md +10 -10
  4. package/docs/commands.md +2 -2
  5. package/docs/content.md +82 -102
  6. package/docs/design/navigation-and-theme-plan.md +115 -0
  7. package/docs/design/norna-diagram-design.md +9 -9
  8. package/docs/design/site-examples-structure.md +9 -9
  9. package/docs/engine-development.md +9 -9
  10. package/docs/getting-started.md +20 -15
  11. package/docs/images-and-metadata.md +10 -9
  12. package/docs/pages.md +134 -0
  13. package/docs/public-files.md +49 -36
  14. package/docs/publishing.md +19 -3
  15. package/docs/site-files.md +29 -28
  16. package/docs/sitewide-content.md +20 -36
  17. package/docs/theme.md +20 -20
  18. package/docs/typography.md +10 -10
  19. package/examples/README.md +2 -2
  20. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +17 -41
  21. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +26 -67
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +185 -88
  23. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
  24. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +4 -4
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +5 -5
  26. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +33 -23
  27. package/examples/complete-sites/dog-shelter-multi-page/README.md +1 -1
  28. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +8 -8
  29. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +20 -20
  30. package/examples/complete-sites/dog-shelter-multi-page/site/content.md +3 -4
  31. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/010-dogs/content.md +3 -4
  32. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/020-adopt/content.md +3 -4
  33. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +2 -4
  34. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +17 -41
  35. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +26 -67
  36. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +185 -88
  37. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -1
  38. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +8 -0
  39. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +5 -5
  40. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +16 -12
  41. package/examples/complete-sites/dog-shelter-single-page/README.md +1 -1
  42. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +8 -8
  43. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +12 -12
  44. package/examples/complete-sites/dog-shelter-single-page/site/content.md +5 -2
  45. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +2 -4
  46. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +17 -41
  47. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +26 -67
  48. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +185 -88
  49. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
  50. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +4 -14
  51. package/examples/feature-demos/media-and-surfaces/README.md +2 -2
  52. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +9 -9
  53. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +16 -16
  54. package/examples/feature-demos/media-and-surfaces/site/content.md +4 -7
  55. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/010-media/content.md +6 -5
  56. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/020-surfaces/content.md +7 -6
  57. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  58. package/examples/feature-demos/sitewide-content/README.md +3 -3
  59. package/examples/feature-demos/sitewide-content/site/content.md +8 -7
  60. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +17 -0
  61. package/examples/feature-demos/sitewide-content/site/{routes → pages}/020-notices/content.md +7 -6
  62. package/examples/feature-demos/sitewide-content/site/{routes → pages}/030-footer/content.md +6 -5
  63. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +4 -13
  64. package/examples/feature-demos/theme-presets/README.md +1 -1
  65. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +60 -60
  66. package/examples/feature-demos/theme-presets/site/content.md +4 -7
  67. package/examples/feature-demos/theme-presets/site/{routes → pages}/010-portfolio/content.md +4 -7
  68. package/examples/feature-demos/theme-presets/site/{routes → pages}/020-documentation/content.md +4 -7
  69. package/examples/feature-demos/theme-presets/site/{routes → pages}/030-project/content.md +4 -7
  70. package/examples/feature-demos/theme-presets/site/{routes → pages}/040-statement/content.md +4 -7
  71. package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +1 -10
  72. package/fixtures/basic/site/content.md +5 -6
  73. package/fixtures/basic/site/sitewide-content.yaml +1 -8
  74. package/fixtures/content-model-v2/site/content.md +11 -13
  75. package/fixtures/content-model-v2/site/pages/010-guide/content.md +18 -0
  76. package/fixtures/nested-pages/site/.norna/generated-images.json +10 -0
  77. package/fixtures/nested-pages/site/config.yaml +1 -0
  78. package/fixtures/nested-pages/site/content.md +15 -0
  79. package/fixtures/nested-pages/site/pages/010-guides/content.md +15 -0
  80. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +21 -0
  81. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +21 -0
  82. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +14 -0
  83. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +11 -0
  84. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +3 -0
  85. package/fixtures/nested-pages/site/pages/020-reference/content.md +10 -0
  86. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +11 -0
  87. package/fixtures/nested-pages/site/theme.yaml +3 -0
  88. package/package.json +7 -4
  89. package/schemas/config.schema.json +5 -5
  90. package/schemas/content-frontmatter.schema.json +28 -63
  91. package/schemas/manifest.json +1 -0
  92. package/schemas/sitewide-content.schema.json +58 -132
  93. package/schemas/theme.schema.json +396 -86
  94. package/scripts/check-config.mjs +6 -5
  95. package/scripts/deploy-site.mjs +6 -8
  96. package/scripts/doctor.mjs +2 -2
  97. package/scripts/generate-images.mjs +11 -18
  98. package/scripts/generate-schemas.mjs +3 -217
  99. package/scripts/lib/base-path-redirect.mjs +9 -0
  100. package/scripts/lib/editor-language-service.mjs +126 -66
  101. package/scripts/lib/heading-ids.mjs +161 -0
  102. package/scripts/lib/navigation-model.mjs +51 -0
  103. package/scripts/lib/norna-markdown-blocks.mjs +3 -4
  104. package/scripts/lib/page-model.mjs +83 -0
  105. package/scripts/lib/project-config.mjs +28 -0
  106. package/scripts/lib/schema-definitions.mjs +41 -46
  107. package/scripts/lib/schema-editor-metadata.mjs +475 -0
  108. package/scripts/lib/schema-value-definitions.mjs +6 -6
  109. package/scripts/lib/site-content.mjs +124 -87
  110. package/scripts/lib/site-paths.mjs +2 -2
  111. package/scripts/lib/theme-config.mjs +9 -16
  112. package/scripts/lib/theme-presets.mjs +9 -1
  113. package/scripts/release.mjs +1 -1
  114. package/scripts/show-typography.mjs +26 -20
  115. package/scripts/sync-content-sections.mjs +106 -65
  116. package/scripts/{test-temporary-visibility.mjs → test-banner-visibility.mjs} +7 -24
  117. package/scripts/test-client-javascript.mjs +39 -42
  118. package/scripts/test-content-check.mjs +138 -54
  119. package/scripts/test-content-model-v2.mjs +445 -228
  120. package/scripts/test-documentation.mjs +6 -1
  121. package/scripts/test-editor-language-service.mjs +168 -24
  122. package/scripts/test-engine-commands.mjs +2 -1
  123. package/scripts/test-heading-ids.mjs +68 -0
  124. package/scripts/test-navigation-model.mjs +63 -0
  125. package/scripts/test-nested-pages.mjs +110 -0
  126. package/scripts/test-package-check.mjs +31 -40
  127. package/scripts/test-page-model.mjs +80 -0
  128. package/scripts/test-project-config.mjs +25 -1
  129. package/scripts/test-schemas.mjs +66 -14
  130. package/scripts/test-theme-presets.mjs +33 -24
  131. package/src/components/NavigationPageTree.astro +68 -0
  132. package/src/components/SectionNavigationScript.astro +110 -5
  133. package/src/components/SiteBreadcrumbs.astro +29 -0
  134. package/src/components/SiteNavigation.astro +65 -69
  135. package/src/components/SitePage.astro +70 -46
  136. package/src/components/SiteSection.astro +27 -20
  137. package/src/content.config.ts +9 -5
  138. package/src/layouts/BaseLayout.astro +11 -20
  139. package/src/lib/pageThemes.ts +42 -0
  140. package/src/lib/sectionContent.ts +109 -106
  141. package/src/lib/siteNavigation.ts +48 -0
  142. package/src/lib/sitePages.ts +85 -38
  143. package/src/pages/{[slug].astro → [...slug].astro} +2 -2
  144. package/src/styles/global.css +373 -55
  145. package/starters/basic/README.md +5 -7
  146. package/starters/basic/site/content.md +7 -4
  147. package/starters/basic/site/sitewide-content.yaml +1 -10
  148. package/starters/project/README.md +8 -8
  149. package/starters/project/site/content.md +5 -4
  150. package/starters/project/site/{routes → pages}/010-guide/content.md +5 -4
  151. package/starters/project/site/sitewide-content.yaml +1 -10
  152. package/docs/routes.md +0 -121
  153. package/examples/feature-demos/sitewide-content/site/routes/010-identity/content.md +0 -20
  154. package/fixtures/content-model-v2/site/routes/010-guide/content.md +0 -17
  155. package/scripts/lib/route-model.mjs +0 -17
  156. package/scripts/test-route-model.mjs +0 -32
  157. package/src/lib/routeThemes.ts +0 -41
  158. /package/examples/complete-sites/dog-shelter-multi-page/site/images/{intro/shelter-dog.jpg → shelter-dog.jpg} +0 -0
  159. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rex.jpg +0 -0
  160. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rover.jpg +0 -0
  161. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/020-adopt/images/adopt → pages/020-adopt/images}/adoption-dog.jpg +0 -0
  162. /package/examples/complete-sites/dog-shelter-single-page/site/images/{you-can-help/foster-dog.jpg → foster-dog.jpg} +0 -0
  163. /package/examples/complete-sites/dog-shelter-single-page/site/images/{what-we-do/rescue-dog.jpg → rescue-dog.jpg} +0 -0
  164. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-carousel.svg +0 -0
  165. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-stack.svg +0 -0
  166. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-surfaces.svg +0 -0
  167. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-one.svg +0 -0
  168. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-three.svg +0 -0
  169. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-two.svg +0 -0
  170. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-one.svg +0 -0
  171. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-two.svg +0 -0
  172. /package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/020-surfaces/theme.yaml +0 -0
  173. /package/examples/feature-demos/theme-presets/site/{routes/010-portfolio/images/portfolio → pages/010-portfolio/images}/puppy-portrait.jpg +0 -0
  174. /package/examples/feature-demos/theme-presets/site/{routes/010-portfolio/images/portfolio → pages/010-portfolio/images}/shepherd-portrait.jpg +0 -0
  175. /package/examples/feature-demos/theme-presets/site/{routes/010-portfolio/images/portfolio → pages/010-portfolio/images}/white-puppy.jpg +0 -0
  176. /package/examples/feature-demos/theme-presets/site/{routes → pages}/010-portfolio/theme.yaml +0 -0
  177. /package/examples/feature-demos/theme-presets/site/{routes/020-documentation/images/documentation → pages/020-documentation/images}/black-schnauzer.jpg +0 -0
  178. /package/examples/feature-demos/theme-presets/site/{routes/020-documentation/images/documentation → pages/020-documentation/images}/retriever-portrait.jpg +0 -0
  179. /package/examples/feature-demos/theme-presets/site/{routes/020-documentation/images/documentation → pages/020-documentation/images}/schnauzer-portrait.jpg +0 -0
  180. /package/examples/feature-demos/theme-presets/site/{routes → pages}/020-documentation/theme.yaml +0 -0
  181. /package/examples/feature-demos/theme-presets/site/{routes/030-project/images/project → pages/030-project/images}/boxer-portrait.jpg +0 -0
  182. /package/examples/feature-demos/theme-presets/site/{routes/030-project/images/project → pages/030-project/images}/grass-puppy.jpg +0 -0
  183. /package/examples/feature-demos/theme-presets/site/{routes/030-project/images/project → pages/030-project/images}/grey-street-dog.jpg +0 -0
  184. /package/examples/feature-demos/theme-presets/site/{routes → pages}/030-project/theme.yaml +0 -0
  185. /package/examples/feature-demos/theme-presets/site/{routes/040-statement/images/statement → pages/040-statement/images}/black-pedigree.jpg +0 -0
  186. /package/examples/feature-demos/theme-presets/site/{routes/040-statement/images/statement → pages/040-statement/images}/sheepdog-grass.jpg +0 -0
  187. /package/examples/feature-demos/theme-presets/site/{routes/040-statement/images/statement → pages/040-statement/images}/sheepdog-wide.jpg +0 -0
  188. /package/examples/feature-demos/theme-presets/site/{routes → pages}/040-statement/theme.yaml +0 -0
  189. /package/fixtures/basic/site/images/{work/.gitkeep → .gitkeep} +0 -0
  190. /package/fixtures/content-model-v2/site/images/{card-section/adopt.svg → adopt.svg} +0 -0
  191. /package/fixtures/content-model-v2/site/images/{intro/detail.jpg → detail.jpg} +0 -0
  192. /package/fixtures/content-model-v2/site/images/{intro/duplicate.jpg → duplicate.jpg} +0 -0
  193. /package/fixtures/content-model-v2/site/images/{card-section/foster.svg → foster.svg} +0 -0
  194. /package/fixtures/content-model-v2/site/images/{intro/hero.jpg → hero.jpg} +0 -0
  195. /package/fixtures/content-model-v2/site/images/{plain/image.jpg → image.jpg} +0 -0
  196. /package/fixtures/content-model-v2/site/images/{timed/slide-one.jpg → slide-one.jpg} +0 -0
  197. /package/fixtures/content-model-v2/site/images/{timed/slide-three.jpg → slide-three.jpg} +0 -0
  198. /package/fixtures/content-model-v2/site/images/{timed/slide-two.jpg → slide-two.jpg} +0 -0
  199. /package/fixtures/content-model-v2/site/{routes/010-guide/images/intro → pages/010-guide/images}/duplicate.jpg +0 -0
  200. /package/starters/basic/site/images/{work/.gitkeep → .gitkeep} +0 -0
@@ -1 +1 @@
1
- [["Map",1,2,9,10,35,36,61,62],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":\"jsx\",\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":\"127.0.0.1\",\"port\":4411,\"allowedHosts\":[\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\"]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"satteri\",\"options\":{\"mdastPlugins\":[],\"hastPlugins\":[],\"features\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fetchFile\":\"fetch\",\"logger\":{\"entrypoint\":\"astro/logger/json\"},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"collectionStorage\":\"single-file\"},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","7.1.3","content-config-digest","ef24ddbc7d731e37","site",["Map",11,12],"site-content",{"id":11,"data":13,"body":17,"filePath":18,"digest":19,"rendered":20},{"title":14,"description":15,"sections":16},"Home","A single-page dog shelter website built with Norna.",{},"## What we do {#what-we-do}\n\nWe rescue dogs, give them time to recover and find homes that suit their needs.\n\n```norna-card-list\nlayout: image-right\nflow: stack\nsize: s\nwidth: narrow\n\n- title: A safe place to start again\n text: Each dog gets care, calm routines and an individual plan before adoption.\n image: rescue-dog.jpg\n```\n\n## You can help {#you-can-help}\n\nAdopt, foster or support the everyday work at the shelter.\n\n```norna-card-list\nlayout: image-left\nflow: stack\nsize: s\nwidth: narrow\n\n- title: Make room for one more dog\n text: A foster home gives a dog stability and gives the shelter space for another rescue.\n image: foster-dog.jpg\n```","site/content.md","5b2020a287bde275",{"html":21,"metadata":22},"\u003Ch2 id=\"what-we-do-what-we-do\">What we do {#what-we-do}\u003C/h2>\n\u003Cp>We rescue dogs, give them time to recover and find homes that suit their needs.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>layout: image-right\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>flow: stack\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>size: s\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>width: narrow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- title: A safe place to start again\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> text: Each dog gets care, calm routines and an individual plan before adoption.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> image: rescue-dog.jpg\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"you-can-help-you-can-help\">You can help {#you-can-help}\u003C/h2>\n\u003Cp>Adopt, foster or support the everyday work at the shelter.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>layout: image-left\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>flow: stack\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>size: s\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>width: narrow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- title: Make room for one more dog\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> text: A foster home gives a dog stability and gives the shelter space for another rescue.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> image: foster-dog.jpg\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":23,"localImagePaths":31,"remoteImagePaths":32,"frontmatter":33,"imagePaths":34},[24,28],{"depth":25,"slug":26,"text":27},2,"what-we-do-what-we-do","What we do {#what-we-do}",{"depth":25,"slug":29,"text":30},"you-can-help-you-can-help","You can help {#you-can-help}",[],[],{"title":14,"description":15},[],"sitewide",["Map",37,38],"site-sitewide",{"id":37,"data":39,"body":47,"filePath":48,"digest":49,"rendered":50},{"navigation":40,"banners":44,"footer":45},{"logo":41},{"alt":42,"height":43},"Dog Shelter","3rem",[],{"copyrightMessage":46},"Dog Shelter example site. Dog photos by Bicanski, CC0, via Pixnio.","\u003C!-- norna-image-provenance:\nimage: logo.svg\nsource: AI-assisted, hand-authored SVG\nprompt: Create a compact horizontal dog shelter logo with a simple dog face in\na house-shaped mark and the words Dog Shelter. Use flat vector shapes, a warm\nred accent, dark text, transparent background and no external assets.\n-->","site/sitewide-content.md","68de962e675a456b",{"html":51,"metadata":52},"\u003C!-- norna-image-provenance:\nimage: logo.svg\nsource: AI-assisted, hand-authored SVG\nprompt: Create a compact horizontal dog shelter logo with a simple dog face in\na house-shaped mark and the words Dog Shelter. Use flat vector shapes, a warm\nred accent, dark text, transparent background and no external assets.\n-->\n",{"headings":53,"localImagePaths":54,"remoteImagePaths":55,"frontmatter":56,"imagePaths":60},[],[],[],{"navigation":57,"footer":59},{"logo":58},{"alt":42,"height":43},{"copyrightMessage":46},[],"theme",["Map",63,64],"theme.md",{"id":63,"data":65,"filePath":67,"digest":68,"rendered":69},{"preset":66},"project","site/theme.md","d19ab283a10fb060",{"html":70,"metadata":71},"",{"headings":72,"localImagePaths":73,"remoteImagePaths":74,"frontmatter":75,"imagePaths":76},[],[],[],{"preset":66},[]]
1
+ [["Map",1,2,9,10,39,40,52,53],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":\"jsx\",\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":\"127.0.0.1\",\"port\":4321,\"allowedHosts\":[\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\"]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"satteri\",\"options\":{\"mdastPlugins\":[],\"hastPlugins\":[],\"features\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fetchFile\":\"fetch\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"collectionStorage\":\"single-file\"},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","7.1.3","content-config-digest","c08b570b4ff0a86c","site",["Map",11,12],"site-content",{"id":11,"data":13,"body":16,"filePath":17,"digest":18,"rendered":19},{"page":14},{"description":15},"A single-page dog shelter website built with Norna.","# Dog Shelter\n\n\n## What we do {#what-we-do}\n\nWe rescue dogs, give them time to recover and find homes that suit their needs.\n\n```norna-card-list\nlayout: image-right\nflow: stack\nsize: s\nwidth: narrow\n\n- title: A safe place to start again\n text: Each dog gets care, calm routines and an individual plan before adoption.\n image: rescue-dog.jpg\n```\n\n## You can help {#you-can-help}\n\nAdopt, foster or support the everyday work at the shelter.\n\n```norna-card-list\nlayout: image-left\nflow: stack\nsize: s\nwidth: narrow\n\n- title: Make room for one more dog\n text: A foster home gives a dog stability and gives the shelter space for another rescue.\n image: foster-dog.jpg\n```","site/content.md","63073bde6ee73dcb",{"html":20,"metadata":21},"\u003Ch1 id=\"dog-shelter\">Dog Shelter\u003C/h1>\n\u003Ch2 id=\"what-we-do-what-we-do\">What we do {#what-we-do}\u003C/h2>\n\u003Cp>We rescue dogs, give them time to recover and find homes that suit their needs.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>layout: image-right\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>flow: stack\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>size: s\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>width: narrow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- title: A safe place to start again\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> text: Each dog gets care, calm routines and an individual plan before adoption.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> image: rescue-dog.jpg\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"you-can-help-you-can-help\">You can help {#you-can-help}\u003C/h2>\n\u003Cp>Adopt, foster or support the everyday work at the shelter.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>layout: image-left\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>flow: stack\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>size: s\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>width: narrow\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- title: Make room for one more dog\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> text: A foster home gives a dog stability and gives the shelter space for another rescue.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> image: foster-dog.jpg\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":22,"localImagePaths":34,"remoteImagePaths":35,"frontmatter":36,"imagePaths":38},[23,27,31],{"depth":24,"slug":25,"text":26},1,"dog-shelter","Dog Shelter",{"depth":28,"slug":29,"text":30},2,"what-we-do-what-we-do","What we do {#what-we-do}",{"depth":28,"slug":32,"text":33},"you-can-help-you-can-help","You can help {#you-can-help}",[],[],{"page":37},{"description":15},[],"sitewide",["Map",41,42],"site-sitewide",{"id":41,"data":43,"filePath":50,"digest":51},{"logo":44,"banners":46,"footer":47},{"height":45},"3rem",[],{"copyrightMessage":48,"buildInfo":49},"Dog Shelter example site. Dog photos by Bicanski, CC0, via Pixnio.",false,"site/sitewide-content.yaml","88890db1dd044f1f","theme",["Map",54,55],"site-theme",{"id":54,"data":56,"filePath":58,"digest":59},{"preset":57},"project","site/theme.yaml","dbaab11724ca485c"]
@@ -0,0 +1,8 @@
1
+ {
2
+ "pid": 68470,
3
+ "port": 4321,
4
+ "host": "127.0.0.1",
5
+ "mode": "local",
6
+ "url": "http://127.0.0.1:4321/",
7
+ "startedAt": "2026-08-24T06:28:55.561Z"
8
+ }
@@ -1,13 +1,13 @@
1
1
  {
2
- "pid": 58155,
3
- "port": 4411,
4
- "url": "http://127.0.0.1:4411",
2
+ "pid": 68470,
3
+ "port": 4321,
4
+ "url": "http://127.0.0.1:4321",
5
5
  "urls": {
6
6
  "local": [
7
- "http://127.0.0.1:4411/"
7
+ "http://127.0.0.1:4321/"
8
8
  ],
9
9
  "network": []
10
10
  },
11
11
  "background": true,
12
- "startedAt": "2026-08-21T04:55:34.511Z"
12
+ "startedAt": "2026-08-24T06:28:55.063Z"
13
13
  }
@@ -1,14 +1,18 @@
1
- {"message":"connected.","label":"vite","level":"info"}
2
- {"message":"Generated 1ms","label":"types","level":"info"}
3
- {"message":"connected.","label":"vite","level":"info"}
4
- {"message":"Syncing content","label":"content","level":"info"}
5
- {"message":"Astro config changed","label":"content","level":"info"}
6
- {"message":"Clearing content store","label":"content","level":"info"}
1
+ 08:28:54 [vite] connected.
2
+ 08:28:54 [types] Generated 1ms
3
+ 08:28:54 [vite] connected.
4
+ 08:28:54 [content] Syncing content
5
+ 08:28:54 [content] Astro config changed
6
+ 08:28:54 [content] Content config changed
7
+ 08:28:54 [content] Clearing content store
7
8
  [Shiki] The language "norna-card-list" doesn't exist, falling back to "plaintext".
8
9
  [Shiki] The language "norna-card-list" doesn't exist, falling back to "plaintext".
9
- {"message":"Synced content","label":"content","level":"info"}
10
- {"message":" astro v7.1.3 ready in 1182 ms\n┃ Local http://127.0.0.1:4411/","label":"SKIP_FORMAT","level":"info"}
11
- {"message":"watching for file changes...","label":null,"level":"info"}
12
- {"message":"\n update ▶ New version of Astro available: 7.2.4\n Run npx @astrojs/upgrade to update\n","label":"SKIP_FORMAT","level":"warn"}
13
- {"message":"[200] / 53ms","label":null,"level":"info"}
14
- {"message":"[200] / 9ms","label":null,"level":"info"}
10
+ 08:28:55 [content] Synced content
11
+ 08:28:55 [vite] Re-optimizing dependencies because lockfile has changed
12
+ astro v7.1.3 ready in 1175 ms
13
+ ┃ Local http://127.0.0.1:4321/
14
+ 08:28:55 watching for file changes...
15
+ 08:28:55 [200] / 56ms
16
+ 08:28:55 [200] / 6ms
17
+ 08:28:55 [200] / 6ms
18
+ 08:29:25 [404] /norna/links/ 4ms
@@ -1,6 +1,6 @@
1
1
  # Dog Shelter single-page example
2
2
 
3
- A small Norna site with two homepage sections and no routes.
3
+ A small Norna site with two homepage sections and no pages.
4
4
 
5
5
  [Live demo](https://janga.github.io/norna/examples/complete-sites/dog-shelter-single-page/)
6
6
  |
@@ -1,31 +1,31 @@
1
1
  {
2
- "hash": "2c304afa",
3
- "configHash": "21f042ad",
4
- "lockfileHash": "808f2e8e",
5
- "browserHash": "aefef279",
2
+ "hash": "0dab7b97",
3
+ "configHash": "7ca9ae4b",
4
+ "lockfileHash": "79c26dec",
5
+ "browserHash": "acbf3d0b",
6
6
  "optimized": {
7
7
  "astro > aria-query": {
8
8
  "src": "../../../../../../node_modules/aria-query/lib/index.js",
9
9
  "file": "astro_n_aria-query.js",
10
- "fileHash": "45599bae",
10
+ "fileHash": "d31ea4b1",
11
11
  "needsInterop": true
12
12
  },
13
13
  "astro > axobject-query": {
14
14
  "src": "../../../../../../node_modules/axobject-query/lib/index.js",
15
15
  "file": "astro_n_axobject-query.js",
16
- "fileHash": "fae92b16",
16
+ "fileHash": "a86cac81",
17
17
  "needsInterop": true
18
18
  },
19
19
  "astro > html-escaper": {
20
20
  "src": "../../../../../../node_modules/html-escaper/esm/index.js",
21
21
  "file": "astro_n_html-escaper.js",
22
- "fileHash": "9ddf57f7",
22
+ "fileHash": "c14c4e0b",
23
23
  "needsInterop": false
24
24
  },
25
25
  "astro/runtime/client/dev-toolbar/entrypoint.js": {
26
26
  "src": "../../../../../../node_modules/astro/dist/runtime/client/dev-toolbar/entrypoint.js",
27
27
  "file": "astro_runtime_client_dev-toolbar_entrypoint__js.js",
28
- "fileHash": "8f619d9f",
28
+ "fileHash": "8cb79ce9",
29
29
  "needsInterop": false
30
30
  }
31
31
  },
@@ -1,48 +1,48 @@
1
1
  {
2
- "images/what-we-do/rescue-dog.jpg": {
2
+ "images/foster-dog.jpg": {
3
3
  "outputVersion": 2,
4
- "sourceHash": "519d663971223bdb1948db9087c637f1ed8b4d21d81c08e1fc10d5e2d904f230",
4
+ "sourceHash": "604099036852fa40c2fecf8620a138405c8edcb0b92f120bb603742f9ee91154",
5
5
  "width": 1200,
6
6
  "height": 800,
7
7
  "variants": [
8
8
  {
9
- "src": "/images/generated/what-we-do/rescue-dog-519d6639-480.webp",
9
+ "src": "/images/generated/foster-dog-60409903-480.webp",
10
10
  "width": 480
11
11
  },
12
12
  {
13
- "src": "/images/generated/what-we-do/rescue-dog-519d6639-768.webp",
13
+ "src": "/images/generated/foster-dog-60409903-768.webp",
14
14
  "width": 768
15
15
  },
16
16
  {
17
- "src": "/images/generated/what-we-do/rescue-dog-519d6639-1080.webp",
17
+ "src": "/images/generated/foster-dog-60409903-1080.webp",
18
18
  "width": 1080
19
19
  },
20
20
  {
21
- "src": "/images/generated/what-we-do/rescue-dog-519d6639-1200.webp",
21
+ "src": "/images/generated/foster-dog-60409903-1200.webp",
22
22
  "width": 1200
23
23
  }
24
24
  ]
25
25
  },
26
- "images/you-can-help/foster-dog.jpg": {
26
+ "images/rescue-dog.jpg": {
27
27
  "outputVersion": 2,
28
- "sourceHash": "604099036852fa40c2fecf8620a138405c8edcb0b92f120bb603742f9ee91154",
28
+ "sourceHash": "519d663971223bdb1948db9087c637f1ed8b4d21d81c08e1fc10d5e2d904f230",
29
29
  "width": 1200,
30
30
  "height": 800,
31
31
  "variants": [
32
32
  {
33
- "src": "/images/generated/you-can-help/foster-dog-60409903-480.webp",
33
+ "src": "/images/generated/rescue-dog-519d6639-480.webp",
34
34
  "width": 480
35
35
  },
36
36
  {
37
- "src": "/images/generated/you-can-help/foster-dog-60409903-768.webp",
37
+ "src": "/images/generated/rescue-dog-519d6639-768.webp",
38
38
  "width": 768
39
39
  },
40
40
  {
41
- "src": "/images/generated/you-can-help/foster-dog-60409903-1080.webp",
41
+ "src": "/images/generated/rescue-dog-519d6639-1080.webp",
42
42
  "width": 1080
43
43
  },
44
44
  {
45
- "src": "/images/generated/you-can-help/foster-dog-60409903-1200.webp",
45
+ "src": "/images/generated/rescue-dog-519d6639-1200.webp",
46
46
  "width": 1200
47
47
  }
48
48
  ]
@@ -1,8 +1,11 @@
1
1
  ---
2
- title: Home
3
- description: A single-page dog shelter website built with Norna.
2
+ page:
3
+ description: A single-page dog shelter website built with Norna.
4
4
  ---
5
5
 
6
+ # Dog Shelter
7
+
8
+
6
9
  ## What we do {#what-we-do}
7
10
 
8
11
  We rescue dogs, give them time to recover and find homes that suit their needs.
@@ -1,6 +1,4 @@
1
- navigation:
2
- label: Dog Shelter
3
- logo:
4
- height: 3rem
1
+ logo:
2
+ height: 3rem
5
3
  footer:
6
4
  copyrightMessage: Dog Shelter example site. Dog photos by Bicanski, CC0, via Pixnio.
@@ -2,58 +2,34 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "type": "object",
4
4
  "properties": {
5
- "title": {
6
- "type": "string"
7
- },
8
- "description": {
9
- "type": "string"
5
+ "page": {
6
+ "type": "object",
7
+ "properties": {
8
+ "description": {
9
+ "description": "Optional page-specific meta description.",
10
+ "type": "string",
11
+ "minLength": 1
12
+ }
13
+ },
14
+ "additionalProperties": false,
15
+ "description": "Optional metadata for this homepage or additional page. The Markdown H1 supplies the page title."
10
16
  },
11
17
  "navigation": {
18
+ "description": "Optional navigation metadata for this page.",
12
19
  "type": "object",
13
20
  "properties": {
14
- "include": {
21
+ "listed": {
22
+ "default": true,
23
+ "description": "List this page in site navigation. The page remains public when false.",
15
24
  "type": "boolean"
16
- },
17
- "label": {
18
- "type": "string"
19
25
  }
20
26
  },
21
27
  "additionalProperties": false
22
28
  },
23
- "sections": {
24
- "default": {},
25
- "type": "object",
26
- "propertyNames": {
27
- "type": "string",
28
- "pattern": "^[a-z0-9-]+$"
29
- },
30
- "additionalProperties": {
31
- "type": "object",
32
- "properties": {
33
- "visible": {
34
- "type": "object",
35
- "properties": {
36
- "from": {
37
- "type": "string",
38
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
39
- },
40
- "until": {
41
- "type": "string",
42
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
43
- }
44
- },
45
- "additionalProperties": false
46
- }
47
- },
48
- "additionalProperties": false
49
- }
50
- },
51
29
  "$schema": {
52
30
  "type": "string"
53
31
  }
54
32
  },
55
- "required": [
56
- "title",
57
- "description"
58
- ]
33
+ "additionalProperties": false,
34
+ "description": "Frontmatter for a homepage or additional page content.md file."
59
35
  }
@@ -2,55 +2,49 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "type": "object",
4
4
  "properties": {
5
- "navigation": {
5
+ "logo": {
6
6
  "type": "object",
7
7
  "properties": {
8
- "brand": {
8
+ "height": {
9
+ "description": "Displayed logo height. Width follows the intrinsic aspect ratio.",
9
10
  "type": "string",
10
- "minLength": 1
11
- },
12
- "logo": {
13
- "type": "object",
14
- "properties": {
15
- "alt": {
16
- "type": "string",
17
- "minLength": 1
18
- },
19
- "height": {
20
- "type": "string",
21
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
22
- }
23
- },
24
- "additionalProperties": false
11
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
25
12
  }
26
13
  },
27
- "additionalProperties": false
14
+ "additionalProperties": false,
15
+ "description": "Optional display settings for a convention-based navigation logo."
28
16
  },
29
17
  "banners": {
30
18
  "default": [],
19
+ "description": "Site-wide dismissible notices.",
31
20
  "type": "array",
32
21
  "items": {
33
22
  "type": "object",
34
23
  "properties": {
35
24
  "id": {
36
25
  "type": "string",
37
- "pattern": "^[a-z0-9-]+$"
26
+ "pattern": "^[a-z0-9-]+$",
27
+ "description": "Stable banner identifier used for dismissal state."
38
28
  },
39
29
  "tone": {
40
30
  "default": "warning",
31
+ "description": "Semantic banner tone.",
41
32
  "type": "string",
42
33
  "enum": [
43
34
  "warning"
44
35
  ]
45
36
  },
46
37
  "visible": {
38
+ "description": "Optional date window for the banner.",
47
39
  "type": "object",
48
40
  "properties": {
49
41
  "from": {
42
+ "description": "First date on which the content is visible.",
50
43
  "type": "string",
51
44
  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
52
45
  },
53
46
  "until": {
47
+ "description": "First date on which the content is no longer visible.",
54
48
  "type": "string",
55
49
  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
56
50
  }
@@ -59,11 +53,13 @@
59
53
  },
60
54
  "title": {
61
55
  "type": "string",
62
- "minLength": 1
56
+ "minLength": 1,
57
+ "description": "Short banner heading."
63
58
  },
64
59
  "text": {
65
60
  "type": "string",
66
- "minLength": 1
61
+ "minLength": 1,
62
+ "description": "Concise banner message."
67
63
  }
68
64
  },
69
65
  "required": [
@@ -71,61 +67,23 @@
71
67
  "title",
72
68
  "text"
73
69
  ],
74
- "additionalProperties": false
70
+ "additionalProperties": false,
71
+ "description": "Dismissible site-wide warning shown above page content for important temporary information."
75
72
  }
76
73
  },
77
74
  "footer": {
75
+ "description": "Site-wide footer content.",
78
76
  "type": "object",
79
77
  "properties": {
80
78
  "copyrightMessage": {
79
+ "description": "Copyright or ownership text shown in the site footer.",
81
80
  "type": "string",
82
81
  "minLength": 1
83
82
  },
84
83
  "buildInfo": {
85
- "type": "object",
86
- "properties": {
87
- "enabled": {
88
- "default": true,
89
- "type": "boolean"
90
- },
91
- "text": {
92
- "type": "string",
93
- "minLength": 1
94
- },
95
- "dateTimeFormat": {
96
- "type": "object",
97
- "properties": {
98
- "locale": {
99
- "type": "string",
100
- "minLength": 1
101
- },
102
- "timeZone": {
103
- "type": "string",
104
- "minLength": 1
105
- },
106
- "dateStyle": {
107
- "type": "string",
108
- "minLength": 1
109
- },
110
- "timeStyle": {
111
- "type": "string",
112
- "minLength": 1
113
- }
114
- },
115
- "required": [
116
- "locale",
117
- "timeZone",
118
- "dateStyle",
119
- "timeStyle"
120
- ],
121
- "additionalProperties": false
122
- }
123
- },
124
- "required": [
125
- "text",
126
- "dateTimeFormat"
127
- ],
128
- "additionalProperties": false
84
+ "default": false,
85
+ "description": "Show a localized generated build timestamp in the footer.",
86
+ "type": "boolean"
129
87
  }
130
88
  },
131
89
  "additionalProperties": false
@@ -134,5 +92,6 @@
134
92
  "type": "string"
135
93
  }
136
94
  },
137
- "additionalProperties": false
95
+ "additionalProperties": false,
96
+ "description": "Editorial content and optional navigation logo display settings shared by every page."
138
97
  }