@janga/norna 0.7.9 → 0.7.11

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 (287) hide show
  1. package/README.md +4 -2
  2. package/bin/norna-cli.mjs +3 -0
  3. package/docs/README.md +16 -12
  4. package/docs/commands.md +6 -0
  5. package/docs/configuration.md +10 -54
  6. package/docs/content.md +20 -21
  7. package/docs/design/norna-diagram-design.md +2 -0
  8. package/docs/design/site-examples-structure.md +35 -24
  9. package/docs/engine-development.md +13 -7
  10. package/docs/getting-started.md +56 -19
  11. package/docs/routes.md +8 -6
  12. package/docs/site-structure.md +11 -6
  13. package/docs/sitewide-content.md +74 -0
  14. package/docs/theme.md +125 -140
  15. package/docs/typography.md +72 -45
  16. package/examples/README.md +41 -0
  17. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +59 -0
  18. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +138 -0
  19. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +755 -0
  20. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +1 -0
  21. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +8 -0
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
  23. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
  24. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev.json +2 -2
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +53 -0
  26. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
  27. package/examples/complete-sites/dog-shelter-multi-page/README.md +9 -0
  28. package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/_metadata.json +13 -7
  29. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +18 -0
  30. package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +30 -0
  31. package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
  32. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +10 -0
  33. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
  34. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
  35. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
  36. package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
  37. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +6 -0
  38. package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +25 -0
  39. package/examples/complete-sites/dog-shelter-single-page/README.md +9 -0
  40. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +18 -0
  41. package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +30 -0
  42. package/examples/complete-sites/dog-shelter-single-page/site/content.md +38 -0
  43. package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
  44. package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
  45. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +10 -0
  46. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +2 -0
  47. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +6 -0
  48. package/examples/complete-sites/dog-shelter-single-page/site/theme.md +25 -0
  49. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +59 -0
  50. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +138 -0
  51. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +755 -0
  52. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +1 -0
  53. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
  54. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
  55. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +11 -0
  56. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
  57. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
  58. package/examples/feature-demos/media-and-surfaces/README.md +15 -0
  59. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +74 -0
  60. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  61. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  62. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  63. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  64. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  65. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  66. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  67. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  68. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  69. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  70. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  71. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  72. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  73. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  74. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  75. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  76. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  77. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  78. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  79. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  80. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  81. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  82. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  83. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  84. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  85. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  86. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +66 -0
  87. package/examples/feature-demos/media-and-surfaces/site/config.mjs +30 -0
  88. package/examples/feature-demos/media-and-surfaces/site/content.md +64 -0
  89. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +2 -0
  90. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-carousel.svg +11 -0
  91. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-stack.svg +9 -0
  92. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-surfaces.svg +8 -0
  93. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-one.svg +8 -0
  94. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-three.svg +13 -0
  95. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-two.svg +8 -0
  96. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-one.svg +8 -0
  97. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-two.svg +9 -0
  98. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +85 -0
  99. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +3 -0
  100. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +44 -0
  101. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.md +8 -0
  102. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.md +6 -0
  103. package/examples/feature-demos/media-and-surfaces/site/theme.md +3 -0
  104. package/examples/{typography-presets/.astro/collections/theme.schema.json → feature-demos/theme-presets/.astro/collections/routeTheme.schema.json} +143 -65
  105. package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +59 -0
  106. package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +138 -0
  107. package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +755 -0
  108. package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +4 -0
  109. package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -0
  110. package/examples/feature-demos/theme-presets/.astro/content.d.ts +183 -0
  111. package/examples/feature-demos/theme-presets/.astro/data-store.json +1 -0
  112. package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
  113. package/examples/feature-demos/theme-presets/.astro/dev.json +15 -0
  114. package/examples/feature-demos/theme-presets/.astro/dev.log +127 -0
  115. package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
  116. package/examples/feature-demos/theme-presets/README.md +14 -0
  117. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
  118. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
  119. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
  120. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  121. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +290 -0
  122. package/examples/{typography-presets → feature-demos/theme-presets}/site/config.mjs +4 -16
  123. package/examples/feature-demos/theme-presets/site/content.md +17 -0
  124. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/route-content.md +34 -0
  125. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
  126. package/examples/feature-demos/theme-presets/site/routes/020-documentation/route-content.md +33 -0
  127. package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
  128. package/examples/feature-demos/theme-presets/site/routes/030-project/route-content.md +34 -0
  129. package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
  130. package/examples/feature-demos/theme-presets/site/routes/040-statement/route-content.md +34 -0
  131. package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
  132. package/examples/feature-demos/theme-presets/site/sitewide-content.md +14 -0
  133. package/examples/feature-demos/theme-presets/site/theme.md +3 -0
  134. package/fixtures/basic/site/config.mjs +0 -13
  135. package/fixtures/basic/site/sitewide-content.md +12 -0
  136. package/fixtures/basic/site/theme.md +2 -2
  137. package/fixtures/content-model-v2/site/content.md +2 -5
  138. package/fixtures/content-model-v2/site/theme.md +1 -3
  139. package/package.json +9 -4
  140. package/scripts/build-pages.mjs +71 -0
  141. package/scripts/check-config.mjs +23 -1
  142. package/scripts/export-theme-preset.mjs +31 -0
  143. package/scripts/init-site.mjs +1 -0
  144. package/scripts/lib/example-sites.mjs +34 -0
  145. package/scripts/lib/frontmatter-yaml.mjs +28 -0
  146. package/scripts/lib/logo-assets.mjs +35 -0
  147. package/scripts/lib/norna-markdown-blocks.mjs +166 -0
  148. package/scripts/lib/presentation.mjs +106 -47
  149. package/scripts/lib/project-config.mjs +68 -105
  150. package/scripts/lib/site-content.mjs +26 -118
  151. package/scripts/lib/site-paths.mjs +2 -0
  152. package/scripts/lib/sitewide-config.mjs +34 -0
  153. package/scripts/lib/theme-config.mjs +75 -8
  154. package/scripts/lib/theme-presets.mjs +209 -0
  155. package/scripts/lib/typography.mjs +20 -26
  156. package/scripts/show-typography.mjs +43 -149
  157. package/scripts/sync-content-sections.mjs +19 -17
  158. package/scripts/test-content-check.mjs +59 -27
  159. package/scripts/test-content-model-v2.mjs +154 -0
  160. package/scripts/test-engine-commands.mjs +4 -1
  161. package/scripts/test-examples.mjs +15 -0
  162. package/scripts/test-navigation.mjs +73 -45
  163. package/scripts/test-package-check.mjs +66 -24
  164. package/scripts/test-temporary-visibility.mjs +19 -2
  165. package/scripts/test-theme-presets.mjs +151 -0
  166. package/src/components/CardList.astro +5 -2
  167. package/src/components/GalleryGrid.astro +37 -16
  168. package/src/components/SiteBanners.astro +100 -0
  169. package/src/components/SiteNavigation.astro +48 -31
  170. package/src/components/SitePage.astro +55 -13
  171. package/src/components/SiteSection.astro +193 -35
  172. package/src/content.config.ts +80 -48
  173. package/src/layouts/BaseLayout.astro +64 -14
  174. package/src/lib/routeThemes.ts +61 -0
  175. package/src/lib/sectionContent.ts +235 -51
  176. package/src/lib/sitePublicAssets.ts +1 -0
  177. package/src/styles/global.css +284 -93
  178. package/starters/basic/.github/workflows/deploy.yml +1 -1
  179. package/starters/basic/README.md +7 -6
  180. package/starters/basic/package.json +1 -0
  181. package/starters/basic/site/config.mjs +0 -13
  182. package/starters/basic/site/content.md +1 -1
  183. package/starters/basic/site/sitewide-content.md +14 -0
  184. package/starters/basic/site/theme.md +13 -24
  185. package/starters/project/.github/workflows/deploy.yml +1 -1
  186. package/starters/project/README.md +10 -8
  187. package/starters/project/package.json +1 -0
  188. package/starters/project/site/config.mjs +0 -13
  189. package/starters/project/site/sitewide-content.md +14 -0
  190. package/starters/project/site/theme.md +3 -11
  191. package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
  192. package/examples/dog-gallery/site/config.mjs +0 -67
  193. package/examples/dog-gallery/site/content.md +0 -128
  194. package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
  195. package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
  196. package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
  197. package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
  198. package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
  199. package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
  200. package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
  201. package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
  202. package/examples/dog-gallery/site/public/favicon.svg +0 -7
  203. package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -38
  204. package/examples/dog-gallery/site/theme.md +0 -112
  205. package/examples/typography-presets/.astro/collections/site.schema.json +0 -776
  206. package/examples/typography-presets/.astro/data-store.json +0 -1
  207. package/examples/typography-presets/.astro/dev.log +0 -24
  208. package/examples/typography-presets/site/.norna/generated-images.json +0 -290
  209. package/examples/typography-presets/site/content.md +0 -134
  210. package/examples/typography-presets/site/theme.md +0 -43
  211. /package/examples/{typography-presets/.astro/content-modules.mjs → complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs} +0 -0
  212. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
  213. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  214. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  215. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  216. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  217. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  218. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  219. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  220. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  221. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  222. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  223. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  224. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  225. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js +0 -0
  226. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  227. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  228. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  229. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  230. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  231. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
  232. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  233. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  234. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  235. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  236. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  237. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  238. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  239. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  240. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  241. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  242. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  243. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
  244. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/.astro/content-assets.mjs +0 -0
  245. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/package.json +0 -0
  246. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  247. /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
  248. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
  249. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  250. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  251. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  252. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  253. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  254. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  255. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  256. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  257. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  258. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  259. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  260. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  261. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  262. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  263. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  264. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  265. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  266. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  267. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  268. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  269. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  270. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  271. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  272. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  273. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  274. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  275. /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
  276. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
  277. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/shepherd-portrait.jpg +0 -0
  278. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/white-puppy.jpg +0 -0
  279. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
  280. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/retriever-portrait.jpg +0 -0
  281. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
  282. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/boxer-portrait.jpg +0 -0
  283. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grass-puppy.jpg +0 -0
  284. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
  285. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/black-pedigree.jpg +0 -0
  286. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-grass.jpg +0 -0
  287. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-wide.jpg +0 -0
