@janga/norna 0.7.17 → 0.7.18

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 (262) hide show
  1. package/README.md +15 -6
  2. package/bin/norna-cli.mjs +1 -1
  3. package/docs/README.md +11 -9
  4. package/docs/configuration.md +25 -2
  5. package/docs/content.md +21 -12
  6. package/docs/design/navigation-and-theme-plan.md +90 -19
  7. package/docs/design/site-examples-structure.md +7 -3
  8. package/docs/engine-development.md +19 -22
  9. package/docs/getting-started.md +3 -3
  10. package/docs/images-and-metadata.md +6 -4
  11. package/docs/pages.md +120 -64
  12. package/docs/public-files.md +1 -1
  13. package/docs/site-files.md +36 -29
  14. package/docs/sitewide-content.md +1 -1
  15. package/docs/theme.md +107 -141
  16. package/docs/typography.md +15 -27
  17. package/examples/README.md +8 -2
  18. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +5 -5
  19. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +10 -10
  20. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +35 -43
  21. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
  22. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +2 -1
  23. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -3
  24. package/examples/feature-demos/theme-preset-documentation/README.md +16 -0
  25. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +74 -0
  26. package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +1 -1
  27. package/examples/feature-demos/theme-preset-portfolio/README.md +16 -0
  28. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +74 -0
  29. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +1 -0
  30. package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +1 -1
  31. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +2 -0
  32. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +3 -0
  33. package/examples/feature-demos/theme-preset-project/README.md +16 -0
  34. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +74 -0
  35. package/examples/feature-demos/theme-preset-project/site/config.yaml +1 -0
  36. package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/content.md +1 -1
  37. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +2 -0
  38. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +3 -0
  39. package/examples/feature-demos/theme-preset-statement/README.md +16 -0
  40. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +74 -0
  41. package/examples/feature-demos/theme-preset-statement/site/config.yaml +1 -0
  42. package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/content.md +1 -1
  43. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +2 -0
  44. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +3 -0
  45. package/fixtures/basic/site/theme.yaml +1 -8
  46. package/fixtures/nested-pages/.astro/collections/site.schema.json +35 -0
  47. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +97 -0
  48. package/fixtures/nested-pages/.astro/collections/theme.schema.json +844 -0
  49. package/fixtures/nested-pages/.astro/content-assets.mjs +4 -0
  50. package/fixtures/nested-pages/.astro/content-modules.mjs +1 -0
  51. package/fixtures/nested-pages/.astro/content.d.ts +183 -0
  52. package/fixtures/nested-pages/.astro/data-store.json +1 -0
  53. package/fixtures/nested-pages/.astro/dev-local.json +8 -0
  54. package/fixtures/nested-pages/.astro/dev.log +1128 -0
  55. package/fixtures/nested-pages/.astro/settings.json +5 -0
  56. package/fixtures/nested-pages/.astro/types.d.ts +2 -0
  57. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +74 -0
  58. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  59. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  60. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  61. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  62. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  63. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  64. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  65. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  66. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  67. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  68. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  69. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  70. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  71. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  72. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  73. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  74. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +3 -0
  75. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  76. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  77. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  78. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  79. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  80. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  81. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  82. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  83. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  84. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  85. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  86. package/fixtures/nested-pages/site/config.yaml +2 -0
  87. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +4 -0
  88. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +2 -0
  89. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +9 -0
  90. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +3 -0
  91. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +3 -0
  92. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +3 -0
  93. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +3 -0
  94. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +3 -0
  95. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +3 -0
  96. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +3 -0
  97. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +3 -0
  98. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +3 -0
  99. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +3 -0
  100. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +3 -0
  101. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +3 -0
  102. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +3 -0
  103. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +3 -0
  104. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +3 -0
  105. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +3 -0
  106. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +3 -0
  107. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +3 -0
  108. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +7 -3
  109. package/fixtures/nested-pages/site/theme.yaml +1 -3
  110. package/package.json +2 -1
  111. package/schemas/config.schema.json +45 -4
  112. package/schemas/content-frontmatter.schema.json +5 -5
  113. package/schemas/manifest.json +3 -2
  114. package/schemas/page-theme.schema.json +192 -0
  115. package/schemas/sitewide-content.schema.json +17 -17
  116. package/schemas/theme.schema.json +188 -216
  117. package/scripts/check-config.mjs +2 -1
  118. package/scripts/deploy-site.mjs +1 -1
  119. package/scripts/generate-images.mjs +7 -14
  120. package/scripts/generate-schemas.mjs +4 -1
  121. package/scripts/lib/editor-language-service.mjs +0 -14
  122. package/scripts/lib/example-sites.mjs +15 -3
  123. package/scripts/lib/page-model.mjs +26 -7
  124. package/scripts/lib/presentation.mjs +25 -17
  125. package/scripts/lib/project-config.mjs +26 -16
  126. package/scripts/lib/schema-definitions.mjs +42 -14
  127. package/scripts/lib/schema-editor-metadata.mjs +70 -26
  128. package/scripts/lib/schema-value-definitions.mjs +14 -0
  129. package/scripts/lib/site-content.mjs +50 -25
  130. package/scripts/lib/site-conventions.mjs +1 -0
  131. package/scripts/lib/site-paths.mjs +9 -3
  132. package/scripts/lib/theme-config.mjs +3 -2
  133. package/scripts/lib/theme-presets.mjs +54 -21
  134. package/scripts/show-typography.mjs +1 -33
  135. package/scripts/sync-content-sections.mjs +1 -3
  136. package/scripts/test-banner-visibility.mjs +2 -2
  137. package/scripts/test-client-javascript.mjs +11 -4
  138. package/scripts/test-content-check.mjs +25 -25
  139. package/scripts/test-content-model-v2.mjs +165 -101
  140. package/scripts/test-documentation.mjs +4 -2
  141. package/scripts/test-editor-language-service.mjs +11 -8
  142. package/scripts/test-engine-commands.mjs +5 -5
  143. package/scripts/test-examples.mjs +30 -1
  144. package/scripts/test-heading-ids.mjs +2 -2
  145. package/scripts/test-navigation.mjs +11 -2
  146. package/scripts/test-nested-pages.mjs +25 -10
  147. package/scripts/test-package-check.mjs +29 -60
  148. package/scripts/test-page-model.mjs +30 -2
  149. package/scripts/test-project-config.mjs +5 -10
  150. package/scripts/test-schemas.mjs +18 -3
  151. package/scripts/test-theme-presets.mjs +33 -27
  152. package/src/components/NavigationPageTree.astro +114 -25
  153. package/src/components/PageContentsLinks.astro +40 -0
  154. package/src/components/SectionNavigationScript.astro +12 -5
  155. package/src/components/SiteBreadcrumbs.astro +17 -14
  156. package/src/components/SiteNavigation.astro +45 -12
  157. package/src/components/SitePage.astro +37 -23
  158. package/src/components/SiteSection.astro +2 -7
  159. package/src/components/SiteTreeNavigation.astro +35 -0
  160. package/src/components/TreeNavigationScript.astro +83 -0
  161. package/src/content.config.ts +2 -8
  162. package/src/layouts/BaseLayout.astro +10 -0
  163. package/src/lib/pageThemes.ts +11 -9
  164. package/src/lib/sectionContent.ts +1 -5
  165. package/src/lib/siteNavigation.ts +2 -1
  166. package/src/lib/sitePages.ts +25 -14
  167. package/src/pages/index.astro +2 -1
  168. package/src/styles/global.css +411 -43
  169. package/starters/basic/README.md +7 -7
  170. package/starters/basic/site/theme.yaml +1 -105
  171. package/starters/project/README.md +8 -8
  172. package/starters/project/site/theme.yaml +1 -31
  173. package/examples/feature-demos/theme-presets/README.md +0 -18
  174. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
  175. package/examples/feature-demos/theme-presets/site/content.md +0 -14
  176. package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
  177. /package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +0 -0
  178. /package/examples/complete-sites/dog-shelter-multi-page/site/{images → pages/000-home/images}/shelter-dog.jpg +0 -0
  179. /package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +0 -0
  180. /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/foster-dog.jpg +0 -0
  181. /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/rescue-dog.jpg +0 -0
  182. /package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +0 -0
  183. /package/examples/feature-demos/sitewide-content/site/{content.md → pages/000-home/content.md} +0 -0
  184. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
  185. /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/black-schnauzer.jpg +0 -0
  186. /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/retriever-portrait.jpg +0 -0
  187. /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/schnauzer-portrait.jpg +0 -0
  188. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/public/robots.txt +0 -0
  189. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/sitewide-content.yaml +0 -0
  190. /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
  191. /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/puppy-portrait.jpg +0 -0
  192. /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/shepherd-portrait.jpg +0 -0
  193. /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/white-puppy.jpg +0 -0
  194. /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site}/theme.yaml +0 -0
  195. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/routeTheme.schema.json +0 -0
  196. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/site.schema.json +0 -0
  197. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/sitewide.schema.json +0 -0
  198. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/theme.schema.json +0 -0
  199. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-assets.mjs +0 -0
  200. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-modules.mjs +0 -0
  201. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content.d.ts +0 -0
  202. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/data-store.json +0 -0
  203. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev-local.json +0 -0
  204. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.json +0 -0
  205. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.log +0 -0
  206. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/settings.json +0 -0
  207. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/types.d.ts +0 -0
  208. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/_metadata.json +0 -0
  209. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  210. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  211. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  212. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  213. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  214. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  215. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  216. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  217. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  218. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  219. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  220. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  221. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js +0 -0
  222. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  223. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  224. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  225. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  226. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  227. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/package.json +0 -0
  228. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  229. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  230. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  231. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  232. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  233. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  234. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  235. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  236. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  237. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  238. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  239. /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/boxer-portrait.jpg +0 -0
  240. /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grass-puppy.jpg +0 -0
  241. /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grey-street-dog.jpg +0 -0
  242. /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site}/theme.yaml +0 -0
  243. /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/black-pedigree.jpg +0 -0
  244. /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-grass.jpg +0 -0
  245. /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-wide.jpg +0 -0
  246. /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
  247. /package/fixtures/basic/site/{content.md → pages/000-home/content.md} +0 -0
  248. /package/fixtures/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
  249. /package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +0 -0
  250. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/adopt.svg +0 -0
  251. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/detail.jpg +0 -0
  252. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/duplicate.jpg +0 -0
  253. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/foster.svg +0 -0
  254. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/hero.jpg +0 -0
  255. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/image.jpg +0 -0
  256. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-one.jpg +0 -0
  257. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-three.jpg +0 -0
  258. /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-two.jpg +0 -0
  259. /package/fixtures/nested-pages/site/{content.md → pages/000-home/content.md} +0 -0
  260. /package/starters/basic/site/{content.md → pages/000-home/content.md} +0 -0
  261. /package/starters/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
  262. /package/starters/project/site/{content.md → pages/000-home/content.md} +0 -0
