@janga/norna 0.7.11 → 0.7.13

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 (239) hide show
  1. package/README.md +120 -108
  2. package/bin/norna-cli.mjs +1 -1
  3. package/docs/README.md +107 -75
  4. package/docs/assets/norna-dog-shelter.jpg +0 -0
  5. package/docs/commands.md +7 -4
  6. package/docs/configuration.md +86 -185
  7. package/docs/design/command-organization.md +1 -1
  8. package/docs/design/norna-diagram-design.md +2 -1
  9. package/docs/design/site-examples-structure.md +4 -1
  10. package/docs/engine-development.md +15 -8
  11. package/docs/getting-started.md +126 -144
  12. package/docs/how-to/embedded-site.md +35 -0
  13. package/docs/publishing.md +47 -46
  14. package/docs/requirements.md +54 -0
  15. package/docs/routes.md +1 -1
  16. package/docs/site-structure.md +4 -4
  17. package/docs/sitewide-content.md +2 -1
  18. package/docs/theme.md +18 -0
  19. package/examples/README.md +26 -24
  20. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +4 -1
  21. package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +1 -1
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
  23. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +6 -8
  24. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -53
  25. package/examples/complete-sites/dog-shelter-multi-page/README.md +7 -0
  26. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +29 -35
  27. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{astro-D_GIpJIE.js → astro-B3JHJyiv.js} +4 -4
  28. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  29. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +151 -151
  30. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -1
  31. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +131 -131
  32. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -1
  33. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +1 -1
  34. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -1
  35. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +10 -10
  36. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -1
  37. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{audit-DM9Hkl5B.js → audit-C3SVr7dT.js} +10 -10
  38. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  39. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{highlight-DnZ1ULOL.js → highlight-BLtvqtzO.js} +1 -1
  40. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  41. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{icons-RyebKi45.js → icons-C92i61-2.js} +1 -1
  42. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  43. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{settings-DaU-gNnK.js → settings-v5GgKks_.js} +2 -2
  44. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  45. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{toolbar-63PA619H.js → toolbar-BFvJVp26.js} +2 -2
  46. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  47. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{ui-library--bkcNSYz.js → ui-library-Cd35oAvo.js} +10 -10
  48. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  49. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{window-jPkpKVcy.js → window-vo3A6TMn.js} +1 -1
  50. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  51. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{xray-BXCHpEJP.js → xray-DwhzGckb.js} +3 -3
  52. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  53. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +92 -12
  54. package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
  55. package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
  56. package/examples/complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg +0 -0
  57. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +9 -0
  58. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg +0 -0
  59. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg +0 -0
  60. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +11 -19
  61. package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg +0 -0
  62. package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +11 -0
  63. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +12 -2
  64. package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +1 -23
  65. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +59 -0
  66. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +138 -0
  67. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +755 -0
  68. package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +4 -0
  69. package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +1 -0
  70. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +183 -0
  71. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -0
  72. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +13 -0
  73. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +14 -0
  74. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +5 -0
  75. package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +2 -0
  76. package/examples/complete-sites/dog-shelter-single-page/README.md +7 -0
  77. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +74 -0
  78. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  79. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  80. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  81. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  82. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  83. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  84. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  85. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  86. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  87. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  88. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  89. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  90. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  91. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  92. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  93. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  94. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +3 -0
  95. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  96. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  97. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  98. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  99. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  100. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  101. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  102. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  103. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  104. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  105. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  106. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +44 -12
  107. package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
  108. package/examples/complete-sites/dog-shelter-single-page/site/content.md +20 -24
  109. package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg +0 -0
  110. package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg +0 -0
  111. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +9 -0
  112. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +12 -2
  113. package/examples/complete-sites/dog-shelter-single-page/site/theme.md +1 -23
  114. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
  115. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +15 -2
  116. package/examples/feature-demos/media-and-surfaces/README.md +7 -1
  117. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +7 -1
  118. package/examples/{complete-sites/dog-shelter-multi-page → feature-demos/media-and-surfaces}/node_modules/.vite/deps/embla-carousel.js +1 -1
  119. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +1 -0
  120. package/examples/feature-demos/media-and-surfaces/site/config.md +3 -0
  121. package/examples/feature-demos/media-and-surfaces/site/content.md +5 -51
  122. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +10 -25
  123. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +1 -1
  124. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +59 -0
  125. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +138 -0
  126. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +755 -0
  127. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +1 -0
  128. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +1 -0
  129. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +183 -0
  130. package/examples/feature-demos/sitewide-content/.astro/data-store.json +1 -0
  131. package/examples/feature-demos/sitewide-content/.astro/dev.json +13 -0
  132. package/examples/feature-demos/sitewide-content/.astro/dev.log +18 -0
  133. package/examples/feature-demos/sitewide-content/.astro/settings.json +5 -0
  134. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +2 -0
  135. package/examples/feature-demos/sitewide-content/README.md +18 -0
  136. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +74 -0
  137. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  138. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  139. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  140. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  141. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  142. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  143. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  144. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  145. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  146. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  147. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  148. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  149. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  150. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  151. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  152. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  153. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +3 -0
  154. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  155. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  156. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  157. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  158. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  159. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  160. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  161. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  162. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  163. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  164. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  165. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +1 -0
  166. package/examples/feature-demos/sitewide-content/site/config.md +3 -0
  167. package/examples/feature-demos/sitewide-content/site/content.md +16 -0
  168. package/examples/feature-demos/sitewide-content/site/public/logo.svg +6 -0
  169. package/examples/feature-demos/sitewide-content/site/public/robots.txt +2 -0
  170. package/examples/feature-demos/sitewide-content/site/routes/010-identity/route-content.md +20 -0
  171. package/examples/feature-demos/sitewide-content/site/routes/020-notices/route-content.md +22 -0
  172. package/examples/feature-demos/sitewide-content/site/routes/030-footer/route-content.md +17 -0
  173. package/examples/feature-demos/sitewide-content/site/sitewide-content.md +33 -0
  174. package/examples/feature-demos/sitewide-content/site/theme.md +3 -0
  175. package/examples/feature-demos/theme-presets/.astro/dev.log +37 -0
  176. package/examples/feature-demos/theme-presets/README.md +5 -1
  177. package/examples/feature-demos/theme-presets/site/config.md +3 -0
  178. package/fixtures/basic/site/config.md +3 -0
  179. package/fixtures/content-model-v2/site/config.md +3 -0
  180. package/package.json +12 -7
  181. package/scripts/build-pages.mjs +4 -6
  182. package/scripts/check-config.mjs +1 -10
  183. package/scripts/deploy-site.mjs +12 -8
  184. package/scripts/lib/example-sites.mjs +3 -0
  185. package/scripts/lib/github-repository.mjs +44 -0
  186. package/scripts/lib/norna-markdown-blocks.mjs +97 -10
  187. package/scripts/lib/project-config.mjs +112 -123
  188. package/scripts/lib/site-content.mjs +7 -0
  189. package/scripts/lib/site-paths.mjs +6 -2
  190. package/scripts/test-client-javascript.mjs +221 -0
  191. package/scripts/test-content-check.mjs +103 -0
  192. package/scripts/test-content-model-v2.mjs +9 -13
  193. package/scripts/test-documentation.mjs +116 -0
  194. package/scripts/test-engine-commands.mjs +12 -3
  195. package/scripts/test-examples.mjs +9 -0
  196. package/scripts/test-package-check.mjs +17 -9
  197. package/scripts/test-project-config.mjs +125 -0
  198. package/scripts/test-temporary-visibility.mjs +3 -10
  199. package/scripts/test-theme-presets.mjs +3 -8
  200. package/scripts/watch-pages-deploy.mjs +15 -11
  201. package/src/components/GalleryGrid.astro +30 -230
  202. package/src/components/ImageCarousel.astro +184 -0
  203. package/src/components/MobileSectionNavigationScript.astro +14 -0
  204. package/src/components/SiteNavigation.astro +54 -341
  205. package/src/components/SiteNotesScript.astro +43 -0
  206. package/src/components/SitePage.astro +4 -1
  207. package/src/components/SiteSection.astro +4 -47
  208. package/src/layouts/BaseLayout.astro +1 -1
  209. package/src/lib/galleryImages.ts +53 -0
  210. package/src/styles/global.css +81 -1
  211. package/starters/basic/.github/workflows/deploy.yml +1 -2
  212. package/starters/basic/README.md +10 -8
  213. package/starters/basic/site/config.md +3 -0
  214. package/starters/project/.github/workflows/deploy.yml +1 -2
  215. package/starters/project/README.md +3 -4
  216. package/starters/project/site/config.md +3 -0
  217. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  218. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  219. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  220. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  221. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  222. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  223. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  224. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  225. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  226. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  227. package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +0 -30
  228. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
  229. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
  230. package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +0 -30
  231. package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
  232. package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
  233. package/examples/feature-demos/media-and-surfaces/site/config.mjs +0 -30
  234. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +0 -3
  235. package/examples/feature-demos/theme-presets/site/config.mjs +0 -30
  236. package/fixtures/basic/site/config.mjs +0 -27
  237. package/fixtures/content-model-v2/site/config.mjs +0 -11
  238. package/starters/basic/site/config.mjs +0 -27
  239. package/starters/project/site/config.mjs +0 -30