@@ -0,0 +1,34 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parseYamlMapping } from './frontmatter-yaml.mjs';
3
+ import {
4
+ sitewideContentLabel,
5
+ sitewideContentPath,
6
+ } from './site-paths.mjs';
7
+ import {
8
+ splitSiteFile,
9
+ validateFrontmatterIndentation,
10
+ validateSitewideFrontmatterStructure,
11
+ } from './site-content.mjs';
12
+
13
+ export const readSitewideConfig = async () => {
14
+ const source = await readFile(sitewideContentPath, 'utf8').catch((error) => {
15
+ if (error?.code === 'ENOENT') return null;
16
+ throw error;
17
+ });
18
+
19
+ if (!source) return {};
20
+
21
+ const { frontmatter, frontmatterBody } = splitSiteFile(source, sitewideContentLabel);
22
+ const issues = [];
23
+ validateFrontmatterIndentation(frontmatter, (issue) => issues.push(issue));
24
+ validateSitewideFrontmatterStructure(frontmatter, (issue) => issues.push(issue));
25
+
26
+ if (issues.length > 0) {
27
+ throw new Error([
28
+ `${sitewideContentLabel} has invalid frontmatter.`,
29
+ ...issues.map((issue) => `- ${issue.message}`),
30
+ ].join('\n'));
31
+ }
32
+
33
+ return parseYamlMapping(frontmatterBody);
34
+ };
@@ -1,19 +1,25 @@
1
- import { readFile } from 'node:fs/promises';
1
+ import { readFile, readdir } from 'node:fs/promises';
2
+ import path from 'node:path';
2
3
  import { parseYamlMapping } from './frontmatter-yaml.mjs';