@@ -1,105 +1 @@
1
- # norna:start theme-help
2
- # Site-wide visual defaults. Remove a value to use the engine default.
3
- # Active values below are ordinary YAML; this marked comment block is only help text.
4
- #
5
- # Available structure:
6
- # layout:
7
- # density: compact | normal | airy
8
- # pageWidth: CSS length, e.g. 1180px
9
- # gutter:
10
- # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 4vw, 3rem)
11
- # mobile: CSS length, e.g. 1rem
12
- # spacing:
13
- # firstSectionTop:
14
- # desktop: CSS length or clamp(), e.g. clamp(1.875rem, 3vw, 2.75rem)
15
- # mobile: CSS length, e.g. 1.375rem
16
- # sectionGap:
17
- # desktop: CSS length or clamp(), e.g. clamp(1.4rem, 3vw, 2.75rem)
18
- # mobile: CSS length, e.g. 1.5rem
19
- # finalSectionBottom:
20
- # desktop: CSS length or clamp(), e.g. clamp(1.4rem, 3vw, 2.75rem)
21
- # mobile: CSS length, e.g. 1.5rem
22
- # headingToBlock:
23
- # desktop: CSS length, e.g. 0.75em
24
- # mobile: CSS length, e.g. 0.7em
25
- # blockGap:
26
- # desktop: CSS length, e.g. 1.5em
27
- # mobile: CSS length, e.g. 1.25em
28
- # imageGap:
29
- # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 2.8vw, 2rem)
30
- # mobile: CSS length, e.g. 1.5rem
31
- # images:
32
- # width: CSS length, e.g. 900px
33
- # maxAvailableWidthPercent:
34
- # desktop: number from 1 through 100
35
- # mobile: number from 1 through 100
36
- # maxAvailableHeightPercent:
37
- # desktop: number from 1 through 100
38
- # mobile: number from 1 through 100
39
- # typography:
40
- # fontFamily: CSS font-family stack
41
- # profile: restrained | dense | reading | statement
42
- # rhythm: compact | normal | airy
43
- # overrides:
44
- # headings:
45
- # h2:
46
- # align:
47
- # desktop: left | center | right
48
- # mobile: left | center | right
49
- # size: small | medium | large | xlarge
50
- # lineHeight: number from 1 through 3
51
- # spacingBefore: CSS length, e.g. 0
52
- # spacingAfter: CSS length, e.g. 0.55em
53
- # h3:
54
- # align:
55
- # desktop: left | center | right
56
- # mobile: left | center | right
57
- # size: small | medium | large | xlarge
58
- # lineHeight: number from 1 through 3
59
- # spacingBefore: CSS length, e.g. 1.5em
60
- # spacingAfter: CSS length, e.g. 0.5em
61
- # h4:
62
- # align:
63
- # desktop: left | center | right
64
- # mobile: left | center | right
65
- # size: small | medium | large | xlarge
66
- # lineHeight: number from 1 through 3
67
- # spacingBefore: CSS length, e.g. 1.1em
68
- # spacingAfter: CSS length, e.g. 0.4em
69
- # body:
70
- # align:
71
- # desktop: left | center | right
72
- # mobile: left | center | right
73
- # size: small | medium | large | xlarge
74
- # lineHeight: number from 1 through 3
75
- # paragraphSpacing: CSS length, e.g. 0.85em
76
- # caption:
77
- # align:
78
- # desktop: left | center | right
79
- # mobile: left | center | right
80
- # size: small | medium | large | xlarge
81
- # lineHeight: number from 1 through 3
82
- # spacingBefore: CSS length, e.g. 0.5em
83
- # palette: dark # Alternatives: light, paper
84
- # sectionSurfaces: [base, soft, emphasis]
85
- # norna:end theme-help
86
- layout:
87
- density: normal
88
- pageWidth: 1180px
89
- gutter:
90
- desktop: clamp(1.25rem, 4vw, 3rem)
91
- mobile: 1rem
92
- images:
93
- width: 900px
94
- maxAvailableWidthPercent:
95
- desktop: 100
96
- mobile: 100
97
- maxAvailableHeightPercent:
98
- desktop: 74
99
- mobile: 68
100
- typography:
101
- fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
102
- profile: restrained
103
- rhythm: normal
104
- palette: dark # Alternatives: light, paper
105
- sectionSurfaces: [base, soft, emphasis]
1
+ preset: project
@@ -20,9 +20,9 @@ npm run norna:dev -- --kill
20
20
 
