@janga/norna 0.7.17 → 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 +15 -6
- package/bin/norna-cli.mjs +1 -1
- package/docs/README.md +11 -9
- package/docs/configuration.md +25 -2
- package/docs/content.md +21 -12
- package/docs/design/navigation-and-theme-plan.md +90 -19
- package/docs/design/site-examples-structure.md +7 -3
- package/docs/engine-development.md +19 -22
- package/docs/getting-started.md +3 -3
- package/docs/images-and-metadata.md +6 -4
- package/docs/pages.md +120 -64
- package/docs/public-files.md +1 -1
- package/docs/site-files.md +36 -29
- package/docs/sitewide-content.md +1 -1
- package/docs/theme.md +107 -141
- package/docs/typography.md +15 -27
- package/examples/README.md +8 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +5 -5
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +10 -10
- package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +35 -43
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +2 -1
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -3
- 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/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +1 -1
- 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/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +1 -1
- 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/pages/030-project → theme-preset-project/site/pages/000-home}/content.md +1 -1
- 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/pages/040-statement → theme-preset-statement/site/pages/000-home}/content.md +1 -1
- 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/theme.yaml +1 -8
- 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/config.yaml +2 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +4 -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/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 -3
- package/fixtures/nested-pages/site/theme.yaml +1 -3
- package/package.json +2 -1
- package/schemas/config.schema.json +45 -4
- package/schemas/content-frontmatter.schema.json +5 -5
- package/schemas/manifest.json +3 -2
- package/schemas/page-theme.schema.json +192 -0
- package/schemas/sitewide-content.schema.json +17 -17
- package/schemas/theme.schema.json +188 -216
- package/scripts/check-config.mjs +2 -1
- package/scripts/deploy-site.mjs +1 -1
- package/scripts/generate-images.mjs +7 -14
- package/scripts/generate-schemas.mjs +4 -1
- package/scripts/lib/editor-language-service.mjs +0 -14
- package/scripts/lib/example-sites.mjs +15 -3
- package/scripts/lib/page-model.mjs +26 -7
- package/scripts/lib/presentation.mjs +25 -17
- package/scripts/lib/project-config.mjs +26 -16
- package/scripts/lib/schema-definitions.mjs +42 -14
- package/scripts/lib/schema-editor-metadata.mjs +70 -26
- package/scripts/lib/schema-value-definitions.mjs +14 -0
- package/scripts/lib/site-content.mjs +50 -25
- package/scripts/lib/site-conventions.mjs +1 -0
- package/scripts/lib/site-paths.mjs +9 -3
- package/scripts/lib/theme-config.mjs +3 -2
- package/scripts/lib/theme-presets.mjs +54 -21
- package/scripts/show-typography.mjs +1 -33
- package/scripts/sync-content-sections.mjs +1 -3
- package/scripts/test-banner-visibility.mjs +2 -2
- package/scripts/test-client-javascript.mjs +11 -4
- package/scripts/test-content-check.mjs +25 -25
- package/scripts/test-content-model-v2.mjs +165 -101
- package/scripts/test-documentation.mjs +4 -2
- package/scripts/test-editor-language-service.mjs +11 -8
- package/scripts/test-engine-commands.mjs +5 -5
- package/scripts/test-examples.mjs +30 -1
- package/scripts/test-heading-ids.mjs +2 -2
- package/scripts/test-navigation.mjs +11 -2
- package/scripts/test-nested-pages.mjs +25 -10
- package/scripts/test-package-check.mjs +29 -60
- package/scripts/test-page-model.mjs +30 -2
- package/scripts/test-project-config.mjs +5 -10
- package/scripts/test-schemas.mjs +18 -3
- package/scripts/test-theme-presets.mjs +33 -27
- package/src/components/NavigationPageTree.astro +114 -25
- package/src/components/PageContentsLinks.astro +40 -0
- package/src/components/SectionNavigationScript.astro +12 -5
- package/src/components/SiteBreadcrumbs.astro +17 -14
- package/src/components/SiteNavigation.astro +45 -12
- package/src/components/SitePage.astro +37 -23
- package/src/components/SiteSection.astro +2 -7
- package/src/components/SiteTreeNavigation.astro +35 -0
- package/src/components/TreeNavigationScript.astro +83 -0
- package/src/content.config.ts +2 -8
- package/src/layouts/BaseLayout.astro +10 -0
- package/src/lib/pageThemes.ts +11 -9
- package/src/lib/sectionContent.ts +1 -5
- package/src/lib/siteNavigation.ts +2 -1
- package/src/lib/sitePages.ts +25 -14
- package/src/pages/index.astro +2 -1
- package/src/styles/global.css +411 -43
- package/starters/basic/README.md +7 -7
- package/starters/basic/site/theme.yaml +1 -105
- package/starters/project/README.md +8 -8
- package/starters/project/site/theme.yaml +1 -31
- 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 -14
- package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
- /package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/{images → pages/000-home/images}/shelter-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/foster-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/rescue-dog.jpg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/feature-demos/sitewide-content/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/black-schnauzer.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/retriever-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-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 → theme-preset-documentation}/site/sitewide-content.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/puppy-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/shepherd-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/white-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/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/pages/030-project → theme-preset-project/site/pages/000-home}/images/boxer-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grass-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grey-street-dog.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/black-pedigree.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-grass.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-wide.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
- /package/fixtures/basic/site/{content.md → pages/000-home/content.md} +0 -0
- /package/fixtures/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
- /package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/adopt.svg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/detail.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/duplicate.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/foster.svg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/hero.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/image.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-one.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-three.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-two.jpg +0 -0
- /package/fixtures/nested-pages/site/{content.md → pages/000-home/content.md} +0 -0
- /package/starters/basic/site/{content.md → pages/000-home/content.md} +0 -0
- /package/starters/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
- /package/starters/project/site/{content.md → pages/000-home/content.md} +0 -0
package/docs/pages.md
CHANGED
|
@@ -1,32 +1,77 @@
|
|
|
1
1
|
# Pages
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
URLs.
|
|
3
|
+
Every Norna page is a directory under `site/pages/` with its own `content.md`.
|
|
4
|
+
The same model is used for the homepage, top-level areas, and nested pages.
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
```text
|
|
7
|
+
site/pages/
|
|
8
|
+
|-- 000-home/
|
|
9
|
+
| `-- content.md
|
|
10
|
+
|-- 010-guides/
|
|
11
|
+
| |-- content.md
|
|
12
|
+
| `-- pages/
|
|
13
|
+
| `-- 010-installation/
|
|
14
|
+
| `-- content.md
|
|
15
|
+
`-- 020-reference/
|
|
16
|
+
`-- content.md
|
|
17
|
+
```
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
directories cannot contain `config.yaml` or `sitewide-content.yaml`; technical
|
|
15
|
-
configuration and shared logo, banner, and footer settings remain at the
|
|
16
|
-
selected site's top level.
|
|
19
|
+
Pages use the same Markdown H1, optional metadata, sections, Norna blocks, and
|
|
20
|
+
managed-image model. See [Content](content.md) for what belongs inside
|
|
21
|
+
`content.md`.
|
|
17
22
|
|
|
18
|
-
##
|
|
23
|
+
## Homepage And Top-Level Pages
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
The homepage is required at:
|
|
21
26
|
|
|
22
27
|
```text
|
|
23
|
-
|
|
28
|
+
site/pages/000-home/content.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
It builds to `/`. The `000` prefix is reserved for `000-home`, and Home cannot
|
|
32
|
+
contain a nested `pages/` directory. Home is the site's front door, not the
|
|
33
|
+
parent of every page.
|
|
34
|
+
|
|
35
|
+
Other directories directly under `site/pages/` are top-level navigation roots.
|
|
36
|
+
For example, `site/pages/010-guides/content.md` builds to `/guides/`. Place
|
|
37
|
+
further pages under the nearest meaningful non-home page.
|
|
38
|
+
|
|
39
|
+
## Nested Pages
|
|
40
|
+
|
|
41
|
+
A page may contain a `pages/` directory:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
site/pages/010-guides/
|
|
45
|
+
|-- content.md
|
|
46
|
+
`-- pages/
|
|
47
|
+
`-- 020-workflows/
|
|
48
|
+
|-- content.md
|
|
49
|
+
`-- pages/
|
|
50
|
+
`-- 010-local/
|
|
51
|
+
`-- content.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This produces:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
/guides/
|
|
58
|
+
/guides/workflows/
|
|
59
|
+
/guides/workflows/local/
|
|
24
60
|
```
|
|
25
61
|
|
|
26
|
-
|
|
27
|
-
`
|
|
62
|
+
Each directory in the chain is a real page and therefore needs its own
|
|
63
|
+
`content.md`. Empty grouping directories are not part of the page model.
|
|
28
64
|
|
|
29
|
-
|
|
65
|
+
## Directory Names, Order, And URLs
|
|
66
|
+
|
|
67
|
+
Page directories use:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
NNN-page-id
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`NNN` is a three-digit sibling presentation order. `page-id` becomes that
|
|
74
|
+
page's URL segment. Valid ordinary page names include:
|
|
30
75
|
|
|
31
76
|
```text
|
|
32
77
|
010-getting-started
|
|
@@ -34,11 +79,11 @@ Valid examples:
|
|
|
34
79
|
120-api-reference
|
|
35
80
|
```
|
|
36
81
|
|
|
37
|
-
Invalid
|
|
82
|
+
Invalid names include:
|
|
38
83
|
|
|
39
84
|
```text
|
|
40
85
|
10-about
|
|
41
|
-
000-
|
|
86
|
+
000-about
|
|
42
87
|
010_About
|
|
43
88
|
010-About
|
|
44
89
|
010-about-
|
|
@@ -46,89 +91,100 @@ Invalid examples:
|
|
|
46
91
|
```
|
|
47
92
|
|
|
48
93
|
The page id may contain only lowercase `a-z`, numbers, and single hyphens
|
|
49
|
-
between alphanumeric groups. The numeric prefix is not part of the
|
|
50
|
-
|
|
94
|
+
between alphanumeric groups. The numeric prefix is not part of the URL.
|
|
95
|
+
Renaming `030-contact/` to `015-contact/` changes its order among siblings but
|
|
96
|
+
keeps the URL segment `contact`.
|
|
51
97
|
|
|
52
|
-
|
|
53
|
-
|
|
98
|
+
Sibling page ids and numeric orders must be unique. Reusing the same id below a
|
|
99
|
+
different parent is valid because the complete URL remains different.
|
|
54
100
|
|
|
55
|
-
## Page
|
|
56
|
-
|
|
57
|
-
Add a first-level page by creating:
|
|
58
|
-
|
|
59
|
-
```text
|
|
60
|
-
site/pages/010-about/content.md
|
|
61
|
-
```
|
|
101
|
+
## Page Content
|
|
62
102
|
|
|
63
|
-
|
|
103
|
+
A minimal page is ordinary Markdown:
|
|
64
104
|
|
|
65
105
|
```md
|
|
66
106
|
---
|
|
67
107
|
page:
|
|
68
|
-
description:
|
|
108
|
+
description: Installation instructions.
|
|
69
109
|
---
|
|
70
110
|
|
|
71
|
-
#
|
|
111
|
+
# Installation
|
|
72
112
|
|
|
73
113
|
Introductory text.
|
|
74
114
|
|
|
75
|
-
##
|
|
115
|
+
## Requirements {#requirements}
|
|
76
116
|
|
|
77
117
|
Text...
|
|
78
118
|
```
|
|
79
119
|
|
|
80
|
-
The
|
|
120
|
+
The H1 supplies the visible page title, document title, and navigation label.
|
|
121
|
+
`page.description` is optional metadata and is not rendered. H2 and H3 headings
|
|
122
|
+
provide page-local navigation according to the selected navigation model.
|
|
81
123
|
|
|
82
124
|
## Navigation
|
|
83
125
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
link; it does not replace the homepage item or own a section menu.
|
|
126
|
+
Home and listed top-level pages appear in global navigation. Child pages appear
|
|
127
|
+
in the local hierarchy for their top-level area. Breadcrumbs show actual parent
|
|
128
|
+
pages; Home is not added as an artificial ancestor.
|
|
88
129
|
|
|
89
|
-
`navigation`
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
public while excluding it from site navigation.
|
|
130
|
+
The numeric prefix controls order among siblings. Set `navigation.listed` to
|
|
131
|
+
`false` in a non-home page's frontmatter when the page should remain public but
|
|
132
|
+
not appear in generated navigation:
|
|
93
133
|
|
|
94
134
|
```yaml
|
|
95
135
|
navigation:
|
|
96
136
|
listed: false
|
|
97
137
|
```
|
|
98
138
|
|
|
99
|
-
|
|
100
|
-
|
|
139
|
+
Home is always listed. By default, Norna chooses navigation from the site
|
|
140
|
+
structure:
|
|
101
141
|
|
|
102
|
-
|
|
103
|
-
|
|
142
|
+
- one listed page uses section navigation;
|
|
143
|
+
- a shallow hierarchy uses top navigation;
|
|
144
|
+
- deeper page or heading hierarchies use tree navigation.
|
|
104
145
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- If a site needs many pages, deeply nested pages, or several navigation
|
|
109
|
-
levels, it has probably outgrown the current sticky-navigation model and may
|
|
110
|
-
need a different site structure or navigation system.
|
|
146
|
+
The site-wide `navigation.mode` in `config.yaml` can explicitly select
|
|
147
|
+
`automatic`, `sections`, `top`, or `tree`. See
|
|
148
|
+
[Configuration](configuration.md#navigation).
|
|
111
149
|
|
|
112
150
|
## Page Images
|
|
113
151
|
|
|
114
|
-
|
|
152
|
+
Managed images belong directly to the page that references them:
|
|
115
153
|
|
|
116
154
|
```text
|
|
117
|
-
site/pages/010-
|
|
155
|
+
site/pages/010-guides/pages/020-workflows/images/diagram.svg
|
|
118
156
|
```
|
|
119
157
|
|
|
120
|
-
|
|
158
|
+
The Markdown block still uses only the filename:
|
|
121
159
|
|
|
122
160
|
````md
|
|
123
161
|
```norna-image-stack
|
|
124
|
-
- image:
|
|
125
|
-
alt:
|
|
162
|
+
- image: diagram.svg
|
|
163
|
+
alt: The local workflow.
|
|
126
164
|
```
|
|
127
165
|
````
|
|
128
166
|
|
|
129
|
-
|
|
130
|
-
`norna content:check` to find missing or misplaced images and
|
|
167
|
+
Run `norna content:check` to find missing or misplaced images and
|
|
131
168
|
`norna content:sync` to move unambiguous files into the expected page image
|
|
132
|
-
root.
|
|
133
|
-
|
|
134
|
-
|
|
169
|
+
root. Cross-page writes require a clean Git working tree and never guess when a
|
|
170
|
+
filename has multiple possible sources.
|
|
171
|
+
|
|
172
|
+
## Page Themes
|
|
173
|
+
|
|
174
|
+
The root `site/theme.yaml` owns the site's visual identity: preset, palette,
|
|
175
|
+
shape, typography, page frame, and navigation presentation.
|
|
176
|
+
|
|
177
|
+
An optional page-local `theme.yaml` may adjust only:
|
|
178
|
+
|
|
179
|
+
- `layout.textWidth`
|
|
180
|
+
- `layout.contentSpacing`
|
|
181
|
+
- managed-image sizing under `images`
|
|
182
|
+
- `sections.backgroundPattern`
|
|
183
|
+
|
|
184
|
+
These values are inherited by descendant pages and merged with more local page
|
|
185
|
+
settings. Page themes cannot select presets or change site colors, fonts,
|
|
186
|
+
shape, page width, gutters, or navigation. See [Theme](theme.md#page-themes).
|
|
187
|
+
|
|
188
|
+
Page directories also cannot contain `config.yaml` or
|
|
189
|
+
`sitewide-content.yaml`; technical configuration and shared editorial content
|
|
190
|
+
remain at the selected site's top level.
|
package/docs/public-files.md
CHANGED
|
@@ -24,7 +24,7 @@ enable it separately. Use the exact lowercase filename to keep the site
|
|
|
24
24
|
portable between case-sensitive and case-insensitive file systems.
|
|
25
25
|
|
|
26
26
|
The logo links to the homepage. Its alternative text comes from the homepage
|
|
27
|
-
Markdown H1 in `site/content.md`; no separate site name or logo alt text is
|
|
27
|
+
Markdown H1 in `site/pages/000-home/content.md`; no separate site name or logo alt text is
|
|
28
28
|
configured.
|
|
29
29
|
|
|
30
30
|
Configure top-level `logo` in `site/sitewide-content.yaml` only when you need
|
package/docs/site-files.md
CHANGED
|
@@ -11,15 +11,19 @@ site/
|
|
|
11
11
|
|-- config.yaml
|
|
12
12
|
|-- theme.yaml
|
|
13
13
|
|-- sitewide-content.yaml
|
|
14
|
-
|-- content.md
|
|
15
|
-
|-- images/
|
|
16
|
-
| `-- image.jpg
|
|
17
14
|
|-- pages/
|
|
18
|
-
|
|
|
15
|
+
| |-- 000-home/
|
|
16
|
+
| | |-- content.md
|
|
17
|
+
| | `-- images/
|
|
18
|
+
| | `-- image.jpg
|
|
19
|
+
| `-- 010-guide/
|
|
19
20
|
| |-- content.md
|
|
20
21
|
| |-- theme.yaml
|
|
21
|
-
|
|
|
22
|
-
|
|
|
22
|
+
| |-- images/
|
|
23
|
+
| | `-- image.jpg
|
|
24
|
+
| `-- pages/
|
|
25
|
+
| `-- 010-installation/
|
|
26
|
+
| `-- content.md
|
|
23
27
|
|-- public/
|
|
24
28
|
`-- .norna/
|
|
25
29
|
|-- generated-images.json
|
|
@@ -37,7 +41,7 @@ case-insensitive file systems.
|
|
|
37
41
|
| `config.yaml` | Yes | Public URL, language, and browser scroll behavior. |
|
|
38
42
|
| `theme.yaml` | Yes | Complete visual preset and optional focused overrides. |
|
|
39
43
|
| `sitewide-content.yaml` | No | Shared logo display settings, banners, and footer. |
|
|
40
|
-
| `
|
|
44
|
+
| `pages/` | Yes | Homepage, top-level pages, and nested page hierarchies. |
|
|
41
45
|
|
|
42
46
|
These responsibilities are deliberately separate:
|
|
43
47
|
|
|
@@ -47,44 +51,47 @@ These responsibilities are deliberately separate:
|
|
|
47
51
|
only a preset selection.
|
|
48
52
|
- [`sitewide-content.yaml`](sitewide-content.md) contains editorial material
|
|
49
53
|
shared by every page.
|
|
50
|
-
- [`content.md`](content.md) is the homepage
|
|
51
|
-
Markdown. YAML frontmatter is optional.
|
|
54
|
+
- [`pages/000-home/content.md`](content.md) is the required homepage and remains
|
|
55
|
+
ordinary Markdown. YAML frontmatter is optional.
|
|
52
56
|
|
|
53
57
|
Pages cannot provide `config.yaml` or `sitewide-content.yaml`. Technical
|
|
54
58
|
configuration and shared logo, banner, and footer settings have one site-wide
|
|
55
59
|
source.
|
|
56
60
|
|
|
57
|
-
##
|
|
61
|
+
## Pages
|
|
58
62
|
|
|
59
|
-
|
|
63
|
+
Every page is represented by a directory containing `content.md`. The homepage
|
|
64
|
+
is the one reserved page:
|
|
60
65
|
|
|
61
66
|
```text
|
|
62
|
-
site/
|
|
67
|
+
site/pages/000-home/content.md
|
|
63
68
|
```
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
variants, and syncing.
|
|
69
|
-
|
|
70
|
-
## Pages
|
|
71
|
-
|
|
72
|
-
Each first-level page is one directory under `pages/`:
|
|
70
|
+
It maps to `/`, cannot contain child pages, and appears first in global
|
|
71
|
+
navigation. Other directories directly under `site/pages/` are top-level page
|
|
72
|
+
roots:
|
|
73
73
|
|
|
74
74
|
```text
|
|
75
75
|
site/pages/010-guide/
|
|
76
76
|
|-- content.md
|
|
77
77
|
|-- theme.yaml
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
|-- images/
|
|
79
|
+
| `-- image.jpg
|
|
80
|
+
`-- pages/
|
|
81
|
+
`-- 010-installation/
|
|
82
|
+
|-- content.md
|
|
83
|
+
`-- images/
|
|
84
|
+
`-- diagram.svg
|
|
80
85
|
```
|
|
81
86
|
|
|
82
|
-
`
|
|
83
|
-
|
|
84
|
-
`
|
|
87
|
+
Nested `pages/` directories create child pages and may continue to further
|
|
88
|
+
depths. Each page owns its optional `images/` directory. A page-local
|
|
89
|
+
`theme.yaml` may adjust a limited set of presentation properties and is inherited
|
|
90
|
+
by descendants; site colors, typography, shape, and navigation remain global.
|
|
85
91
|
|
|
86
|
-
The three-digit page prefix controls navigation order and is not part
|
|
87
|
-
URL. See [Pages](pages.md) for
|
|
92
|
+
The three-digit page prefix controls sibling navigation order and is not part
|
|
93
|
+
of the URL. See [Pages](pages.md) for hierarchy, URL, navigation, and page-theme
|
|
94
|
+
rules. See [Images and Metadata](images-and-metadata.md) for managed files.
|
|
88
95
|
|
|
89
96
|
## Public Files
|
|
90
97
|
|
|
@@ -102,8 +109,8 @@ Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select a site directory
|
|
|
102
109
|
explicitly.
|
|
103
110
|
|
|
104
111
|
Without an explicit selection, Norna first accepts the current directory when
|
|
105
|
-
it contains
|
|
106
|
-
it finds a default `site/` directory containing those
|
|
112
|
+
it contains `config.yaml` and `pages/000-home/content.md`. Otherwise it walks
|
|
113
|
+
upward until it finds a default `site/` directory containing those markers.
|
|
107
114
|
|
|
108
115
|
## Versioned Files
|
|
109
116
|
|
package/docs/sitewide-content.md
CHANGED
|
@@ -11,7 +11,7 @@ sections do not belong here; they remain in each page's `content.md`.
|
|
|
11
11
|
|
|
12
12
|
A logo file is discovered from `site/public/`; no path or site name is
|
|
13
13
|
configured here. The logo links to the homepage, and its alternative text
|
|
14
|
-
comes from the homepage Markdown H1 in `site/content.md`.
|
|
14
|
+
comes from the homepage Markdown H1 in `site/pages/000-home/content.md`.
|
|
15
15
|
|
|
16
16
|
Add `logo` only to override the discovered file's displayed height:
|
|
17
17
|
|