3
4
  import {
4
5
  splitSiteFile,
5
- validateFrontmatterColorValues,
6
6
  validateFrontmatterIndentation,
7
+ validateRouteThemeFrontmatterStructure,
7
8
  validateThemeFrontmatterStructure,
8
9
  } from './site-content.mjs';
9
- import { siteThemeLabel, siteThemePath } from './site-paths.mjs';
10
-
11
- const emptyThemeFile = '---\n---\n';
10
+ import {
11
+ siteRoutesDir,
12
+ siteRoutesLabel,
13
+ siteThemeLabel,
14
+ siteThemePath,
15
+ sitewideContentLabel,
16
+ } from './site-paths.mjs';
17
+ import { resolveThemeConfig } from './theme-presets.mjs';
12
18
 
13
19
  export const readThemeConfig = async () => {
14
20
  const themeFile = await readFile(siteThemePath, 'utf8').catch((error) => {
15
21
  if (error?.code === 'ENOENT') {
16
- return emptyThemeFile;
22
+ throw new Error(`${siteThemeLabel} is required. Create it before running Norna.`);
17
23
  }
18
24
 
19
25
  throw error;
@@ -23,7 +29,6 @@ export const readThemeConfig = async () => {
23
29
 
24
30
  validateFrontmatterIndentation(frontmatter, (issue) => issues.push(issue));
25
31
  validateThemeFrontmatterStructure(frontmatter, (issue) => issues.push(issue));
26
- validateFrontmatterColorValues(frontmatter, (issue) => issues.push(issue), siteThemeLabel);
27
32
 
28
33
  if (issues.length > 0) {
29
34
  throw new Error([
@@ -32,5 +37,67 @@ export const readThemeConfig = async () => {
32
37
  ].join('\n'));
33
38
  }
34
39
 
35
- return parseYamlMapping(frontmatterBody);
40
+ const config = parseYamlMapping(frontmatterBody);
41
+ if (Object.hasOwn(config, 'navigation')) {
42
+ throw new Error(`${siteThemeLabel} may not define navigation. Brand and logo belong in ${sitewideContentLabel}.`);
43
+ }
44
+ resolveThemeConfig(config, siteThemeLabel);
45
+
46
+ return config;
47
+ };
48
+
49
+ const getRouteThemeFiles = async (directory, relativeDirectory = '') => {
50
+ const entries = await readdir(directory, { withFileTypes: true }).catch((error) => {
51
+ if (error?.code === 'ENOENT') return [];
52
+ throw error;
53
+ });
54
+ const files = [];
55
+
56
+ for (const entry of entries) {
57
+ const relativePath = path.join(relativeDirectory, entry.name);
58
+ const absolutePath = path.join(directory, entry.name);
59
+ if (entry.isDirectory()) {
60
+ files.push(...await getRouteThemeFiles(absolutePath, relativePath));
61
+ continue;
62
+ }
63
+
64
+ if (entry.name === 'theme.md') {
65
+ files.push({
66
+ path: absolutePath,
67
+ label: `${siteRoutesLabel}/${relativePath.split(path.sep).join('/')}`,
68
+ });
69
+ }
70
+ }
71
+
72
+ return files;
73
+ };
74
+
75
+ export const validateRouteThemeFiles = async () => {
76
+ const files = await getRouteThemeFiles(siteRoutesDir);
77
+ const configs = [];
78
+
79
+ for (const file of files) {
80
+ const source = await readFile(file.path, 'utf8');
81
+ const { frontmatter, frontmatterBody } = splitSiteFile(source, file.label);
82
+ const issues = [];
83
+ validateFrontmatterIndentation(frontmatter, (issue) => issues.push(issue));
84
+ validateRouteThemeFrontmatterStructure(frontmatter, (issue) => issues.push(issue));
85
+
86
+ if (issues.length > 0) {
87
+ throw new Error([
88
+ `${file.label} has invalid frontmatter.`,
89
+ ...issues.map((issue) => `- ${issue.message}`),
90
+ ].join('\n'));
91
+ }
92
+
93
+ const config = parseYamlMapping(frontmatterBody);
94
+ if (Object.hasOwn(config, 'navigation')) {
95
+ throw new Error(`${file.label} may not define navigation. Brand and logo belong in ${sitewideContentLabel}.`);
96
+ }
97
+ resolveThemeConfig(config, file.label);
98
+
99
+ configs.push({ ...file, config });
100
+ }
101
+
102
+ return configs;
36
103
  };
@@ -0,0 +1,209 @@
1
+ import { mergeDeep } from './typography.mjs';
2
+
3
+ export const themePresetNames = [
4
+ 'portfolio',
5
+ 'documentation',
6
+ 'project',
7
+ 'statement',
8
+ ];
9
+
10
+ export const themePresets = Object.freeze({
11
+ portfolio: Object.freeze({
12
+ layout: {
13
+ density: 'normal',
14
+ pageWidth: '1240px',
15
+ gutter: {
16
+ desktop: 'clamp(1.25rem, 4vw, 3rem)',
17
+ mobile: '1rem',
18
+ },
19
+ },
20
+ gallery: {
21
+ width: '1000px',
22
+ maxAvailableWidthPercent: { desktop: 100, mobile: 100 },
23
+ maxAvailableHeightPercent: { desktop: 78, mobile: 68 },
24
+ },
25
+ typography: {
26
+ fontFamily: "'Helvetica Neue', Arial, sans-serif",
27
+ preset: 'quiet-gallery',
28
+ rhythm: 'normal',
29
+ },
30
+ presentation: {
31
+ palette: 'dark',
32
+ sectionSurfaces: {
33
+ mode: 'none',
34
+ sequence: ['base', 'soft', 'emphasis'],
35
+ },
36
+ },
37
+ }),
38
+ documentation: Object.freeze({
39
+ layout: {
40
+ density: 'compact',
41
+ pageWidth: '1240px',
42
+ gutter: {
43
+ desktop: 'clamp(1.25rem, 4vw, 3rem)',
44
+ mobile: '1rem',
45
+ },
46
+ },
47
+ gallery: {
48
+ width: '920px',
49
+ maxAvailableWidthPercent: { desktop: 100, mobile: 100 },
50
+ maxAvailableHeightPercent: { desktop: 74, mobile: 68 },
51
+ },
52
+ typography: {
53
+ fontFamily: "Georgia, 'Times New Roman', serif",
54
+ preset: 'text-forward',
55
+ rhythm: 'compact',
56
+ },
57
+ presentation: {
58
+ palette: 'paper',
59
+ sectionSurfaces: {
60
+ mode: 'cycle',
61
+ sequence: ['base', 'soft'],
62
+ },
63
+ },
64
+ }),
65
+ project: Object.freeze({
66
+ layout: {
67
+ density: 'compact',
68
+ pageWidth: '1120px',
69
+ gutter: {
70
+ desktop: 'clamp(1.25rem, 4vw, 3rem)',
71
+ mobile: '1rem',
72
+ },
73
+ },
74
+ gallery: {
75
+ width: '840px',
76
+ maxAvailableWidthPercent: { desktop: 100, mobile: 100 },
77
+ maxAvailableHeightPercent: { desktop: 70, mobile: 62 },
78
+ },
79
+ typography: {
80
+ fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
81
+ preset: 'text-forward',
82
+ rhythm: 'compact',
83
+ },
84
+ presentation: {
85
+ palette: 'light',
86
+ sectionSurfaces: {
87
+ mode: 'cycle',
88
+ sequence: ['base', 'soft'],
89
+ },
90
+ },
91
+ }),
92
+ statement: Object.freeze({
93
+ layout: {
94
+ density: 'airy',
95
+ pageWidth: '1280px',
96
+ gutter: {
97
+ desktop: 'clamp(1.5rem, 5vw, 4rem)',
98
+ mobile: '1rem',
99
+ },
100
+ },
101
+ gallery: {
102
+ width: '1080px',
103
+ maxAvailableWidthPercent: { desktop: 100, mobile: 100 },
104
+ maxAvailableHeightPercent: { desktop: 80, mobile: 70 },
105
+ },
106
+ typography: {
107
+ fontFamily: "'Trebuchet MS', 'Helvetica Neue', Arial, sans-serif",
108
+ preset: 'statement',
109
+ rhythm: 'airy',
110
+ },
111
+ presentation: {
112
+ palette: 'paper',
113
+ sectionSurfaces: {
114
+ mode: 'cycle',
115
+ sequence: ['base', 'emphasis'],
116
+ },
117
+ },
118
+ }),
119
+ });
120
+
121
+ export const getThemePreset = (presetName, sourceLabel = 'theme.md') => {
122
+ const preset = themePresets[presetName];
123
+
124
+ if (!preset) {
125
+ throw new Error(`Unknown theme preset "${presetName}" in ${sourceLabel}. Use one of: ${themePresetNames.join(', ')}.`);
126
+ }
127
+
128
+ return structuredClone(preset);
129
+ };
130
+
131
+ export const resolveThemeConfig = (theme = {}, sourceLabel = 'theme.md') => {
132
+ const presetName = theme?.preset;
133
+ if (presetName === undefined) return structuredClone(theme ?? {});
134
+
135
+ const overrides = structuredClone(theme ?? {});
136
+ delete overrides.preset;
137
+
138
+ return {
139
+ preset: presetName,
140
+ ...mergeDeep(getThemePreset(presetName, sourceLabel), overrides),
141
+ };
142
+ };
143
+
144
+ const quote = (value) => JSON.stringify(value);
145
+ const responsiveValueLines = (label, value, indent = 2) => {
146
+ const prefix = ' '.repeat(indent);
147
+ return [
148
+ `${prefix}${label}:`,
149
+ `${prefix} desktop: ${value.desktop}`,
150
+ `${prefix} mobile: ${value.mobile}`,
151
+ ];
152
+ };
153
+
154
+ export const renderThemePresetReference = (presetName, sourceLabel = 'theme.md') => {
155
+ const preset = getThemePreset(presetName, sourceLabel);
156
+ const { layout, gallery, typography, presentation } = preset;
157
+
158
+ return [
159
+ '---',
160
+ `# Original values for Norna's "${presetName}" theme preset.`,
161
+ '# This is a reference file. Norna only loads theme.md.',
162
+ '# Keep the preset in theme.md and copy only the values you want to override.',
163
+ `# Available theme presets: ${themePresetNames.join(', ')}.`,
164
+ `preset: ${presetName}`,
165
+ '',
166
+ 'layout:',
167
+ ' # Alternatives: compact, normal, airy.',
168
+ ` density: ${layout.density}`,
169
+ ' # Any positive CSS length, including px, rem, em, %, or clamp(...).',
170
+ ` pageWidth: ${layout.pageWidth}`,
171
+ ' gutter:',
172
+ ` desktop: ${layout.gutter.desktop}`,
173
+ ` mobile: ${layout.gutter.mobile}`,
174
+ ' # Optional spacing overrides use blockGap, finalSectionBottom,',
175
+ ' # firstSectionTop, headingToBlock, imageGap, and sectionGap.',
176
+ '',
177
+ 'gallery:',
178
+ ' # width accepts a positive CSS length.',
179
+ ` width: ${gallery.width}`,
180
+ ' # Percent values must be greater than 0 and at most 100.',
181
+ ...responsiveValueLines('maxAvailableWidthPercent', gallery.maxAvailableWidthPercent),
182
+ ...responsiveValueLines('maxAvailableHeightPercent', gallery.maxAvailableHeightPercent),
183
+ '',
184
+ 'typography:',
185
+ ' # Any valid CSS font-family stack without semicolons.',
186
+ ` fontFamily: ${quote(typography.fontFamily)}`,
187
+ ' # Alternatives: quiet-gallery, compact-gallery, text-forward, statement.',
188
+ ` preset: ${typography.preset}`,
189
+ ' # Alternatives: compact, normal, airy.',
190
+ ` rhythm: ${typography.rhythm}`,
191
+ ' # Fine-grained overrides can target headings.h1-h4, body, and caption.',
192
+ ' # Example:',
193
+ ' # overrides:',
194
+ ' # headings:',
195
+ ' # h2:',
196
+ ' # size: large # small, medium, large, or xlarge',
197
+ '',
198
+ 'presentation:',
199
+ ' # Alternatives: dark, light, paper.',
200
+ ` palette: ${presentation.palette}`,
201
+ ' sectionSurfaces:',
202
+ ' # Alternatives: none, cycle.',
203
+ ` mode: ${presentation.sectionSurfaces.mode}`,
204
+ ' # Use one to three unique values from: base, soft, emphasis.',
205
+ ` sequence: [${presentation.sectionSurfaces.sequence.join(', ')}]`,
206
+ '---',
207
+ '',
208
+ ].join('\n');
209
+ };
@@ -17,27 +17,32 @@ export const typographyPresets = {
17
17
  h1: {
18
18
  align: { desktop: 'left', mobile: 'left' },
19
19
  size: 'medium',
20
+ weight: 400,
20
21
  lineHeight: 1.04,
21
22
  },
22
23
  h2: {
23
24
  align: { desktop: 'left', mobile: 'left' },
24
25
  size: 'medium',
26
+ weight: 400,
25
27
  lineHeight: 1.08,
26
28
  },
27
29
  h3: {
28
30
  align: { desktop: 'left', mobile: 'left' },
29
31
  size: 'medium',
32
+ weight: 500,
30
33
  lineHeight: 1.35,
31
34
  },
32
35
  h4: {
33
36
  align: { desktop: 'left', mobile: 'left' },
34
37
  size: 'medium',
38
+ weight: 400,
35
39
  lineHeight: 1.5,
36
40
  },
37
41
  },
38
42
  body: {
39
43
  align: { desktop: 'left', mobile: 'left' },
40
44
  size: 'medium',
45
+ width: 'normal',
41
46
  lineHeight: 1.5,
42
47
  },
43
48
  caption: {
@@ -51,27 +56,32 @@ export const typographyPresets = {
51
56
  h1: {
52
57
  align: { desktop: 'left', mobile: 'left' },
53
58
  size: 'medium',
59
+ weight: 500,
54
60
  lineHeight: 1.04,
55
61
  },
56
62
  h2: {
57
63
  align: { desktop: 'left', mobile: 'left' },
58
64
  size: 'medium',
65
+ weight: 500,
59
66
  lineHeight: 1.08,
60
67
  },
61
68
  h3: {
62
69
  align: { desktop: 'left', mobile: 'left' },
63
70
  size: 'medium',
71
+ weight: 600,
64
72
  lineHeight: 1.3,
65
73
  },
66
74
  h4: {
67
75
  align: { desktop: 'left', mobile: 'left' },
68
76
  size: 'medium',
77
+ weight: 500,
69
78
  lineHeight: 1.42,
70
79
  },
71
80
  },
72
81
  body: {
73
82
  align: { desktop: 'left', mobile: 'left' },
74
83
  size: 'medium',
84
+ width: 'wide',
75
85
  lineHeight: 1.42,
76
86
  },
77
87
  caption: {
@@ -85,27 +95,32 @@ export const typographyPresets = {
85
95
  h1: {
86
96
  align: { desktop: 'left', mobile: 'left' },
87
97
  size: 'medium',
98
+ weight: 500,
88
99
  lineHeight: 1.06,
89
100
  },
90
101
  h2: {
91
102
  align: { desktop: 'left', mobile: 'left' },
92
103
  size: 'medium',
104
+ weight: 500,
93
105
  lineHeight: 1.12,
94
106
  },
95
107
  h3: {
96
108
  align: { desktop: 'left', mobile: 'left' },
97
109
  size: 'medium',
110
+ weight: 500,
98
111
  lineHeight: 1.35,
99
112
  },
100
113
  h4: {
101
114
  align: { desktop: 'left', mobile: 'left' },
102
115
  size: 'medium',
116
+ weight: 400,
103
117
  lineHeight: 1.55,
104
118
  },
105
119
  },
106
120
  body: {
107
121
  align: { desktop: 'left', mobile: 'left' },
108
122
  size: 'medium',
123
+ width: 'narrow',
109
124
  lineHeight: 1.62,
110
125
  },
111
126
  caption: {
@@ -119,27 +134,32 @@ export const typographyPresets = {
119
134
  h1: {
120
135
  align: { desktop: 'left', mobile: 'left' },
121
136
  size: 'medium',
137
+ weight: 600,
122
138
  lineHeight: 1.02,
123
139
  },
124
140
  h2: {
125
141
  align: { desktop: 'left', mobile: 'left' },
126
142
  size: 'medium',
143
+ weight: 600,
127
144
  lineHeight: 1.04,
128
145
  },
129
146
  h3: {
130
147
  align: { desktop: 'left', mobile: 'left' },
131
148
  size: 'medium',
149
+ weight: 600,
132
150
  lineHeight: 1.18,
133
151
  },
134
152
  h4: {
135
153
  align: { desktop: 'left', mobile: 'left' },
136
154
  size: 'medium',
155
+ weight: 500,
137
156
  lineHeight: 1.42,
138
157
  },
139
158
  },
140
159
  body: {
141
160
  align: { desktop: 'left', mobile: 'left' },
142
161
  size: 'medium',
162
+ width: 'narrow',
143
163
  lineHeight: 1.42,
144
164
  },
145
165
  caption: {
@@ -243,32 +263,6 @@ export const resolveTypographyConfig = (typography = defaultTypography) => {
243
263
  };
244
264
  };
245
265
 
246
- export const resolveTypographyOverride = (baseResolved, typographyConfig) => {
247
- if (typographyConfig?.preset || typographyConfig?.rhythm) {
248
- return resolveTypographyConfig({
249
- preset: typographyConfig.preset ?? baseResolved.preset,
250
- rhythm: typographyConfig.rhythm ?? baseResolved.rhythm,
251
- overrides: typographyConfig.overrides,
252
- });
253
- }
254
-
255
- if (typographyConfig?.overrides) {
256
- return {
257
- preset: baseResolved.preset,
258
- rhythm: baseResolved.rhythm,
259
- values: mergeDeep(baseResolved.values, typographyConfig.overrides),
260
- };
261
- }
262
-
263
- return baseResolved;
264
- };
265
-
266
- export const resolveSectionTypography = (defaultTypographyConfig, sectionTypographyConfig) => {
267
- const defaultResolved = resolveTypographyConfig(defaultTypographyConfig);
268
-
269
- return resolveTypographyOverride(defaultResolved, sectionTypographyConfig);
270
- };
271
-
272
266
  const quoteString = (value) => typeof value === 'string' && !/^[a-z0-9.-]+$/i.test(value)
273
267
  ? JSON.stringify(value)
274
268
  : value;