21
21
  - `site/config.yaml`: public URL and optional language and smooth scrolling.
22
22
  - `site/sitewide-content.yaml`: shared logo display settings, banners, and footer.
23
- - `site/theme.yaml`: site-wide visual settings such as layout density, typography
24
- rhythm, palettes, section surfaces, and typography.
25
- - `site/content.md`: homepage title, sections, placeholders, project summary,
23
+ - `site/theme.yaml`: the site-wide visual preset and any focused overrides.
24
+ - `site/pages/000-home/content.md`: homepage title, sections, placeholders,
25
+ project summary,
26
26
  links, install command, example usage, benefits, next steps, Norna blocks,
27
27
  and license.
28
28
  - `site/pages/010-guide/content.md`: short secondary page with realistic
@@ -36,15 +36,15 @@ GitHub Pages workflow uses `npm ci`.
36
36
  ## Adapt The Starter
37
37
 
38
38
  1. Replace the project name, tagline, links, install command, example usage,
39
- benefits, use cases, and license in `site/content.md`.
39
+ benefits, use cases, and license in `site/pages/000-home/content.md`.
40
40
  2. Replace the guide examples in `site/pages/010-guide/content.md`, or
41
41
  delete the page if the homepage is enough.
42
42
  3. Edit `site/sitewide-content.yaml` for logo display settings,
