@janga/norna 0.7.18 → 0.7.22

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 (595) hide show
  1. package/README.md +22 -12
  2. package/astro.config.mjs +22 -0
  3. package/bin/norna-cli.mjs +6 -0
  4. package/package.json +45 -12
  5. package/schemas/category.schema.json +20 -0
  6. package/schemas/config.schema.json +16 -6
  7. package/schemas/content-frontmatter.schema.json +5 -5
  8. package/schemas/manifest.json +2 -1
  9. package/schemas/page-theme.schema.json +22 -22
  10. package/schemas/sitewide-content.schema.json +18 -18
  11. package/schemas/theme.schema.json +312 -146
  12. package/scripts/add-site-node.mjs +251 -0
  13. package/scripts/check-config.mjs +10 -2
  14. package/scripts/deploy-site.mjs +5 -8
  15. package/scripts/generate-images.mjs +11 -15
  16. package/scripts/generate-schemas.mjs +4 -1
  17. package/scripts/init-site.mjs +35 -0
  18. package/scripts/lib/astro-command.mjs +14 -9
  19. package/scripts/lib/editor-language-service.mjs +28 -177
  20. package/scripts/lib/heading-ids.mjs +3 -1
  21. package/scripts/lib/navigation-model.mjs +23 -17
  22. package/scripts/lib/norna-markdown-blocks.mjs +64 -145
  23. package/scripts/lib/norna-markdown-render-plugin.mjs +37 -0
  24. package/scripts/lib/object.mjs +28 -0
  25. package/scripts/lib/page-markdown.mjs +282 -0
  26. package/scripts/lib/presentation-contract.mjs +266 -0
  27. package/scripts/lib/presentation-palette-metadata.mjs +51 -0
  28. package/scripts/lib/presentation.mjs +526 -79
  29. package/scripts/lib/project-config.mjs +53 -6
  30. package/scripts/lib/schema-definitions.mjs +53 -13
  31. package/scripts/lib/schema-editor-metadata.mjs +107 -18
  32. package/scripts/lib/schema-value-definitions.mjs +24 -10
  33. package/scripts/lib/site-content.mjs +23 -238
  34. package/scripts/lib/site-paths.mjs +2 -3
  35. package/scripts/lib/site-structure.mjs +189 -0
  36. package/scripts/lib/theme-presets.mjs +75 -104
  37. package/scripts/lib/theme-profiles.mjs +221 -0
  38. package/scripts/lib/typography.mjs +220 -35
  39. package/scripts/lib/yaml-config.mjs +46 -6
  40. package/scripts/lib/yaml-indentation.mjs +86 -0
  41. package/scripts/show-typography.mjs +2 -3
  42. package/scripts/sync-content-sections.mjs +87 -76
  43. package/src/components/DisplaySettings.astro +107 -0
  44. package/src/components/ImageCarousel.astro +34 -13
  45. package/src/components/NavigationPageTree.astro +74 -43
  46. package/src/components/SectionNavigationScript.astro +56 -2
  47. package/src/components/SiteBreadcrumbs.astro +15 -12
  48. package/src/components/SiteNavigation.astro +92 -41
  49. package/src/components/SitePage.astro +35 -39
  50. package/src/components/SiteSection.astro +35 -191
  51. package/src/components/SiteTreeNavigation.astro +10 -9
  52. package/src/layouts/BaseLayout.astro +46 -6
  53. package/src/lib/generatedImages.ts +0 -7
  54. package/src/lib/readerPreferencesScript.mjs +141 -0
  55. package/src/lib/sectionContent.ts +119 -201
  56. package/src/lib/siteNavigation.ts +36 -18
  57. package/src/lib/sitePages.ts +91 -20
  58. package/src/pages/[...slug].astro +2 -2
  59. package/src/styles/global.css +759 -296
  60. package/starters/basic/README.md +2 -2
  61. package/docs/README.md +0 -137
  62. package/docs/assets/norna-dog-shelter.jpg +0 -0
  63. package/docs/commands.md +0 -189
  64. package/docs/configuration.md +0 -142
  65. package/docs/content.md +0 -351
  66. package/docs/design/command-organization.md +0 -414
  67. package/docs/design/navigation-and-theme-plan.md +0 -186
  68. package/docs/design/norna-diagram-design.md +0 -159
  69. package/docs/design/site-examples-structure.md +0 -119
  70. package/docs/engine-development.md +0 -215
  71. package/docs/getting-started.md +0 -206
  72. package/docs/how-to/embedded-site.md +0 -35
  73. package/docs/images-and-metadata.md +0 -188
  74. package/docs/local-development.md +0 -82
  75. package/docs/pages.md +0 -190
  76. package/docs/public-files.md +0 -118
  77. package/docs/publishing.md +0 -117
  78. package/docs/requirements.md +0 -54
  79. package/docs/site-files.md +0 -152
  80. package/docs/sitewide-content.md +0 -73
  81. package/docs/theme.md +0 -237
  82. package/docs/typography.md +0 -168
  83. package/examples/README.md +0 -49
  84. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +0 -35
  85. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +0 -97
  86. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +0 -852
  87. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +0 -4
  88. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +0 -1
  89. package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +0 -183
  90. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +0 -1
  91. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +0 -8
  92. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +0 -13
  93. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +0 -36
  94. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +0 -5
  95. package/examples/complete-sites/dog-shelter-multi-page/.astro/types.d.ts +0 -2
  96. package/examples/complete-sites/dog-shelter-multi-page/README.md +0 -24
  97. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +0 -74
  98. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  99. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  100. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  101. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  102. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  103. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  104. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  105. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  106. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  107. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  108. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  109. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  110. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  111. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  112. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  113. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  114. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/package.json +0 -3
  115. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  116. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  117. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  118. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  119. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  120. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  121. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  122. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  123. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  124. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  125. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  126. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +0 -98
  127. package/examples/complete-sites/dog-shelter-multi-page/site/config.yaml +0 -1
  128. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/content.md +0 -23
  129. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/images/shelter-dog.jpg +0 -0
  130. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/content.md +0 -21
  131. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rex.jpg +0 -0
  132. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rover.jpg +0 -0
  133. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/content.md +0 -22
  134. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/images/adoption-dog.jpg +0 -0
  135. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +0 -10
  136. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +0 -9
  137. package/examples/complete-sites/dog-shelter-multi-page/site/public/robots.txt +0 -2
  138. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +0 -4
  139. package/examples/complete-sites/dog-shelter-multi-page/site/theme.yaml +0 -1
  140. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +0 -35
  141. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +0 -97
  142. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +0 -852
  143. package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +0 -4
  144. package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +0 -1
  145. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +0 -183
  146. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +0 -1
  147. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +0 -8
  148. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +0 -13
  149. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +0 -18
  150. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +0 -5
  151. package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +0 -2
  152. package/examples/complete-sites/dog-shelter-single-page/README.md +0 -24
  153. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +0 -74
  154. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  155. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  156. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  157. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  158. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  159. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  160. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  161. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  162. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  163. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  164. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  165. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  166. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  167. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  168. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  169. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  170. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +0 -3
  171. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  172. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  173. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  174. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  175. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  176. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  177. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  178. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  179. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  180. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  181. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  182. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +0 -50
  183. package/examples/complete-sites/dog-shelter-single-page/site/config.yaml +0 -1
  184. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/content.md +0 -37
  185. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/foster-dog.jpg +0 -0
  186. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/rescue-dog.jpg +0 -0
  187. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +0 -10
  188. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +0 -9
  189. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +0 -2
  190. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +0 -4
  191. package/examples/complete-sites/dog-shelter-single-page/site/theme.yaml +0 -1
  192. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +0 -35
  193. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +0 -97
  194. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +0 -844
  195. package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +0 -4
  196. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +0 -1
  197. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +0 -183
  198. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +0 -1
  199. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +0 -14
  200. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +0 -5
  201. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +0 -2
  202. package/examples/feature-demos/media-and-surfaces/README.md +0 -21
  203. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +0 -80
  204. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  205. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  206. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  207. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  208. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  209. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  210. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  211. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  212. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  213. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  214. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  215. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  216. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +0 -1389
  217. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  218. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  219. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  220. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  221. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  222. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +0 -3
  223. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  224. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  225. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  226. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  227. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  228. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  229. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  230. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  231. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  232. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  233. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  234. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +0 -66
  235. package/examples/feature-demos/media-and-surfaces/site/config.yaml +0 -1
  236. package/examples/feature-demos/media-and-surfaces/site/pages/000-home/content.md +0 -15
  237. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/content.md +0 -71
  238. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-carousel.svg +0 -11
  239. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-stack.svg +0 -9
  240. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-surfaces.svg +0 -8
  241. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-one.svg +0 -8
  242. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-three.svg +0 -13
  243. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-two.svg +0 -8
  244. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-one.svg +0 -8
  245. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-two.svg +0 -9
  246. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +0 -42
  247. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -2
  248. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +0 -2
  249. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  250. package/examples/feature-demos/media-and-surfaces/site/theme.yaml +0 -1
  251. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +0 -59
  252. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +0 -138
  253. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +0 -755
  254. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +0 -1
  255. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +0 -1
  256. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +0 -183
  257. package/examples/feature-demos/sitewide-content/.astro/data-store.json +0 -1
  258. package/examples/feature-demos/sitewide-content/.astro/dev.json +0 -13
  259. package/examples/feature-demos/sitewide-content/.astro/dev.log +0 -18
  260. package/examples/feature-demos/sitewide-content/.astro/settings.json +0 -5
  261. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +0 -2
  262. package/examples/feature-demos/sitewide-content/README.md +0 -26
  263. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +0 -74
  264. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  265. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  266. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  267. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  268. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  269. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  270. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  271. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  272. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  273. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  274. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  275. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  276. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  277. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  278. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  279. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  280. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +0 -3
  281. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  282. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  283. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  284. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  285. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  286. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  287. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  288. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  289. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  290. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  291. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  292. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +0 -1
  293. package/examples/feature-demos/sitewide-content/site/config.yaml +0 -1
  294. package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +0 -17
  295. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +0 -17
  296. package/examples/feature-demos/sitewide-content/site/pages/020-notices/content.md +0 -23
  297. package/examples/feature-demos/sitewide-content/site/pages/030-footer/content.md +0 -18
  298. package/examples/feature-demos/sitewide-content/site/public/logo.svg +0 -6
  299. package/examples/feature-demos/sitewide-content/site/public/robots.txt +0 -2
  300. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +0 -14
  301. package/examples/feature-demos/sitewide-content/site/theme.yaml +0 -1
  302. package/examples/feature-demos/theme-preset-documentation/README.md +0 -16
  303. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +0 -74
  304. package/examples/feature-demos/theme-preset-documentation/site/config.yaml +0 -1
  305. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/content.md +0 -30
  306. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/black-schnauzer.jpg +0 -0
  307. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/retriever-portrait.jpg +0 -0
  308. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/schnauzer-portrait.jpg +0 -0
  309. package/examples/feature-demos/theme-preset-documentation/site/public/robots.txt +0 -2
  310. package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +0 -3
  311. package/examples/feature-demos/theme-preset-documentation/site/theme.yaml +0 -1
  312. package/examples/feature-demos/theme-preset-portfolio/README.md +0 -16
  313. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +0 -74
  314. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +0 -1
  315. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/content.md +0 -31
  316. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/puppy-portrait.jpg +0 -0
  317. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/shepherd-portrait.jpg +0 -0
  318. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/white-puppy.jpg +0 -0
  319. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +0 -2
  320. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +0 -3
  321. package/examples/feature-demos/theme-preset-portfolio/site/theme.yaml +0 -1
  322. package/examples/feature-demos/theme-preset-project/.astro/collections/routeTheme.schema.json +0 -746
  323. package/examples/feature-demos/theme-preset-project/.astro/collections/site.schema.json +0 -59
  324. package/examples/feature-demos/theme-preset-project/.astro/collections/sitewide.schema.json +0 -138
  325. package/examples/feature-demos/theme-preset-project/.astro/collections/theme.schema.json +0 -755
  326. package/examples/feature-demos/theme-preset-project/.astro/content-assets.mjs +0 -4
  327. package/examples/feature-demos/theme-preset-project/.astro/content-modules.mjs +0 -1
  328. package/examples/feature-demos/theme-preset-project/.astro/content.d.ts +0 -183
  329. package/examples/feature-demos/theme-preset-project/.astro/data-store.json +0 -1
  330. package/examples/feature-demos/theme-preset-project/.astro/dev-local.json +0 -8
  331. package/examples/feature-demos/theme-preset-project/.astro/dev.json +0 -15
  332. package/examples/feature-demos/theme-preset-project/.astro/dev.log +0 -164
  333. package/examples/feature-demos/theme-preset-project/.astro/settings.json +0 -5
  334. package/examples/feature-demos/theme-preset-project/.astro/types.d.ts +0 -2
  335. package/examples/feature-demos/theme-preset-project/README.md +0 -16
  336. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/_metadata.json +0 -80
  337. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  338. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  339. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  340. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  341. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  342. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  343. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  344. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  345. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  346. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  347. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  348. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  349. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js +0 -1389
  350. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  351. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  352. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  353. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  354. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  355. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/package.json +0 -3
  356. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  357. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  358. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  359. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  360. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  361. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  362. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  363. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  364. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  365. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  366. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  367. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +0 -74
  368. package/examples/feature-demos/theme-preset-project/site/config.yaml +0 -1
  369. package/examples/feature-demos/theme-preset-project/site/pages/000-home/content.md +0 -31
  370. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/boxer-portrait.jpg +0 -0
  371. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grass-puppy.jpg +0 -0
  372. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grey-street-dog.jpg +0 -0
  373. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +0 -2
  374. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +0 -3
  375. package/examples/feature-demos/theme-preset-project/site/theme.yaml +0 -1
  376. package/examples/feature-demos/theme-preset-statement/README.md +0 -16
  377. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +0 -74
  378. package/examples/feature-demos/theme-preset-statement/site/config.yaml +0 -1
  379. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/content.md +0 -31
  380. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/black-pedigree.jpg +0 -0
  381. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-grass.jpg +0 -0
  382. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-wide.jpg +0 -0
  383. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +0 -2
  384. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +0 -3
  385. package/examples/feature-demos/theme-preset-statement/site/theme.yaml +0 -1
  386. package/fixtures/basic/site/.norna/generated-images.json +0 -1
  387. package/fixtures/basic/site/config.yaml +0 -1
  388. package/fixtures/basic/site/pages/000-home/content.md +0 -14
  389. package/fixtures/basic/site/pages/000-home/images/.gitkeep +0 -1
  390. package/fixtures/basic/site/public/robots.txt +0 -2
  391. package/fixtures/basic/site/sitewide-content.yaml +0 -3
  392. package/fixtures/basic/site/theme.yaml +0 -1
  393. package/fixtures/content-model-v2/.astro/collections/site.schema.json +0 -776
  394. package/fixtures/content-model-v2/.astro/collections/theme.schema.json +0 -668
  395. package/fixtures/content-model-v2/.astro/content-assets.mjs +0 -4
  396. package/fixtures/content-model-v2/.astro/content-modules.mjs +0 -1
  397. package/fixtures/content-model-v2/.astro/content.d.ts +0 -175
  398. package/fixtures/content-model-v2/.astro/data-store.json +0 -1
  399. package/fixtures/content-model-v2/.astro/dev-local.json +0 -8
  400. package/fixtures/content-model-v2/.astro/dev.json +0 -13
  401. package/fixtures/content-model-v2/.astro/dev.log +0 -231
  402. package/fixtures/content-model-v2/.astro/settings.json +0 -5
  403. package/fixtures/content-model-v2/.astro/types.d.ts +0 -2
  404. package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
  405. package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +0 -1
  406. package/fixtures/content-model-v2/dist/guide/index.html +0 -3
  407. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
  408. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
  409. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
  410. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
  411. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
  412. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
  413. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
  414. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
  415. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
  416. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
  417. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
  418. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
  419. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
  420. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
  421. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
  422. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
  423. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
  424. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
  425. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
  426. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
  427. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
  428. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
  429. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
  430. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
  431. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
  432. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
  433. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
  434. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
  435. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
  436. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
  437. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
  438. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
  439. package/fixtures/content-model-v2/dist/index.html +0 -8
  440. package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +0 -80
  441. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  442. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  443. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  444. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  445. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  446. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  447. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  448. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  449. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  450. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  451. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  452. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  453. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +0 -1389
  454. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  455. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  456. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  457. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  458. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  459. package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +0 -3
  460. package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  461. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  462. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  463. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  464. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  465. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  466. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  467. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  468. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  469. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  470. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  471. package/fixtures/content-model-v2/site/.norna/generated-images.json +0 -210
  472. package/fixtures/content-model-v2/site/config.yaml +0 -1
  473. package/fixtures/content-model-v2/site/pages/000-home/content.md +0 -79
  474. package/fixtures/content-model-v2/site/pages/000-home/images/adopt.svg +0 -9
  475. package/fixtures/content-model-v2/site/pages/000-home/images/detail.jpg +0 -0
  476. package/fixtures/content-model-v2/site/pages/000-home/images/duplicate.jpg +0 -0
  477. package/fixtures/content-model-v2/site/pages/000-home/images/foster.svg +0 -12
  478. package/fixtures/content-model-v2/site/pages/000-home/images/hero.jpg +0 -0
  479. package/fixtures/content-model-v2/site/pages/000-home/images/image.jpg +0 -0
  480. package/fixtures/content-model-v2/site/pages/000-home/images/slide-one.jpg +0 -0
  481. package/fixtures/content-model-v2/site/pages/000-home/images/slide-three.jpg +0 -0
  482. package/fixtures/content-model-v2/site/pages/000-home/images/slide-two.jpg +0 -0
  483. package/fixtures/content-model-v2/site/pages/010-guide/content.md +0 -18
  484. package/fixtures/content-model-v2/site/pages/010-guide/images/duplicate.jpg +0 -0
  485. package/fixtures/content-model-v2/site/theme.yaml +0 -4
  486. package/fixtures/nested-pages/.astro/collections/site.schema.json +0 -35
  487. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +0 -97
  488. package/fixtures/nested-pages/.astro/collections/theme.schema.json +0 -844
  489. package/fixtures/nested-pages/.astro/content-assets.mjs +0 -4
  490. package/fixtures/nested-pages/.astro/content-modules.mjs +0 -1
  491. package/fixtures/nested-pages/.astro/content.d.ts +0 -183
  492. package/fixtures/nested-pages/.astro/data-store.json +0 -1
  493. package/fixtures/nested-pages/.astro/dev-local.json +0 -8
  494. package/fixtures/nested-pages/.astro/dev.log +0 -1128
  495. package/fixtures/nested-pages/.astro/settings.json +0 -5
  496. package/fixtures/nested-pages/.astro/types.d.ts +0 -2
  497. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +0 -74
  498. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  499. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  500. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  501. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  502. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  503. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  504. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  505. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  506. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  507. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  508. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  509. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  510. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  511. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  512. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  513. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  514. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +0 -3
  515. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  516. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  517. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  518. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  519. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  520. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  521. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  522. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  523. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  524. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  525. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  526. package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
  527. package/fixtures/nested-pages/site/config.yaml +0 -3
  528. package/fixtures/nested-pages/site/pages/000-home/content.md +0 -15
  529. package/fixtures/nested-pages/site/pages/010-guides/content.md +0 -15
  530. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +0 -21
  531. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +0 -21
  532. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +0 -18
  533. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +0 -2
  534. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
  535. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +0 -9
  536. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +0 -3
  537. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +0 -3
  538. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +0 -3
  539. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +0 -3
  540. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +0 -3
  541. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +0 -3
  542. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +0 -3
  543. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +0 -3
  544. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +0 -3
  545. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +0 -3
  546. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +0 -3
  547. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +0 -3
  548. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +0 -3
  549. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +0 -3
  550. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +0 -3
  551. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +0 -3
  552. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +0 -3
  553. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +0 -3
  554. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -7
  555. package/fixtures/nested-pages/site/pages/020-reference/content.md +0 -10
  556. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +0 -11
  557. package/fixtures/nested-pages/site/theme.yaml +0 -1
  558. package/scripts/build-pages.mjs +0 -69
  559. package/scripts/lib/example-sites.mjs +0 -49
  560. package/scripts/lib/frontmatter-yaml.mjs +0 -113
  561. package/scripts/lib/git-status.mjs +0 -7
  562. package/scripts/release.mjs +0 -153
  563. package/scripts/test-banner-visibility.mjs +0 -80
  564. package/scripts/test-ci-lockfile.mjs +0 -65
  565. package/scripts/test-cli-discovery.mjs +0 -124
  566. package/scripts/test-client-javascript.mjs +0 -225
  567. package/scripts/test-content-check.mjs +0 -621
  568. package/scripts/test-content-model-v2.mjs +0 -1693
  569. package/scripts/test-documentation.mjs +0 -189
  570. package/scripts/test-editor-language-service.mjs +0 -305
  571. package/scripts/test-engine-commands.mjs +0 -204
  572. package/scripts/test-examples.mjs +0 -53
  573. package/scripts/test-heading-ids.mjs +0 -68
  574. package/scripts/test-navigation-model.mjs +0 -63
  575. package/scripts/test-navigation-preview.mjs +0 -108
  576. package/scripts/test-navigation.mjs +0 -157
  577. package/scripts/test-nested-pages.mjs +0 -125
  578. package/scripts/test-package-check.mjs +0 -500
  579. package/scripts/test-page-model.mjs +0 -108
  580. package/scripts/test-project-config.mjs +0 -139
  581. package/scripts/test-schemas.mjs +0 -169
  582. package/scripts/test-site-public.mjs +0 -85
  583. package/scripts/test-theme-presets.mjs +0 -188
  584. package/src/components/SiteNotesScript.astro +0 -43
  585. package/starters/project/.github/workflows/deploy.yml +0 -64
  586. package/starters/project/README.md +0 -84
  587. package/starters/project/package-lock.json +0 -4296
  588. package/starters/project/package.json +0 -37
  589. package/starters/project/site/config.yaml +0 -1
  590. package/starters/project/site/pages/000-home/content.md +0 -119
  591. package/starters/project/site/pages/010-guide/content.md +0 -80
  592. package/starters/project/site/public/robots.txt +0 -2
  593. package/starters/project/site/sitewide-content.yaml +0 -3
  594. package/starters/project/site/theme.yaml +0 -1
  595. package/tsconfig.json +0 -5
