@janga/norna 0.7.10 → 0.7.12
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 -106
- package/bin/norna-cli.mjs +4 -1
- package/docs/README.md +107 -74
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +13 -4
- package/docs/configuration.md +86 -184
- package/docs/content.md +14 -14
- package/docs/design/command-organization.md +1 -1
- package/docs/design/norna-diagram-design.md +2 -1
- package/docs/design/site-examples-structure.md +38 -24
- package/docs/engine-development.md +28 -15
- package/docs/getting-started.md +141 -124
- 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 +3 -2
- package/docs/site-structure.md +12 -9
- package/docs/sitewide-content.md +2 -1
- package/docs/theme.md +104 -34
- package/docs/typography.md +32 -17
- package/examples/README.md +43 -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/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +9 -1
- 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/complete-sites/dog-shelter-multi-page/.astro/dev.json +13 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-multi-page/README.md +16 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/{typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets → 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 -0
- package/examples/{typography-presets → 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 -0
- package/examples/{typography-presets → 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 -0
- package/examples/{typography-presets → 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 -0
- package/examples/{typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/icons-RyebKi45.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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/{typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/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 +98 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
- package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/content.md +12 -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/route-content.md +22 -0
- package/examples/{002-dog-shelter-multi-page → 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 +16 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +3 -0
- 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/{dog-gallery → complete-sites/dog-shelter-single-page}/.astro/collections/theme.schema.json +151 -68
- 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/README.md +16 -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/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 +50 -0
- package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +34 -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 +16 -0
- package/examples/complete-sites/dog-shelter-single-page/site/theme.md +3 -0
- 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/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +4 -0
- 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 +24 -0
- package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
- package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
- package/examples/feature-demos/media-and-surfaces/README.md +21 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +80 -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/embla-carousel.js +1389 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.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/package.json +3 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -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/feature-demos/media-and-surfaces/site/config.md +4 -0
- package/examples/feature-demos/media-and-surfaces/site/content.md +18 -0
- package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/route-content.md +17 -24
- package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/route-content.md +1 -1
- 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/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/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/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-assets.mjs +4 -0
- package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -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/{typography-presets → feature-demos/theme-presets}/.astro/dev.json +2 -2
- package/examples/feature-demos/theme-presets/.astro/dev.log +164 -0
- package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
- package/examples/feature-demos/theme-presets/README.md +18 -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/feature-demos/theme-presets/site/config.md +3 -0
- package/examples/feature-demos/theme-presets/site/content.md +17 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/shepherd-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/white-puppy.jpg +0 -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/feature-demos/theme-presets/site/routes/020-documentation/images/documentation/retriever-portrait.jpg +0 -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/feature-demos/theme-presets/site/routes/030-project/images/project/boxer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/routes/030-project/images/project/grass-puppy.jpg +0 -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/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/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/fixtures/basic/site/config.md +3 -0
- package/fixtures/content-model-v2/site/config.md +3 -0
- package/package.json +17 -8
- package/scripts/build-pages.mjs +69 -0
- package/scripts/check-config.mjs +3 -11
- package/scripts/deploy-site.mjs +12 -8
- package/scripts/export-theme-preset.mjs +31 -0
- package/scripts/init-site.mjs +1 -0
- package/scripts/lib/example-sites.mjs +37 -0
- package/scripts/lib/github-repository.mjs +44 -0
- package/scripts/lib/norna-markdown-blocks.mjs +97 -10
- package/scripts/lib/presentation.mjs +6 -5
- package/scripts/lib/project-config.mjs +114 -124
- package/scripts/lib/site-content.mjs +9 -2
- package/scripts/lib/site-paths.mjs +6 -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-client-javascript.mjs +236 -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 +13 -3
- package/scripts/test-examples.mjs +24 -0
- package/scripts/test-navigation.mjs +73 -45
- package/scripts/test-package-check.mjs +17 -9
- package/scripts/test-project-config.mjs +130 -0
- package/scripts/test-temporary-visibility.mjs +3 -10
- package/scripts/test-theme-presets.mjs +146 -0
- 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/NornaSmoothScrollScript.astro +250 -0
- package/src/components/SiteNavigation.astro +58 -341
- package/src/components/SiteNotesScript.astro +43 -0
- package/src/components/SitePage.astro +6 -3
- package/src/components/SiteSection.astro +4 -47
- package/src/content.config.ts +2 -0
- package/src/layouts/BaseLayout.astro +1 -1
- package/src/lib/galleryImages.ts +53 -0
- package/src/styles/global.css +83 -1
- package/starters/basic/.github/workflows/deploy.yml +1 -2
- package/starters/basic/README.md +10 -8
- package/starters/basic/package.json +1 -0
- 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/package.json +1 -0
- package/starters/project/site/config.md +3 -0
- package/examples/001-dog-shelter-single-page/README.md +0 -9
- package/examples/001-dog-shelter-single-page/site/config.mjs +0 -27
- package/examples/001-dog-shelter-single-page/site/content.md +0 -38
- package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
- package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
- package/examples/001-dog-shelter-single-page/site/sitewide-content.md +0 -6
- package/examples/001-dog-shelter-single-page/site/theme.md +0 -25
- package/examples/002-dog-shelter-multi-page/README.md +0 -9
- package/examples/002-dog-shelter-multi-page/site/config.mjs +0 -27
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +0 -30
- package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +0 -6
- package/examples/002-dog-shelter-multi-page/site/theme.md +0 -25
- 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/node_modules/.vite/deps/_metadata.json +0 -74
- 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/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/config.mjs +0 -29
- package/examples/presentation/site/content.md +0 -67
- 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/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/typography-presets/site/config.mjs +0 -29
- 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/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/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/site.schema.json +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-assets.mjs +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-modules.mjs +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/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/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery/retriever-portrait.jpg → complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg} +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/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/white-puppy.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/boxer-portrait.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg → complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg} +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-assets.mjs +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-modules.mjs +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/types.d.ts +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/grass-puppy.jpg → complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/shepherd-portrait.jpg → complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg} +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/{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/{dog-gallery → feature-demos/sitewide-content}/site/public/robots.txt +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.d.ts +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/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{dog-gallery → 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/embla-carousel.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{dog-gallery → 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/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}/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}/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-wide.jpg +0 -0
package/docs/getting-started.md
CHANGED
|
@@ -1,171 +1,188 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Build Your First Norna Site
|
|
2
2
|
|
|
3
|
-
This
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
This tutorial takes the shortest path from an empty directory to a running,
|
|
4
|
+
edited, and verified Norna site. Follow the steps in order. Installation time
|
|
5
|
+
depends on your npm connection, but the site work itself should take about five
|
|
6
|
+
minutes.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
At the end you will have:
|
|
8
9
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
10
|
+
- a standalone site project with a pinned Norna version,
|
|
11
|
+
- a homepage with your own content and navigation,
|
|
12
|
+
- a complete visual preset,
|
|
13
|
+
- validated source files and a static build in `dist/`.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
## Before You Start
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
You need:
|
|
18
|
+
|
|
19
|
+
- Node.js `22.12` or later,
|
|
20
|
+
- npm, which is included with Node.js,
|
|
21
|
+
- a terminal and a text editor.
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
ImageMagick is needed when you add raster images that Norna should process. It
|
|
24
|
+
is not needed to make the text-only first edit in this tutorial. GitHub CLI and
|
|
25
|
+
Playwright are not required.
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
See [Requirements and limitations](requirements.md) for platform details and
|
|
28
|
+
the current product boundaries.
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
directory:
|
|
30
|
+
## 1. Create And Run The Site
|
|
31
|
+
|
|
32
|
+
Run these commands from the directory where you keep projects:
|
|
26
33
|
|
|
27
34
|
```sh
|
|
28
|
-
cd path/to/your/projects
|
|
29
35
|
npx @janga/norna@latest init my-site
|
|
30
36
|
cd my-site
|
|
31
37
|
npm install
|
|
32
38
|
npm run dev
|
|
33
39
|
```
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
dependency, it delegates to the project's local version.
|
|
41
|
+
`init` creates the project before `npm install` runs. The generated
|
|
42
|
+
`package.json` pins the Norna engine version so this project keeps using the
|
|
43
|
+
same version until you update it deliberately.
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
site when `init` copies the starter files, including `package.json`. If you run
|
|
42
|
-
`npm install` in an empty directory, npm may walk up to a parent directory and
|
|
43
|
-
install dependencies for another project instead.
|
|
45
|
+
### Checkpoint: The Starter Is Visible
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
Open the URL printed by the development server. It is normally
|
|
48
|
+
`http://localhost:4321/`, but Norna uses another available port when necessary.
|
|
49
|
+
You should see the starter homepage and its section navigation.
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
Leave the development server running while you complete the next steps.
|
|
52
|
+
|
|
53
|
+
## 2. Replace The Homepage Content
|
|
54
|
+
|
|
55
|
+
Replace `site/content.md` with:
|
|
56
|
+
|
|
57
|
+
```md
|
|
58
|
+
---
|
|
59
|
+
title: My first Norna site
|
|
60
|
+
description: A website built from plain files.
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Welcome {#welcome}
|
|
64
|
+
|
|
65
|
+
This page is written in Markdown. Norna provides its layout and navigation.
|
|
66
|
+
|
|
67
|
+
## Next {#next}
|
|
68
|
+
|
|
69
|
+
Edit this file while the development server is running and the browser updates.
|
|
52
70
|
```
|
|
53
71
|
|
|
54
|
-
|
|
72
|
+
Each `##` heading is a page section. Its explicit `{#section-id}` gives the
|
|
73
|
+
section a stable identity and is required by Norna.
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
- `.github/workflows/deploy.yml` for GitHub Pages
|
|
58
|
-
- `site/config.mjs`
|
|
59
|
-
- `site/theme.md`
|
|
60
|
-
- `site/sitewide-content.md`
|
|
61
|
-
- `site/content.md`
|
|
62
|
-
- `site/public/robots.txt`
|
|
75
|
+
### Checkpoint: Content And Navigation Update
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
Return to the browser. The page should now contain `Welcome` and `Next`, and
|
|
78
|
+
the single-page navigation should link to those two sections. You should not
|
|
79
|
+
need to restart the server.
|
|
65
80
|
|
|
66
|
-
|
|
81
|
+
## 3. Set The Shared Brand
|
|
67
82
|
|
|
68
|
-
|
|
69
|
-
GitHub project:
|
|
83
|
+
Replace `site/sitewide-content.md` with:
|
|
70
84
|
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
85
|
+
```yaml
|
|
86
|
+
---
|
|
87
|
+
navigation:
|
|
88
|
+
brand: My first Norna site
|
|
89
|
+
footer:
|
|
90
|
+
copyrightMessage: My first Norna site.
|
|
91
|
+
---
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The brand and footer are site-wide content rather than page sections. If you
|
|
95
|
+
add routes later, they inherit these values.
|
|
96
|
+
|
|
97
|
+
### Checkpoint: The Brand Is Shared
|
|
98
|
+
|
|
99
|
+
The navigation should now display `My first Norna site`. The footer should show
|
|
100
|
+
the new message.
|
|
101
|
+
|
|
102
|
+
## 4. Choose A Complete Theme
|
|
103
|
+
|
|
104
|
+
Replace `site/theme.md` with:
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
---
|
|
108
|
+
preset: project
|
|
109
|
+
---
|
|
76
110
|
```
|
|
77
111
|
|
|
78
|
-
The
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
1. Edit `site/config.mjs` for the site's URL, language labels, GitHub
|
|
92
|
-
repository, and deploy settings.
|
|
93
|
-
2. Edit `site/sitewide-content.md` for the shared brand or logo, banners and
|
|
94
|
-
footer content.
|
|
95
|
-
3. Edit `site/theme.md` for site-wide layout, layout density, typography
|
|
96
|
-
rhythm, image sizing, font, typography preset, palettes, and section
|
|
97
|
-
surfaces, or omit it to use engine defaults.
|
|
98
|
-
4. Edit `site/content.md` for homepage title, description, Markdown sections,
|
|
99
|
-
text, Norna managed media blocks, alt text, and captions.
|
|
100
|
-
5. Put source images under `site/images/<section-id>/`, where `<section-id>`
|
|
101
|
-
matches a `## Section {#section-id}` heading in `site/content.md`.
|
|
102
|
-
6. Add optional route pages under
|
|
103
|
-
`site/routes/<NNN-route-id>/route-content.md`, for example
|
|
104
|
-
`site/routes/010-about/route-content.md`.
|
|
105
|
-
7. Put static files such as `robots.txt`, `CNAME`, and favicons under
|
|
106
|
-
`site/public/`.
|
|
107
|
-
8. Run:
|
|
112
|
+
The preset supplies coordinated layout, typography, spacing, image sizing,
|
|
113
|
+
palette, and section surfaces. Add overrides only when a real site needs to
|
|
114
|
+
differ from the preset.
|
|
115
|
+
|
|
116
|
+
### Checkpoint: The Preset Is Active
|
|
117
|
+
|
|
118
|
+
The browser should refresh with the `project` presentation. Your content files
|
|
119
|
+
remain unchanged because presentation belongs in `theme.md`.
|
|
120
|
+
|
|
121
|
+
## 5. Check And Build
|
|
122
|
+
|
|
123
|
+
Open another terminal in `my-site` and run:
|
|
108
124
|
|
|
109
125
|
```sh
|
|
110
|
-
npm run norna:config:check
|
|
111
|
-
npm run norna:content:check
|
|
112
|
-
npm run norna:sync
|
|
113
126
|
npm run norna:check
|
|
114
127
|
npm run build
|
|
115
128
|
```
|
|
116
129
|
|
|
117
|
-
|
|
118
|
-
unambiguous. It can move images between sections and routes, but cross-route
|
|
119
|
-
writes require a clean Git working tree so the operation is easy to roll back.
|
|
120
|
-
Publishing is normally done by committing the site files and pushing them with
|
|
121
|
-
Git; the starter GitHub Pages workflow runs the required checks before
|
|
122
|
-
publishing.
|
|
130
|
+
The check should complete without errors. The build should create:
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
```text
|
|
133
|
+
dist/
|
|
134
|
+
```
|
|
126
135
|
|
|
127
|
-
|
|
136
|
+
`dist/` is generated output. Continue editing the files under `site/`; do not
|
|
137
|
+
edit the built HTML as the source of the website.
|
|
128
138
|
|
|
129
|
-
|
|
139
|
+
### Checkpoint: The Source Produces A Clean Build
|
|
130
140
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
```
|
|
141
|
+
Confirm that both commands exit successfully and that `dist/index.html`
|
|
142
|
+
exists. You now have a complete local Norna workflow: edit, preview, check, and
|
|
143
|
+
build.
|
|
144
|
+
|
|
145
|
+
## What To Do Next
|
|
137
146
|
|
|
138
|
-
|
|
139
|
-
|
|
147
|
+
- [Add and manage images](content.md#managed-media-blocks)
|
|
148
|
+
- [Add another page](routes.md)
|
|
149
|
+
- [Inspect and adjust the theme](theme.md)
|
|
150
|
+
- [Configure the public URL](configuration.md)
|
|
151
|
+
- [Publish with GitHub Pages](publishing.md)
|
|
152
|
+
- [Browse complete and focused examples](../examples/README.md)
|
|
140
153
|
|
|
141
|
-
|
|
142
|
-
site
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
154
|
+
To add Norna inside an existing Node project instead of creating a standalone
|
|
155
|
+
site, see [Add an embedded site](how-to/embedded-site.md).
|
|
156
|
+
|
|
157
|
+
The [documentation map](README.md) separates task guides, explanation, and
|
|
158
|
+
reference so you can continue from the kind of question you have.
|
|
159
|
+
|
|
160
|
+
## Common First Problems
|
|
161
|
+
|
|
162
|
+
### The Default Port Is Occupied
|
|
163
|
+
|
|
164
|
+
Start the development server with:
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
npm run dev -- --kill
|
|
146
168
|
```
|
|
147
169
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
170
|
+
This tells Norna to stop the process occupying its standard port before
|
|
171
|
+
starting. The separator `--` is required so npm forwards `--kill` to Norna.
|
|
172
|
+
|
|
173
|
+
### Images Fail During Checking Or Building
|
|
151
174
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
Actions.
|
|
175
|
+
Install ImageMagick and confirm that either `magick` or the older `identify`
|
|
176
|
+
and `convert` commands are available. Then rerun the failed command.
|
|
155
177
|
|
|
156
|
-
|
|
178
|
+
### The Page Reports Invalid Content
|
|
157
179
|
|
|
158
|
-
|
|
159
|
-
[Theme](theme.md), [Typography](typography.md), [Routes](routes.md), and
|
|
160
|
-
[Configuration](configuration.md) before publishing a real site.
|
|
180
|
+
Run:
|
|
161
181
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
the accepted shape.
|
|
182
|
+
```sh
|
|
183
|
+
npm run norna:content:check
|
|
184
|
+
```
|
|
166
185
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
and `norna typography show` to inspect the resolved typography for the selected
|
|
171
|
-
site.
|
|
186
|
+
Read all reported issues before editing. Norna reports file and line context
|
|
187
|
+
for invalid sections and managed content blocks. See [Content](content.md) for
|
|
188
|
+
the accepted Markdown forms.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Add Norna To An Existing Project
|
|
2
|
+
|
|
3
|
+
Use embedded setup when the website should live inside an existing Node
|
|
4
|
+
project rather than in its own repository.
|
|
5
|
+
|
|
6
|
+
From the existing project root, run:
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npx @janga/norna@latest init . --type embedded --site-dir presentation
|
|
10
|
+
npm install
|
|
11
|
+
npm run norna:dev
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The arguments are intentionally different from standalone setup:
|
|
15
|
+
|
|
16
|
+
- `.` means that Norna should update the current project instead of creating a
|
|
17
|
+
new project directory.
|
|
18
|
+
- `--type embedded` preserves the surrounding project's role and scripts.
|
|
19
|
+
- `--site-dir presentation` puts the site source in `presentation/` instead of
|
|
20
|
+
the default `site/` directory.
|
|
21
|
+
|
|
22
|
+
Embedded setup adds `@janga/norna` as a project dependency and adds namespaced
|
|
23
|
+
`norna:*` npm scripts. It refuses to overwrite conflicting scripts or a
|
|
24
|
+
non-empty target site directory.
|
|
25
|
+
|
|
26
|
+
The surrounding project keeps its normal `build`, `test`, and deploy commands.
|
|
27
|
+
Use the added commands for the embedded site:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npm run norna:check
|
|
31
|
+
npm run norna:build
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
See [Commands](../commands.md) for the complete script list and
|
|
35
|
+
[Site Structure](../site-structure.md) for source and generated files.
|
package/docs/publishing.md
CHANGED
|
@@ -1,52 +1,47 @@
|
|
|
1
1
|
# Publishing
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Norna includes a GitHub Pages workflow and deploy helpers. The public URL is
|
|
4
|
+
declared in `site/config.md`; repository and default branch are discovered from
|
|
5
|
+
GitHub when a deploy command runs.
|
|
6
6
|
|
|
7
7
|
Do not run deploy commands from the engine repository unless you deliberately
|
|
8
|
-
want to
|
|
8
|
+
want to deploy the documentation site.
|
|
9
9
|
|
|
10
10
|
## GitHub Pages Workflow
|
|
11
11
|
|
|
12
|
-
Each site repository
|
|
13
|
-
workflow:
|
|
12
|
+
Each site repository owns `.github/workflows/deploy.yml`. The starter workflow:
|
|
14
13
|
|
|
15
|
-
1.
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
14
|
+
1. runs for the repository's default branch,
|
|
15
|
+
2. checks out the site repository,
|
|
16
|
+
3. sets up Node and image tools,
|
|
18
17
|
4. restores the generated image cache,
|
|
19
|
-
5. runs `npm ci`,
|
|
20
|
-
6.
|
|
21
|
-
|
|
22
|
-
7. uploads `dist/`,
|
|
23
|
-
8. deploys to GitHub Pages.
|
|
18
|
+
5. runs `npm ci` and `npm run build`,
|
|
19
|
+
6. uploads `dist/`,
|
|
20
|
+
7. deploys the artifact to GitHub Pages.
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
In the GitHub repository settings, set Pages to build from GitHub Actions.
|
|
23
|
+
Site-specific public files such as `site/public/CNAME`, `robots.txt` and
|
|
26
24
|
`sitemap.xml` belong in the site repository.
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
`site/config.mjs`:
|
|
26
|
+
For a project site without a custom domain, include the repository path in
|
|
27
|
+
`site/config.md`:
|
|
31
28
|
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
29
|
+
```yaml
|
|
30
|
+
---
|
|
31
|
+
url: https://owner.github.io/repository-name/
|
|
32
|
+
---
|
|
37
33
|
```
|
|
38
34
|
|
|
39
|
-
For a custom domain
|
|
35
|
+
For a custom domain or root-hosted site:
|
|
40
36
|
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
37
|
+
```yaml
|
|
38
|
+
---
|
|
39
|
+
url: https://example.com/
|
|
40
|
+
---
|
|
46
41
|
```
|
|
47
42
|
|
|
48
|
-
Norna
|
|
49
|
-
|
|
43
|
+
Norna derives the base path from the URL pathname and applies it to generated
|
|
44
|
+
internal links, favicons, managed images and root-relative Markdown links.
|
|
50
45
|
|
|
51
46
|
## Deploy An Already Committed Branch
|
|
52
47
|
|
|
@@ -56,16 +51,17 @@ Use:
|
|
|
56
51
|
npm run norna:deploy
|
|
57
52
|
```
|
|
58
53
|
|
|
59
|
-
The
|
|
54
|
+
The command requires an authenticated GitHub CLI. It asks GitHub for the
|
|
55
|
+
current repository and its default branch, then:
|
|
60
56
|
|
|
61
|
-
- requires the current branch to
|
|
62
|
-
- requires a clean worktree before build,
|
|
57
|
+
- requires the current branch to be that default branch,
|
|
58
|
+
- requires a clean worktree before the build,
|
|
63
59
|
- fetches `origin`,
|
|
64
60
|
- refuses to proceed when the branch is behind or diverged,
|
|
65
61
|
- runs the full build,
|
|
66
62
|
- requires the build to leave the worktree clean,
|
|
67
|
-
- pushes only when
|
|
68
|
-
- checks the
|
|
63
|
+
- pushes only when local `HEAD` is ahead of the remote branch,
|
|
64
|
+
- checks the included `deploy.yml` GitHub Pages workflow.
|
|
69
65
|
|
|
70
66
|
It does not create commits or push uncommitted changes.
|
|
71
67
|
|
|
@@ -77,11 +73,11 @@ The older convenience flow remains available:
|
|
|
77
73
|
npm run norna:deploy:commit -- "Commit message"
|
|
78
74
|
```
|
|
79
75
|
|
|
80
|
-
It
|
|
81
|
-
The allowlist is implemented in
|
|
82
|
-
site
|
|
83
|
-
generated image
|
|
84
|
-
|
|
76
|
+
It discovers the same repository/default branch, builds, stages only allowed
|
|
77
|
+
site changes, commits, pushes and checks Pages. The allowlist is implemented in
|
|
78
|
+
`scripts/deploy-site.mjs` and includes site content and configuration, expected
|
|
79
|
+
managed images and generated image state, public files, package files and
|
|
80
|
+
renderer source changes.
|
|
85
81
|
|
|
86
82
|
## Watch A Deploy
|
|
87
83
|
|
|
@@ -91,14 +87,19 @@ Use:
|
|
|
91
87
|
npm run norna:deploy:watch
|
|
92
88
|
```
|
|
93
89
|
|
|
94
|
-
By default it monitors
|
|
95
|
-
|
|
90
|
+
By default it monitors `deploy.yml` for the current `HEAD` in the discovered
|
|
91
|
+
repository and default branch. Useful one-run overrides include:
|
|
96
92
|
|
|
97
93
|
```sh
|
|
98
94
|
npm run norna:deploy:watch -- --timeout 20m --interval 5s
|
|
99
95
|
npm run norna:deploy:watch -- --sha <commit-sha>
|
|
96
|
+
npm run norna:deploy:watch -- --repo owner/name --branch main
|
|
100
97
|
```
|
|
101
98
|
|
|
102
|
-
The
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
The default poll interval is 10 seconds, timeout is 15 minutes and recent-run
|
|
100
|
+
limit is 10. `--workflow`, `--site-url` and `--limit` provide further one-run
|
|
101
|
+
overrides; these operational values do not belong in `config.md`.
|
|
102
|
+
|
|
103
|
+
The monitor prints the run id, run URL, Actions URL, branch, commit SHA, status
|
|
104
|
+
and public site URL. On failures it fetches failed job details and a log
|
|
105
|
+
excerpt.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Requirements And Limitations
|
|
2
|
+
|
|
3
|
+
This page separates requirements for ordinary site work from optional tooling
|
|
4
|
+
and current product boundaries.
|
|
5
|
+
|
|
6
|
+
## Required For Every Site
|
|
7
|
+
|
|
8
|
+
- Node.js `22.12.0` or later.
|
|
9
|
+
- npm or another package manager capable of installing the project-local
|
|
10
|
+
`@janga/norna` dependency. Generated standalone sites use npm scripts and a
|
|
11
|
+
committed `package-lock.json` by default.
|
|
12
|
+
- A terminal and a text editor.
|
|
13
|
+
|
|
14
|
+
## Required For Managed Raster Images
|
|
15
|
+
|
|
16
|
+
ImageMagick is required when Norna reads raster image dimensions or generates
|
|
17
|
+
responsive raster variants. Norna accepts either the current `magick` command
|
|
18
|
+
or the older `identify` and `convert` commands.
|
|
19
|
+
|
|
20
|
+
Static SVG images with an intrinsic aspect ratio are rendered directly and do
|
|
21
|
+
not need raster variants. See [Images and Metadata](images-and-metadata.md) for
|
|
22
|
+
the supported managed-image behavior.
|
|
23
|
+
|
|
24
|
+
## Optional Tools
|
|
25
|
+
|
|
26
|
+
- Git is strongly recommended for reviewing and restoring site changes. It is
|
|
27
|
+
used by the normal commit-and-push publishing workflow.
|
|
28
|
+
- GitHub CLI (`gh`) is needed only for Norna's deploy status and monitoring
|
|
29
|
+
helpers.
|
|
30
|
+
- Playwright Chromium is needed only for navigation diagnostics used while
|
|
31
|
+
developing the Norna engine.
|
|
32
|
+
|
|
33
|
+
Neither GitHub CLI nor Playwright is required to edit, preview, check, or build
|
|
34
|
+
an ordinary Norna site.
|
|
35
|
+
|
|
36
|
+
## Current Product Boundaries
|
|
37
|
+
|
|
38
|
+
- Norna builds generated static output into `dist/`.
|
|
39
|
+
- GitHub Pages is the only publishing provider with an included integration.
|
|
40
|
+
Other static hosts can serve the generated files, but Norna does not
|
|
41
|
+
currently configure or publish to them.
|
|
42
|
+
- Norna provides its own site model and presentation layer. A project does not
|
|
43
|
+
supply custom page templates, component trees, or rendering logic through
|
|
44
|
+
the normal site interface.
|
|
45
|
+
- Norna is intended for content-driven websites. Dynamic applications,
|
|
46
|
+
database-backed publishing, and visual CMS editing are outside its current
|
|
47
|
+
scope.
|
|
48
|
+
- Norna is pre-1.0. Breaking changes to files, configuration, and commands may
|
|
49
|
+
occur between releases and should be reviewed before updating a project.
|
|
50
|
+
|
|
51
|
+
These constraints are part of the product's current scope, not hidden setup
|
|
52
|
+
steps. Start with [the tutorial](getting-started.md), and use
|
|
53
|
+
[`norna engine:version`](commands.md#command-summary) to inspect the version
|
|
54
|
+
installed by an existing project.
|
package/docs/routes.md
CHANGED
|
@@ -10,9 +10,10 @@ 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
|
-
top-level `config.
|
|
16
|
+
top-level `config.md`.
|
|
16
17
|
|
|
17
18
|
## Route Directory Format
|
|
18
19
|
|
package/docs/site-structure.md
CHANGED
|
@@ -9,7 +9,7 @@ The selected site directory defaults to `site/`:
|
|
|
9
9
|
|
|
10
10
|
```text
|
|
11
11
|
site/
|
|
12
|
-
|-- config.
|
|
12
|
+
|-- config.md
|
|
13
13
|
|-- theme.md
|
|
14
14
|
|-- sitewide-content.md
|
|
15
15
|
|-- content.md
|
|
@@ -28,18 +28,19 @@ site/
|
|
|
28
28
|
|
|
29
29
|
Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select another
|
|
30
30
|
site directory. Without an explicit site directory, commands first accept the
|
|
31
|
-
current directory when it contains both `config.
|
|
31
|
+
current directory when it contains both `config.md` 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
|
-
- `site/config.
|
|
41
|
-
- `site/theme.md`:
|
|
42
|
-
|
|
40
|
+
- `site/config.md`: public URL and optional language and smooth scrolling.
|
|
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).
|
|
@@ -74,7 +75,7 @@ Do not edit these by hand:
|
|
|
74
75
|
|
|
75
76
|
Favicons are convention-based. Put files such as `favicon.svg`, `favicon.ico`,
|
|
76
77
|
`favicon.png`, or `apple-touch-icon.png` in `site/public/`. The renderer emits
|
|
77
|
-
icon links only for files that exist and prefixes them with
|
|
78
|
+
icon links only for files that exist and prefixes them with the base path
|
|
78
79
|
when the site is published below a path such as `/repository-name/`.
|
|
79
80
|
|
|
80
81
|
## Engine Repository Layout
|
|
@@ -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/sitewide-content.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
`site/sitewide-content.md` contains content and settings shared by the whole site. It
|
|
4
4
|
is separate from `content.md`, which defines the homepage, and from
|
|
5
|
-
`config.
|
|
5
|
+
`config.md`, which defines the public URL and optional language and scroll
|
|
6
|
+
behaviour.
|
|
6
7
|
|
|
7
8
|
## Site identity
|
|
8
9
|
|