43
43
  banners, and footer.
44
- 4. Edit `site/theme.yaml` for layout density, typography rhythm, palette, section
45
- surfaces, and typography.
46
- 5. Put managed homepage source images directly in `site/images/`. Images for
47
- an additional page belong directly in that page's `images/` directory.
44
+ 4. Select a preset in `site/theme.yaml`. Add focused overrides only when the
45
+ project needs them.
46
+ 5. Put managed homepage source images in `site/pages/000-home/images/`. Images
47
+ for another page belong directly in that page's `images/` directory.
48
48
  6. Edit `site/config.yaml` for the public URL and, when needed, language or smooth
49
49
  scrolling. Deploy commands discover the GitHub repository and default branch.
50
50
  7. Update `package.json` with the site's package name and keep
@@ -1,31 +1 @@
1
- # Site-wide visual defaults. Remove a value to use the engine default.
2
- layout:
3
- density: compact
4
- pageWidth: 1120px
5
- gutter:
6
- desktop: clamp(1.25rem, 4vw, 3rem)
7
- mobile: 1rem
8
- spacing:
9
- firstSectionTop:
10
- desktop: clamp(0.9rem, 1.6vw, 1.5rem)
11
- mobile: 0.9rem
12
- sectionGap:
13
- desktop: clamp(0.8rem, 1.6vw, 1.5rem)
14
- mobile: 1rem
15
- finalSectionBottom:
16
- desktop: clamp(1rem, 2vw, 1.75rem)
17
- mobile: 1rem
18
- images:
19
- width: 840px
20
- maxAvailableWidthPercent:
21
- desktop: 100
22
- mobile: 100
23
- maxAvailableHeightPercent:
24
- desktop: 70
25
- mobile: 62
26
- typography:
27
- fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
28
- profile: reading
29
- rhythm: compact
30
- palette: dark # Alternatives: light, paper
31
- sectionSurfaces: [base, soft]
1
+ preset: project
@@ -1,18 +0,0 @@
1
- # Themes
2
-
3
- This feature demo compares Norna's complete built-in theme presets. Every page
4
- uses one preset without overrides, so differences in layout, typography,
5
- palette, surfaces and image presentation come from the preset itself.
6
-
7
- [Live demo](https://janga.github.io/norna/examples/feature-demos/theme-presets/)
8
- |
9
- [View source](https://github.com/janga/norna/tree/main/examples/feature-demos/theme-presets)
10
-
11
- Run it from the repository root:
12
-
13
- ```sh
14
- node bin/norna.mjs --site-dir examples/feature-demos/theme-presets/site dev:local
15
- ```
16
-
17
- The dog photos are CC0 images by Bicanski, sourced from Pixnio. Attribution is
18
- included in the image captions even though the licence does not require it.
@@ -1,290 +0,0 @@
1
- {
2
- "pages/010-portfolio/images/puppy-portrait.jpg": {
3
- "outputVersion": 2,
4
- "sourceHash": "0cb5126b86660785da62903393e43df7b6e361d3bd1a0492cc6f371159c5afb8",
5
- "width": 1200,
6
- "height": 800,
7
- "variants": [
8
- {
9
- "src": "/images/generated/pages/010-portfolio/images/puppy-portrait-0cb5126b-480.webp",
10
- "width": 480
11
- },
12
- {
13
- "src": "/images/generated/pages/010-portfolio/images/puppy-portrait-0cb5126b-768.webp",
14
- "width": 768
15
- },
16
- {
17
- "src": "/images/generated/pages/010-portfolio/images/puppy-portrait-0cb5126b-1080.webp",
18
- "width": 1080
19
- },
20
- {
21
- "src": "/images/generated/pages/010-portfolio/images/puppy-portrait-0cb5126b-1200.webp",
22
- "width": 1200
23
- }
24
- ]
25
- },
26
- "pages/010-portfolio/images/shepherd-portrait.jpg": {
27
- "outputVersion": 2,
28
- "sourceHash": "604099036852fa40c2fecf8620a138405c8edcb0b92f120bb603742f9ee91154",
29
- "width": 1200,
30
- "height": 800,
31
- "variants": [
32
- {
33
- "src": "/images/generated/pages/010-portfolio/images/shepherd-portrait-60409903-480.webp",
34
- "width": 480
35
- },
36
- {
37
- "src": "/images/generated/pages/010-portfolio/images/shepherd-portrait-60409903-768.webp",
38
- "width": 768
39
- },
40
- {
41
- "src": "/images/generated/pages/010-portfolio/images/shepherd-portrait-60409903-1080.webp",
42
- "width": 1080
43
- },
44
- {
45
- "src": "/images/generated/pages/010-portfolio/images/shepherd-portrait-60409903-1200.webp",
46
- "width": 1200
47
- }
48
- ]
49
- },
50
- "pages/010-portfolio/images/white-puppy.jpg": {
51
- "outputVersion": 2,
52
- "sourceHash": "bcb834d00bb9b520dac475c32906f8578a03bd922c1639c7d86252ae1f1c433a",
53
- "width": 1200,
54
- "height": 800,
55
- "variants": [
56
- {
57
- "src": "/images/generated/pages/010-portfolio/images/white-puppy-bcb834d0-480.webp",
58
- "width": 480
59
- },
60
- {
61
- "src": "/images/generated/pages/010-portfolio/images/white-puppy-bcb834d0-768.webp",
62
- "width": 768
63
- },
64
- {
65
- "src": "/images/generated/pages/010-portfolio/images/white-puppy-bcb834d0-1080.webp",
66
- "width": 1080
67
- },
68
- {
69
- "src": "/images/generated/pages/010-portfolio/images/white-puppy-bcb834d0-1200.webp",
70
- "width": 1200
71
- }
72
- ]
73
- },
74
- "pages/020-documentation/images/black-schnauzer.jpg": {
75
- "outputVersion": 2,
76
- "sourceHash": "569922b4aa71096cc8e3a245f0ddccf74f941881b823084723854580078b50b0",
77
- "width": 1200,
78
- "height": 800,
79
- "variants": [
80
- {
81
- "src": "/images/generated/pages/020-documentation/images/black-schnauzer-569922b4-480.webp",
82
- "width": 480
83
- },
84
- {
85
- "src": "/images/generated/pages/020-documentation/images/black-schnauzer-569922b4-768.webp",
86
- "width": 768
87
- },
88
- {
89
- "src": "/images/generated/pages/020-documentation/images/black-schnauzer-569922b4-1080.webp",
90
- "width": 1080
91
- },
92
- {
93
- "src": "/images/generated/pages/020-documentation/images/black-schnauzer-569922b4-1200.webp",
94
- "width": 1200
95
- }
96
- ]
97
- },
98
- "pages/020-documentation/images/retriever-portrait.jpg": {
99
- "outputVersion": 2,
100
- "sourceHash": "c441ca2935debeb008a43e2a7fd510bfd6776682f84160151fd5c8605bfb8cae",
101
- "width": 1200,
102
- "height": 800,
103
- "variants": [
104
- {
105
- "src": "/images/generated/pages/020-documentation/images/retriever-portrait-c441ca29-480.webp",
106
- "width": 480
107
- },
108
- {
109
- "src": "/images/generated/pages/020-documentation/images/retriever-portrait-c441ca29-768.webp",
110
- "width": 768
111
- },
112
- {
113
- "src": "/images/generated/pages/020-documentation/images/retriever-portrait-c441ca29-1080.webp",
114
- "width": 1080
115
- },
116
- {
117
- "src": "/images/generated/pages/020-documentation/images/retriever-portrait-c441ca29-1200.webp",
118
- "width": 1200
119
- }
120
- ]
121
- },
122
- "pages/020-documentation/images/schnauzer-portrait.jpg": {
123
- "outputVersion": 2,
124
- "sourceHash": "545b0427b8e15846fe73656758da6eb3b8612dabf2b2879c31197986f8deb9b5",
125
- "width": 1200,
126
- "height": 900,
127
- "variants": [
128
- {
129
- "src": "/images/generated/pages/020-documentation/images/schnauzer-portrait-545b0427-480.webp",
130
- "width": 480
131
- },
132
- {
133
- "src": "/images/generated/pages/020-documentation/images/schnauzer-portrait-545b0427-768.webp",
134
- "width": 768
135
- },
136
- {
137
- "src": "/images/generated/pages/020-documentation/images/schnauzer-portrait-545b0427-1080.webp",
138
- "width": 1080
139
- },
140
- {
141
- "src": "/images/generated/pages/020-documentation/images/schnauzer-portrait-545b0427-1200.webp",
142
- "width": 1200
143
- }
144
- ]
145
- },
146
- "pages/030-project/images/boxer-portrait.jpg": {
147
- "outputVersion": 2,
148
- "sourceHash": "da764a5b71f2bfa610ae4978cad4660cd6ecfdcd5b7fcbd788b92c3f9ada42b1",
149
- "width": 1200,
150
- "height": 800,
151
- "variants": [
152
- {
153
- "src": "/images/generated/pages/030-project/images/boxer-portrait-da764a5b-480.webp",
154
- "width": 480
155
- },
156
- {
157
- "src": "/images/generated/pages/030-project/images/boxer-portrait-da764a5b-768.webp",
158
- "width": 768
159
- },
160
- {
161
- "src": "/images/generated/pages/030-project/images/boxer-portrait-da764a5b-1080.webp",
162
- "width": 1080
163
- },
164
- {
165
- "src": "/images/generated/pages/030-project/images/boxer-portrait-da764a5b-1200.webp",
166
- "width": 1200
167
- }
168
- ]
169
- },
170
- "pages/030-project/images/grass-puppy.jpg": {
171
- "outputVersion": 2,
172
- "sourceHash": "519d663971223bdb1948db9087c637f1ed8b4d21d81c08e1fc10d5e2d904f230",
173
- "width": 1200,
174
- "height": 800,
175
- "variants": [
176
- {
177
- "src": "/images/generated/pages/030-project/images/grass-puppy-519d6639-480.webp",
178
- "width": 480
179
- },
180
- {
181
- "src": "/images/generated/pages/030-project/images/grass-puppy-519d6639-768.webp",
182
- "width": 768
183
- },
184
- {
185
- "src": "/images/generated/pages/030-project/images/grass-puppy-519d6639-1080.webp",
186
- "width": 1080
187
- },
188
- {
189
- "src": "/images/generated/pages/030-project/images/grass-puppy-519d6639-1200.webp",
190
- "width": 1200
191
- }
192
- ]
193
- },
194
- "pages/030-project/images/grey-street-dog.jpg": {
195
- "outputVersion": 2,
196
- "sourceHash": "08cab93ba9a2d1c3a72c471dd8724efa7d820f43dad447221b445c32ebe9ab28",
197
- "width": 1200,
198
- "height": 800,
199
- "variants": [
200
- {
201
- "src": "/images/generated/pages/030-project/images/grey-street-dog-08cab93b-480.webp",
202
- "width": 480
203
- },
204
- {
205
- "src": "/images/generated/pages/030-project/images/grey-street-dog-08cab93b-768.webp",
206
- "width": 768
207
- },
208
- {
209
- "src": "/images/generated/pages/030-project/images/grey-street-dog-08cab93b-1080.webp",
210
- "width": 1080
211
- },
212
- {
213
- "src": "/images/generated/pages/030-project/images/grey-street-dog-08cab93b-1200.webp",
214
- "width": 1200
215
- }
216
- ]
217
- },
218
- "pages/040-statement/images/black-pedigree.jpg": {
219
- "outputVersion": 2,
220
- "sourceHash": "7d5e0be21d7889cb440b9dd6bab74d8f656e4f5159fdcd6cbe937fc7b9d4bd44",
221
- "width": 1200,
222
- "height": 800,
223
- "variants": [
224
- {
225
- "src": "/images/generated/pages/040-statement/images/black-pedigree-7d5e0be2-480.webp",
226
- "width": 480
227
- },
228
- {
229
- "src": "/images/generated/pages/040-statement/images/black-pedigree-7d5e0be2-768.webp",
230
- "width": 768
231
- },
232
- {
233
- "src": "/images/generated/pages/040-statement/images/black-pedigree-7d5e0be2-1080.webp",
234
- "width": 1080
235
- },
236
- {
237
- "src": "/images/generated/pages/040-statement/images/black-pedigree-7d5e0be2-1200.webp",
238
- "width": 1200
239
- }
240
- ]
241
- },
242
- "pages/040-statement/images/sheepdog-grass.jpg": {
243
- "outputVersion": 2,
244
- "sourceHash": "b9396e00227dac3b290d6e29cc82758a4cf98f08bc9154c24c8fbf598563b69a",
245
- "width": 1200,
246
- "height": 800,
247
- "variants": [
248
- {
249
- "src": "/images/generated/pages/040-statement/images/sheepdog-grass-b9396e00-480.webp",
250
- "width": 480
251
- },
252
- {
253
- "src": "/images/generated/pages/040-statement/images/sheepdog-grass-b9396e00-768.webp",
254
- "width": 768
255
- },
256
- {
257
- "src": "/images/generated/pages/040-statement/images/sheepdog-grass-b9396e00-1080.webp",
258
- "width": 1080
259
- },
260
- {
261
- "src": "/images/generated/pages/040-statement/images/sheepdog-grass-b9396e00-1200.webp",
262
- "width": 1200
263
- }
264
- ]
265
- },
266
- "pages/040-statement/images/sheepdog-wide.jpg": {
267
- "outputVersion": 2,
268
- "sourceHash": "5c8a6878d3d38549d41f8161b92ffb555f3bf5c2d3defbade15932c4d11b6dea",
269
- "width": 1200,
270
- "height": 667,
271
- "variants": [
272
- {
273
- "src": "/images/generated/pages/040-statement/images/sheepdog-wide-5c8a6878-480.webp",
274
- "width": 480
275
- },
276
- {
277
- "src": "/images/generated/pages/040-statement/images/sheepdog-wide-5c8a6878-768.webp",
278
- "width": 768
279
- },
280
- {
281
- "src": "/images/generated/pages/040-statement/images/sheepdog-wide-5c8a6878-1080.webp",
282
- "width": 1080
283
- },
284
- {
285
- "src": "/images/generated/pages/040-statement/images/sheepdog-wide-5c8a6878-1200.webp",
286
- "width": 1200
287
- }
288
- ]
289
- }
290
- }
@@ -1,14 +0,0 @@
1
- ---
2
- page:
3
- description: Compare Norna's complete built-in theme presets without overrides.
4
- ---
5
-
6
- # Theme Presets
7
- Each page selects one complete theme preset without overrides. The comparison
8
- therefore includes layout, typography, palette, section surfaces and managed
9
- image presentation:
10
-
11
- * [Portfolio](/portfolio/)
12
- * [Documentation](/documentation/)
13
- * [Project](/project/)
14
- * [Statement](/statement/)
@@ -1 +0,0 @@
1
- preset: project