@@ -1,125 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { execFile } from 'node:child_process';
3
- import { access, cp, mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
4
- import path from 'node:path';
5
- import { promisify } from 'node:util';
6
-
7
- const execFileAsync = promisify(execFile);
8
- const repoRoot = path.resolve(import.meta.dirname, '..');
9
- const fixtureRoot = path.join(repoRoot, 'fixtures', 'nested-pages');
10
- const tempParent = path.join(repoRoot, 'node_modules', '.cache');
11
- await mkdir(tempParent, { recursive: true });
12
- const tempRoot = await mkdtemp(path.join(tempParent, 'norna-nested-pages-'));
13
- const fixtureCopyRoot = path.join(tempRoot, 'nested-pages');
14
- const nornaBin = path.join(repoRoot, 'bin', 'norna.mjs');
15
- const runNorna = (siteDir, ...args) => execFileAsync(process.execPath, [
16
- nornaBin,
17
- '--site-dir',
18
- siteDir,
19
- ...args,
20
- ], {
21
- cwd: repoRoot,
22
- maxBuffer: 1024 * 1024 * 10,
23
- });
24
- const runGit = (args) => execFileAsync('git', args, {
25
- cwd: fixtureCopyRoot,
26
- env: {
27
- ...process.env,
28
- GIT_AUTHOR_NAME: 'Norna Test',
29
- GIT_AUTHOR_EMAIL: 'norna@example.test',
30
- GIT_COMMITTER_NAME: 'Norna Test',
31
- GIT_COMMITTER_EMAIL: 'norna@example.test',
32
- },
33
- });
34
- const fileExists = (filePath) => access(filePath).then(() => true, () => false);
35
-
36
- try {
37
- await cp(fixtureRoot, fixtureCopyRoot, { recursive: true });
38
- const siteDir = path.join(fixtureCopyRoot, 'site');
39
- await runNorna(siteDir, 'content:check');
40
- await runNorna(siteDir, 'build');
41
-
42
- const distDir = path.join(fixtureCopyRoot, 'dist');
43
- const expectedPages = [
44
- 'index.html',
45
- 'guides/index.html',
46
- 'guides/installation/index.html',
47
- 'guides/installation/macos/index.html',
48
- 'guides/workflows/index.html',
49
- 'guides/release-notes/index.html',
50
- 'reference/index.html',
51
- 'reference/installation/index.html',
52
- ];
53
- for (const pagePath of expectedPages) {
54
- assert.match(await readFile(path.join(distDir, pagePath), 'utf8'), /<main\b[^>]*id="main-content"/);
55
- }
56
-
57
- const rootHtml = await readFile(path.join(distDir, 'index.html'), 'utf8');
58
- const guidesHtml = await readFile(path.join(distDir, 'guides', 'index.html'), 'utf8');
59
- const installationHtml = await readFile(path.join(distDir, 'guides', 'installation', 'index.html'), 'utf8');
60
- const macosHtml = await readFile(path.join(distDir, 'guides', 'installation', 'macos', 'index.html'), 'utf8');
61
- for (const html of [rootHtml, guidesHtml, installationHtml, macosHtml]) {
62
- assert.match(html, /--color-page: #f8f5ee/);
63
- assert.match(html, /--font-sans: Georgia, 'Times New Roman', serif/);
64
- }
65
- assert.match(rootHtml, /--image-width: 920px/);
66
- assert.match(rootHtml, /--space-section-to-section-desktop: clamp\(1\.2rem, 2\.4vw, 2\.25rem\)/);
67
- assert.match(guidesHtml, /--image-width: 760px/);
68
- assert.match(guidesHtml, /--space-section-to-section-desktop: clamp\(2\.25rem, 5vw, 4\.5rem\)/);
69
- assert.match(guidesHtml, /--section-body-width-desktop: min\(72ch,/);
70
- assert.match(installationHtml, /--image-width: 760px/);
71
- assert.match(installationHtml, /--space-section-to-section-desktop: clamp\(2\.25rem, 5vw, 4\.5rem\)/);
72
- assert.match(installationHtml, /--section-body-width-desktop: min\(60ch,/);
73
- assert.match(macosHtml, /--section-body-width-desktop: min\(60ch,/);
74
- assert.match(installationHtml, /Three nested page levels connected in sequence/);
75
- assert.match(installationHtml, /\/original\/pages\/010-guides\/pages\/010-installation\/images\/diagram-[a-f0-9]+\.svg/);
76
- assert.match(macosHtml, /data-navigation-mode="tree"/);
77
- assert.match(macosHtml, /class="site-nav-item site-nav-item-current-branch"/);
78
- assert.doesNotMatch(macosHtml, /class="site-nav-submenu"/);
79
- assert.match(macosHtml, /href="\/guides\/installation\/macos\/" aria-current="page"/);
80
- assert.match(macosHtml, /<aside class="tree-local-navigation" data-navigation-root="\/guides\/">/);
81
- assert.match(macosHtml, /<ul class="navigation-page-tree navigation-page-tree-sidebar">/);
82
- assert.match(macosHtml, /<details class="navigation-page-branch navigation-page-disclosure navigation-page-disclosure-sidebar" data-page-path="guides" data-current-branch="true"/);
83
- assert.match(macosHtml, /<summary class="navigation-page-summary"[^>]*><span class="navigation-page-summary-title">Guides<\/span>/);
84
- assert.match(macosHtml, /<nav class="site-breadcrumbs" aria-label="Breadcrumb"><ol><li><a href="\/guides\/">Guides<\/a><\/li><li><a href="\/guides\/installation\/">Installation<\/a><\/li><li><span aria-current="page">macOS<\/span>/);
85
- assert.match(macosHtml, /<nav class="navigation-page-sections" aria-label="Page contents: macOS">/);
86
- assert.doesNotMatch(macosHtml, /class="tree-page-contents"/);
87
- assert.match(macosHtml, /href="#install">Install<\/a><ol><li><a href="#prerequisites">Prerequisites<\/a>/);
88
- assert.doesNotMatch(macosHtml, /<nav class="page-nav"/);
89
- assert.ok(
90
- macosHtml.indexOf('href="/guides/installation/"') < macosHtml.indexOf('href="/guides/workflows/"'),
91
- 'Nested sibling navigation should follow page directory order.',
92
- );
93
-
94
- await runGit(['init']);
95
- await runGit(['add', '.']);
96
- await runGit(['commit', '-m', 'Initial nested fixture']);
97
- const installationContentPath = path.join(
98
- siteDir,
99
- 'pages',
100
- '010-guides',
101
- 'pages',
102
- '010-installation',
103
- 'content.md',
104
- );
105
- const workflowsContentPath = path.join(siteDir, 'pages', '010-guides', 'pages', '020-workflows', 'content.md');
106
- const imageBlockPattern = /\n```norna-image-stack\n[\s\S]*?\n```\n/;
107
- const installationContent = await readFile(installationContentPath, 'utf8');
108
- const imageBlock = installationContent.match(imageBlockPattern)?.[0];
109
- assert.ok(imageBlock, 'The nested fixture needs a managed image block to exercise content:sync.');
110
- await writeFile(installationContentPath, installationContent.replace(imageBlockPattern, '\n'));
111
- await writeFile(workflowsContentPath, `${await readFile(workflowsContentPath, 'utf8')}${imageBlock}`);
112
- await runGit(['add', '.']);
113
- await runGit(['commit', '-m', 'Move nested image reference']);
114
- await runNorna(siteDir, 'content:sync', '--yes');
115
-
116
- const previousImagePath = path.join(siteDir, 'pages', '010-guides', 'pages', '010-installation', 'images', 'diagram.svg');
117
- const nextImagePath = path.join(siteDir, 'pages', '010-guides', 'pages', '020-workflows', 'images', 'diagram.svg');
118
- assert.equal(await fileExists(previousImagePath), false);
119
- assert.equal(await fileExists(nextImagePath), true);
120
- await runNorna(siteDir, 'content:check');
121
-
122
- console.log('Nested pages fixture check passed.');
123
- } finally {
124
- await rm(tempRoot, { recursive: true, force: true });
125
- }
@@ -1,500 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { cp, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3
- import { spawn } from 'node:child_process';
4
- import { tmpdir } from 'node:os';
5
- import path from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
-
8
- const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
9
-
10
- const run = (command, args, options = {}) => new Promise((resolve, reject) => {
11
- const child = spawn(command, args, {
12
- cwd: repoRoot,
13
- stdio: ['ignore', 'pipe', 'pipe'],
14
- ...options,
15
- });
16
- let stdout = '';
17
- let stderr = '';
18
-
19
- child.stdout?.on('data', (chunk) => {
20
- stdout += chunk;
21
- });
22
- child.stderr?.on('data', (chunk) => {
23
- stderr += chunk;
24
- });
25
- child.once('error', reject);
26
- child.once('exit', (code, signal) => {
27
- if (code === 0) {
28
- resolve({ stdout, stderr });
29
- return;
30
- }
31
-
32
- const commandText = [command, ...args].join(' ');
33
- reject(new Error([
34
- signal
35
- ? `${commandText} exited with signal ${signal}.`
36
- : `${commandText} exited with code ${code}.`,
37
- stdout.trim(),
38
- stderr.trim(),
39
- ].filter(Boolean).join('\n')));
40
- });
41
- });
42
-
43
- const runInherit = (command, args, options = {}) => new Promise((resolve, reject) => {
44
- const child = spawn(command, args, {
45
- cwd: repoRoot,
46
- stdio: 'inherit',
47
- ...options,
48
- });
49
-
50
- child.once('error', reject);
51
- child.once('exit', (code, signal) => {
52
- if (code === 0) {
53
- resolve();
54
- return;
55
- }
56
-
57
- const commandText = [command, ...args].join(' ');
58
- reject(new Error(signal
59
- ? `${commandText} exited with signal ${signal}.`
60
- : `${commandText} exited with code ${code}.`));
61
- });
62
- });
63
-
64
- const runExpectFailure = async (command, args, options = {}, expectedText) => {
65
- try {
66
- await run(command, args, options);
67
- } catch (error) {
68
- const message = error instanceof Error ? error.message : String(error);
69
-
70
- if (message.includes(expectedText)) {
71
- return;
72
- }
73
-
74
- throw new Error(`Expected failing command output to include "${expectedText}".\n${message}`);
75
- }
76
-
77
- throw new Error(`Expected command to fail: ${[command, ...args].join(' ')}`);
78
- };
79
-
80
- const npmBin = process.platform === 'win32' ? 'npm.cmd' : 'npm';
81
- const npxBin = process.platform === 'win32' ? 'npx.cmd' : 'npx';
82
- const tempRoot = await mkdtemp(path.join(tmpdir(), 'norna-package-check-'));
83
- const packDir = path.join(tempRoot, 'pack');
84
- const unpackDir = path.join(tempRoot, 'unpack');
85
- const siteProjectRoot = path.join(tempRoot, 'site-project');
86
- const initializedSiteRoot = path.join(tempRoot, 'initialized-site');
87
- const npmCachePath = path.resolve(
88
- repoRoot,
89
- process.env.NORNA_PACKAGE_CHECK_CACHE
90
- ?? path.join('node_modules', '.cache', 'norna-package-check-npm'),
91
- );
92
- const npmEnv = {
93
- ...process.env,
94
- npm_config_cache: npmCachePath,
95
- };
96
-
97
- const assertFileExists = async (filePath) => {
98
- try {
99
- await readFile(filePath);
100
- } catch (error) {
101
- if (error?.code === 'ENOENT') {
102
- throw new Error(`Packed package is missing ${path.relative(unpackDir, filePath)}.`);
103
- }
104
-
105
- throw error;
106
- }
107
- };
108
-
109
- const assertFileMissing = async (filePath) => {
110
- try {
111
- await readFile(filePath);
112
- } catch (error) {
113
- if (error?.code === 'ENOENT') {
114
- return;
115
- }
116
-
117
- throw error;
118
- }
119
-
120
- throw new Error(`Unexpected file exists: ${filePath}.`);
121
- };
122
-
123
- const assertFileIncludes = async (filePath, expectedText) => {
124
- const fileContent = await readFile(filePath, 'utf8');
125
-
126
- if (!fileContent.includes(expectedText)) {
127
- throw new Error(`Expected ${filePath} to include: ${expectedText}`);
128
- }
129
- };
130
-
131
- const assertFileExcludes = async (filePath, unexpectedText) => {
132
- const fileContent = await readFile(filePath, 'utf8');
133
-
134
- if (fileContent.includes(unexpectedText)) {
135
- throw new Error(`Expected ${filePath} not to include: ${unexpectedText}`);
136
- }
137
- };
138
-
139
- try {
140
- await mkdir(packDir, { recursive: true });
141
- await mkdir(npmCachePath, { recursive: true });
142
- const packResult = await run(npmBin, ['pack', '--pack-destination', packDir], {
143
- env: npmEnv,
144
- });
145
- const tarballName = packResult.stdout.trim().split('\n').at(-1);
146
-
147
- if (!tarballName?.endsWith('.tgz')) {
148
- throw new Error(`npm pack did not report a tarball name.\n${packResult.stdout}${packResult.stderr}`);
149
- }
150
-
151
- const tarballPath = path.join(packDir, tarballName);
152
- await mkdir(unpackDir, { recursive: true });
153
- await runInherit('tar', ['-xzf', tarballPath, '-C', unpackDir]);
154
- const packagedStarterRoot = path.join(unpackDir, 'package', 'starters', 'basic');
155
- await Promise.all([
156
- assertFileExists(path.join(unpackDir, 'package', 'docs', 'README.md')),
157
- assertFileExists(path.join(unpackDir, 'package', 'docs', 'configuration.md')),
158
- assertFileExists(path.join(unpackDir, 'package', 'docs', 'images-and-metadata.md')),
159
- assertFileExists(path.join(unpackDir, 'package', 'schemas', 'manifest.json')),
160
- assertFileExists(path.join(unpackDir, 'package', 'schemas', 'config.schema.json')),
161
- assertFileExists(path.join(unpackDir, 'package', 'schemas', 'content-frontmatter.schema.json')),
162
- assertFileExists(path.join(unpackDir, 'package', 'schemas', 'sitewide-content.schema.json')),
163
- assertFileExists(path.join(unpackDir, 'package', 'schemas', 'theme.schema.json')),
164
- assertFileExists(path.join(packagedStarterRoot, '.github', 'workflows', 'deploy.yml')),
165
- assertFileExists(path.join(packagedStarterRoot, 'package.json')),
166
- assertFileExists(path.join(packagedStarterRoot, 'README.md')),
167
- assertFileExists(path.join(packagedStarterRoot, 'site', 'config.yaml')),
168
- assertFileExists(path.join(packagedStarterRoot, 'site', 'theme.yaml')),
169
- assertFileExists(path.join(packagedStarterRoot, 'site', 'sitewide-content.yaml')),
170
- assertFileExists(path.join(packagedStarterRoot, 'site', 'pages', '000-home', 'content.md')),
171
- assertFileExists(path.join(packagedStarterRoot, 'site', 'pages', '000-home', 'images', '.gitkeep')),
172
- assertFileExists(path.join(packagedStarterRoot, 'site', 'public', 'robots.txt')),
173
- ]);
174
- await assertFileIncludes(
175
- path.join(packagedStarterRoot, '.github', 'workflows', 'deploy.yml'),
176
- 'node-version: 24.18.0',
177
- );
178
- await assertFileIncludes(
179
- path.join(packagedStarterRoot, '.github', 'workflows', 'deploy.yml'),
180
- 'run: npm run norna:build',
181
- );
182
- await cp(packagedStarterRoot, siteProjectRoot, {
183
- recursive: true,
184
- });
185
- const packageJsonPath = path.join(siteProjectRoot, 'package.json');
186
- const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8'));
187
- assert.equal(packageJson.scripts['norna:check'], 'norna check');
188
- packageJson.name = 'norna-package-check-site';
189
- packageJson.dependencies['@janga/norna'] = tarballPath;
190
- await writeFile(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`);
191
- const packageCheckConfigPath = path.join(siteProjectRoot, 'site', 'config.yaml');
192
- const packageCheckConfig = await readFile(packageCheckConfigPath, 'utf8');
193
- await writeFile(
194
- packageCheckConfigPath,
195
- packageCheckConfig.replace('url: https://example.com/', 'url: https://example.com/site/'),
196
- );
197
- const packageCheckSitewidePath = path.join(siteProjectRoot, 'site', 'sitewide-content.yaml');
198
- const packageCheckSitewide = await readFile(packageCheckSitewidePath, 'utf8');
199
- await writeFile(
200
- packageCheckSitewidePath,
201
- `logo:\n height: 2.6rem\n${packageCheckSitewide}`,
202
- );
203
- await writeFile(
204
- path.join(siteProjectRoot, 'site', 'public', 'logo.svg'),
205
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect width="32" height="32" fill="black"/></svg>\n',
206
- );
207
- await writeFile(path.join(siteProjectRoot, 'site', 'pages', '000-home', 'content.md'), `---
208
- page:
209
- description: Site used by package checks.
210
- ---
211
-
212
- # Package Check Site
213
-
214
- ## Intro {#intro}
215
-
216
- This page verifies that **packaged norna sites** can build with the current content model.
217
-
218
- <!-- norna-image-provenance:
219
- image: package-check.svg
220
- source: package check fixture
221
- -->
222
-
223
- ## **Warning** {#warning}
224
-
225
- This section verifies styled section headings.
226
-
227
- ## Work {#work}
228
-
229
- This section keeps the package check independent from user-facing starter copy.
230
- `);
231
- await mkdir(path.join(siteProjectRoot, 'site', 'pages', '010-about'), { recursive: true });
232
- await writeFile(path.join(siteProjectRoot, 'site', 'pages', '010-about', 'content.md'), `---
233
- page:
234
- description: Page used by package checks.
235
- ---
236
-
237
- # About the site
238
-
239
- ## About {#about}
240
-
241
- This page verifies that packaged norna sites can build additional pages.
242
- `);
243
-
244
- await runInherit(npmBin, ['install', '--no-audit', '--no-fund', '--prefer-offline', '--fetch-retries=0'], { cwd: siteProjectRoot, env: npmEnv });
245
- const nornaBinPath = path.join(siteProjectRoot, 'node_modules', '.bin', process.platform === 'win32' ? 'norna.cmd' : 'norna');
246
- await runInherit(nornaBinPath, ['init', initializedSiteRoot], { cwd: tempRoot, env: npmEnv });
247
- await Promise.all([
248
- assertFileExists(path.join(initializedSiteRoot, 'package.json')),
249
- assertFileExists(path.join(initializedSiteRoot, 'site', 'config.yaml')),
250
- assertFileExists(path.join(initializedSiteRoot, 'site', 'theme.yaml')),
251
- assertFileExists(path.join(initializedSiteRoot, 'site', 'pages', '000-home', 'content.md')),
252
- assertFileMissing(path.join(initializedSiteRoot, '.DS_Store')),
253
- assertFileMissing(path.join(initializedSiteRoot, 'site', '.DS_Store')),
254
- ]);
255
- const homeImagesDir = path.join(siteProjectRoot, 'site', 'pages', '000-home', 'images');
256
- await runInherit(npxBin, ['norna', 'engine:version'], { cwd: homeImagesDir, env: npmEnv });
257
- await runInherit(npxBin, ['norna', 'doctor'], { cwd: homeImagesDir, env: npmEnv });
258
- await runInherit(npxBin, ['norna', 'config:check'], { cwd: homeImagesDir, env: npmEnv });
259
- await runInherit(npxBin, ['norna', 'content:check'], { cwd: siteProjectRoot, env: npmEnv });
260
- await runInherit(npxBin, ['norna', 'check'], { cwd: siteProjectRoot, env: npmEnv });
261
- await runInherit(npxBin, ['norna', 'build'], { cwd: siteProjectRoot, env: npmEnv });
262
- await assertFileExists(path.join(siteProjectRoot, 'site', '.norna', 'public', 'robots.txt'));
263
- await assertFileExists(path.join(siteProjectRoot, 'dist', 'robots.txt'));
264
- await assertFileExists(path.join(siteProjectRoot, 'dist', 'about', 'index.html'));
265
- await assertFileMissing(path.join(siteProjectRoot, 'public', 'robots.txt'));
266
- await assertFileExcludes(
267
- path.join(siteProjectRoot, 'dist', 'index.html'),
268
- 'href="/favicon.svg"',
269
- );
270
- await assertFileExcludes(
271
- path.join(siteProjectRoot, 'dist', 'index.html'),
272
- 'href="/favicon.ico"',
273
- );
274
- await assertFileIncludes(
275
- path.join(siteProjectRoot, 'dist', 'index.html'),
276
- '--section-heading-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem)',
277
- );
278
- await assertFileIncludes(
279
- path.join(siteProjectRoot, 'dist', 'index.html'),
280
- '--section-heading-font-weight: 500',
281
- );
282
- await assertFileIncludes(
283
- path.join(siteProjectRoot, 'dist', 'index.html'),
284
- '--section-heading-spacing-after: 0.45em',
285
- );
286
- await assertFileIncludes(
287
- path.join(siteProjectRoot, 'dist', 'index.html'),
288
- '--section-markdown-h3-spacing-before: 1.2em',
289
- );
290
- await assertFileIncludes(
291
- path.join(siteProjectRoot, 'dist', 'index.html'),
292
- "--font-sans: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
293
- );
294
- await assertFileIncludes(
295
- path.join(siteProjectRoot, 'dist', 'index.html'),
296
- '<meta name="format-detection" content="telephone=no">',
297
- );
298
- await assertFileIncludes(
299
- path.join(siteProjectRoot, 'dist', 'index.html'),
300
- 'style="scroll-behavior: auto;',
301
- );
302
- await assertFileExcludes(
303
- path.join(siteProjectRoot, 'dist', 'index.html'),
304
- 'data-smooth-scroll=',
305
- );
306
- await assertFileIncludes(
307
- path.join(siteProjectRoot, 'dist', 'about', 'index.html'),
308
- '<link rel="canonical" href="https://example.com/site/about/">',
309
- );
310
- await assertFileIncludes(
311
- path.join(siteProjectRoot, 'dist', 'about', 'index.html'),
312
- 'href="/site/about/" aria-current="page"',
313
- );
314
- await assertFileIncludes(
315
- path.join(siteProjectRoot, 'dist', 'index.html'),
316
- '<a class="site-brand" href="/site/"><img class="site-brand-logo" src="/site/logo.svg" alt="Package Check Site">',
317
- );
318
- await assertFileExcludes(
319
- path.join(siteProjectRoot, 'dist', 'index.html'),
320
- '<div class="site-nav-submenu">',
321
- );
322
- await assertFileIncludes(
323
- path.join(siteProjectRoot, 'dist', 'index.html'),
324
- 'href="/site/about/">About the site</a>',
325
- );
326
- await assertFileIncludes(
327
- path.join(siteProjectRoot, 'dist', 'index.html'),
328
- '<nav class="page-nav" aria-label="Page contents">',
329
- );
330
- await assertFileIncludes(
331
- path.join(siteProjectRoot, 'dist', 'index.html'),
332
- 'href="#intro">Intro</a>',
333
- );
334
- await assertFileIncludes(
335
- path.join(siteProjectRoot, 'dist', 'index.html'),
336
- '--section-body-align-mobile: left',
337
- );
338
- await assertFileIncludes(
339
- path.join(siteProjectRoot, 'dist', 'index.html'),
340
- '--section-body-line-height: 1.62',
341
- );
342
- await assertFileIncludes(
343
- path.join(siteProjectRoot, 'dist', 'index.html'),
344
- '--section-body-width-desktop: min(72ch, var(--text-width))',
345
- );
346
- await assertFileExcludes(
347
- path.join(siteProjectRoot, 'dist', 'index.html'),
348
- 'norna-image-provenance',
349
- );
350
- await assertFileIncludes(
351
- path.join(siteProjectRoot, 'dist', 'index.html'),
352
- '--section-body-paragraph-spacing: 0.65em',
353
- );
354
- await assertFileIncludes(
355
- path.join(siteProjectRoot, 'dist', 'index.html'),
356
- '--section-caption-line-height: 1.4',
357
- );
358
- await assertFileIncludes(
359
- path.join(siteProjectRoot, 'dist', 'index.html'),
360
- '--section-caption-spacing-before: 0.35em',
361
- );
362
- await assertFileIncludes(
363
- path.join(siteProjectRoot, 'dist', 'index.html'),
364
- '--section-caption-font-size-desktop: clamp(0.86rem, 0.84rem + 0.08vw, 0.92rem)',
365
- );
366
- await assertFileExcludes(
367
- path.join(siteProjectRoot, 'dist', 'index.html'),
368
- 'class="inline-style',
369
- );
370
- await assertFileIncludes(
371
- path.join(siteProjectRoot, 'dist', 'index.html'),
372
- 'data-section-title="Warning"',
373
- );
374
- await assertFileIncludes(
375
- path.join(siteProjectRoot, 'dist', 'index.html'),
376
- 'href="#warning">Warning</a>',
377
- );
378
- await assertFileIncludes(
379
- path.join(siteProjectRoot, 'dist', 'index.html'),
380
- '--section-background-color: #ffffff',
381
- );
382
- await assertFileIncludes(
383
- path.join(siteProjectRoot, 'dist', 'index.html'),
384
- '--section-background-color: #f1f4f2',
385
- );
386
- await assertFileIncludes(
387
- path.join(siteProjectRoot, 'dist', 'index.html'),
388
- '--site-top-background-color: #ffffff',
389
- );
390
- await assertFileIncludes(
391
- path.join(siteProjectRoot, 'dist', 'index.html'),
392
- '--site-top-text-color: #17201d',
393
- );
394
- await assertFileIncludes(
395
- path.join(siteProjectRoot, 'dist', 'index.html'),
396
- '--site-footer-background-color: #ffffff',
397
- );
398
- await assertFileIncludes(
399
- path.join(siteProjectRoot, 'dist', 'index.html'),
400
- '--site-footer-text-color: #17201d',
401
- );
402
- await assertFileIncludes(
403
- path.join(siteProjectRoot, 'dist', 'index.html'),
404
- '--section-text-color: #17201d',
405
- );
406
- await writeFile(path.join(siteProjectRoot, 'site', 'public', 'favicon.ico'), 'fake icon');
407
- await runInherit(npxBin, ['norna', 'build'], { cwd: siteProjectRoot, env: npmEnv });
408
- await assertFileExists(path.join(siteProjectRoot, 'dist', 'favicon.ico'));
409
- await assertFileIncludes(
410
- path.join(siteProjectRoot, 'dist', 'index.html'),
411
- '<link rel="icon" sizes="any" href="/site/favicon.ico">',
412
- );
413
- await assertFileExcludes(
414
- path.join(siteProjectRoot, 'dist', 'index.html'),
415
- 'href="/favicon.svg"',
416
- );
417
- const siteContentPath = path.join(siteProjectRoot, 'site', 'pages', '000-home', 'content.md');
418
- const siteContent = await readFile(siteContentPath, 'utf8');
419
- const siteThemePath = path.join(siteProjectRoot, 'site', 'theme.yaml');
420
- const siteTheme = await readFile(siteThemePath, 'utf8');
421
- await writeFile(siteThemePath, `${siteTheme.trim()}\ntypography:\n profile: noisy\n`);
422
- await runExpectFailure(
423
- npxBin,
424
- ['norna', 'build'],
425
- { cwd: siteProjectRoot, env: npmEnv },
426
- 'typography.profile',
427
- );
428
- await writeFile(siteThemePath, `${siteTheme.trim()}\npalette: neon\n`);
429
- await runExpectFailure(
430
- npxBin,
431
- ['norna', 'build'],
432
- { cwd: siteProjectRoot, env: npmEnv },
433
- 'palette',
434
- );
435
- await writeFile(siteThemePath, siteTheme);
436
- await writeFile(
437
- siteContentPath,
438
- siteContent.replace(
439
- 'This page verifies that **packaged norna sites** can build with the current content model.',
440
- 'This page verifies that [packaged norna sites]{.highlight} can build with the current content model.',
441
- ),
442
- );
443
- await runExpectFailure(
444
- npxBin,
445
- ['norna', 'build'],
446
- { cwd: siteProjectRoot, env: npmEnv },
447
- 'Inline color style ".highlight" is no longer supported',
448
- );
449
- await writeFile(siteContentPath, siteContent);
450
- await writeFile(
451
- siteContentPath,
452
- siteContent.replace(
453
- 'description: Site used by package checks.',
454
- 'description: Site used by package checks.\ntypography:\n overrides:\n body:\n lineHeight: tight',
455
- ),
456
- );
457
- await runExpectFailure(
458
- npxBin,
459
- ['norna', 'build'],
460
- { cwd: siteProjectRoot, env: npmEnv },
461
- 'typography',
462
- );
463
- await writeFile(
464
- siteContentPath,
465
- siteContent.replace(
466
- 'description: Site used by package checks.',
467
- 'description: Site used by package checks.\nsections:\n intro: {}',
468
- ),
469
- );
470
- await runExpectFailure(
471
- npxBin,
472
- ['norna', 'build'],
473
- { cwd: siteProjectRoot, env: npmEnv },
474
- 'defines "sections" at the top level, but it is not a valid top-level content field',
475
- );
476
- await writeFile(siteThemePath, `${siteTheme.trim()}\ntypography:\n fontFamily: "Arial; color: red"\n`);
477
- await runExpectFailure(
478
- npxBin,
479
- ['norna', 'config:check'],
480
- { cwd: siteProjectRoot, env: npmEnv },
481
- 'typography.fontFamily',
482
- );
483
- await writeFile(siteThemePath, siteTheme);
484
- const siteConfigPath = path.join(siteProjectRoot, 'site', 'config.yaml');
485
- const siteConfig = await readFile(siteConfigPath, 'utf8');
486
- await writeFile(
487
- siteConfigPath,
488
- siteConfig.replace('url: https://example.com/site/', 'url: example.com/site/'),
489
- );
490
- await runExpectFailure(
491
- npxBin,
492
- ['norna', 'config:check'],
493
- { cwd: siteProjectRoot, env: npmEnv },
494
- 'url must be an absolute URL',
495
- );
496
-
497
- console.log('Package check passed.');
498
- } finally {
499
- await rm(tempRoot, { force: true, recursive: true });
500
- }