package/README.md CHANGED
@@ -1,126 +1,138 @@
1
- # norna
2
-
3
- `norna` is a reusable command-line toolchain for small static websites.
4
- It provides the CLI, Astro renderer, validation scripts, image pipeline,
5
- starter project, fixtures, and deploy helpers used by site repositories such as
6
- `www.walde.se`.
7
-
8
- Use this repository when you are:
9
-
10
- - creating a new site repository from the starter,
11
- - maintaining the reusable `@janga/norna` engine,
12
- - looking up the generic CLI, content, configuration, image, build, or deploy
13
- behavior.
14
-
15
- Site-specific content, domain files, source images, and publication decisions
16
- belong in each site repository. For example, Karin Walde's site lives in
17
- `www.walde.se` and depends on a pinned version of this package.
18
-
19
- ## Mental Model
20
-
21
- A `norna` site is file-driven:
22
-
23
- 1. A site repository depends on this package.
24
- 2. The site keeps technical settings, including public URL and optional URL
25
- base path, in `site/config.mjs`.
26
- 3. The site selects a complete visual preset, with optional focused overrides
27
- for layout, image sizing, font, typography, palettes, and section surfaces,
28
- in `site/theme.md`.
29
- 4. The site keeps homepage content, Markdown section order, managed media
30
- blocks, alt text, captions, and optional section metadata in
31
- `site/content.md`.
32
- 5. Optional route pages live under
33
- `site/routes/<NNN-route-id>/route-content.md`.
34
- 6. Source images live under `site/images/<section-id>/` for the homepage, or
35
- under `site/routes/<NNN-route-id>/images/<section-id>/` for a route.
36
- 7. Static public files live under `site/public/`.
37
- 8. `norna` validates the files, prepares managed images, builds static Astro
38
- pages, and can help publish the committed branch through GitHub Pages.
39
-
40
- The default site directory is `site/`. Commands can also use another directory
41
- with `NORNA_SITE_DIR` or `norna --site-dir <path>`. Without an explicit site
42
- directory, commands first accept the current directory when it contains
43
- `config.mjs` and `content.md`; otherwise they walk upward looking for a
44
- `site/` directory with those files.
1
+ # Norna
45
2
 
