@janga/norna 0.7.10 → 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.
- package/README.md +4 -2
- package/bin/norna-cli.mjs +3 -0
- package/docs/README.md +3 -2
- package/docs/commands.md +6 -0
- package/docs/configuration.md +1 -0
- package/docs/content.md +14 -14
- package/docs/design/site-examples-structure.md +35 -24
- package/docs/engine-development.md +13 -7
- package/docs/getting-started.md +44 -9
- package/docs/routes.md +2 -1
- package/docs/site-structure.md +8 -5
- package/docs/theme.md +86 -34
- package/docs/typography.md +32 -17
- package/examples/README.md +41 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/sitewide.schema.json +24 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/theme.schema.json +9 -24
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev.json +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +53 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
- package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/README.md +1 -1
- package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/_metadata.json +13 -7
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +18 -0
- package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/config.mjs +5 -2
- package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-single-page}/README.md +1 -1
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +18 -0
- package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-single-page}/site/config.mjs +5 -2
- package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +138 -0
- package/examples/{dog-gallery → feature-demos/media-and-surfaces}/.astro/collections/theme.schema.json +151 -68
- package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +11 -0
- package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
- package/examples/feature-demos/media-and-surfaces/README.md +15 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/{presentation → feature-demos/media-and-surfaces}/site/.norna/generated-images.json +16 -16
- package/examples/{presentation → feature-demos/media-and-surfaces}/site/config.mjs +4 -3
- package/examples/{presentation → feature-demos/media-and-surfaces}/site/content.md +12 -15
- package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/route-content.md +11 -3
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +3 -0
- package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/theme.md +1 -0
- package/examples/feature-demos/media-and-surfaces/site/sitewide-content.md +6 -0
- package/examples/feature-demos/media-and-surfaces/site/theme.md +3 -0
- package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -0
- package/examples/{dog-gallery → feature-demos/theme-presets}/.astro/content.d.ts +8 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/.astro/data-store.json +1 -1
- package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
- package/examples/feature-demos/theme-presets/.astro/dev.json +15 -0
- package/examples/feature-demos/theme-presets/.astro/dev.log +127 -0
- package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
- package/examples/feature-demos/theme-presets/README.md +14 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/.norna/generated-images.json +45 -45
- package/examples/{typography-presets → feature-demos/theme-presets}/site/config.mjs +4 -3
- package/examples/feature-demos/theme-presets/site/content.md +17 -0
- package/examples/{typography-presets/site/routes/010-quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
- package/examples/{typography-presets/site/routes/020-compact-gallery → feature-demos/theme-presets/site/routes/020-documentation}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
- package/examples/{typography-presets/site/routes/030-text-forward → feature-demos/theme-presets/site/routes/030-project}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/route-content.md +3 -3
- package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/sitewide-content.md +1 -1
- package/examples/feature-demos/theme-presets/site/theme.md +3 -0
- package/package.json +7 -3
- package/scripts/build-pages.mjs +71 -0
- package/scripts/check-config.mjs +2 -1
- package/scripts/export-theme-preset.mjs +31 -0
- package/scripts/init-site.mjs +1 -0
- package/scripts/lib/example-sites.mjs +34 -0
- package/scripts/lib/presentation.mjs +6 -5
- package/scripts/lib/project-config.mjs +2 -1
- package/scripts/lib/site-content.mjs +2 -2
- package/scripts/lib/theme-config.mjs +3 -0
- package/scripts/lib/theme-presets.mjs +209 -0
- package/scripts/show-typography.mjs +6 -5
- package/scripts/test-engine-commands.mjs +1 -0
- package/scripts/test-examples.mjs +15 -0
- package/scripts/test-navigation.mjs +73 -45
- package/scripts/test-theme-presets.mjs +151 -0
- package/src/components/SitePage.astro +2 -2
- package/src/content.config.ts +2 -0
- package/src/styles/global.css +2 -0
- package/starters/basic/package.json +1 -0
- package/starters/project/package.json +1 -0
- package/examples/dog-gallery/.astro/collections/site.schema.json +0 -776
- package/examples/dog-gallery/.astro/data-store.json +0 -1
- package/examples/dog-gallery/.astro/dev-local.json +0 -8
- package/examples/dog-gallery/.astro/dev.json +0 -13
- package/examples/dog-gallery/.astro/dev.log +0 -95
- package/examples/dog-gallery/.astro/settings.json +0 -5
- package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
- package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +0 -1
- package/examples/dog-gallery/dist/dog-care/index.html +0 -15
- package/examples/dog-gallery/dist/dog-shelter-logo.svg +0 -14
- package/examples/dog-gallery/dist/favicon.svg +0 -7
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
- package/examples/dog-gallery/dist/index.html +0 -45
- package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
- package/examples/dog-gallery/site/config.mjs +0 -47
- package/examples/dog-gallery/site/content.md +0 -127
- package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
- package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
- package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
- package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
- package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
- package/examples/dog-gallery/site/public/favicon.svg +0 -7
- package/examples/dog-gallery/site/public/logo.svg +0 -14
- package/examples/dog-gallery/site/public/robots.txt +0 -2
- package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -38
- package/examples/dog-gallery/site/sitewide-content.md +0 -16
- package/examples/dog-gallery/site/theme.md +0 -101
- package/examples/presentation/README.md +0 -15
- package/examples/presentation/site/public/robots.txt +0 -2
- package/examples/presentation/site/routes/010-presets/route-content.md +0 -63
- package/examples/presentation/site/routes/010-presets/theme.md +0 -4
- package/examples/presentation/site/routes/020-media/theme.md +0 -4
- package/examples/presentation/site/sitewide-content.md +0 -6
- package/examples/presentation/site/theme.md +0 -43
- package/examples/typography-presets/.astro/dev.log +0 -45
- package/examples/typography-presets/site/content.md +0 -16
- package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +0 -4
- package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +0 -4
- package/examples/typography-presets/site/routes/030-text-forward/theme.md +0 -4
- package/examples/typography-presets/site/routes/040-statement/theme.md +0 -4
- package/examples/typography-presets/site/theme.md +0 -43
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/site.schema.json +0 -0
- /package/examples/{dog-gallery/.astro/content-modules.mjs → complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs} +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/content-modules.mjs +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /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
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/content.md +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/favicon.svg +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/010-dogs/images/dogs/rex.svg +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/010-dogs/images/dogs/rover.svg +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/010-dogs/route-content.md +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/020-adopt/route-content.md +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/sitewide-content.md +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/theme.md +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-single-page}/site/content.md +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-single-page}/site/images/what-we-do/dog-house.svg +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-single-page}/site/images/you-can-help/heart.svg +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/favicon.svg +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/robots.txt +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/sitewide-content.md +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/theme.md +0 -0
- /package/examples/{dog-gallery → feature-demos/media-and-surfaces}/.astro/content-assets.mjs +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/.astro/types.d.ts +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{dog-gallery/dist → feature-demos/media-and-surfaces/site/public}/robots.txt +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-carousel.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-stack.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-surfaces.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-one.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-three.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-two.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-one.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-two.svg +0 -0
- /package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/route-content.md +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/collections/routeTheme.schema.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/content-assets.mjs +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/shepherd-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/white-puppy.jpg +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/retriever-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/boxer-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grass-puppy.jpg +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/black-pedigree.jpg +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/sheepdog-grass.jpg +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/sheepdog-wide.jpg +0 -0
package/README.md
CHANGED
|
@@ -23,8 +23,9 @@ A `norna` site is file-driven:
|
|
|
23
23
|
1. A site repository depends on this package.
|
|
24
24
|
2. The site keeps technical settings, including public URL and optional URL
|
|
25
25
|
base path, in `site/config.mjs`.
|
|
26
|
-
3. The site
|
|
27
|
-
sizing, font, typography, palettes, and section surfaces,
|
|
26
|
+
3. The site selects a complete visual preset, with optional focused overrides
|
|
27
|
+
for layout, image sizing, font, typography, palettes, and section surfaces,
|
|
28
|
+
in `site/theme.md`.
|
|
28
29
|
4. The site keeps homepage content, Markdown section order, managed media
|
|
29
30
|
blocks, alt text, captions, and optional section metadata in
|
|
30
31
|
`site/content.md`.
|
|
@@ -81,6 +82,7 @@ Actions use the same engine version.
|
|
|
81
82
|
- Publish under a GitHub Pages project path:
|
|
82
83
|
[`site.basePath`](docs/configuration.md#sitebasepath)
|
|
83
84
|
- Configure site-wide theme: [Theme](docs/theme.md)
|
|
85
|
+
- Export a theme preset for inspection: [`theme:export`](docs/commands.md#command-summary)
|
|
84
86
|
- Add route pages: [Routes](docs/routes.md)
|
|
85
87
|
- Set page width: [`layout.pageWidth`](docs/theme.md#layout)
|
|
86
88
|
- Set side gutters: [`layout.gutter`](docs/theme.md#layout)
|
package/bin/norna-cli.mjs
CHANGED
|
@@ -17,6 +17,7 @@ Commands:
|
|
|
17
17
|
config:check Validate site/config.mjs
|
|
18
18
|
content:check Validate site/content.md and image references
|
|
19
19
|
content:sync Move misplaced Norna-managed images and refresh generated images
|
|
20
|
+
theme:export Export a commented theme preset reference
|
|
20
21
|
typography presets Show built-in typography preset values
|
|
21
22
|
typography show Show resolved typography for the selected site
|
|
22
23
|
site:public Sync site/public/ to public/
|
|
@@ -131,6 +132,8 @@ try {
|
|
|
131
132
|
} else if (command === 'content:sync') {
|
|
132
133
|
await runScript('scripts/sync-content-sections.mjs', ['--write', ...rest]);
|
|
133
134
|
await runScript('scripts/generate-images.mjs', rest);
|
|
135
|
+
} else if (command === 'theme:export') {
|
|
136
|
+
await runScript('scripts/export-theme-preset.mjs', rest);
|
|
134
137
|
} else if (command === 'typography:presets' || (command === 'typography' && subcommand === 'presets')) {
|
|
135
138
|
const scriptArgs = command === 'typography' ? subcommandRest : rest;
|
|
136
139
|
await runScript('scripts/show-typography.mjs', ['presets', ...scriptArgs]);
|
package/docs/README.md
CHANGED
|
@@ -45,8 +45,9 @@ For a quick reference:
|
|
|
45
45
|
- [Content](content.md) describes page frontmatter, Markdown-authored
|
|
46
46
|
sections, optional section metadata, managed media blocks, temporary sections,
|
|
47
47
|
and content validation.
|
|
48
|
-
- [Theme](theme.md) describes
|
|
49
|
-
|
|
48
|
+
- [Theme](theme.md) describes complete visual presets, focused overrides,
|
|
49
|
+
preset export, layout, image sizing, typography, palettes, and section
|
|
50
|
+
surfaces.
|
|
50
51
|
- [Typography](typography.md) describes presets, rhythms, roles, overrides,
|
|
51
52
|
inheritance, and inspection commands.
|
|
52
53
|
- [Routes](routes.md) describes route files, slugs, route navigation, and
|
package/docs/commands.md
CHANGED
|
@@ -25,6 +25,7 @@ norna dev:stop
|
|
|
25
25
|
norna config:check
|
|
26
26
|
norna content:check
|
|
27
27
|
norna content:sync
|
|
28
|
+
norna theme:export <preset>
|
|
28
29
|
norna typography presets
|
|
29
30
|
norna typography show
|
|
30
31
|
norna site:public
|
|
@@ -72,6 +73,7 @@ npm run norna:check
|
|
|
72
73
|
npm run norna:config:check
|
|
73
74
|
npm run norna:content:check
|
|
74
75
|
npm run norna:sync
|
|
76
|
+
npm run norna:theme:export -- <preset>
|
|
75
77
|
npm run norna:typography:presets
|
|
76
78
|
npm run norna:typography:show
|
|
77
79
|
npm run norna:public
|
|
@@ -106,6 +108,10 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
106
108
|
- `content:sync` / `norna:sync`: moves misplaced referenced image files after
|
|
107
109
|
confirmation when the intended move is unambiguous. Moving files between the
|
|
108
110
|
homepage and routes, or between routes, requires a clean Git working tree.
|
|
111
|
+
- `theme:export <preset>`: writes a protected, commented
|
|
112
|
+
`orig-<preset>-theme.md` reference under the selected site directory. The
|
|
113
|
+
available complete theme presets are `portfolio`, `documentation`,
|
|
114
|
+
`project`, and `statement`. Norna continues to load only `theme.md`.
|
|
109
115
|
- `typography presets`: prints the exact built-in values for typography
|
|
110
116
|
presets and rhythms.
|
|
111
117
|
- `typography show`: prints the selected site's resolved typography for the
|
package/docs/configuration.md
CHANGED
package/docs/content.md
CHANGED
|
@@ -269,14 +269,16 @@ NORNA_TODAY=2026-08-15 npm run norna:build
|
|
|
269
269
|
|
|
270
270
|
## Markdown Text
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
Use ordinary Markdown for emphasis and structure:
|
|
273
273
|
|
|
274
274
|
```md
|
|
275
|
-
This sentence contains
|
|
275
|
+
This sentence contains **important text** and *emphasised text*.
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
-
|
|
279
|
-
[
|
|
278
|
+
Norna intentionally does not support arbitrary inline color or style classes.
|
|
279
|
+
Deprecated syntax such as `[highlighted text]{.yellow}` is rejected by
|
|
280
|
+
`content:check`. Keep the route visually coherent through its `theme.md`
|
|
281
|
+
instead of styling individual phrases.
|
|
280
282
|
|
|
281
283
|
## Validation And Sync
|
|
282
284
|
|
|
@@ -288,27 +290,25 @@ npm run norna:content:check
|
|
|
288
290
|
|
|
289
291
|
This checks section heading ids, section metadata, duplicate image names,
|
|
290
292
|
missing image files, misplaced referenced images, duplicate image references,
|
|
291
|
-
invalid managed media blocks, unreferenced images,
|
|
293
|
+
invalid managed media blocks, unreferenced images, removed inline style syntax,
|
|
292
294
|
Markdown image references to unmanaged local files, and common frontmatter
|
|
293
295
|
indentation and structure mistakes.
|
|
294
296
|
|
|
295
297
|
Frontmatter uses YAML indentation. Use ordinary spaces, not tabs or
|
|
296
298
|
non-breaking spaces. `content:check` reports a focused error when indentation is
|
|
297
299
|
invalid, when a key is indented under a line that already has a value, or when a
|
|
298
|
-
known nested key
|
|
299
|
-
level:
|
|
300
|
+
known nested key appears at the top level:
|
|
300
301
|
|
|
301
302
|
```yaml
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
body:
|
|
307
|
-
paragraphSpacing: 0.8em
|
|
303
|
+
sections:
|
|
304
|
+
intro:
|
|
305
|
+
visible:
|
|
306
|
+
from: "2026-08-01"
|
|
308
307
|
```
|
|
309
308
|
|
|
310
309
|
Top-level page frontmatter may contain only `title`, `description`,
|
|
311
|
-
`navigation`,
|
|
310
|
+
`navigation`, and `sections`. Visual settings belong in the root or route-local
|
|
311
|
+
`theme.md`.
|
|
312
312
|
|
|
313
313
|
Run:
|
|
314
314
|
|
|
@@ -10,7 +10,8 @@ files are product documentation, which files are examples, and which files are
|
|
|
10
10
|
test fixtures.
|
|
11
11
|
|
|
12
12
|
The repository grew from one local demo, one starter, and a set of tests. The
|
|
13
|
-
current structure keeps those roles
|
|
13
|
+
current structure keeps those roles distinct while allowing runnable examples
|
|
14
|
+
to serve as documentation and realistic integration tests.
|
|
14
15
|
|
|
15
16
|
## Terms
|
|
16
17
|
|
|
@@ -26,8 +27,8 @@ site repository. It should not be a showcase for every feature.
|
|
|
26
27
|
An example site is a runnable site that demonstrates one or more features.
|
|
27
28
|
|
|
28
29
|
Examples can be richer than the starter. They may show routes, navigation,
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
complete theme presets, image stacks, image carousels, cards, notes, surfaces,
|
|
31
|
+
and site-specific configuration choices.
|
|
31
32
|
|
|
32
33
|
### Documentation Site
|
|
33
34
|
|
|
@@ -54,26 +55,37 @@ A fixture is test data.
|
|
|
54
55
|
It should be minimal, stable, and optimized for regression tests rather than
|
|
55
56
|
for human reading or visual appeal.
|
|
56
57
|
|
|
57
|
-
##
|
|
58
|
+
## Repository Structure
|
|
58
59
|
|
|
59
60
|
Runnable site examples are collected under `examples/`:
|
|
60
61
|
|
|
61
62
|
```text
|
|
62
63
|
examples/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
complete-sites/
|
|
65
|
+
dog-shelter-single-page/
|
|
66
|
+
dog-shelter-multi-page/
|
|
67
|
+
feature-demos/
|
|
68
|
+
theme-presets/
|
|
69
|
+
media-and-surfaces/
|
|
66
70
|
```
|
|
67
71
|
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
`complete-sites/` contains coherent sites that show how Norna files work
|
|
73
|
+
together in a realistic project:
|
|
70
74
|
|
|
71
|
-
- `dog-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
- `dog-shelter-single-page/`: sections and managed images without routes.
|
|
76
|
+
- `dog-shelter-multi-page/`: ordered routes with route-local content and
|
|
77
|
+
images.
|
|
78
|
+
|
|
79
|
+
`feature-demos/` contains focused visual test benches:
|
|
80
|
+
|
|
81
|
+
- `theme-presets/`: one route per complete built-in theme preset, without
|
|
82
|
+
overrides.
|
|
83
|
+
- `media-and-surfaces/`: managed media blocks, notes, palettes and section
|
|
84
|
+
surfaces. This is also the broad demo-build and navigation-test target.
|
|
85
|
+
|
|
86
|
+
The repository Pages workflow builds all four examples and publishes them
|
|
87
|
+
under `/norna/examples/`. The HTML documentation links to those rendered sites
|
|
88
|
+
from its Examples route.
|
|
77
89
|
|
|
78
90
|
The repository-local `site/` directory is reserved for the documentation site.
|
|
79
91
|
`docs/` should remain for reference documentation. It should link to the
|
|
@@ -82,8 +94,8 @@ documentation site when visual explanation is more useful than reference text.
|
|
|
82
94
|
`starters/basic/` stays separate from examples because it is copied by
|
|
83
95
|
`norna init`. It should stay small and conservative.
|
|
84
96
|
|
|
85
|
-
Fixtures
|
|
86
|
-
|
|
97
|
+
Fixtures stay under `fixtures/`. They are intentionally smaller and more stable
|
|
98
|
+
than examples and should not be confused with user-facing sites.
|
|
87
99
|
|
|
88
100
|
## Constraints
|
|
89
101
|
|
|
@@ -91,11 +103,10 @@ area later. They should not be confused with examples.
|
|
|
91
103
|
- Do not make the documentation site the only documentation.
|
|
92
104
|
- Do not let examples become required input for production site repositories.
|
|
93
105
|
- Keep `norna init` deterministic and easy to test.
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
106
|
+
- Use examples for build, navigation and visual integration tests where the
|
|
107
|
+
user-facing site is the behavior being protected.
|
|
108
|
+
- Use fixtures for isolated edge cases, invalid input and narrowly scoped
|
|
109
|
+
engine regressions.
|
|
97
110
|
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
- How local example selection should work when there are multiple runnable
|
|
101
|
-
examples.
|
|
111
|
+
The repository-local `site/` remains the product documentation site and is not
|
|
112
|
+
an example or fixture.
|
|
@@ -19,8 +19,8 @@ This document is for work on the reusable `norna` package itself.
|
|
|
19
19
|
- `tests/`: Playwright navigation diagnostics.
|
|
20
20
|
- `fixtures/basic/site/`: minimal site used for engine checks.
|
|
21
21
|
- `starters/basic/`: copyable site starter.
|
|
22
|
-
- `examples/
|
|
23
|
-
navigation diagnostics.
|
|
22
|
+
- `examples/feature-demos/media-and-surfaces/site/`: broad visual example used
|
|
23
|
+
by demo builds and navigation diagnostics.
|
|
24
24
|
|
|
25
25
|
The repository-local `site/` directory is reserved for a local documentation
|
|
26
26
|
site. It is useful for dogfooding `norna` documentation, but it is not the
|
|
@@ -34,11 +34,18 @@ Run focused checks while developing:
|
|
|
34
34
|
npm run test:content-check
|
|
35
35
|
npm run test:site-public
|
|
36
36
|
npm run test:fixture:build
|
|
37
|
+
npm run test:examples
|
|
37
38
|
npm run demo:build
|
|
38
39
|
npm run package:check
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
`npm run test`
|
|
42
|
+
`npm run test:examples` builds every complete site and feature demo under
|
|
43
|
+
`examples/`. `npm run test` includes those builds in the standard check
|
|
44
|
+
sequence.
|
|
45
|
+
|
|
46
|
+
`npm run build:pages` is specific to this repository. It builds the
|
|
47
|
+
documentation site and assembles rendered examples under `dist/examples/` for
|
|
48
|
+
the shared GitHub Pages artifact. It is not a generic Norna site command.
|
|
42
49
|
|
|
43
50
|
The root `site/` directory is the documentation site. Use the ordinary local
|
|
44
51
|
commands for it:
|
|
@@ -48,12 +55,11 @@ npm run dev:local
|
|
|
48
55
|
npm run build
|
|
49
56
|
```
|
|
50
57
|
|
|
51
|
-
The
|
|
58
|
+
The media-and-surfaces feature demo is the broad visual and navigation
|
|
59
|
+
diagnostic target:
|
|
52
60
|
|
|
53
61
|
```sh
|
|
54
|
-
|
|
55
|
-
node ../../../bin/norna.mjs dev:local
|
|
56
|
-
cd ../../..
|
|
62
|
+
node bin/norna.mjs --site-dir examples/feature-demos/media-and-surfaces/site dev:local
|
|
57
63
|
npm run demo:build
|
|
58
64
|
```
|
|
59
65
|
|
package/docs/getting-started.md
CHANGED
|
@@ -92,9 +92,8 @@ Relevant documentation: [Commands](commands.md), [Site Structure](site-structure
|
|
|
92
92
|
repository, and deploy settings.
|
|
93
93
|
2. Edit `site/sitewide-content.md` for the shared brand or logo, banners and
|
|
94
94
|
footer content.
|
|
95
|
-
3.
|
|
96
|
-
|
|
97
|
-
surfaces, or omit it to use engine defaults.
|
|
95
|
+
3. Keep `site/theme.md` and select a complete theme preset. Add focused visual
|
|
96
|
+
overrides only when the preset needs adjustment.
|
|
98
97
|
4. Edit `site/content.md` for homepage title, description, Markdown sections,
|
|
99
98
|
text, Norna managed media blocks, alt text, and captions.
|
|
100
99
|
5. Put source images under `site/images/<section-id>/`, where `<section-id>`
|
|
@@ -124,6 +123,42 @@ publishing.
|
|
|
124
123
|
Relevant documentation: [Content](content.md), [Theme](theme.md),
|
|
125
124
|
[Typography](typography.md), [Routes](routes.md), [Images And Metadata](images-and-metadata.md).
|
|
126
125
|
|
|
126
|
+
## Choose A Theme
|
|
127
|
+
|
|
128
|
+
The required root `theme.md` can be deliberately short:
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
---
|
|
132
|
+
preset: project
|
|
133
|
+
---
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Available complete presets are `portfolio`, `documentation`, `project`, and
|
|
137
|
+
`statement`. They coordinate layout, image sizing, font, typography, spacing,
|
|
138
|
+
palette, and section surfaces.
|
|
139
|
+
|
|
140
|
+
Override only what the site needs to change:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
---
|
|
144
|
+
preset: project
|
|
145
|
+
layout:
|
|
146
|
+
pageWidth: 1240px
|
|
147
|
+
---
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Export a commented reference for a preset with:
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
npm run norna:theme:export -- project
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The generated `site/orig-project-theme.md` is reference material and is not
|
|
157
|
+
loaded by Norna. The command does not overwrite an existing reference file.
|
|
158
|
+
|
|
159
|
+
Relevant documentation: [Theme](theme.md), [Typography](typography.md),
|
|
160
|
+
[Commands](commands.md).
|
|
161
|
+
|
|
127
162
|
## Configure The Public URL
|
|
128
163
|
|
|
129
164
|
For a custom domain or any site published at the web root, use:
|
|
@@ -159,13 +194,13 @@ Read [Site Structure](site-structure.md), [Content](content.md),
|
|
|
159
194
|
[Theme](theme.md), [Typography](typography.md), [Routes](routes.md), and
|
|
160
195
|
[Configuration](configuration.md) before publishing a real site.
|
|
161
196
|
|
|
162
|
-
To change the site's
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
the accepted shape.
|
|
197
|
+
To change the site's overall visual expression, select a top-level preset in
|
|
198
|
+
`site/theme.md`. Override individual page-width, gutter, image, typography, or
|
|
199
|
+
palette values only where needed. See [Theme](theme.md) for the accepted shape.
|
|
166
200
|
|
|
167
|
-
To give a route a different visual expression, add a
|
|
168
|
-
|
|
201
|
+
To give a route a different visual expression, add a route-local `theme.md`
|
|
202
|
+
and normally select another complete top-level preset. See
|
|
203
|
+
[Theme](theme.md#route-themes) and [Typography](typography.md).
|
|
169
204
|
Use `norna typography presets` to inspect the installed preset and rhythm values
|
|
170
205
|
and `norna typography show` to inspect the resolved typography for the selected
|
|
171
206
|
site.
|
package/docs/routes.md
CHANGED
|
@@ -10,7 +10,8 @@ for the page and section model.
|
|
|
10
10
|
|
|
11
11
|
Route directories can contain route content, route-local images, and
|
|
12
12
|
an optional route-local `theme.md`. The route theme replaces the root visual
|
|
13
|
-
theme for that route
|
|
13
|
+
theme for that route and can select any complete top-level theme preset. Route
|
|
14
|
+
directories cannot contain technical site
|
|
14
15
|
configuration; technical configuration stays in the selected site directory's
|
|
15
16
|
top-level `config.mjs`.
|
|
16
17
|
|
package/docs/site-structure.md
CHANGED
|
@@ -31,15 +31,16 @@ site directory. Without an explicit site directory, commands first accept the
|
|
|
31
31
|
current directory when it contains both `config.mjs` and `content.md`.
|
|
32
32
|
Otherwise, commands started from a subdirectory walk upward until they find the
|
|
33
33
|
default `site/` directory containing those files.
|
|
34
|
-
`theme.md` is
|
|
34
|
+
`theme.md` is required. It can contain only a complete preset selection.
|
|
35
35
|
|
|
36
36
|
## Versioned Source Files
|
|
37
37
|
|
|
38
38
|
Version these files in a site repository:
|
|
39
39
|
|
|
40
40
|
- `site/config.mjs`: technical site configuration.
|
|
41
|
-
- `site/theme.md`:
|
|
42
|
-
|
|
41
|
+
- `site/theme.md`: required site-wide visual theme. It normally selects a
|
|
42
|
+
complete preset and may add focused layout, image, typography, palette, or
|
|
43
|
+
section-surface overrides.
|
|
43
44
|
See [Theme](theme.md).
|
|
44
45
|
- `site/sitewide-content.md`: shared site identity, banners and footer content.
|
|
45
46
|
See [Sitewide Content](sitewide-content.md).
|
|
@@ -90,6 +91,8 @@ In this repository:
|
|
|
90
91
|
- `starters/project/` is a project-site starter used as a maintained example
|
|
91
92
|
for small project and developer-tool sites.
|
|
92
93
|
- `fixtures/basic/site/` is used by engine regression tests.
|
|
93
|
-
- `examples/
|
|
94
|
-
builds and navigation diagnostics.
|
|
94
|
+
- `examples/feature-demos/media-and-surfaces/site/` is the broad visual example
|
|
95
|
+
used by demo builds and navigation diagnostics.
|
|
96
|
+
- `examples/complete-sites/` contains coherent sites, while
|
|
97
|
+
`examples/feature-demos/` contains focused visual test benches.
|
|
95
98
|
- `site/` is reserved for the local documentation site.
|
package/docs/theme.md
CHANGED
|
@@ -2,48 +2,90 @@
|
|
|
2
2
|
|
|
3
3
|
`site/theme.md` defines the site-wide visual theme for a `norna` site. It uses
|
|
4
4
|
YAML frontmatter and does not need a Markdown body. The root theme file is
|
|
5
|
-
required
|
|
6
|
-
|
|
5
|
+
required. The normal setup selects one complete theme preset and adds only
|
|
6
|
+
focused overrides when needed.
|
|
7
7
|
|
|
8
8
|
An optional `theme.md` inside a route directory replaces the root visual theme
|
|
9
|
-
for that route.
|
|
10
|
-
|
|
11
|
-
and belongs in `sitewide-content.md`.
|
|
9
|
+
for that route. Shared identity such as brand and logo remains site-wide and
|
|
10
|
+
belongs in `sitewide-content.md`.
|
|
12
11
|
|
|
13
|
-
##
|
|
12
|
+
## Theme Presets
|
|
13
|
+
|
|
14
|
+
Available complete theme presets are:
|
|
15
|
+
|
|
16
|
+
- `portfolio`: restrained typography and a broad image area for image-led
|
|
17
|
+
presentation.
|
|
18
|
+
- `documentation`: reading-focused typography, a paper palette, and compact
|
|
19
|
+
structural rhythm.
|
|
20
|
+
- `project`: compact layout and a light presentation for project and product
|
|
21
|
+
sites.
|
|
22
|
+
- `statement`: airy spacing and stronger typography for short editorial
|
|
23
|
+
content.
|
|
24
|
+
|
|
25
|
+
A normal `theme.md` can be only:
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
---
|
|
29
|
+
preset: documentation
|
|
30
|
+
---
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Each preset supplies coordinated values for:
|
|
34
|
+
|
|
35
|
+
- layout density, page width, and gutters
|
|
36
|
+
- managed image sizing
|
|
37
|
+
- font family, typography preset, and typography rhythm
|
|
38
|
+
- palette and section-surface behaviour
|
|
39
|
+
|
|
40
|
+
The nested `typography.preset` setting documented below is a lower-level
|
|
41
|
+
typography choice. A top-level theme `preset` selects the complete visual
|
|
42
|
+
system, including that typography choice.
|
|
43
|
+
|
|
44
|
+
## Overrides
|
|
45
|
+
|
|
46
|
+
Values written beside the top-level preset override only that part of the
|
|
47
|
+
preset. Other preset values remain active:
|
|
14
48
|
|
|
15
49
|
```yaml
|
|
16
50
|
---
|
|
51
|
+
preset: documentation
|
|
17
52
|
layout:
|
|
18
|
-
|
|
19
|
-
pageWidth: 1180px
|
|
20
|
-
gutter:
|
|
21
|
-
desktop: clamp(1.25rem, 4vw, 3rem)
|
|
22
|
-
mobile: 1rem
|
|
23
|
-
gallery:
|
|
24
|
-
width: 900px
|
|
25
|
-
maxAvailableWidthPercent:
|
|
26
|
-
desktop: 100
|
|
27
|
-
mobile: 100
|
|
28
|
-
maxAvailableHeightPercent:
|
|
29
|
-
desktop: 74
|
|
30
|
-
mobile: 68
|
|
31
|
-
typography:
|
|
32
|
-
fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
|
|
33
|
-
preset: quiet-gallery
|
|
34
|
-
rhythm: normal
|
|
53
|
+
pageWidth: 1320px
|
|
35
54
|
presentation:
|
|
36
|
-
palette: dark
|
|
37
|
-
sectionSurfaces:
|
|
38
|
-
mode: cycle
|
|
39
|
-
sequence: [base, soft, emphasis]
|
|
55
|
+
palette: dark
|
|
40
56
|
---
|
|
41
57
|
```
|
|
42
58
|
|
|
43
|
-
|
|
44
|
-
`
|
|
45
|
-
|
|
46
|
-
|
|
59
|
+
Nested objects are merged by key. Arrays such as
|
|
60
|
+
`presentation.sectionSurfaces.sequence` replace the preset array when they are
|
|
61
|
+
specified.
|
|
62
|
+
|
|
63
|
+
It is still valid to omit the top-level preset and define the visual settings
|
|
64
|
+
explicitly. Omitted explicit settings then use engine defaults. This is useful
|
|
65
|
+
for focused testing, but selecting a complete preset is the simpler normal
|
|
66
|
+
workflow.
|
|
67
|
+
|
|
68
|
+
## Export A Preset
|
|
69
|
+
|
|
70
|
+
Export the installed definition of a preset before choosing overrides:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
norna theme:export documentation
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
In a generated site, the equivalent npm command is:
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
npm run norna:theme:export -- documentation
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The command creates `site/orig-documentation-theme.md`, or the corresponding
|
|
83
|
+
path under the selected site directory. The file contains the preset values,
|
|
84
|
+
comments describing accepted alternatives, and an example of a fine-grained
|
|
85
|
+
typography override.
|
|
86
|
+
|
|
87
|
+
Norna never loads `orig-*-theme.md`; only `theme.md` is active. The export
|
|
88
|
+
command refuses to overwrite an existing reference file.
|
|
47
89
|
|
|
48
90
|
Site identity is not part of the visual theme. Define the optional navigation
|
|
49
91
|
brand and logo settings in `site/sitewide-content.md`; see [Sitewide Content](sitewide-content.md).
|
|
@@ -203,9 +245,19 @@ visual expression:
|
|
|
203
245
|
site/routes/010-guide/theme.md
|
|
204
246
|
```
|
|
205
247
|
|
|
206
|
-
The route theme uses the same visual schema as the root
|
|
207
|
-
|
|
208
|
-
|
|
248
|
+
The route theme uses the same visual schema and complete presets as the root
|
|
249
|
+
theme. A route can therefore select a different expression without repeating a
|
|
250
|
+
large configuration:
|
|
251
|
+
|
|
252
|
+
```yaml
|
|
253
|
+
---
|
|
254
|
+
preset: statement
|
|
255
|
+
---
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
It completely replaces the root visual theme for that route. If the route
|
|
259
|
+
theme selects no top-level preset, omitted values use engine defaults rather
|
|
260
|
+
than values from the root theme. It cannot define navigation, brand, logo, or
|
|
209
261
|
technical configuration.
|
|
210
262
|
|
|
211
263
|
Section surfaces render as full-width horizontal bands while the section
|
package/docs/typography.md
CHANGED
|
@@ -3,12 +3,20 @@
|
|
|
3
3
|
`norna` typography is configured in `site/theme.md` through a site-wide font,
|
|
4
4
|
presets, text rhythm, and optional overrides.
|
|
5
5
|
|
|
6
|
-
The normal
|
|
7
|
-
|
|
8
|
-
Page and section files may override the theme when a focused exception is
|
|
9
|
-
needed, but the normal workflow is to keep typography in `theme.md`.
|
|
6
|
+
The normal workflow is to select a complete top-level theme preset. It already
|
|
7
|
+
chooses a coordinated font, typography preset, and rhythm:
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
```yaml
|
|
10
|
+
---
|
|
11
|
+
preset: documentation
|
|
12
|
+
---
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use the nested `typography` block only when those typographic choices need to
|
|
16
|
+
differ from the selected theme preset. Typography is configured at root-theme
|
|
17
|
+
or route-theme level, not in page or section content.
|
|
18
|
+
|
|
19
|
+
## Typography Presets
|
|
12
20
|
|
|
13
21
|
Available presets:
|
|
14
22
|
|
|
@@ -21,7 +29,9 @@ Available presets:
|
|
|
21
29
|
- `statement`: tighter, more declarative line-height for short programmatic
|
|
22
30
|
statements. Use it sparingly, usually as a page or section exception.
|
|
23
31
|
|
|
24
|
-
If theme
|
|
32
|
+
If a complete top-level theme preset is selected, that preset supplies the
|
|
33
|
+
typography choice. If both the top-level preset and nested typography are
|
|
34
|
+
omitted, the engine default is `quiet-gallery`.
|
|
25
35
|
|
|
26
36
|
Presets define alignment, size, weight, and line height for `headings.h1`
|
|
27
37
|
through `headings.h4`, `body`, and `caption`. They also choose a readable body
|
|
@@ -142,30 +152,35 @@ Supported override fields:
|
|
|
142
152
|
|
|
143
153
|
## Route Themes
|
|
144
154
|
|
|
145
|
-
|
|
155
|
+
The simplest route-specific typography change is to select a complete theme
|
|
156
|
+
preset:
|
|
146
157
|
|
|
147
158
|
```yaml
|
|
148
|
-
# site/theme.md
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
rhythm: normal
|
|
159
|
+
# site/routes/010-introduction/theme.md
|
|
160
|
+
---
|
|
161
|
+
preset: statement
|
|
162
|
+
---
|
|
153
163
|
```
|
|
154
164
|
|
|
155
|
-
A route-local `theme.md`
|
|
156
|
-
The
|
|
157
|
-
|
|
158
|
-
still needs.
|
|
165
|
+
A route-local `theme.md` replaces the root visual theme rather than inheriting
|
|
166
|
+
from it. The complete preset supplies a coherent route theme without repeating
|
|
167
|
+
the root values.
|
|
159
168
|
|
|
160
|
-
|
|
169
|
+
Use a nested typography choice when only the typographic character needs to be
|
|
170
|
+
specified explicitly:
|
|
161
171
|
|
|
162
172
|
```yaml
|
|
163
173
|
# site/routes/010-introduction/theme.md
|
|
174
|
+
---
|
|
164
175
|
typography:
|
|
165
176
|
preset: statement
|
|
166
177
|
rhythm: normal
|
|
178
|
+
---
|
|
167
179
|
```
|
|
168
180
|
|
|
181
|
+
Without a top-level theme preset, other omitted route-theme values use engine
|
|
182
|
+
defaults rather than values from the root theme.
|
|
183
|
+
|
|
169
184
|
The `body.width` value controls the prose column independently of the page and
|
|
170
185
|
image widths. Captions are normally centered, but `text-forward` uses
|
|
171
186
|
left-aligned captions to support longer explanatory text.
|