@janga/norna 0.7.9 → 0.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/bin/norna-cli.mjs +3 -0
- package/docs/README.md +16 -12
- package/docs/commands.md +6 -0
- package/docs/configuration.md +10 -54
- package/docs/content.md +20 -21
- package/docs/design/norna-diagram-design.md +2 -0
- package/docs/design/site-examples-structure.md +35 -24
- package/docs/engine-development.md +13 -7
- package/docs/getting-started.md +56 -19
- package/docs/routes.md +8 -6
- package/docs/site-structure.md +11 -6
- package/docs/sitewide-content.md +74 -0
- package/docs/theme.md +125 -140
- package/docs/typography.md +72 -45
- package/examples/README.md +41 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +59 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +138 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +755 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +8 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev.json +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +53 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-multi-page/README.md +9 -0
- package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/_metadata.json +13 -7
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +18 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +30 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +10 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +6 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +25 -0
- package/examples/complete-sites/dog-shelter-single-page/README.md +9 -0
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +18 -0
- package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +30 -0
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +38 -0
- package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
- package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +10 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +2 -0
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +6 -0
- package/examples/complete-sites/dog-shelter-single-page/site/theme.md +25 -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-modules.mjs +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +11 -0
- package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
- package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
- package/examples/feature-demos/media-and-surfaces/README.md +15 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +66 -0
- package/examples/feature-demos/media-and-surfaces/site/config.mjs +30 -0
- package/examples/feature-demos/media-and-surfaces/site/content.md +64 -0
- package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +2 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-carousel.svg +11 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-stack.svg +9 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-surfaces.svg +8 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-one.svg +8 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-three.svg +13 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-two.svg +8 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-one.svg +8 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-two.svg +9 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +85 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +3 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +44 -0
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.md +8 -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/{typography-presets/.astro/collections/theme.schema.json → feature-demos/theme-presets/.astro/collections/routeTheme.schema.json} +143 -65
- 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/feature-demos/theme-presets/.astro/content.d.ts +183 -0
- package/examples/feature-demos/theme-presets/.astro/data-store.json +1 -0
- package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
- package/examples/feature-demos/theme-presets/.astro/dev.json +15 -0
- package/examples/feature-demos/theme-presets/.astro/dev.log +127 -0
- package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
- package/examples/feature-demos/theme-presets/README.md +14 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +290 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/config.mjs +4 -16
- package/examples/feature-demos/theme-presets/site/content.md +17 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/route-content.md +34 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/route-content.md +33 -0
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/030-project/route-content.md +34 -0
- package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/040-statement/route-content.md +34 -0
- package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/sitewide-content.md +14 -0
- package/examples/feature-demos/theme-presets/site/theme.md +3 -0
- package/fixtures/basic/site/config.mjs +0 -13
- package/fixtures/basic/site/sitewide-content.md +12 -0
- package/fixtures/basic/site/theme.md +2 -2
- package/fixtures/content-model-v2/site/content.md +2 -5
- package/fixtures/content-model-v2/site/theme.md +1 -3
- package/package.json +9 -4
- package/scripts/build-pages.mjs +71 -0
- package/scripts/check-config.mjs +23 -1
- package/scripts/export-theme-preset.mjs +31 -0
- package/scripts/init-site.mjs +1 -0
- package/scripts/lib/example-sites.mjs +34 -0
- package/scripts/lib/frontmatter-yaml.mjs +28 -0
- package/scripts/lib/logo-assets.mjs +35 -0
- package/scripts/lib/norna-markdown-blocks.mjs +166 -0
- package/scripts/lib/presentation.mjs +106 -47
- package/scripts/lib/project-config.mjs +68 -105
- package/scripts/lib/site-content.mjs +26 -118
- package/scripts/lib/site-paths.mjs +2 -0
- package/scripts/lib/sitewide-config.mjs +34 -0
- package/scripts/lib/theme-config.mjs +75 -8
- package/scripts/lib/theme-presets.mjs +209 -0
- package/scripts/lib/typography.mjs +20 -26
- package/scripts/show-typography.mjs +43 -149
- package/scripts/sync-content-sections.mjs +19 -17
- package/scripts/test-content-check.mjs +59 -27
- package/scripts/test-content-model-v2.mjs +154 -0
- package/scripts/test-engine-commands.mjs +4 -1
- package/scripts/test-examples.mjs +15 -0
- package/scripts/test-navigation.mjs +73 -45
- package/scripts/test-package-check.mjs +66 -24
- package/scripts/test-temporary-visibility.mjs +19 -2
- package/scripts/test-theme-presets.mjs +151 -0
- package/src/components/CardList.astro +5 -2
- package/src/components/GalleryGrid.astro +37 -16
- package/src/components/SiteBanners.astro +100 -0
- package/src/components/SiteNavigation.astro +48 -31
- package/src/components/SitePage.astro +55 -13
- package/src/components/SiteSection.astro +193 -35
- package/src/content.config.ts +80 -48
- package/src/layouts/BaseLayout.astro +64 -14
- package/src/lib/routeThemes.ts +61 -0
- package/src/lib/sectionContent.ts +235 -51
- package/src/lib/sitePublicAssets.ts +1 -0
- package/src/styles/global.css +284 -93
- package/starters/basic/.github/workflows/deploy.yml +1 -1
- package/starters/basic/README.md +7 -6
- package/starters/basic/package.json +1 -0
- package/starters/basic/site/config.mjs +0 -13
- package/starters/basic/site/content.md +1 -1
- package/starters/basic/site/sitewide-content.md +14 -0
- package/starters/basic/site/theme.md +13 -24
- package/starters/project/.github/workflows/deploy.yml +1 -1
- package/starters/project/README.md +10 -8
- package/starters/project/package.json +1 -0
- package/starters/project/site/config.mjs +0 -13
- package/starters/project/site/sitewide-content.md +14 -0
- package/starters/project/site/theme.md +3 -11
- package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
- package/examples/dog-gallery/site/config.mjs +0 -67
- package/examples/dog-gallery/site/content.md +0 -128
- 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/routes/010-dog-care/route-content.md +0 -38
- package/examples/dog-gallery/site/theme.md +0 -112
- package/examples/typography-presets/.astro/collections/site.schema.json +0 -776
- package/examples/typography-presets/.astro/data-store.json +0 -1
- package/examples/typography-presets/.astro/dev.log +0 -24
- package/examples/typography-presets/site/.norna/generated-images.json +0 -290
- package/examples/typography-presets/site/content.md +0 -134
- package/examples/typography-presets/site/theme.md +0 -43
- /package/examples/{typography-presets/.astro/content-modules.mjs → complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs} +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/.astro/content-assets.mjs +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/shepherd-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/white-puppy.jpg +0 -0
- /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
- /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/retriever-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/boxer-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grass-puppy.jpg +0 -0
- /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
- /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/black-pedigree.jpg +0 -0
- /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-grass.jpg +0 -0
- /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-wide.jpg +0 -0
package/README.md
CHANGED
|
@@ -23,8 +23,9 @@ A `norna` site is file-driven:
|
|
|
23
23
|
1. A site repository depends on this package.
|
|
24
24
|
2. The site keeps technical settings, including public URL and optional URL
|
|
25
25
|
base path, in `site/config.mjs`.
|
|
26
|
-
3. The site
|
|
27
|
-
sizing, font, typography,
|
|
26
|
+
3. The site selects a complete visual preset, with optional focused overrides
|
|
27
|
+
for layout, image sizing, font, typography, palettes, and section surfaces,
|
|
28
|
+
in `site/theme.md`.
|
|
28
29
|
4. The site keeps homepage content, Markdown section order, managed media
|
|
29
30
|
blocks, alt text, captions, and optional section metadata in
|
|
30
31
|
`site/content.md`.
|
|
@@ -81,6 +82,7 @@ Actions use the same engine version.
|
|
|
81
82
|
- Publish under a GitHub Pages project path:
|
|
82
83
|
[`site.basePath`](docs/configuration.md#sitebasepath)
|
|
83
84
|
- Configure site-wide theme: [Theme](docs/theme.md)
|
|
85
|
+
- Export a theme preset for inspection: [`theme:export`](docs/commands.md#command-summary)
|
|
84
86
|
- Add route pages: [Routes](docs/routes.md)
|
|
85
87
|
- Set page width: [`layout.pageWidth`](docs/theme.md#layout)
|
|
86
88
|
- Set side gutters: [`layout.gutter`](docs/theme.md#layout)
|
package/bin/norna-cli.mjs
CHANGED
|
@@ -17,6 +17,7 @@ Commands:
|
|
|
17
17
|
config:check Validate site/config.mjs
|
|
18
18
|
content:check Validate site/content.md and image references
|
|
19
19
|
content:sync Move misplaced Norna-managed images and refresh generated images
|
|
20
|
+
theme:export Export a commented theme preset reference
|
|
20
21
|
typography presets Show built-in typography preset values
|
|
21
22
|
typography show Show resolved typography for the selected site
|
|
22
23
|
site:public Sync site/public/ to public/
|
|
@@ -131,6 +132,8 @@ try {
|
|
|
131
132
|
} else if (command === 'content:sync') {
|
|
132
133
|
await runScript('scripts/sync-content-sections.mjs', ['--write', ...rest]);
|
|
133
134
|
await runScript('scripts/generate-images.mjs', rest);
|
|
135
|
+
} else if (command === 'theme:export') {
|
|
136
|
+
await runScript('scripts/export-theme-preset.mjs', rest);
|
|
134
137
|
} else if (command === 'typography:presets' || (command === 'typography' && subcommand === 'presets')) {
|
|
135
138
|
const scriptArgs = command === 'typography' ? subcommandRest : rest;
|
|
136
139
|
await runScript('scripts/show-typography.mjs', ['presets', ...scriptArgs]);
|
package/docs/README.md
CHANGED
|
@@ -10,13 +10,14 @@ For a site maintainer:
|
|
|
10
10
|
1. [Getting Started](getting-started.md)
|
|
11
11
|
2. [Site Structure](site-structure.md)
|
|
12
12
|
3. [Theme](theme.md)
|
|
13
|
-
4. [
|
|
14
|
-
5. [
|
|
15
|
-
6. [
|
|
16
|
-
7. [
|
|
17
|
-
8. [
|
|
18
|
-
9. [
|
|
19
|
-
10. [
|
|
13
|
+
4. [Sitewide Content](sitewide-content.md)
|
|
14
|
+
5. [Configuration](configuration.md)
|
|
15
|
+
6. [Content](content.md)
|
|
16
|
+
7. [Typography](typography.md)
|
|
17
|
+
8. [Routes](routes.md)
|
|
18
|
+
9. [Images And Metadata](images-and-metadata.md)
|
|
19
|
+
10. [Local Development](local-development.md)
|
|
20
|
+
11. [Publishing](publishing.md)
|
|
20
21
|
|
|
21
22
|
For a developer integrating or updating the engine:
|
|
22
23
|
|
|
@@ -37,13 +38,16 @@ For design and naming principles:
|
|
|
37
38
|
For a quick reference:
|
|
38
39
|
|
|
39
40
|
- [Configuration](configuration.md) describes technical `site/config.mjs`
|
|
40
|
-
fields such as URL, base path, locale labels,
|
|
41
|
+
fields such as URL, base path, locale labels, GitHub, and deploy
|
|
41
42
|
settings.
|
|
43
|
+
- [Sitewide Content](sitewide-content.md) describes shared site identity, banners
|
|
44
|
+
and footer content in `site/sitewide-content.md`.
|
|
42
45
|
- [Content](content.md) describes page frontmatter, Markdown-authored
|
|
43
|
-
sections, optional section metadata, managed media blocks, temporary
|
|
44
|
-
|
|
45
|
-
- [Theme](theme.md) describes
|
|
46
|
-
|
|
46
|
+
sections, optional section metadata, managed media blocks, temporary sections,
|
|
47
|
+
and content validation.
|
|
48
|
+
- [Theme](theme.md) describes complete visual presets, focused overrides,
|
|
49
|
+
preset export, layout, image sizing, typography, palettes, and section
|
|
50
|
+
surfaces.
|
|
47
51
|
- [Typography](typography.md) describes presets, rhythms, roles, overrides,
|
|
48
52
|
inheritance, and inspection commands.
|
|
49
53
|
- [Routes](routes.md) describes route files, slugs, route navigation, and
|
package/docs/commands.md
CHANGED
|
@@ -25,6 +25,7 @@ norna dev:stop
|
|
|
25
25
|
norna config:check
|
|
26
26
|
norna content:check
|
|
27
27
|
norna content:sync
|
|
28
|
+
norna theme:export <preset>
|
|
28
29
|
norna typography presets
|
|
29
30
|
norna typography show
|
|
30
31
|
norna site:public
|
|
@@ -72,6 +73,7 @@ npm run norna:check
|
|
|
72
73
|
npm run norna:config:check
|
|
73
74
|
npm run norna:content:check
|
|
74
75
|
npm run norna:sync
|
|
76
|
+
npm run norna:theme:export -- <preset>
|
|
75
77
|
npm run norna:typography:presets
|
|
76
78
|
npm run norna:typography:show
|
|
77
79
|
npm run norna:public
|
|
@@ -106,6 +108,10 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
106
108
|
- `content:sync` / `norna:sync`: moves misplaced referenced image files after
|
|
107
109
|
confirmation when the intended move is unambiguous. Moving files between the
|
|
108
110
|
homepage and routes, or between routes, requires a clean Git working tree.
|
|
111
|
+
- `theme:export <preset>`: writes a protected, commented
|
|
112
|
+
`orig-<preset>-theme.md` reference under the selected site directory. The
|
|
113
|
+
available complete theme presets are `portfolio`, `documentation`,
|
|
114
|
+
`project`, and `statement`. Norna continues to load only `theme.md`.
|
|
109
115
|
- `typography presets`: prints the exact built-in values for typography
|
|
110
116
|
presets and rhythms.
|
|
111
117
|
- `typography show`: prints the selected site's resolved typography for the
|
package/docs/configuration.md
CHANGED
|
@@ -64,6 +64,7 @@ Visual configuration lives in `site/theme.md`, not `site/config.mjs`.
|
|
|
64
64
|
|
|
65
65
|
Use [Theme](theme.md) for:
|
|
66
66
|
|
|
67
|
+
- complete theme presets and focused overrides
|
|
67
68
|
- `layout.pageWidth`
|
|
68
69
|
- `layout.gutter`
|
|
69
70
|
- `layout.density`
|
|
@@ -72,7 +73,7 @@ Use [Theme](theme.md) for:
|
|
|
72
73
|
- `gallery.maxAvailableHeightPercent`
|
|
73
74
|
- `typography.fontFamily`
|
|
74
75
|
- typography presets, rhythm, and overrides
|
|
75
|
-
- presentation
|
|
76
|
+
- presentation palettes and section surfaces
|
|
76
77
|
|
|
77
78
|
## Navigation
|
|
78
79
|
|
|
@@ -141,6 +142,10 @@ Fields:
|
|
|
141
142
|
`Sections`.
|
|
142
143
|
- `locale.labels.menu`: mobile menu summary text, default `Menu`.
|
|
143
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`.
|
|
144
149
|
- `locale.labels.gallery`: Norna managed media ARIA label prefix, default
|
|
145
150
|
`Images`.
|
|
146
151
|
|
|
@@ -160,60 +165,11 @@ locale: {
|
|
|
160
165
|
}
|
|
161
166
|
```
|
|
162
167
|
|
|
163
|
-
##
|
|
168
|
+
## Sitewide Content
|
|
164
169
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
- Type: string.
|
|
169
|
-
- Required: no.
|
|
170
|
-
- Default: hidden.
|
|
171
|
-
- Validation: if set, it must be a non-empty string. `undefined`, `null`, and
|
|
172
|
-
`''` are treated as absent.
|
|
173
|
-
- Consequence: footer rendering is enabled when this or enabled build info is
|
|
174
|
-
present.
|
|
175
|
-
|
|
176
|
-
### `footer.buildInfo`
|
|
177
|
-
|
|
178
|
-
- Purpose: optional footer build timestamp.
|
|
179
|
-
- Type: object, `false`, `null`, or omitted.
|
|
180
|
-
- Required: no.
|
|
181
|
-
- Default: hidden.
|
|
182
|
-
- Validation: object fields are validated when the object is present. `false`,
|
|
183
|
-
`null`, or omission hides build info.
|
|
184
|
-
|
|
185
|
-
Fields:
|
|
186
|
-
|
|
187
|
-
- `footer.buildInfo.enabled`: boolean, default `true`.
|
|
188
|
-
- `footer.buildInfo.text`: required non-empty string.
|
|
189
|
-
- `footer.buildInfo.dateTimeFormat`: required object.
|
|
190
|
-
- `footer.buildInfo.dateTimeFormat.locale`: required string.
|
|
191
|
-
- `footer.buildInfo.dateTimeFormat.timeZone`: required string.
|
|
192
|
-
- `footer.buildInfo.dateTimeFormat.dateStyle`: required string.
|
|
193
|
-
- `footer.buildInfo.dateTimeFormat.timeStyle`: required string.
|
|
194
|
-
|
|
195
|
-
The date/time object must be accepted by `Intl.DateTimeFormat`.
|
|
196
|
-
|
|
197
|
-
Example:
|
|
198
|
-
|
|
199
|
-
```js
|
|
200
|
-
footer: {
|
|
201
|
-
copyrightMessage: '(c) Example Artist.',
|
|
202
|
-
buildInfo: {
|
|
203
|
-
enabled: true,
|
|
204
|
-
text: 'Built',
|
|
205
|
-
dateTimeFormat: {
|
|
206
|
-
locale: 'en-GB',
|
|
207
|
-
timeZone: 'UTC',
|
|
208
|
-
dateStyle: 'short',
|
|
209
|
-
timeStyle: 'short',
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
If both `footer.copyrightMessage` and enabled `footer.buildInfo` are absent, the
|
|
216
|
-
footer is not rendered.
|
|
170
|
+
Shared site identity, banners and footer content are defined in
|
|
171
|
+
`site/sitewide-content.md`. See [Sitewide Content](sitewide-content.md) for the
|
|
172
|
+
schema and examples.
|
|
217
173
|
|
|
218
174
|
## GitHub
|
|
219
175
|
|
package/docs/content.md
CHANGED
|
@@ -18,9 +18,6 @@ The Astro content schema validates these top-level fields in page files:
|
|
|
18
18
|
- `title`: required string. Rendered as the document title.
|
|
19
19
|
- `description`: required string. Rendered as the meta description.
|
|
20
20
|
- `navigation`: optional page navigation metadata. See [Routes](routes.md).
|
|
21
|
-
- `presentation`: optional page-level presentation overrides. See
|
|
22
|
-
[Theme](theme.md) and [Typography](typography.md).
|
|
23
|
-
- `frame`: optional page-level frame color source. See [Theme](theme.md).
|
|
24
21
|
- `sections`: optional section metadata keyed by section id.
|
|
25
22
|
|
|
26
23
|
Minimal homepage:
|
|
@@ -71,16 +68,18 @@ current section, not new sections.
|
|
|
71
68
|
## Section Metadata
|
|
72
69
|
|
|
73
70
|
Use `sections` only when a section needs structured metadata that is not
|
|
74
|
-
naturally expressed by Markdown
|
|
71
|
+
naturally expressed by Markdown. Currently this is date-based visibility.
|
|
75
72
|
|
|
76
73
|
```yaml
|
|
77
74
|
sections:
|
|
78
75
|
work:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
visible:
|
|
77
|
+
from: "2026-08-01"
|
|
78
|
+
until: "2026-09-16"
|
|
82
79
|
```
|
|
83
80
|
|
|
81
|
+
See [Temporary Sections](#temporary-sections) for visibility semantics.
|
|
82
|
+
|
|
84
83
|
Each `sections.<section-id>` key must match a Markdown heading id in the same
|
|
85
84
|
page file:
|
|
86
85
|
|
|
@@ -270,14 +269,16 @@ NORNA_TODAY=2026-08-15 npm run norna:build
|
|
|
270
269
|
|
|
271
270
|
## Markdown Text
|
|
272
271
|
|
|
273
|
-
|
|
272
|
+
Use ordinary Markdown for emphasis and structure:
|
|
274
273
|
|
|
275
274
|
```md
|
|
276
|
-
This sentence contains
|
|
275
|
+
This sentence contains **important text** and *emphasised text*.
|
|
277
276
|
```
|
|
278
277
|
|
|
279
|
-
|
|
280
|
-
[
|
|
278
|
+
Norna intentionally does not support arbitrary inline color or style classes.
|
|
279
|
+
Deprecated syntax such as `[highlighted text]{.yellow}` is rejected by
|
|
280
|
+
`content:check`. Keep the route visually coherent through its `theme.md`
|
|
281
|
+
instead of styling individual phrases.
|
|
281
282
|
|
|
282
283
|
## Validation And Sync
|
|
283
284
|
|
|
@@ -289,27 +290,25 @@ npm run norna:content:check
|
|
|
289
290
|
|
|
290
291
|
This checks section heading ids, section metadata, duplicate image names,
|
|
291
292
|
missing image files, misplaced referenced images, duplicate image references,
|
|
292
|
-
invalid managed media blocks, unreferenced images,
|
|
293
|
+
invalid managed media blocks, unreferenced images, removed inline style syntax,
|
|
293
294
|
Markdown image references to unmanaged local files, and common frontmatter
|
|
294
295
|
indentation and structure mistakes.
|
|
295
296
|
|
|
296
297
|
Frontmatter uses YAML indentation. Use ordinary spaces, not tabs or
|
|
297
298
|
non-breaking spaces. `content:check` reports a focused error when indentation is
|
|
298
299
|
invalid, when a key is indented under a line that already has a value, or when a
|
|
299
|
-
known nested key
|
|
300
|
-
level:
|
|
300
|
+
known nested key appears at the top level:
|
|
301
301
|
|
|
302
302
|
```yaml
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
body:
|
|
308
|
-
paragraphSpacing: 0.8em
|
|
303
|
+
sections:
|
|
304
|
+
intro:
|
|
305
|
+
visible:
|
|
306
|
+
from: "2026-08-01"
|
|
309
307
|
```
|
|
310
308
|
|
|
311
309
|
Top-level page frontmatter may contain only `title`, `description`,
|
|
312
|
-
`navigation`,
|
|
310
|
+
`navigation`, and `sections`. Visual settings belong in the root or route-local
|
|
311
|
+
`theme.md`.
|
|
313
312
|
|
|
314
313
|
Run:
|
|
315
314
|
|
|
@@ -67,6 +67,8 @@ Diagrams must match the current Norna model:
|
|
|
67
67
|
|
|
68
68
|
- A Norna site is described with site files, not arbitrary project structure.
|
|
69
69
|
- `content.md` is the homepage content file.
|
|
70
|
+
- `sitewide-content.md` contains shared site identity, banners, and footer
|
|
71
|
+
content.
|
|
70
72
|
- Additional pages are route directories with `route-content.md`.
|
|
71
73
|
- Route folder prefixes control route presentation order.
|
|
72
74
|
- Route ids become default URL slugs.
|
|
@@ -10,7 +10,8 @@ files are product documentation, which files are examples, and which files are
|
|
|
10
10
|
test fixtures.
|
|
11
11
|
|
|
12
12
|
The repository grew from one local demo, one starter, and a set of tests. The
|
|
13
|
-
current structure keeps those roles
|
|
13
|
+
current structure keeps those roles distinct while allowing runnable examples
|
|
14
|
+
to serve as documentation and realistic integration tests.
|
|
14
15
|
|
|
15
16
|
## Terms
|
|
16
17
|
|
|
@@ -26,8 +27,8 @@ site repository. It should not be a showcase for every feature.
|
|
|
26
27
|
An example site is a runnable site that demonstrates one or more features.
|
|
27
28
|
|
|
28
29
|
Examples can be richer than the starter. They may show routes, navigation,
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
complete theme presets, image stacks, image carousels, cards, notes, surfaces,
|
|
31
|
+
and site-specific configuration choices.
|
|
31
32
|
|
|
32
33
|
### Documentation Site
|
|
33
34
|
|
|
@@ -54,26 +55,37 @@ A fixture is test data.
|
|
|
54
55
|
It should be minimal, stable, and optimized for regression tests rather than
|
|
55
56
|
for human reading or visual appeal.
|
|
56
57
|
|
|
57
|
-
##
|
|
58
|
+
## Repository Structure
|
|
58
59
|
|
|
59
60
|
Runnable site examples are collected under `examples/`:
|
|
60
61
|
|
|
61
62
|
```text
|
|
62
63
|
examples/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
complete-sites/
|
|
65
|
+
dog-shelter-single-page/
|
|
66
|
+
dog-shelter-multi-page/
|
|
67
|
+
feature-demos/
|
|
68
|
+
theme-presets/
|
|
69
|
+
media-and-surfaces/
|
|
66
70
|
```
|
|
67
71
|
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
`complete-sites/` contains coherent sites that show how Norna files work
|
|
73
|
+
together in a realistic project:
|
|
70
74
|
|
|
71
|
-
- `dog-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
- `dog-shelter-single-page/`: sections and managed images without routes.
|
|
76
|
+
- `dog-shelter-multi-page/`: ordered routes with route-local content and
|
|
77
|
+
images.
|
|
78
|
+
|
|
79
|
+
`feature-demos/` contains focused visual test benches:
|
|
80
|
+
|
|
81
|
+
- `theme-presets/`: one route per complete built-in theme preset, without
|
|
82
|
+
overrides.
|
|
83
|
+
- `media-and-surfaces/`: managed media blocks, notes, palettes and section
|
|
84
|
+
surfaces. This is also the broad demo-build and navigation-test target.
|
|
85
|
+
|
|
86
|
+
The repository Pages workflow builds all four examples and publishes them
|
|
87
|
+
under `/norna/examples/`. The HTML documentation links to those rendered sites
|
|
88
|
+
from its Examples route.
|
|
77
89
|
|
|
78
90
|
The repository-local `site/` directory is reserved for the documentation site.
|
|
79
91
|
`docs/` should remain for reference documentation. It should link to the
|
|
@@ -82,8 +94,8 @@ documentation site when visual explanation is more useful than reference text.
|
|
|
82
94
|
`starters/basic/` stays separate from examples because it is copied by
|
|
83
95
|
`norna init`. It should stay small and conservative.
|
|
84
96
|
|
|
85
|
-
Fixtures
|
|
86
|
-
|
|
97
|
+
Fixtures stay under `fixtures/`. They are intentionally smaller and more stable
|
|
98
|
+
than examples and should not be confused with user-facing sites.
|
|
87
99
|
|
|
88
100
|
## Constraints
|
|
89
101
|
|
|
@@ -91,11 +103,10 @@ area later. They should not be confused with examples.
|
|
|
91
103
|
- Do not make the documentation site the only documentation.
|
|
92
104
|
- Do not let examples become required input for production site repositories.
|
|
93
105
|
- Keep `norna init` deterministic and easy to test.
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
106
|
+
- Use examples for build, navigation and visual integration tests where the
|
|
107
|
+
user-facing site is the behavior being protected.
|
|
108
|
+
- Use fixtures for isolated edge cases, invalid input and narrowly scoped
|
|
109
|
+
engine regressions.
|
|
97
110
|
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
- How local example selection should work when there are multiple runnable
|
|
101
|
-
examples.
|
|
111
|
+
The repository-local `site/` remains the product documentation site and is not
|
|
112
|
+
an example or fixture.
|
|
@@ -19,8 +19,8 @@ This document is for work on the reusable `norna` package itself.
|
|
|
19
19
|
- `tests/`: Playwright navigation diagnostics.
|
|
20
20
|
- `fixtures/basic/site/`: minimal site used for engine checks.
|
|
21
21
|
- `starters/basic/`: copyable site starter.
|
|
22
|
-
- `examples/
|
|
23
|
-
navigation diagnostics.
|
|
22
|
+
- `examples/feature-demos/media-and-surfaces/site/`: broad visual example used
|
|
23
|
+
by demo builds and navigation diagnostics.
|
|
24
24
|
|
|
25
25
|
The repository-local `site/` directory is reserved for a local documentation
|
|
26
26
|
site. It is useful for dogfooding `norna` documentation, but it is not the
|
|
@@ -34,11 +34,18 @@ Run focused checks while developing:
|
|
|
34
34
|
npm run test:content-check
|
|
35
35
|
npm run test:site-public
|
|
36
36
|
npm run test:fixture:build
|
|
37
|
+
npm run test:examples
|
|
37
38
|
npm run demo:build
|
|
38
39
|
npm run package:check
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
`npm run test`
|
|
42
|
+
`npm run test:examples` builds every complete site and feature demo under
|
|
43
|
+
`examples/`. `npm run test` includes those builds in the standard check
|
|
44
|
+
sequence.
|
|
45
|
+
|
|
46
|
+
`npm run build:pages` is specific to this repository. It builds the
|
|
47
|
+
documentation site and assembles rendered examples under `dist/examples/` for
|
|
48
|
+
the shared GitHub Pages artifact. It is not a generic Norna site command.
|
|
42
49
|
|
|
43
50
|
The root `site/` directory is the documentation site. Use the ordinary local
|
|
44
51
|
commands for it:
|
|
@@ -48,12 +55,11 @@ npm run dev:local
|
|
|
48
55
|
npm run build
|
|
49
56
|
```
|
|
50
57
|
|
|
51
|
-
The
|
|
58
|
+
The media-and-surfaces feature demo is the broad visual and navigation
|
|
59
|
+
diagnostic target:
|
|
52
60
|
|
|
53
61
|
```sh
|
|
54
|
-
|
|
55
|
-
node ../../../bin/norna.mjs dev:local
|
|
56
|
-
cd ../../..
|
|
62
|
+
node bin/norna.mjs --site-dir examples/feature-demos/media-and-surfaces/site dev:local
|
|
57
63
|
npm run demo:build
|
|
58
64
|
```
|
|
59
65
|
|
package/docs/getting-started.md
CHANGED
|
@@ -57,6 +57,7 @@ The starter contains:
|
|
|
57
57
|
- `.github/workflows/deploy.yml` for GitHub Pages
|
|
58
58
|
- `site/config.mjs`
|
|
59
59
|
- `site/theme.md`
|
|
60
|
+
- `site/sitewide-content.md`
|
|
60
61
|
- `site/content.md`
|
|
61
62
|
- `site/public/robots.txt`
|
|
62
63
|
|
|
@@ -88,21 +89,21 @@ Relevant documentation: [Commands](commands.md), [Site Structure](site-structure
|
|
|
88
89
|
## First Edits
|
|
89
90
|
|
|
90
91
|
1. Edit `site/config.mjs` for the site's URL, language labels, GitHub
|
|
91
|
-
repository,
|
|
92
|
-
2. Edit `site/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
text, and captions.
|
|
98
|
-
|
|
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. Keep `site/theme.md` and select a complete theme preset. Add focused visual
|
|
96
|
+
overrides only when the preset needs adjustment.
|
|
97
|
+
4. Edit `site/content.md` for homepage title, description, Markdown sections,
|
|
98
|
+
text, Norna managed media blocks, alt text, and captions.
|
|
99
|
+
5. Put source images under `site/images/<section-id>/`, where `<section-id>`
|
|
99
100
|
matches a `## Section {#section-id}` heading in `site/content.md`.
|
|
100
|
-
|
|
101
|
+
6. Add optional route pages under
|
|
101
102
|
`site/routes/<NNN-route-id>/route-content.md`, for example
|
|
102
103
|
`site/routes/010-about/route-content.md`.
|
|
103
|
-
|
|
104
|
+
7. Put static files such as `robots.txt`, `CNAME`, and favicons under
|
|
104
105
|
`site/public/`.
|
|
105
|
-
|
|
106
|
+
8. Run:
|
|
106
107
|
|
|
107
108
|
```sh
|
|
108
109
|
npm run norna:config:check
|
|
@@ -122,6 +123,42 @@ publishing.
|
|
|
122
123
|
Relevant documentation: [Content](content.md), [Theme](theme.md),
|
|
123
124
|
[Typography](typography.md), [Routes](routes.md), [Images And Metadata](images-and-metadata.md).
|
|
124
125
|
|
|
126
|
+
## Choose A Theme
|
|
127
|
+
|
|
128
|
+
The required root `theme.md` can be deliberately short:
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
---
|
|
132
|
+
preset: project
|
|
133
|
+
---
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Available complete presets are `portfolio`, `documentation`, `project`, and
|
|
137
|
+
`statement`. They coordinate layout, image sizing, font, typography, spacing,
|
|
138
|
+
palette, and section surfaces.
|
|
139
|
+
|
|
140
|
+
Override only what the site needs to change:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
---
|
|
144
|
+
preset: project
|
|
145
|
+
layout:
|
|
146
|
+
pageWidth: 1240px
|
|
147
|
+
---
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Export a commented reference for a preset with:
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
npm run norna:theme:export -- project
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The generated `site/orig-project-theme.md` is reference material and is not
|
|
157
|
+
loaded by Norna. The command does not overwrite an existing reference file.
|
|
158
|
+
|
|
159
|
+
Relevant documentation: [Theme](theme.md), [Typography](typography.md),
|
|
160
|
+
[Commands](commands.md).
|
|
161
|
+
|
|
125
162
|
## Configure The Public URL
|
|
126
163
|
|
|
127
164
|
For a custom domain or any site published at the web root, use:
|
|
@@ -157,13 +194,13 @@ Read [Site Structure](site-structure.md), [Content](content.md),
|
|
|
157
194
|
[Theme](theme.md), [Typography](typography.md), [Routes](routes.md), and
|
|
158
195
|
[Configuration](configuration.md) before publishing a real site.
|
|
159
196
|
|
|
160
|
-
To change the site's
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
the accepted shape.
|
|
197
|
+
To change the site's overall visual expression, select a top-level preset in
|
|
198
|
+
`site/theme.md`. Override individual page-width, gutter, image, typography, or
|
|
199
|
+
palette values only where needed. See [Theme](theme.md) for the accepted shape.
|
|
164
200
|
|
|
165
|
-
To
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
`norna typography
|
|
201
|
+
To give a route a different visual expression, add a route-local `theme.md`
|
|
202
|
+
and normally select another complete top-level preset. See
|
|
203
|
+
[Theme](theme.md#route-themes) and [Typography](typography.md).
|
|
204
|
+
Use `norna typography presets` to inspect the installed preset and rhythm values
|
|
205
|
+
and `norna typography show` to inspect the resolved typography for the selected
|
|
169
206
|
site.
|
package/docs/routes.md
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
under `site/routes/<NNN-route-id>/route-content.md` and build to first-level
|
|
5
5
|
URLs.
|
|
6
6
|
|
|
7
|
-
Routes use the same page frontmatter, optional section metadata, Norna
|
|
8
|
-
media blocks, and Markdown section model as the homepage. See
|
|
9
|
-
|
|
7
|
+
Routes use the same page frontmatter, optional section metadata, Norna-managed
|
|
8
|
+
media blocks, and Markdown section model as the homepage. See [Content](content.md)
|
|
9
|
+
for the page and section model.
|
|
10
10
|
|
|
11
11
|
Route directories can contain route content, route-local images, and
|
|
12
|
-
route-local
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
an optional route-local `theme.md`. The route theme replaces the root visual
|
|
13
|
+
theme for that route and can select any complete top-level theme preset. Route
|
|
14
|
+
directories cannot contain technical site
|
|
15
|
+
configuration; technical configuration stays in the selected site directory's
|
|
16
|
+
top-level `config.mjs`.
|
|
15
17
|
|
|
16
18
|
## Route Directory Format
|
|
17
19
|
|
package/docs/site-structure.md
CHANGED
|
@@ -11,6 +11,7 @@ The selected site directory defaults to `site/`:
|
|
|
11
11
|
site/
|
|
12
12
|
|-- config.mjs
|
|
13
13
|
|-- theme.md
|
|
14
|
+
|-- sitewide-content.md
|
|
14
15
|
|-- content.md
|
|
15
16
|
|-- images/
|
|
16
17
|
| `-- <section-id>/
|
|
@@ -30,17 +31,19 @@ site directory. Without an explicit site directory, commands first accept the
|
|
|
30
31
|
current directory when it contains both `config.mjs` and `content.md`.
|
|
31
32
|
Otherwise, commands started from a subdirectory walk upward until they find the
|
|
32
33
|
default `site/` directory containing those files.
|
|
33
|
-
`theme.md` is
|
|
34
|
+
`theme.md` is required. It can contain only a complete preset selection.
|
|
34
35
|
|
|
35
36
|
## Versioned Source Files
|
|
36
37
|
|
|
37
38
|
Version these files in a site repository:
|
|
38
39
|
|
|
39
40
|
- `site/config.mjs`: technical site configuration.
|
|
40
|
-
- `site/theme.md`:
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
- `site/theme.md`: required site-wide visual theme. It normally selects a
|
|
42
|
+
complete preset and may add focused layout, image, typography, palette, or
|
|
43
|
+
section-surface overrides.
|
|
43
44
|
See [Theme](theme.md).
|
|
45
|
+
- `site/sitewide-content.md`: shared site identity, banners and footer content.
|
|
46
|
+
See [Sitewide Content](sitewide-content.md).
|
|
44
47
|
- `site/content.md`: homepage page file with editable content, Markdown
|
|
45
48
|
sections, optional section metadata, managed media blocks, alt text, and
|
|
46
49
|
captions.
|
|
@@ -88,6 +91,8 @@ In this repository:
|
|
|
88
91
|
- `starters/project/` is a project-site starter used as a maintained example
|
|
89
92
|
for small project and developer-tool sites.
|
|
90
93
|
- `fixtures/basic/site/` is used by engine regression tests.
|
|
91
|
-
- `examples/
|
|
92
|
-
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.
|
|
93
98
|
- `site/` is reserved for the local documentation site.
|