46
- ## Quick Start
3
+ **Build responsive websites from Markdown, images, and a theme preset.**
47
4
 
48
- For engine development in this repository:
5
+ Norna is an opinionated, open source CLI for building websites from plain
6
+ files. You write the content, keep images beside the content they belong to,
7
+ and choose a visual preset. Norna provides the page structure, navigation,
8
+ responsive image output, validation, and static build.
49
9
 
50
- ```sh
51
- npm install
52
- npm run dev:local
53
- npm run test:fixture:build
54
- npm run package:check
55
- ```
10
+ The result stays readable as source files and works naturally with Git and
11
+ AI-assisted editing. Norna deliberately offers fewer architectural choices
12
+ than a general-purpose site generator: you describe the site instead of
13
+ implementing a new presentation layer for every project.
56
14
 
57
- For a new site repository:
15
+ [Documentation](https://janga.github.io/norna/) |
16
+ [Five-minute tutorial](docs/getting-started.md) |
17
+ [Live examples](https://janga.github.io/norna/examples/) |
18
+ [npm package](https://www.npmjs.com/package/@janga/norna)
19
+
20
+ [![A multi-page dog shelter site with a logo, route navigation, text, a card, and a managed image.](docs/assets/norna-dog-shelter.jpg)](https://janga.github.io/norna/examples/complete-sites/dog-shelter-multi-page/)
21
+
22
+ The screenshot shows the built
23
+ [multi-page example source](examples/complete-sites/dog-shelter-multi-page/).
24
+
25
+ ## Quick Start
26
+
27
+ You need Node.js 22.12 or later.
58
28
 
59
29
  ```sh
60
- cd ../
61
30
  npx @janga/norna@latest init my-site
62
31
  cd my-site
63
32
  npm install
64
33
  npm run dev
65
34
  ```
66
35
 
67
- Run `init` before `npm install`. A new site directory is not a Node project
68
- until the starter has created its `package.json`; running `npm install` in an
69
- empty directory can make npm use a parent project instead. Keep real site
70
- repositories next to this engine repository, not inside it.
71
-
72
- The starter pins `@janga/norna` to an exact npm version. Commit the
73
- generated `package-lock.json` in the site repository so local builds and GitHub
74
- Actions use the same engine version.
75
-
76
- ## Common Tasks
77
-
78
- - Create a site: [Getting Started](docs/getting-started.md)
79
- - Understand required site files: [Site Structure](docs/site-structure.md)
80
- - Edit sections and managed media blocks: [Content](docs/content.md)
81
- - Configure a site: [Configuration](docs/configuration.md)
82
- - Publish under a GitHub Pages project path:
83
- [`site.basePath`](docs/configuration.md#sitebasepath)
84
- - Configure site-wide theme: [Theme](docs/theme.md)
85
- - Export a theme preset for inspection: [`theme:export`](docs/commands.md#command-summary)
86
- - Add route pages: [Routes](docs/routes.md)
87
- - Set page width: [`layout.pageWidth`](docs/theme.md#layout)
88
- - Set side gutters: [`layout.gutter`](docs/theme.md#layout)
89
- - Set image area width: [`gallery.width`](docs/theme.md#image-sizing)
90
- - Keep images within viewport height:
91
- [`gallery.maxAvailableHeightPercent`](docs/theme.md#image-sizing)
92
- - Set the site font: [`typography.fontFamily`](docs/theme.md#typography)
93
- - Choose typography presets and overrides: [Typography](docs/typography.md)
94
- - Look up CLI and npm scripts: [Commands](docs/commands.md)
95
- - Understand generated images: [Images And Metadata](docs/images-and-metadata.md)
96
- - Run local preview: [Local Development](docs/local-development.md)
97
- - Publish a site: [Publishing](docs/publishing.md)
98
- - Work on the engine: [Engine Development](docs/engine-development.md)
99
-
100
- ## Requirements
101
-
102
- - Node.js `>=22.12.0`.
103
- - ImageMagick, either `magick` or the older `identify` and `convert` commands,
104
- when generating images locally.
105
- - GitHub CLI (`gh`) when using deploy checks or deploy monitoring.
106
- - Playwright Chromium when running navigation diagnostics.
107
-
108
- GitHub Pages workflows created from the starter install the image tools during
109
- deployment.
110
-
111
- ## License
112
-
113
- `norna` is licensed under [GNU GPL v3](LICENSE).
36
+ Open the URL printed by the development server, then edit the files under
37
+ `site/`. The generated project pins its Norna version and includes the npm
38
+ scripts and GitHub Pages workflow needed to check, build, and publish it.
39
+
40
+ Follow the [five-minute tutorial](docs/getting-started.md) for a first edit and
41
+ verified build.
42
+
43
+ ## The Site Model
44
+
45
+ ```text
46
+ site/
47
+ |-- config.md
48
+ |-- theme.md
49
+ |-- sitewide-content.md
50
+ |-- content.md
51
+ |-- images/
52
+ |-- routes/
53
+ `-- public/
54
+ ```
55
+
56
+ - `content.md` holds the homepage and its sections.
57
+ - `images/` holds managed source images beside the content they belong to.
58
+ - `routes/` adds pages, each with content and optional local images and theme.
59
+ - `theme.md` normally selects one complete visual preset.
60
+ - `sitewide-content.md` holds shared identity, banners, and footer content.
61
+ - `config.md` holds the public URL and optional language and scroll behavior.
62
+ - `public/` holds static files copied without processing.
63
+
64
+ Norna validates this structure, processes managed images when needed, and
65
+ builds the generated website into `dist/`.
66
+
67
+ ## Why Norna?
68
+
69
+ - **Useful defaults instead of a new layout project.** Presets coordinate
70
+ typography, spacing, palettes, image sizing, and section surfaces.
71
+ - **Images without the repetitive work.** Norna creates responsive variants,
72
+ selects suitable browser sources, and reuses unchanged generated output.
73
+ - **Files that remain manageable.** Content and assets can be inspected,
74
+ reviewed, versioned, and edited with the tools you already use.
75
+ - **A complete publishing path.** The starter includes validation, static
76
+ builds, and an integrated GitHub Pages workflow.
77
+
78
+ ## Examples
79
+
80
+ Every example is built in the repository test suite and published with the
81
+ documentation.
82
+
83
+ | Example | Live site | Source |
84
+ | --- | --- | --- |
85
+ | Dog shelter, single page | [Open demo](https://janga.github.io/norna/examples/complete-sites/dog-shelter-single-page/) | [View files](examples/complete-sites/dog-shelter-single-page/) |
86
+ | Dog shelter, multi-page | [Open demo](https://janga.github.io/norna/examples/complete-sites/dog-shelter-multi-page/) | [View files](examples/complete-sites/dog-shelter-multi-page/) |
87
+ | Theme presets | [Open demo](https://janga.github.io/norna/examples/feature-demos/theme-presets/) | [View files](examples/feature-demos/theme-presets/) |
88
+ | Media and surfaces | [Open demo](https://janga.github.io/norna/examples/feature-demos/media-and-surfaces/) | [View files](examples/feature-demos/media-and-surfaces/) |
89
+ | Sitewide content | [Open demo](https://janga.github.io/norna/examples/feature-demos/sitewide-content/) | [View files](examples/feature-demos/sitewide-content/) |
90
+
91
+ See [examples/README.md](examples/README.md) for what each example is intended
92
+ to demonstrate and how to run it locally.
93
+
94
+ ## Is Norna A Good Fit?
95
+
96
+ Norna is designed for sites that should be straightforward to edit, review,
97
+ and publish without creating a custom presentation architecture. Typical uses
98
+ include project and product sites, documentation, portfolios, personal sites,
99
+ and organisation or information sites.
100
+
101
+ Norna is not intended for dynamic applications, database-backed publishing,
102
+ visual CMS workflows, or projects that need complete control over templates,
103
+ components, and rendering logic.
104
+
105
+ ## Requirements And Current Limits
106
+
107
+ - Node.js `>=22.12.0` is required.
108
+ - ImageMagick is required when Norna generates responsive raster image variants.
109
+ - GitHub Pages is the only publishing provider integrated by Norna today.
110
+ - The build output is static and written to `dist/`; other static hosts can
111
+ serve that output, but Norna does not currently configure or publish to them.
112
+ - Norna is pre-1.0 software. Its file model and CLI may still change between
113
+ releases.
114
+
115
+ GitHub CLI and Playwright are needed only for specific deploy helpers and
116
+ engine diagnostics, not for ordinary editing and local preview. See
117
+ [Requirements and limitations](docs/requirements.md) for the exact boundaries.
114
118
 
115
119
  ## Documentation
116
120
 
117
- The Norna-built introduction site lives in [`site/`](site/) and is configured
118
- for GitHub Pages at <https://janga.github.io/norna/>.
121
+ - [Five-minute tutorial](docs/getting-started.md)
122
+ - [Task-oriented documentation map](docs/README.md)
123
+ - [How-to guides](docs/README.md#how-to-guides)
124
+ - [Concepts and explanation](docs/README.md#concepts-and-explanation)
125
+ - [Technical reference](docs/README.md#reference)
126
+ - [Troubleshooting](docs/README.md#troubleshooting)
127
+ - [AI-readable documentation index](https://janga.github.io/norna/llms.txt)
128
+
129
+ Engine contributors should start with
130
+ [Engine Development](docs/engine-development.md). Planning and future work are
131
+ tracked in [BACKLOG.md](BACKLOG.md).
119
132
 
120
- Start with [docs/README.md](docs/README.md) for the documentation map and
121
- recommended reading order.
133
+ ## Support And License
122
134
 
123
- Planning and future work are tracked in [BACKLOG.md](BACKLOG.md).
135
+ Use the [issue tracker](https://github.com/janga/norna/issues) for reproducible
136
+ bugs, documentation problems, and focused feature proposals.
124
137
 
125
- `AGENTS.md` contains operating rules for coding agents. Human-facing product
126
- and workflow documentation should live in this README and `docs/`.
138
+ Norna is licensed under [GNU GPL v3](LICENSE).
package/bin/norna-cli.mjs CHANGED
@@ -14,7 +14,7 @@ Commands:
14
14
  dev:status Show local dev server status
15
15
  dev:logs Show local dev server logs
16
16
  dev:stop Stop local dev server
17
- config:check Validate site/config.mjs
17
+ config:check Validate site/config.md
18
18
  content:check Validate site/content.md and image references
19
19
  content:sync Move misplaced Norna-managed images and refresh generated images
20
20
  theme:export Export a commented theme preset reference
package/docs/README.md CHANGED
@@ -1,75 +1,107 @@
1
- # norna Documentation
2
-
3
- This directory contains the reusable product and engine documentation for
4
- `norna`. The root README is the entry point; these files hold the details.
5
-
6
- ## Recommended Reading
7
-
8
- For a site maintainer:
9
-
10
- 1. [Getting Started](getting-started.md)
11
- 2. [Site Structure](site-structure.md)
12
- 3. [Theme](theme.md)
13
- 4. [Sitewide Content](sitewide-content.md)
14
- 5. [Configuration](configuration.md)
15
- 6. [Content](content.md)
16
- 7. [Typography](typography.md)
17
- 8. [Routes](routes.md)
18
- 9. [Images And Metadata](images-and-metadata.md)
19
- 10. [Local Development](local-development.md)
20
- 11. [Publishing](publishing.md)
21
-
22
- For a developer integrating or updating the engine:
23
-
24
- 1. [Commands](commands.md)
25
- 2. [Configuration](configuration.md)
26
- 3. [Content](content.md)
27
- 4. [Theme](theme.md)
28
- 5. [Typography](typography.md)
29
- 6. [Routes](routes.md)
30
- 7. [Engine Development](engine-development.md)
31
-
32
- For design and naming principles:
33
-
34
- 1. [Command Organization](design/command-organization.md)
35
- 2. [Site Examples Structure](design/site-examples-structure.md)
36
- 3. [Norna Diagram Design](design/norna-diagram-design.md)
37
-
38
- For a quick reference:
39
-
40
- - [Configuration](configuration.md) describes technical `site/config.mjs`
41
- fields such as URL, base path, locale labels, GitHub, and deploy
42
- settings.
43
- - [Sitewide Content](sitewide-content.md) describes shared site identity, banners
44
- and footer content in `site/sitewide-content.md`.
45
- - [Content](content.md) describes page frontmatter, Markdown-authored
46
- sections, optional section metadata, managed media blocks, temporary sections,
47
- and content validation.
48
- - [Theme](theme.md) describes complete visual presets, focused overrides,
49
- preset export, layout, image sizing, typography, palettes, and section
50
- surfaces.
51
- - [Typography](typography.md) describes presets, rhythms, roles, overrides,
52
- inheritance, and inspection commands.
53
- - [Routes](routes.md) describes route files, slugs, route navigation, and
54
- route image directories.
55
- - [Commands](commands.md) lists the public CLI surface and starter npm scripts.
56
- - [Site Structure](site-structure.md) separates versioned source files from
57
- generated build output.
58
-
59
- Design documents are intentionally separate from the user reference:
60
-
61
- - [Command Organization](design/command-organization.md) defines command
62
- namespaces for standalone sites, mixed projects, and engine development.
63
- - [Site Examples Structure](design/site-examples-structure.md) defines the
64
- intended vocabulary for starters, examples, documentation sites, reference
65
- docs, and fixtures.
66
- - [Norna Diagram Design](design/norna-diagram-design.md) defines the first
67
- experiment for technical and pedagogical diagrams without adding external
68
- diagram tooling to the build pipeline.
69
-
70
- Site repositories should document only their site-specific choices and link here
71
- for generic `norna` behavior.
72
-
73
- `norna` is licensed under [GNU GPL v3](../LICENSE).
74
-
75
- Planning and future work are tracked in [../BACKLOG.md](../BACKLOG.md).
1
+ # Norna Documentation
2
+
3
+ Use this page to choose documentation by what you are trying to accomplish.
4
+ The [Norna introduction site](https://janga.github.io/norna/) explains the
5
+ product; these Markdown files provide the tutorial, task guides, explanation,
6
+ and exact reference.
7
+
8
+ ## Start Here
9
+
10
+ 1. [Build your first Norna site](getting-started.md) follows one short path from
11
+ an empty directory to a checked build.
12
+ 2. [Requirements and limitations](requirements.md) states what must be
13
+ installed and what Norna does and does not support today.
14
+ 3. [Examples](../examples/README.md) pairs complete and focused source projects
15
+ with their rendered sites.
16
+
17
+ Do not read the reference from beginning to end before trying Norna. Complete
18
+ the tutorial, then use the task links below when a real site needs them.
19
+
20
+ ## How-To Guides
21
+
22
+ ### Create And Run A Site
23
+
24
+ - [Create a standalone site](getting-started.md#1-create-and-run-the-site)
25
+ - [Add Norna to an existing Node project](how-to/embedded-site.md)
26
+ - [Start and manage local preview](local-development.md)
27
+ - [Inspect or update the installed engine](commands.md#command-summary)
28
+
29
+ ### Write And Organise Content
30
+
31
+ - [Write page sections](content.md#sections)
32
+ - [Use image stacks, carousels, and cards](content.md#managed-media-blocks)
33
+ - [Add notes to prose](content.md#markdown-text)
34
+ - [Add another page](routes.md)
35
+ - [Add shared identity, banners, and a footer](sitewide-content.md)
36
+
37
+ ### Work With Images
38
+
39
+ - [Add managed source images](images-and-metadata.md#managed-source-images)
40
+ - [Place image blocks in Markdown](content.md#managed-media-blocks)
41
+ - [Check and sync moved image references](content.md#validation-and-sync)
42
+ - [Understand generated variants and SVG handling](images-and-metadata.md#generated-variants-and-static-svg)
43
+
44
+ ### Change The Presentation
45
+
46
+ - [Choose a complete theme preset](theme.md#theme-presets)
47
+ - [Inspect and override a preset](theme.md#overrides)
48
+ - [Give a route a different theme](theme.md#route-themes)
49
+ - [Adjust typography](typography.md)
50
+
51
+ ### Check, Build, And Publish
52
+
53
+ - [Run content and configuration checks](commands.md#starter-npm-scripts)
54
+ - [Build and inspect generated output](site-structure.md#generated-files)
55
+ - [Publish through the included GitHub Pages workflow](publishing.md#github-pages-workflow)
56
+ - [Monitor or troubleshoot a deployment](publishing.md)
57
+
58
+ ## Concepts And Explanation
59
+
60
+ - [Norna's site model](https://janga.github.io/norna/concepts/) explains how
61
+ files, sections, images, and routes become a website.
62
+ - [Site Structure](site-structure.md) separates source files, generated files,
63
+ examples, fixtures, and engine code.
64
+ - [Images and Metadata](images-and-metadata.md) explains why Norna manages image
65
+ variants and published URLs.
66
+ - [Command Organization](design/command-organization.md) explains the command
67
+ model for standalone sites, embedded sites, and engine development.
68
+ - [Site Examples Structure](design/site-examples-structure.md) explains the
69
+ difference between starters, examples, documentation sites, and fixtures.
70
+
71
+ ## Reference
72
+
73
+ - [Configuration](configuration.md): `site/config.md` fields and defaults.
74
+ - [Sitewide Content](sitewide-content.md): shared identity, banners, and footer.
75
+ - [Content](content.md): page frontmatter, sections, blocks, notes, and checks.
76
+ - [Theme](theme.md): presets, overrides, layout, image sizing, and surfaces.
77
+ - [Typography](typography.md): typography roles, rhythms, and inspection.
78
+ - [Routes](routes.md): directory names, route IDs, URLs, and route images.
79
+ - [Images and Metadata](images-and-metadata.md): source formats, variants, and
80
+ generated manifests.
81
+ - [Commands](commands.md): CLI commands, npm scripts, options, and exit behavior.
82
+ - [Requirements and limitations](requirements.md): runtime dependencies,
83
+ optional tools, and current product boundaries.
84
+
85
+ ## Troubleshooting
86
+
87
+ - [Common first problems](getting-started.md#common-first-problems)
88
+ - [Manage and restart local preview](local-development.md#manage-preview)
89
+ - [Rebuild a stale preview](local-development.md#rebuild-stale-preview)
90
+ - [Validate and sync content](content.md#validation-and-sync)
91
+ - [Inspect publishing failures](publishing.md)
92
+ - [Report a reproducible problem](https://github.com/janga/norna/issues)
93
+
94
+ ## Engine Contributors
95
+
96
+ Start with [Engine Development](engine-development.md). Design documents live
97
+ under [`docs/design/`](design/), and planned work is tracked in
98
+ [BACKLOG.md](../BACKLOG.md).
99
+
100
+ ## AI-Readable Access
101
+
102
+ The documentation source is Markdown and can be read directly from this
103
+ repository. The published site also exposes
104
+ [`llms.txt`](https://janga.github.io/norna/llms.txt), which links AI tools to
105
+ the authoritative Markdown entry points rather than duplicating them.
106
+
107
+ Norna is licensed under [GNU GPL v3](../LICENSE).
package/docs/commands.md CHANGED
@@ -101,7 +101,7 @@ should normally mean the repository's complete publishable artifact, while
101
101
  - `doctor`: prints resolved engine root, site project root, site directory,
102
102
  content/config/image/public paths, generated manifest, Astro output paths, and
103
103
  cache path.
104
- - `config:check`: validates `site/config.mjs` against the runtime config
104
+ - `config:check`: validates `site/config.md` against the runtime config
105
105
  reader.
106
106
  - `content:check`: validates section structure, managed media references,
107
107
  inline styles, and common content mistakes.
@@ -148,10 +148,11 @@ should normally mean the repository's complete publishable artifact, while
148
148
  server tracked under `.astro/`.
149
149
  - `preview`: runs Astro preview with the `norna` Astro config.
150
150
  - `astro`: runs Astro with the `norna` Astro config.
151
- - `deploy`: builds and publishes an already committed deploy branch.
151
+ - `deploy`: discovers the GitHub repository and default branch, then builds and
152
+ publishes the already committed branch.
152
153
  - `deploy:commit`: older convenience flow that builds, stages allowed site
153
154
  changes, commits, pushes, and checks Pages.
154
- - `deploy:watch`: follows a GitHub Pages workflow run.
155
+ - `deploy:watch`: follows the included `deploy.yml` GitHub Pages workflow run.
155
156
 
156
157
  ## Deploy Watch Options
157
158
 
@@ -169,4 +170,6 @@ should normally mean the repository's complete publishable artifact, while
169
170
  ```
170
171
 
171
172
  Durations may use `ms`, `s`, or `m`, for example `500ms`, `10s`, or `15m`.
172
- Without `--sha`, the current `HEAD` is monitored.
173
+ Without repository and branch options, Norna discovers the current GitHub
174
+ repository and its default branch. Without `--sha`, the current `HEAD` is
175
+ monitored.