@janga/norna 0.7.16 → 0.7.18
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 +18 -9
- package/astro.config.mjs +35 -3
- package/bin/norna-cli.mjs +1 -1
- package/docs/README.md +16 -14
- package/docs/commands.md +2 -2
- package/docs/configuration.md +25 -2
- package/docs/content.md +92 -103
- package/docs/design/navigation-and-theme-plan.md +186 -0
- package/docs/design/norna-diagram-design.md +9 -9
- package/docs/design/site-examples-structure.md +15 -11
- package/docs/engine-development.md +19 -22
- package/docs/getting-started.md +21 -16
- package/docs/images-and-metadata.md +12 -9
- package/docs/pages.md +190 -0
- package/docs/public-files.md +49 -36
- package/docs/publishing.md +19 -3
- package/docs/site-files.md +46 -38
- package/docs/sitewide-content.md +20 -36
- package/docs/theme.md +109 -143
- package/docs/typography.md +19 -31
- package/examples/README.md +10 -4
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +17 -41
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +26 -67
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +185 -88
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +4 -4
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +5 -5
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +33 -23
- package/examples/complete-sites/dog-shelter-multi-page/README.md +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +8 -8
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +20 -20
- package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +3 -4
- package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/010-dogs/content.md +3 -4
- package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/020-adopt/content.md +3 -4
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +2 -4
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +17 -41
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +26 -67
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +185 -88
- package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -1
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +8 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +5 -5
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +16 -12
- package/examples/complete-sites/dog-shelter-single-page/README.md +1 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +8 -8
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +12 -12
- package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +5 -2
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +2 -4
- package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +17 -41
- package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +26 -67
- package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +180 -91
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +4 -14
- package/examples/feature-demos/media-and-surfaces/README.md +2 -2
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +9 -9
- package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +16 -16
- package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +4 -7
- package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/010-media/content.md +6 -5
- package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/020-surfaces/content.md +9 -7
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -0
- package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
- package/examples/feature-demos/sitewide-content/README.md +3 -3
- package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +17 -0
- package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +17 -0
- package/examples/feature-demos/sitewide-content/site/{routes → pages}/020-notices/content.md +7 -6
- package/examples/feature-demos/sitewide-content/site/{routes → pages}/030-footer/content.md +6 -5
- package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +4 -13
- package/examples/feature-demos/theme-preset-documentation/README.md +16 -0
- package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +4 -7
- package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +3 -0
- package/examples/feature-demos/theme-preset-portfolio/README.md +16 -0
- package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +4 -7
- package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +3 -0
- package/examples/feature-demos/theme-preset-project/README.md +16 -0
- package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-project/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site/pages/000-home}/content.md +4 -7
- package/examples/feature-demos/theme-preset-project/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +3 -0
- package/examples/feature-demos/theme-preset-statement/README.md +16 -0
- package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-statement/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site/pages/000-home}/content.md +4 -7
- package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +3 -0
- package/fixtures/basic/site/{content.md → pages/000-home/content.md} +5 -6
- package/fixtures/basic/site/sitewide-content.yaml +1 -8
- package/fixtures/basic/site/theme.yaml +1 -8
- package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +11 -13
- package/fixtures/content-model-v2/site/pages/010-guide/content.md +18 -0
- package/fixtures/nested-pages/.astro/collections/site.schema.json +35 -0
- package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +97 -0
- package/fixtures/nested-pages/.astro/collections/theme.schema.json +844 -0
- package/fixtures/nested-pages/.astro/content-assets.mjs +4 -0
- package/fixtures/nested-pages/.astro/content-modules.mjs +1 -0
- package/fixtures/nested-pages/.astro/content.d.ts +183 -0
- package/fixtures/nested-pages/.astro/data-store.json +1 -0
- package/fixtures/nested-pages/.astro/dev-local.json +8 -0
- package/fixtures/nested-pages/.astro/dev.log +1128 -0
- package/fixtures/nested-pages/.astro/settings.json +5 -0
- package/fixtures/nested-pages/.astro/types.d.ts +2 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +74 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/package.json +3 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/fixtures/nested-pages/site/.norna/generated-images.json +10 -0
- package/fixtures/nested-pages/site/config.yaml +3 -0
- package/fixtures/nested-pages/site/pages/000-home/content.md +15 -0
- package/fixtures/nested-pages/site/pages/010-guides/content.md +15 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +21 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +21 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +18 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +2 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +11 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +9 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +7 -0
- package/fixtures/nested-pages/site/pages/020-reference/content.md +10 -0
- package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +11 -0
- package/fixtures/nested-pages/site/theme.yaml +1 -0
- package/package.json +8 -4
- package/schemas/config.schema.json +46 -5
- package/schemas/content-frontmatter.schema.json +28 -63
- package/schemas/manifest.json +4 -2
- package/schemas/page-theme.schema.json +192 -0
- package/schemas/sitewide-content.schema.json +58 -132
- package/schemas/theme.schema.json +434 -152
- package/scripts/check-config.mjs +8 -6
- package/scripts/deploy-site.mjs +6 -8
- package/scripts/doctor.mjs +2 -2
- package/scripts/generate-images.mjs +15 -29
- package/scripts/generate-schemas.mjs +7 -218
- package/scripts/lib/base-path-redirect.mjs +9 -0
- package/scripts/lib/editor-language-service.mjs +125 -79
- package/scripts/lib/example-sites.mjs +15 -3
- package/scripts/lib/heading-ids.mjs +161 -0
- package/scripts/lib/navigation-model.mjs +51 -0
- package/scripts/lib/norna-markdown-blocks.mjs +3 -4
- package/scripts/lib/page-model.mjs +102 -0
- package/scripts/lib/presentation.mjs +25 -17
- package/scripts/lib/project-config.mjs +46 -8
- package/scripts/lib/schema-definitions.mjs +78 -55
- package/scripts/lib/schema-editor-metadata.mjs +519 -0
- package/scripts/lib/schema-value-definitions.mjs +20 -6
- package/scripts/lib/site-content.mjs +159 -97
- package/scripts/lib/site-conventions.mjs +1 -0
- package/scripts/lib/site-paths.mjs +11 -5
- package/scripts/lib/theme-config.mjs +12 -18
- package/scripts/lib/theme-presets.mjs +55 -14
- package/scripts/release.mjs +1 -1
- package/scripts/show-typography.mjs +4 -30
- package/scripts/sync-content-sections.mjs +107 -68
- package/scripts/{test-temporary-visibility.mjs → test-banner-visibility.mjs} +8 -25
- package/scripts/test-client-javascript.mjs +50 -46
- package/scripts/test-content-check.mjs +153 -69
- package/scripts/test-content-model-v2.mjs +566 -285
- package/scripts/test-documentation.mjs +10 -3
- package/scripts/test-editor-language-service.mjs +172 -25
- package/scripts/test-engine-commands.mjs +6 -5
- package/scripts/test-examples.mjs +30 -1
- package/scripts/test-heading-ids.mjs +68 -0
- package/scripts/test-navigation-model.mjs +63 -0
- package/scripts/test-navigation.mjs +11 -2
- package/scripts/test-nested-pages.mjs +125 -0
- package/scripts/test-package-check.mjs +55 -95
- package/scripts/test-page-model.mjs +108 -0
- package/scripts/test-project-config.mjs +22 -3
- package/scripts/test-schemas.mjs +82 -15
- package/scripts/test-theme-presets.mjs +57 -42
- package/src/components/NavigationPageTree.astro +157 -0
- package/src/components/PageContentsLinks.astro +40 -0
- package/src/components/SectionNavigationScript.astro +117 -5
- package/src/components/SiteBreadcrumbs.astro +32 -0
- package/src/components/SiteNavigation.astro +97 -68
- package/src/components/SitePage.astro +93 -55
- package/src/components/SiteSection.astro +29 -27
- package/src/components/SiteTreeNavigation.astro +35 -0
- package/src/components/TreeNavigationScript.astro +83 -0
- package/src/content.config.ts +8 -10
- package/src/layouts/BaseLayout.astro +21 -20
- package/src/lib/pageThemes.ts +44 -0
- package/src/lib/sectionContent.ts +106 -107
- package/src/lib/siteNavigation.ts +49 -0
- package/src/lib/sitePages.ts +96 -38
- package/src/pages/{[slug].astro → [...slug].astro} +2 -2
- package/src/pages/index.astro +2 -1
- package/src/styles/global.css +743 -57
- package/starters/basic/README.md +9 -11
- package/starters/basic/site/{content.md → pages/000-home/content.md} +7 -4
- package/starters/basic/site/sitewide-content.yaml +1 -10
- package/starters/basic/site/theme.yaml +1 -105
- package/starters/project/README.md +14 -14
- package/starters/project/site/{content.md → pages/000-home/content.md} +5 -4
- package/starters/project/site/{routes → pages}/010-guide/content.md +5 -4
- package/starters/project/site/sitewide-content.yaml +1 -10
- package/starters/project/site/theme.yaml +1 -31
- package/docs/routes.md +0 -121
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.yaml +0 -3
- package/examples/feature-demos/sitewide-content/site/content.md +0 -16
- package/examples/feature-demos/sitewide-content/site/routes/010-identity/content.md +0 -20
- package/examples/feature-demos/theme-presets/README.md +0 -18
- package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
- package/examples/feature-demos/theme-presets/site/content.md +0 -17
- package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +0 -12
- package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
- package/fixtures/content-model-v2/site/routes/010-guide/content.md +0 -17
- package/scripts/lib/route-model.mjs +0 -17
- package/scripts/test-route-model.mjs +0 -32
- package/src/lib/routeThemes.ts +0 -41
- /package/examples/complete-sites/dog-shelter-multi-page/site/{images/intro → pages/000-home/images}/shelter-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rex.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rover.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/020-adopt/images/adopt → pages/020-adopt/images}/adoption-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images/you-can-help → pages/000-home/images}/foster-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images/what-we-do → pages/000-home/images}/rescue-dog.jpg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-carousel.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-stack.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-surfaces.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-one.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-three.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-two.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-one.svg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-two.svg +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/black-schnauzer.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/retriever-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/schnauzer-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/public/robots.txt +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/puppy-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/shepherd-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/white-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/routeTheme.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/site.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/sitewide.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/theme.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-assets.mjs +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-modules.mjs +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content.d.ts +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/data-store.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev-local.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.log +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/settings.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/types.d.ts +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/_metadata.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/boxer-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grass-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grey-street-dog.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/black-pedigree.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-grass.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-wide.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
- /package/fixtures/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
- /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/adopt.svg +0 -0
- /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/detail.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/duplicate.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/foster.svg +0 -0
- /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/hero.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/plain → pages/000-home/images}/image.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-one.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-three.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-two.jpg +0 -0
- /package/fixtures/content-model-v2/site/{routes/010-guide/images/intro → pages/010-guide/images}/duplicate.jpg +0 -0
- /package/starters/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
package/docs/theme.md
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# Theme
|
|
2
2
|
|
|
3
|
-
`site/theme.yaml` defines the
|
|
4
|
-
required plain YAML file. The normal setup selects one
|
|
5
|
-
and adds only focused overrides when needed
|
|
3
|
+
`site/theme.yaml` defines the visual identity and default presentation for the
|
|
4
|
+
whole Norna site. It is a required plain YAML file. The normal setup selects one
|
|
5
|
+
complete preset and adds only focused overrides when they are needed:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
```yaml
|
|
8
|
+
preset: documentation
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The root theme owns site-wide colors, shapes, typography, page frame, and
|
|
12
|
+
navigation presentation. An optional page-local `theme.yaml` has a deliberately
|
|
13
|
+
smaller role described under [Page Themes](#page-themes).
|
|
10
14
|
|
|
11
15
|
## Theme Presets
|
|
12
16
|
|
|
13
|
-
Available complete
|
|
17
|
+
Available complete presets are:
|
|
14
18
|
|
|
15
19
|
- `portfolio`: restrained typography and a broad image area for image-led
|
|
16
20
|
presentation.
|
|
@@ -21,27 +25,21 @@ Available complete theme presets are:
|
|
|
21
25
|
- `statement`: airy spacing and stronger typography for short editorial
|
|
22
26
|
content.
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
Each preset coordinates:
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
- colors, shape, and typography
|
|
31
|
+
- page width, gutters, text width, and content spacing
|
|
32
|
+
- navigation spacing and visual treatment
|
|
33
|
+
- managed-image sizing
|
|
34
|
+
- section background sequence
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- layout density, page width, and gutters
|
|
33
|
-
- managed image sizing
|
|
34
|
-
- font family, typography profile, and typography rhythm
|
|
35
|
-
- palette and section-surface behaviour
|
|
36
|
-
|
|
37
|
-
The nested `typography.profile` setting documented below is a lower-level
|
|
38
|
-
typography choice. A top-level theme `preset` selects the complete visual
|
|
39
|
-
system, including that typography choice.
|
|
36
|
+
These coordinated values keep the site's identity consistent. Page themes
|
|
37
|
+
cannot select another preset.
|
|
40
38
|
|
|
41
39
|
## Overrides
|
|
42
40
|
|
|
43
|
-
Values
|
|
44
|
-
preset
|
|
41
|
+
Values beside the root preset override only that part of the preset. Other
|
|
42
|
+
preset values remain active:
|
|
45
43
|
|
|
46
44
|
```yaml
|
|
47
45
|
preset: documentation
|
|
@@ -50,112 +48,89 @@ layout:
|
|
|
50
48
|
palette: dark
|
|
51
49
|
```
|
|
52
50
|
|
|
53
|
-
Nested objects are merged by key. `
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
It is still valid to omit the top-level preset and define the visual settings
|
|
57
|
-
explicitly. Omitted explicit settings then use engine defaults. This is useful
|
|
58
|
-
for focused testing, but selecting a complete preset is the simpler normal
|
|
59
|
-
workflow.
|
|
51
|
+
Nested objects are merged by key. It is valid to omit `preset` and define root
|
|
52
|
+
settings explicitly, but a complete preset is the simpler normal workflow.
|
|
60
53
|
|
|
61
54
|
## Export A Preset
|
|
62
55
|
|
|
63
|
-
Export the installed definition
|
|
56
|
+
Export the installed definition before choosing overrides:
|
|
64
57
|
|
|
65
58
|
```sh
|
|
66
59
|
norna theme:export documentation
|
|
67
60
|
```
|
|
68
61
|
|
|
69
|
-
In a generated site,
|
|
62
|
+
In a generated site, use:
|
|
70
63
|
|
|
71
64
|
```sh
|
|
72
65
|
npm run norna:theme:export -- documentation
|
|
73
66
|
```
|
|
74
67
|
|
|
75
|
-
The command creates `site/orig-documentation-theme.yaml
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
The command creates `site/orig-documentation-theme.yaml`. The file contains the
|
|
69
|
+
preset values, accepted alternatives, and example overrides. Norna never loads
|
|
70
|
+
`orig-*-theme.yaml`; only `theme.yaml` is active. The command refuses to
|
|
71
|
+
overwrite an existing reference file.
|
|
79
72
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Site identity is not part of the visual theme. Define the optional navigation
|
|
84
|
-
label and logo display settings in `site/sitewide-content.yaml`; see
|
|
85
|
-
[Sitewide Content](sitewide-content.md).
|
|
73
|
+
Page titles and site-wide editorial content are not part of the visual theme.
|
|
74
|
+
Optional logo display settings, banners, and the footer belong in
|
|
75
|
+
[`sitewide-content.yaml`](sitewide-content.md).
|
|
86
76
|
|
|
87
77
|
## Layout
|
|
88
78
|
|
|
89
|
-
`layout`
|
|
79
|
+
Root `layout` settings control the site frame and default content geometry:
|
|
90
80
|
|
|
91
|
-
- `pageWidth`: maximum width of the
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
`desktop`
|
|
95
|
-
- `
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`mobile` values.
|
|
81
|
+
- `pageWidth`: maximum width of the full site layout, including local tree
|
|
82
|
+
navigation where present.
|
|
83
|
+
- `gutter`: horizontal viewport gutter, either one CSS length or separate
|
|
84
|
+
`desktop` and `mobile` values.
|
|
85
|
+
- `textWidth`: body-text line length: `narrow`, `normal`, or `wide`.
|
|
86
|
+
- `contentSpacing`: vertical spacing between sections and structured blocks:
|
|
87
|
+
`compact`, `normal`, or `spacious`.
|
|
88
|
+
- `spacing`: fine-grained structural spacing overrides.
|
|
100
89
|
|
|
101
90
|
Example:
|
|
102
91
|
|
|
103
92
|
```yaml
|
|
93
|
+
preset: documentation
|
|
104
94
|
layout:
|
|
105
|
-
|
|
106
|
-
pageWidth: 1180px
|
|
95
|
+
pageWidth: 1320px
|
|
107
96
|
gutter:
|
|
108
97
|
desktop: clamp(1.25rem, 4vw, 3rem)
|
|
109
98
|
mobile: 1rem
|
|
99
|
+
textWidth: narrow
|
|
100
|
+
contentSpacing: compact
|
|
110
101
|
spacing:
|
|
111
|
-
firstSectionTop:
|
|
112
|
-
desktop: clamp(1.875rem, 3vw, 2.75rem)
|
|
113
|
-
mobile: 1.375rem
|
|
102
|
+
firstSectionTop: 1.5rem
|
|
114
103
|
sectionGap:
|
|
115
|
-
desktop:
|
|
104
|
+
desktop: 2.5rem
|
|
116
105
|
mobile: 1.5rem
|
|
117
|
-
headingToBlock:
|
|
118
|
-
|
|
119
|
-
mobile: 0.7em
|
|
120
|
-
blockGap:
|
|
121
|
-
desktop: 1.5em
|
|
122
|
-
mobile: 1.25em
|
|
106
|
+
headingToBlock: 0.75em
|
|
107
|
+
blockGap: 1.5em
|
|
123
108
|
```
|
|
124
109
|
|
|
125
|
-
|
|
126
|
-
`clamp(1.25rem, 4vw, 3rem)` for `gutter`, mobile `1rem`, and `normal` layout
|
|
127
|
-
density.
|
|
128
|
-
|
|
129
|
-
Spacing keys:
|
|
110
|
+
Spacing keys are:
|
|
130
111
|
|
|
131
112
|
- `firstSectionTop`: space above the first section heading.
|
|
132
113
|
- `sectionGap`: space above each following section.
|
|
133
114
|
- `finalSectionBottom`: space below the final section.
|
|
134
|
-
- `headingToBlock`: space between a section heading and its first
|
|
115
|
+
- `headingToBlock`: space between a section heading and its first structured
|
|
135
116
|
block, such as an image stack, carousel, or card list.
|
|
136
|
-
- `blockGap`: space between content blocks
|
|
137
|
-
|
|
138
|
-
- `imageGap`: space between stacked images or carousel blocks.
|
|
117
|
+
- `blockGap`: space between structured content blocks.
|
|
118
|
+
- `imageGap`: space between images in an image stack.
|
|
139
119
|
|
|
140
|
-
The
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Use `sectionGap` and the other structural keys when the distance should describe
|
|
144
|
-
the page layout rather than the size of nearby text.
|
|
120
|
+
The `contentSpacing` profiles supply coordinated defaults for these values.
|
|
121
|
+
Text-near spacing inside Markdown, including paragraph and subheading spacing,
|
|
122
|
+
belongs to typography rhythm.
|
|
145
123
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
`typography.rhythm` and typography overrides.
|
|
124
|
+
The horizontal gap between tree navigation and page content is coordinated by
|
|
125
|
+
the selected preset. It is intentionally not a separate public override.
|
|
149
126
|
|
|
150
127
|
## Image Sizing
|
|
151
128
|
|
|
152
|
-
`images`
|
|
129
|
+
`images` controls managed image sizing:
|
|
153
130
|
|
|
154
|
-
- `width`:
|
|
155
|
-
|
|
156
|
-
- `
|
|
157
|
-
- `maxAvailableHeightPercent`: maximum share of viewport height used by
|
|
158
|
-
images.
|
|
131
|
+
- `width`: maximum rendered image-area width.
|
|
132
|
+
- `maxAvailableWidthPercent`: maximum share of available horizontal space.
|
|
133
|
+
- `maxAvailableHeightPercent`: maximum share of viewport height.
|
|
159
134
|
|
|
160
135
|
Example:
|
|
161
136
|
|
|
@@ -170,18 +145,16 @@ images:
|
|
|
170
145
|
mobile: 68
|
|
171
146
|
```
|
|
172
147
|
|
|
173
|
-
|
|
174
|
-
desktop `74` / mobile `68`.
|
|
148
|
+
Each responsive percentage may also be a single number.
|
|
175
149
|
|
|
176
150
|
## Typography
|
|
177
151
|
|
|
178
|
-
|
|
152
|
+
Root `typography` is site-wide. It supports:
|
|
179
153
|
|
|
180
154
|
- `fontFamily`: global CSS font-family stack.
|
|
181
|
-
- `profile`:
|
|
182
|
-
- `rhythm`:
|
|
183
|
-
|
|
184
|
-
- `overrides`: focused changes to preset values.
|
|
155
|
+
- `profile`: `restrained`, `dense`, `reading`, or `statement`.
|
|
156
|
+
- `rhythm`: `compact`, `normal`, or `airy`.
|
|
157
|
+
- `overrides`: focused changes to headings, body text, and captions.
|
|
185
158
|
|
|
186
159
|
Example:
|
|
187
160
|
|
|
@@ -196,76 +169,69 @@ typography:
|
|
|
196
169
|
size: medium
|
|
197
170
|
weight: 600
|
|
198
171
|
spacingAfter: 0.55em
|
|
199
|
-
h3:
|
|
200
|
-
size: medium
|
|
201
|
-
spacingBefore: 1.5em
|
|
202
|
-
spacingAfter: 0.5em
|
|
203
172
|
body:
|
|
204
|
-
|
|
173
|
+
size: medium
|
|
205
174
|
lineHeight: 1.55
|
|
206
175
|
```
|
|
207
176
|
|
|
208
|
-
Use `norna typography profiles` to inspect built-in
|
|
209
|
-
|
|
210
|
-
|
|
177
|
+
Use `norna typography profiles` to inspect built-in values and
|
|
178
|
+
`norna typography show` to inspect the resolved site typography. See
|
|
179
|
+
[Typography](typography.md) for every override field.
|
|
211
180
|
|
|
212
181
|
## Palette And Section Surfaces
|
|
213
182
|
|
|
214
|
-
|
|
183
|
+
These root settings are site-wide:
|
|
215
184
|
|
|
216
|
-
- `palette`: `dark`, `light`, or `paper`.
|
|
217
|
-
|
|
218
|
-
- `
|
|
219
|
-
`emphasis`. One value gives every section the same surface. Multiple values
|
|
220
|
-
cycle in the listed order.
|
|
185
|
+
- `palette`: `dark`, `light`, or `paper`.
|
|
186
|
+
- `shape`: `square` or `soft`.
|
|
187
|
+
- `sections.backgroundPattern`: `uniform`, `alternating`, or `cycling`.
|
|
221
188
|
|
|
222
189
|
Example:
|
|
223
190
|
|
|
224
191
|
```yaml
|
|
225
|
-
|
|
226
|
-
|
|
192
|
+
preset: project
|
|
193
|
+
palette: paper
|
|
194
|
+
shape: soft
|
|
195
|
+
sections:
|
|
196
|
+
backgroundPattern: cycling
|
|
227
197
|
```
|
|
228
198
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
Add `theme.yaml` to a route directory when that route should have a different
|
|
232
|
-
visual expression:
|
|
199
|
+
The background pattern uses coordinated surfaces from the active palette. It
|
|
200
|
+
does not let individual sections select arbitrary colors.
|
|
233
201
|
|
|
234
|
-
|
|
235
|
-
site/routes/010-guide/theme.yaml
|
|
236
|
-
```
|
|
202
|
+
## Page Themes
|
|
237
203
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
large configuration:
|
|
204
|
+
Add `theme.yaml` to a non-home page directory only when that page or one of its
|
|
205
|
+
descendants needs a narrower presentation adjustment:
|
|
241
206
|
|
|
242
|
-
```
|
|
243
|
-
|
|
207
|
+
```text
|
|
208
|
+
site/pages/010-guide/theme.yaml
|
|
244
209
|
```
|
|
245
210
|
|
|
246
|
-
|
|
247
|
-
theme selects no top-level preset, omitted values use engine defaults rather
|
|
248
|
-
than values from the root theme. It cannot define navigation identity or
|
|
249
|
-
technical configuration.
|
|
250
|
-
|
|
251
|
-
Section surfaces render as full-width horizontal bands while the section
|
|
252
|
-
content keeps the normal page and image widths. Links keep the palette's global
|
|
253
|
-
accent color.
|
|
211
|
+
A page theme may set only:
|
|
254
212
|
|
|
255
|
-
|
|
213
|
+
- `layout.textWidth`
|
|
214
|
+
- `layout.contentSpacing`
|
|
215
|
+
- managed-image sizing under `images`
|
|
216
|
+
- `sections.backgroundPattern`
|
|
256
217
|
|
|
257
|
-
|
|
218
|
+
For example:
|
|
258
219
|
|
|
259
|
-
|
|
260
|
-
|
|
220
|
+
```yaml
|
|
221
|
+
layout:
|
|
222
|
+
textWidth: narrow
|
|
223
|
+
contentSpacing: compact
|
|
224
|
+
images:
|
|
225
|
+
width: 760px
|
|
226
|
+
sections:
|
|
227
|
+
backgroundPattern: uniform
|
|
228
|
+
```
|
|
261
229
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
necessary because a route theme replaces the root visual theme rather than
|
|
266
|
-
merging with it.
|
|
230
|
+
Page settings are merged with the root theme and inherited by descendant pages.
|
|
231
|
+
A more local page theme may override the same limited fields. Site colors,
|
|
232
|
+
shape, typography, page width, gutters, and navigation remain constant.
|
|
267
233
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
234
|
+
Page themes cannot define `preset`, `palette`, `shape`, `typography`,
|
|
235
|
+
`navigation`, `config.yaml`, or site-wide content. This boundary keeps one
|
|
236
|
+
recognisable site while still allowing a guide, gallery, or reference area to
|
|
237
|
+
use an appropriate reading width and media presentation.
|
package/docs/typography.md
CHANGED
|
@@ -12,7 +12,7 @@ preset: documentation
|
|
|
12
12
|
|
|
13
13
|
Use the nested `typography` block only when those typographic choices need to
|
|
14
14
|
differ from the selected theme preset. Typography is configured at root-theme
|
|
15
|
-
or
|
|
15
|
+
or page-theme level, not in page or section content.
|
|
16
16
|
|
|
17
17
|
## Typography Profiles
|
|
18
18
|
|
|
@@ -25,7 +25,7 @@ Available profiles:
|
|
|
25
25
|
- `reading`: more generous body text for pages where longer text carries
|
|
26
26
|
more of the experience.
|
|
27
27
|
- `statement`: tighter, more declarative line-height for short programmatic
|
|
28
|
-
statements. Use it sparingly, usually as a
|
|
28
|
+
statements. Use it sparingly, usually as a page-level exception.
|
|
29
29
|
|
|
30
30
|
If a complete top-level theme preset is selected, that preset supplies the
|
|
31
31
|
typography choice. If both the top-level preset and nested typography are
|
|
@@ -65,7 +65,7 @@ profiles, rhythms, and overrides have been applied:
|
|
|
65
65
|
norna typography show
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
The output includes the site theme, every page
|
|
68
|
+
The output includes the site theme, every page, and every section. Each
|
|
69
69
|
resolved value shows its `source`; values inherited by a page or section are
|
|
70
70
|
also marked with `inherited: true`.
|
|
71
71
|
|
|
@@ -125,9 +125,9 @@ follows the Markdown level the user wrote: `##` uses `headings.h2`.
|
|
|
125
125
|
`1rem`, or `12px`. Use `em` for spacing that should track the text size.
|
|
126
126
|
|
|
127
127
|
`weight` is a controlled heading weight. Allowed values are `400`, `500`,
|
|
128
|
-
`600`, and `700`.
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
`600`, and `700`. Configure readable line length with `layout.textWidth` in the
|
|
129
|
+
root or page theme; it controls the prose column, not the page's maximum width
|
|
130
|
+
or the width of image blocks.
|
|
131
131
|
|
|
132
132
|
Supported override fields:
|
|
133
133
|
|
|
@@ -143,38 +143,26 @@ Supported override fields:
|
|
|
143
143
|
- `headings.h4.align`, `headings.h4.size`, `headings.h4.weight`,
|
|
144
144
|
`headings.h4.lineHeight`,
|
|
145
145
|
`headings.h4.spacingBefore`, `headings.h4.spacingAfter`
|
|
146
|
-
- `body.align`, `body.size`, `body.
|
|
146
|
+
- `body.align`, `body.size`, `body.lineHeight`,
|
|
147
147
|
`body.paragraphSpacing`
|
|
148
148
|
- `caption.align`, `caption.size`, `caption.lineHeight`,
|
|
149
149
|
`caption.spacingBefore`
|
|
150
150
|
|
|
151
|
-
##
|
|
151
|
+
## Page Text Width
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
Typography itself remains site-wide so pages keep the same font, heading
|
|
154
|
+
hierarchy, and typographic character. A page-local `theme.yaml` may adjust the
|
|
155
|
+
body-text line length when a particular page or subtree needs a narrower or
|
|
156
|
+
wider reading column:
|
|
155
157
|
|
|
156
158
|
```yaml
|
|
157
|
-
# site/
|
|
158
|
-
|
|
159
|
+
# site/pages/010-introduction/theme.yaml
|
|
160
|
+
layout:
|
|
161
|
+
textWidth: narrow
|
|
159
162
|
```
|
|
160
163
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
the root values.
|
|
164
|
+
The page setting is inherited by descendant pages. Page themes cannot select a
|
|
165
|
+
typography profile, rhythm, font family, or heading override.
|
|
164
166
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
```yaml
|
|
169
|
-
# site/routes/010-introduction/theme.yaml
|
|
170
|
-
typography:
|
|
171
|
-
profile: statement
|
|
172
|
-
rhythm: normal
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
Without a top-level theme preset, other omitted route-theme values use engine
|
|
176
|
-
defaults rather than values from the root theme.
|
|
177
|
-
|
|
178
|
-
The `body.width` value controls the prose column independently of the page and
|
|
179
|
-
image widths. Captions are normally centered, but `reading` uses
|
|
180
|
-
left-aligned captions to support longer explanatory text.
|
|
167
|
+
Captions are normally centered, but `reading` uses left-aligned captions to
|
|
168
|
+
support longer explanatory text.
|
package/examples/README.md
CHANGED
|
@@ -7,10 +7,13 @@ documentation workflow.
|
|
|
7
7
|
| Example | Purpose | Live demo | Source |
|
|
8
8
|
| --- | --- | --- | --- |
|
|
9
9
|
| Dog shelter, single page | A coherent homepage made from sections | [Open site](https://janga.github.io/norna/examples/complete-sites/dog-shelter-single-page/) | [View files](complete-sites/dog-shelter-single-page/) |
|
|
10
|
-
| Dog shelter, multi-page | A coherent site with ordered
|
|
11
|
-
|
|
|
10
|
+
| Dog shelter, multi-page | A coherent site with ordered pages and page-local images | [Open site](https://janga.github.io/norna/examples/complete-sites/dog-shelter-multi-page/) | [View files](complete-sites/dog-shelter-multi-page/) |
|
|
11
|
+
| Portfolio preset | Complete `portfolio` preset without overrides | [Open site](https://janga.github.io/norna/examples/feature-demos/theme-preset-portfolio/) | [View files](feature-demos/theme-preset-portfolio/) |
|
|
12
|
+
| Documentation preset | Complete `documentation` preset without overrides | [Open site](https://janga.github.io/norna/examples/feature-demos/theme-preset-documentation/) | [View files](feature-demos/theme-preset-documentation/) |
|
|
13
|
+
| Project preset | Complete `project` preset without overrides | [Open site](https://janga.github.io/norna/examples/feature-demos/theme-preset-project/) | [View files](feature-demos/theme-preset-project/) |
|
|
14
|
+
| Statement preset | Complete `statement` preset without overrides | [Open site](https://janga.github.io/norna/examples/feature-demos/theme-preset-statement/) | [View files](feature-demos/theme-preset-statement/) |
|
|
12
15
|
| Media and surfaces | Image blocks, cards, notes, palettes, and section surfaces | [Open site](https://janga.github.io/norna/examples/feature-demos/media-and-surfaces/) | [View files](feature-demos/media-and-surfaces/) |
|
|
13
|
-
| Sitewide content | Shared
|
|
16
|
+
| Sitewide content | Shared logo settings, banners, and footer content | [Open site](https://janga.github.io/norna/examples/feature-demos/sitewide-content/) | [View files](feature-demos/sitewide-content/) |
|
|
14
17
|
|
|
15
18
|
## Directory Structure
|
|
16
19
|
|
|
@@ -20,7 +23,10 @@ examples/
|
|
|
20
23
|
| |-- dog-shelter-single-page/
|
|
21
24
|
| `-- dog-shelter-multi-page/
|
|
22
25
|
`-- feature-demos/
|
|
23
|
-
|-- theme-
|
|
26
|
+
|-- theme-preset-portfolio/
|
|
27
|
+
|-- theme-preset-documentation/
|
|
28
|
+
|-- theme-preset-project/
|
|
29
|
+
|-- theme-preset-statement/
|
|
24
30
|
|-- media-and-surfaces/
|
|
25
31
|
`-- sitewide-content/
|
|
26
32
|
```
|
|
@@ -2,58 +2,34 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"type": "object",
|
|
4
4
|
"properties": {
|
|
5
|
-
"
|
|
6
|
-
"type": "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
"page": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"description": {
|
|
9
|
+
"description": "Optional page-specific meta description.",
|
|
10
|
+
"type": "string",
|
|
11
|
+
"minLength": 1
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"description": "Optional metadata for this homepage or additional page. The Markdown H1 supplies the page title."
|
|
10
16
|
},
|
|
11
17
|
"navigation": {
|
|
18
|
+
"description": "Optional navigation metadata for this page.",
|
|
12
19
|
"type": "object",
|
|
13
20
|
"properties": {
|
|
14
|
-
"
|
|
21
|
+
"listed": {
|
|
22
|
+
"default": true,
|
|
23
|
+
"description": "List this page in site navigation. The page remains public when false.",
|
|
15
24
|
"type": "boolean"
|
|
16
|
-
},
|
|
17
|
-
"label": {
|
|
18
|
-
"type": "string"
|
|
19
25
|
}
|
|
20
26
|
},
|
|
21
27
|
"additionalProperties": false
|
|
22
28
|
},
|
|
23
|
-
"sections": {
|
|
24
|
-
"default": {},
|
|
25
|
-
"type": "object",
|
|
26
|
-
"propertyNames": {
|
|
27
|
-
"type": "string",
|
|
28
|
-
"pattern": "^[a-z0-9-]+$"
|
|
29
|
-
},
|
|
30
|
-
"additionalProperties": {
|
|
31
|
-
"type": "object",
|
|
32
|
-
"properties": {
|
|
33
|
-
"visible": {
|
|
34
|
-
"type": "object",
|
|
35
|
-
"properties": {
|
|
36
|
-
"from": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
39
|
-
},
|
|
40
|
-
"until": {
|
|
41
|
-
"type": "string",
|
|
42
|
-
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"additionalProperties": false
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"additionalProperties": false
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
29
|
"$schema": {
|
|
52
30
|
"type": "string"
|
|
53
31
|
}
|
|
54
32
|
},
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
"description"
|
|
58
|
-
]
|
|
33
|
+
"additionalProperties": false,
|
|
34
|
+
"description": "Frontmatter for a homepage or additional page content.md file."
|
|
59
35
|
}
|