@janga/norna 0.7.11 → 0.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -108
- package/bin/norna-cli.mjs +1 -1
- package/docs/README.md +107 -75
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +7 -4
- package/docs/configuration.md +86 -185
- package/docs/design/command-organization.md +1 -1
- package/docs/design/norna-diagram-design.md +2 -1
- package/docs/design/site-examples-structure.md +4 -1
- package/docs/engine-development.md +15 -8
- package/docs/getting-started.md +126 -144
- package/docs/how-to/embedded-site.md +35 -0
- package/docs/publishing.md +47 -46
- package/docs/requirements.md +54 -0
- package/docs/routes.md +1 -1
- package/docs/site-structure.md +4 -4
- package/docs/sitewide-content.md +2 -1
- package/docs/theme.md +18 -0
- package/examples/README.md +26 -24
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +4 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +6 -8
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -53
- package/examples/complete-sites/dog-shelter-multi-page/README.md +7 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +29 -35
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{astro-D_GIpJIE.js → astro-B3JHJyiv.js} +4 -4
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +151 -151
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +131 -131
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{audit-DM9Hkl5B.js → audit-C3SVr7dT.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{highlight-DnZ1ULOL.js → highlight-BLtvqtzO.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{icons-RyebKi45.js → icons-C92i61-2.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{settings-DaU-gNnK.js → settings-v5GgKks_.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{toolbar-63PA619H.js → toolbar-BFvJVp26.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{ui-library--bkcNSYz.js → ui-library-Cd35oAvo.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{window-jPkpKVcy.js → window-vo3A6TMn.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/{xray-BXCHpEJP.js → xray-DwhzGckb.js} +3 -3
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +92 -12
- package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +11 -19
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +11 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +12 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +1 -23
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +59 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +138 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +755 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +4 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +1 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +183 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +13 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +14 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +2 -0
- package/examples/complete-sites/dog-shelter-single-page/README.md +7 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +3 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +44 -12
- package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +20 -24
- package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +12 -2
- package/examples/complete-sites/dog-shelter-single-page/site/theme.md +1 -23
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +15 -2
- package/examples/feature-demos/media-and-surfaces/README.md +7 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +7 -1
- package/examples/{complete-sites/dog-shelter-multi-page → feature-demos/media-and-surfaces}/node_modules/.vite/deps/embla-carousel.js +1 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/site/config.md +3 -0
- package/examples/feature-demos/media-and-surfaces/site/content.md +5 -51
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +10 -25
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +1 -1
- package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content.d.ts +183 -0
- package/examples/feature-demos/sitewide-content/.astro/data-store.json +1 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.json +13 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.log +18 -0
- package/examples/feature-demos/sitewide-content/.astro/settings.json +5 -0
- package/examples/feature-demos/sitewide-content/.astro/types.d.ts +2 -0
- package/examples/feature-demos/sitewide-content/README.md +18 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +1 -0
- package/examples/feature-demos/sitewide-content/site/config.md +3 -0
- package/examples/feature-demos/sitewide-content/site/content.md +16 -0
- package/examples/feature-demos/sitewide-content/site/public/logo.svg +6 -0
- package/examples/feature-demos/sitewide-content/site/public/robots.txt +2 -0
- package/examples/feature-demos/sitewide-content/site/routes/010-identity/route-content.md +20 -0
- package/examples/feature-demos/sitewide-content/site/routes/020-notices/route-content.md +22 -0
- package/examples/feature-demos/sitewide-content/site/routes/030-footer/route-content.md +17 -0
- package/examples/feature-demos/sitewide-content/site/sitewide-content.md +33 -0
- package/examples/feature-demos/sitewide-content/site/theme.md +3 -0
- package/examples/feature-demos/theme-presets/.astro/dev.log +37 -0
- package/examples/feature-demos/theme-presets/README.md +5 -1
- package/examples/feature-demos/theme-presets/site/config.md +3 -0
- package/fixtures/basic/site/config.md +3 -0
- package/fixtures/content-model-v2/site/config.md +3 -0
- package/package.json +12 -7
- package/scripts/build-pages.mjs +4 -6
- package/scripts/check-config.mjs +1 -10
- package/scripts/deploy-site.mjs +12 -8
- package/scripts/lib/example-sites.mjs +3 -0
- package/scripts/lib/github-repository.mjs +44 -0
- package/scripts/lib/norna-markdown-blocks.mjs +97 -10
- package/scripts/lib/project-config.mjs +112 -123
- package/scripts/lib/site-content.mjs +7 -0
- package/scripts/lib/site-paths.mjs +6 -2
- package/scripts/test-client-javascript.mjs +221 -0
- package/scripts/test-content-check.mjs +103 -0
- package/scripts/test-content-model-v2.mjs +9 -13
- package/scripts/test-documentation.mjs +116 -0
- package/scripts/test-engine-commands.mjs +12 -3
- package/scripts/test-examples.mjs +9 -0
- package/scripts/test-package-check.mjs +17 -9
- package/scripts/test-project-config.mjs +125 -0
- package/scripts/test-temporary-visibility.mjs +3 -10
- package/scripts/test-theme-presets.mjs +3 -8
- package/scripts/watch-pages-deploy.mjs +15 -11
- package/src/components/GalleryGrid.astro +30 -230
- package/src/components/ImageCarousel.astro +184 -0
- package/src/components/MobileSectionNavigationScript.astro +14 -0
- package/src/components/SiteNavigation.astro +54 -341
- package/src/components/SiteNotesScript.astro +43 -0
- package/src/components/SitePage.astro +4 -1
- package/src/components/SiteSection.astro +4 -47
- package/src/layouts/BaseLayout.astro +1 -1
- package/src/lib/galleryImages.ts +53 -0
- package/src/styles/global.css +81 -1
- package/starters/basic/.github/workflows/deploy.yml +1 -2
- package/starters/basic/README.md +10 -8
- package/starters/basic/site/config.md +3 -0
- package/starters/project/.github/workflows/deploy.yml +1 -2
- package/starters/project/README.md +3 -4
- package/starters/project/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +0 -30
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
- package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +0 -30
- package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
- package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
- package/examples/feature-demos/media-and-surfaces/site/config.mjs +0 -30
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +0 -3
- package/examples/feature-demos/theme-presets/site/config.mjs +0 -30
- package/fixtures/basic/site/config.mjs +0 -27
- package/fixtures/content-model-v2/site/config.mjs +0 -11
- package/starters/basic/site/config.mjs +0 -27
- package/starters/project/site/config.mjs +0 -30
package/docs/configuration.md
CHANGED
|
@@ -1,224 +1,125 @@
|
|
|
1
1
|
# Configuration
|
|
2
2
|
|
|
3
|
-
Technical site configuration lives in the selected site's `config.
|
|
4
|
-
default that is `site/config.
|
|
3
|
+
Technical site configuration lives in the selected site's `config.md`; by
|
|
4
|
+
default that is `site/config.md`. The file contains YAML frontmatter only.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
the current values for any one site.
|
|
6
|
+
A normal configuration needs only the public URL:
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
```yaml
|
|
9
|
+
---
|
|
10
|
+
url: https://example.com/
|
|
11
|
+
---
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Norna deliberately keeps this file small. Visual choices belong in
|
|
15
|
+
`theme.md`; shared identity, banners and footer content belong in
|
|
16
|
+
`sitewide-content.md`.
|
|
10
17
|
|
|
11
|
-
|
|
18
|
+
## `url`
|
|
12
19
|
|
|
13
|
-
- Purpose: canonical public URL
|
|
14
|
-
|
|
15
|
-
- Type: string.
|
|
20
|
+
- Purpose: canonical public URL and the source of the site's deployment path.
|
|
21
|
+
- Type: absolute `http` or `https` URL.
|
|
16
22
|
- Required: yes.
|
|
17
23
|
- Default: none.
|
|
18
|
-
-
|
|
19
|
-
- Consequence: wrong values render a wrong canonical URL and make deploy
|
|
20
|
-
output point at the wrong site. For GitHub Pages project sites, include the
|
|
21
|
-
repository path in the URL, for example `https://owner.github.io/repo-name/`.
|
|
22
|
-
|
|
23
|
-
Example:
|
|
24
|
+
- Restrictions: no query string or fragment.
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### `site.basePath`
|
|
26
|
+
Norna adds a trailing slash when it is omitted. The URL pathname becomes the
|
|
27
|
+
base path for generated links, favicons and managed images, so there is no
|
|
28
|
+
separate `basePath` setting.
|
|
32
29
|
|
|
33
|
-
-
|
|
34
|
-
generated image URLs, and root-relative links or images written in Markdown.
|
|
35
|
-
- Type: string URL path.
|
|
36
|
-
- Required: no.
|
|
37
|
-
- Default: `/`.
|
|
38
|
-
- Validation: must start and end with `/` and must not contain whitespace,
|
|
39
|
-
`?`, `#`, or `//`.
|
|
40
|
-
- Consequence: use `/` for a root site or custom domain. Use
|
|
41
|
-
`/repository-name/` for a GitHub Pages project site without a custom domain.
|
|
42
|
-
Source Markdown can still use root-relative paths such as `/favicon.svg` or
|
|
43
|
-
`/getting-started/`; Norna prefixes them during rendering.
|
|
44
|
-
|
|
45
|
-
Examples:
|
|
46
|
-
|
|
47
|
-
```js
|
|
48
|
-
site: {
|
|
49
|
-
url: 'https://example.com/',
|
|
50
|
-
basePath: '/',
|
|
51
|
-
}
|
|
52
|
-
```
|
|
30
|
+
Root-hosted site or custom domain:
|
|
53
31
|
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
32
|
+
```yaml
|
|
33
|
+
---
|
|
34
|
+
url: https://example.com/
|
|
35
|
+
---
|
|
59
36
|
```
|
|
60
37
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Visual configuration lives in `site/theme.md`, not `site/config.mjs`.
|
|
64
|
-
|
|
65
|
-
Use [Theme](theme.md) for:
|
|
66
|
-
|
|
67
|
-
- complete theme presets and focused overrides
|
|
68
|
-
- `layout.pageWidth`
|
|
69
|
-
- `layout.gutter`
|
|
70
|
-
- `layout.density`
|
|
71
|
-
- `gallery.width`
|
|
72
|
-
- `gallery.maxAvailableWidthPercent`
|
|
73
|
-
- `gallery.maxAvailableHeightPercent`
|
|
74
|
-
- `typography.fontFamily`
|
|
75
|
-
- typography presets, rhythm, and overrides
|
|
76
|
-
- presentation palettes and section surfaces
|
|
77
|
-
|
|
78
|
-
## Navigation
|
|
79
|
-
|
|
80
|
-
### `navigation.smoothScroll`
|
|
81
|
-
|
|
82
|
-
- Purpose: controls enhanced same-page anchor navigation and native
|
|
83
|
-
`scroll-behavior`.
|
|
84
|
-
- Type: object.
|
|
85
|
-
- Required: no; omitted fields use defaults.
|
|
86
|
-
|
|
87
|
-
Fields:
|
|
88
|
-
|
|
89
|
-
- `navigation.smoothScroll.enabled`: boolean, default `true`.
|
|
90
|
-
- `navigation.smoothScroll.minimumDurationMs`: positive integer, default
|
|
91
|
-
`2000`.
|
|
92
|
-
- `navigation.smoothScroll.maximumDurationMs`: positive integer, default
|
|
93
|
-
`4000`; must be greater than or equal to `minimumDurationMs`.
|
|
94
|
-
- `navigation.smoothScroll.durationPerPixelMs`: positive number, default
|
|
95
|
-
`0.22`.
|
|
38
|
+
GitHub Pages project site:
|
|
96
39
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
Example:
|
|
102
|
-
|
|
103
|
-
```js
|
|
104
|
-
navigation: {
|
|
105
|
-
smoothScroll: {
|
|
106
|
-
enabled: true,
|
|
107
|
-
minimumDurationMs: 600,
|
|
108
|
-
maximumDurationMs: 1_200,
|
|
109
|
-
durationPerPixelMs: 0.2,
|
|
110
|
-
},
|
|
111
|
-
}
|
|
40
|
+
```yaml
|
|
41
|
+
---
|
|
42
|
+
url: https://owner.github.io/repository-name/
|
|
43
|
+
---
|
|
112
44
|
```
|
|
113
45
|
|
|
114
|
-
|
|
46
|
+
In the second example, Norna derives `/repository-name/` as the base path.
|
|
47
|
+
Root-relative links written in Markdown are prefixed when rendered.
|
|
115
48
|
|
|
116
|
-
|
|
49
|
+
## `language`
|
|
117
50
|
|
|
118
|
-
- Purpose: language tag rendered on the root `<html lang="...">` element
|
|
119
|
-
|
|
51
|
+
- Purpose: language tag rendered on the root `<html lang="...">` element and
|
|
52
|
+
selection of Norna's built-in interface text.
|
|
53
|
+
- Type: language tag such as `en`, `en-GB`, `sv` or `sv-SE`.
|
|
120
54
|
- Required: no.
|
|
121
55
|
- Default: `en`.
|
|
122
|
-
- Validation: two or three letters, optionally followed by `-` separated
|
|
123
|
-
subtags.
|
|
124
|
-
- Consequence: screen readers, browsers, and search engines use this to
|
|
125
|
-
interpret the page language.
|
|
126
|
-
|
|
127
|
-
### `locale.labels`
|
|
128
|
-
|
|
129
|
-
- Purpose: site-wide UI labels rendered by the engine for non-editorial
|
|
130
|
-
interface text.
|
|
131
|
-
- Type: object.
|
|
132
|
-
- Required: no; omitted labels use English defaults.
|
|
133
|
-
|
|
134
|
-
Fields:
|
|
135
|
-
|
|
136
|
-
- `locale.labels.skipToContent`: skip-link text, default `Skip to content`.
|
|
137
|
-
- `locale.labels.siteNavigation`: site-level navigation ARIA label and mobile
|
|
138
|
-
menu group heading, default `Pages`.
|
|
139
|
-
- `locale.labels.pageNavigation`: current-page section navigation ARIA label and
|
|
140
|
-
mobile menu group heading, default `On this page`.
|
|
141
|
-
- `locale.labels.sectionNavigation`: legacy section navigation label, default
|
|
142
|
-
`Sections`.
|
|
143
|
-
- `locale.labels.menu`: mobile menu summary text, default `Menu`.
|
|
144
|
-
- `locale.labels.closeMenu`: reserved close-menu label, default `Close menu`.
|
|
145
|
-
- `locale.labels.dismissBanner`: banner dismissal button label, default
|
|
146
|
-
`Dismiss notice`.
|
|
147
|
-
- `locale.labels.siteBanners`: ARIA label for the banner stack, default
|
|
148
|
-
`Site notices`.
|
|
149
|
-
- `locale.labels.gallery`: Norna managed media ARIA label prefix, default
|
|
150
|
-
`Images`.
|
|
151
|
-
|
|
152
|
-
Example:
|
|
153
56
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
skipToContent: 'Hoppa till innehåll',
|
|
159
|
-
siteNavigation: 'Sidor',
|
|
160
|
-
pageNavigation: 'På denna sida',
|
|
161
|
-
sectionNavigation: 'Sektioner',
|
|
162
|
-
menu: 'Meny',
|
|
163
|
-
gallery: 'Bilder',
|
|
164
|
-
},
|
|
165
|
-
}
|
|
166
|
-
```
|
|
57
|
+
Norna currently includes interface text for English and Swedish. Regional tags
|
|
58
|
+
use the language identified by their primary subtag. An unsupported language is
|
|
59
|
+
an error because silently rendering English controls on another-language pages
|
|
60
|
+
would be misleading.
|
|
167
61
|
|
|
168
|
-
|
|
62
|
+
Interface labels are part of the engine and are not configured individually.
|
|
63
|
+
Editorial text remains in `content.md`, route content files and
|
|
64
|
+
`sitewide-content.md`.
|
|
169
65
|
|
|
170
|
-
|
|
171
|
-
`site/sitewide-content.md`. See [Sitewide Content](sitewide-content.md) for the
|
|
172
|
-
schema and examples.
|
|
66
|
+
## `smoothScroll`
|
|
173
67
|
|
|
174
|
-
|
|
68
|
+
- Purpose: enables smooth same-page anchor movement.
|
|
69
|
+
- Type: boolean.
|
|
70
|
+
- Required: no.
|
|
71
|
+
- Default: `false`.
|
|
175
72
|
|
|
176
|
-
|
|
73
|
+
Example:
|
|
177
74
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
75
|
+
```yaml
|
|
76
|
+
---
|
|
77
|
+
url: https://example.com/
|
|
78
|
+
smoothScroll: true
|
|
79
|
+
---
|
|
80
|
+
```
|
|
183
81
|
|
|
184
|
-
|
|
82
|
+
Norna uses the browser's native CSS scrolling behavior rather than a scripted
|
|
83
|
+
animation. Visitors whose system requests reduced motion always get immediate
|
|
84
|
+
anchor movement.
|
|
185
85
|
|
|
186
|
-
|
|
187
|
-
`deploy:watch`.
|
|
188
|
-
- Type: string.
|
|
189
|
-
- Required: yes.
|
|
190
|
-
- Default: none.
|
|
191
|
-
- Validation: non-empty string.
|
|
86
|
+
## Complete Example
|
|
192
87
|
|
|
193
|
-
|
|
88
|
+
```yaml
|
|
89
|
+
---
|
|
90
|
+
url: https://example.com/
|
|
91
|
+
language: en
|
|
92
|
+
smoothScroll: false
|
|
93
|
+
---
|
|
94
|
+
```
|
|
194
95
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
- Type: string.
|
|
198
|
-
- Required: yes.
|
|
199
|
-
- Default: none.
|
|
200
|
-
- Validation: non-empty string.
|
|
96
|
+
Do not add Markdown below the closing `---`; `config.md` is frontmatter-only.
|
|
97
|
+
Run `npm run norna:config:check` after changing it.
|
|
201
98
|
|
|
202
|
-
##
|
|
99
|
+
## Related Files
|
|
203
100
|
|
|
204
|
-
|
|
101
|
+
- [`theme.md`](theme.md) selects a complete presentation preset and optional
|
|
102
|
+
focused overrides.
|
|
103
|
+
- [`sitewide-content.md`](sitewide-content.md) contains shared identity,
|
|
104
|
+
banners and footer content.
|
|
105
|
+
- [`content.md`](content.md) and route content files contain page content.
|
|
205
106
|
|
|
206
|
-
|
|
207
|
-
- Type: object.
|
|
208
|
-
- Required: no; omitted fields use defaults.
|
|
107
|
+
## Publishing Discovery
|
|
209
108
|
|
|
210
|
-
|
|
109
|
+
GitHub repository, default branch and deploy workflow are not site
|
|
110
|
+
configuration fields.
|
|
211
111
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
112
|
+
`norna deploy` discovers the current GitHub repository and its default branch
|
|
113
|
+
through the authenticated GitHub CLI. Norna's included workflow file is
|
|
114
|
+
`.github/workflows/deploy.yml`. `deploy:watch` accepts command-line overrides
|
|
115
|
+
such as `--repo`, `--branch`, `--workflow`, `--interval`, `--timeout` and
|
|
116
|
+
`--limit` when a one-off run needs different values.
|
|
215
117
|
|
|
216
|
-
|
|
217
|
-
override these values for one run.
|
|
118
|
+
See [Publishing](publishing.md) for the complete workflow.
|
|
218
119
|
|
|
219
120
|
## Site Directory Selection
|
|
220
121
|
|
|
221
|
-
The site directory is not configured in `config.
|
|
122
|
+
The site directory is not configured in `config.md`.
|
|
222
123
|
|
|
223
124
|
Use one of:
|
|
224
125
|
|
|
@@ -229,9 +130,9 @@ norna --site-dir my-site build
|
|
|
229
130
|
|
|
230
131
|
If `NORNA_SITE_DIR` is set to an empty value, commands fail. Relative site
|
|
231
132
|
directories are resolved by walking upward from the invocation root until the
|
|
232
|
-
selected directory contains `config.
|
|
133
|
+
selected directory contains `config.md` and `content.md`. Absolute site
|
|
233
134
|
directories are accepted and make their parent the site project root.
|
|
234
135
|
|
|
235
|
-
When no site directory is explicitly selected, the current directory itself
|
|
236
|
-
be the site directory if it contains `config.
|
|
136
|
+
When no site directory is explicitly selected, the current directory itself
|
|
137
|
+
can be the site directory if it contains `config.md` and `content.md`. If not,
|
|
237
138
|
Norna walks upward looking for a default `site/` directory with those files.
|
|
@@ -295,7 +295,7 @@ Messages emitted by the engine should mention the direct CLI command and the
|
|
|
295
295
|
starter-style npm wrapper when suggesting a fix.
|
|
296
296
|
|
|
297
297
|
Configuration edits are normally manual edits to the selected site
|
|
298
|
-
`config.
|
|
298
|
+
`config.md`, followed by:
|
|
299
299
|
|
|
300
300
|
```sh
|
|
301
301
|
npm run norna:config:check
|
|
@@ -78,7 +78,8 @@ Diagrams must match the current Norna model:
|
|
|
78
78
|
- Norna managed media blocks cover fixed site patterns such as image stacks,
|
|
79
79
|
carousels, and card lists.
|
|
80
80
|
- `theme.md` controls visual presentation.
|
|
81
|
-
- `config.
|
|
81
|
+
- `config.md` controls the public URL and optional language and smooth
|
|
82
|
+
scrolling.
|
|
82
83
|
- `dist/` is generated static output.
|
|
83
84
|
- GitHub Pages is the integrated publishing target today.
|
|
84
85
|
|
|
@@ -67,6 +67,7 @@ examples/
|
|
|
67
67
|
feature-demos/
|
|
68
68
|
theme-presets/
|
|
69
69
|
media-and-surfaces/
|
|
70
|
+
sitewide-content/
|
|
70
71
|
```
|
|
71
72
|
|
|
72
73
|
`complete-sites/` contains coherent sites that show how Norna files work
|
|
@@ -82,8 +83,10 @@ together in a realistic project:
|
|
|
82
83
|
overrides.
|
|
83
84
|
- `media-and-surfaces/`: managed media blocks, notes, palettes and section
|
|
84
85
|
surfaces. This is also the broad demo-build and navigation-test target.
|
|
86
|
+
- `sitewide-content/`: convention-based identity, navigation, banner stacks,
|
|
87
|
+
dismissal and footer content shared across routes.
|
|
85
88
|
|
|
86
|
-
The repository Pages workflow builds all
|
|
89
|
+
The repository Pages workflow builds all examples and publishes them
|
|
87
90
|
under `/norna/examples/`. The HTML documentation links to those rendered sites
|
|
88
91
|
from its Examples route.
|
|
89
92
|
|
|
@@ -7,7 +7,8 @@ This document is for work on the reusable `norna` package itself.
|
|
|
7
7
|
- `bin/norna.mjs`: public CLI launcher and local-version resolver.
|
|
8
8
|
- `bin/norna-cli.mjs`: public CLI command dispatcher.
|
|
9
9
|
- `scripts/lib/site-paths.mjs`: engine/site path resolution.
|
|
10
|
-
- `scripts/lib/project-config.mjs`: `site/config.
|
|
10
|
+
- `scripts/lib/project-config.mjs`: frontmatter-only `site/config.md`
|
|
11
|
+
validation, defaults and derived URL path.
|
|
11
12
|
- `scripts/sync-content-sections.mjs`: content validation and sync behavior.
|
|
12
13
|
- `scripts/generate-images.mjs`: managed image pipeline and manifest.
|
|
13
14
|
- `scripts/sync-site-public.mjs`: static public file sync.
|
|
@@ -33,6 +34,7 @@ Run focused checks while developing:
|
|
|
33
34
|
```sh
|
|
34
35
|
npm run test:content-check
|
|
35
36
|
npm run test:site-public
|
|
37
|
+
npm run test:documentation
|
|
36
38
|
npm run test:fixture:build
|
|
37
39
|
npm run test:examples
|
|
38
40
|
npm run demo:build
|
|
@@ -43,6 +45,11 @@ npm run package:check
|
|
|
43
45
|
`examples/`. `npm run test` includes those builds in the standard check
|
|
44
46
|
sequence.
|
|
45
47
|
|
|
48
|
+
`npm run test:documentation` extracts the file examples from the five-minute
|
|
49
|
+
tutorial, applies them to a freshly initialized temporary site, runs the
|
|
50
|
+
configuration and content checks, builds the result, and checks local Markdown
|
|
51
|
+
links plus the `llms.txt` source targets.
|
|
52
|
+
|
|
46
53
|
`npm run build:pages` is specific to this repository. It builds the
|
|
47
54
|
documentation site and assembles rendered examples under `dist/examples/` for
|
|
48
55
|
the shared GitHub Pages artifact. It is not a generic Norna site command.
|
|
@@ -188,11 +195,11 @@ history, back/forward moves between hash entries, and returning to the same page
|
|
|
188
195
|
without a hash restores the first section as active. The enhancement does not
|
|
189
196
|
derive active section state from free manual scrolling.
|
|
190
197
|
|
|
191
|
-
The sticky navigation updates root scroll
|
|
192
|
-
and clicked links
|
|
193
|
-
|
|
194
|
-
|
|
198
|
+
The sticky navigation updates a root scroll-offset variable so direct hash
|
|
199
|
+
links and clicked links remain visible below the fixed header. The browser owns
|
|
200
|
+
anchor movement; Norna does not run a separate scroll animation or retry anchor
|
|
201
|
+
positions after later layout shifts.
|
|
195
202
|
|
|
196
|
-
The shared layout
|
|
197
|
-
`
|
|
198
|
-
labels in
|
|
203
|
+
The shared layout selects Norna's built-in UI labels from the optional
|
|
204
|
+
`language` in `site/config.md`. Keep editorial content in page Markdown and
|
|
205
|
+
non-editorial engine UI labels in the engine language packs.
|