@janga/norna 0.7.17 → 0.7.22
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 +32 -13
- package/astro.config.mjs +22 -0
- package/bin/norna-cli.mjs +7 -1
- package/package.json +46 -12
- package/schemas/category.schema.json +20 -0
- package/schemas/config.schema.json +55 -4
- package/schemas/content-frontmatter.schema.json +5 -5
- package/schemas/manifest.json +4 -2
- package/schemas/page-theme.schema.json +192 -0
- package/schemas/sitewide-content.schema.json +18 -18
- package/schemas/theme.schema.json +364 -226
- package/scripts/add-site-node.mjs +251 -0
- package/scripts/check-config.mjs +12 -3
- package/scripts/deploy-site.mjs +6 -9
- package/scripts/generate-images.mjs +18 -29
- package/scripts/generate-schemas.mjs +7 -1
- package/scripts/init-site.mjs +35 -0
- package/scripts/lib/astro-command.mjs +14 -9
- package/scripts/lib/editor-language-service.mjs +28 -191
- package/scripts/lib/heading-ids.mjs +3 -1
- package/scripts/lib/navigation-model.mjs +23 -17
- package/scripts/lib/norna-markdown-blocks.mjs +64 -145
- package/scripts/lib/norna-markdown-render-plugin.mjs +37 -0
- package/scripts/lib/object.mjs +28 -0
- package/scripts/lib/page-markdown.mjs +282 -0
- package/scripts/lib/page-model.mjs +26 -7
- package/scripts/lib/presentation-contract.mjs +266 -0
- package/scripts/lib/presentation-palette-metadata.mjs +51 -0
- package/scripts/lib/presentation.mjs +548 -93
- package/scripts/lib/project-config.mjs +73 -16
- package/scripts/lib/schema-definitions.mjs +89 -21
- package/scripts/lib/schema-editor-metadata.mjs +166 -33
- package/scripts/lib/schema-value-definitions.mjs +32 -4
- package/scripts/lib/site-content.mjs +33 -223
- package/scripts/lib/site-conventions.mjs +1 -0
- package/scripts/lib/site-paths.mjs +11 -6
- package/scripts/lib/site-structure.mjs +189 -0
- package/scripts/lib/theme-config.mjs +3 -2
- package/scripts/lib/theme-presets.mjs +105 -101
- package/scripts/lib/theme-profiles.mjs +221 -0
- package/scripts/lib/typography.mjs +220 -35
- package/scripts/lib/yaml-config.mjs +46 -6
- package/scripts/lib/yaml-indentation.mjs +86 -0
- package/scripts/show-typography.mjs +3 -36
- package/scripts/sync-content-sections.mjs +88 -79
- package/src/components/DisplaySettings.astro +107 -0
- package/src/components/ImageCarousel.astro +34 -13
- package/src/components/NavigationPageTree.astro +154 -34
- package/src/components/PageContentsLinks.astro +40 -0
- package/src/components/SectionNavigationScript.astro +68 -7
- package/src/components/SiteBreadcrumbs.astro +24 -18
- package/src/components/SiteNavigation.astro +130 -46
- package/src/components/SitePage.astro +65 -55
- package/src/components/SiteSection.astro +37 -198
- package/src/components/SiteTreeNavigation.astro +36 -0
- package/src/components/TreeNavigationScript.astro +83 -0
- package/src/content.config.ts +2 -8
- package/src/layouts/BaseLayout.astro +52 -2
- package/src/lib/generatedImages.ts +0 -7
- package/src/lib/pageThemes.ts +11 -9
- package/src/lib/readerPreferencesScript.mjs +141 -0
- package/src/lib/sectionContent.ts +120 -206
- package/src/lib/siteNavigation.ts +38 -19
- package/src/lib/sitePages.ts +115 -33
- package/src/pages/[...slug].astro +2 -2
- package/src/pages/index.astro +2 -1
- package/src/styles/global.css +1110 -279
- package/starters/basic/README.md +8 -8
- package/starters/basic/site/theme.yaml +1 -105
- package/docs/README.md +0 -135
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +0 -189
- package/docs/configuration.md +0 -119
- package/docs/content.md +0 -342
- package/docs/design/command-organization.md +0 -414
- package/docs/design/navigation-and-theme-plan.md +0 -115
- package/docs/design/norna-diagram-design.md +0 -159
- package/docs/design/site-examples-structure.md +0 -115
- package/docs/engine-development.md +0 -218
- package/docs/getting-started.md +0 -206
- package/docs/how-to/embedded-site.md +0 -35
- package/docs/images-and-metadata.md +0 -186
- package/docs/local-development.md +0 -82
- package/docs/pages.md +0 -134
- package/docs/public-files.md +0 -118
- package/docs/publishing.md +0 -117
- package/docs/requirements.md +0 -54
- package/docs/site-files.md +0 -145
- package/docs/sitewide-content.md +0 -73
- package/docs/theme.md +0 -271
- package/docs/typography.md +0 -180
- package/examples/README.md +0 -43
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +0 -35
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +0 -97
- package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +0 -852
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +0 -4
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +0 -183
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +0 -8
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +0 -13
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +0 -36
- package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +0 -5
- package/examples/complete-sites/dog-shelter-multi-page/.astro/types.d.ts +0 -2
- package/examples/complete-sites/dog-shelter-multi-page/README.md +0 -24
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +0 -74
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/package.json +0 -3
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +0 -98
- package/examples/complete-sites/dog-shelter-multi-page/site/config.yaml +0 -1
- package/examples/complete-sites/dog-shelter-multi-page/site/content.md +0 -23
- package/examples/complete-sites/dog-shelter-multi-page/site/images/shelter-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/content.md +0 -21
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rex.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rover.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/content.md +0 -22
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/images/adoption-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +0 -10
- package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +0 -9
- package/examples/complete-sites/dog-shelter-multi-page/site/public/robots.txt +0 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +0 -4
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.yaml +0 -1
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +0 -35
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +0 -97
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +0 -852
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +0 -4
- package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +0 -1
- package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +0 -183
- package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +0 -1
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +0 -8
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +0 -13
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +0 -18
- package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +0 -5
- package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +0 -2
- package/examples/complete-sites/dog-shelter-single-page/README.md +0 -24
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +0 -74
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +0 -3
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +0 -50
- package/examples/complete-sites/dog-shelter-single-page/site/config.yaml +0 -1
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +0 -37
- package/examples/complete-sites/dog-shelter-single-page/site/images/foster-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/images/rescue-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +0 -10
- package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +0 -9
- package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +0 -2
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +0 -4
- package/examples/complete-sites/dog-shelter-single-page/site/theme.yaml +0 -1
- package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +0 -35
- package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +0 -97
- package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +0 -852
- package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +0 -4
- package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +0 -1
- package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +0 -183
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +0 -1
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +0 -14
- package/examples/feature-demos/media-and-surfaces/.astro/settings.json +0 -5
- package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +0 -2
- package/examples/feature-demos/media-and-surfaces/README.md +0 -21
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +0 -80
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +0 -1389
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +0 -3
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
- package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +0 -66
- package/examples/feature-demos/media-and-surfaces/site/config.yaml +0 -1
- package/examples/feature-demos/media-and-surfaces/site/content.md +0 -15
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/content.md +0 -71
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-carousel.svg +0 -11
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-stack.svg +0 -9
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-surfaces.svg +0 -8
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-one.svg +0 -8
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-three.svg +0 -13
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-two.svg +0 -8
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-one.svg +0 -8
- package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-two.svg +0 -9
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +0 -41
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -3
- package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +0 -2
- package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
- package/examples/feature-demos/media-and-surfaces/site/theme.yaml +0 -1
- package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +0 -59
- package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +0 -138
- package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +0 -755
- package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +0 -1
- package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +0 -1
- package/examples/feature-demos/sitewide-content/.astro/content.d.ts +0 -183
- package/examples/feature-demos/sitewide-content/.astro/data-store.json +0 -1
- package/examples/feature-demos/sitewide-content/.astro/dev.json +0 -13
- package/examples/feature-demos/sitewide-content/.astro/dev.log +0 -18
- package/examples/feature-demos/sitewide-content/.astro/settings.json +0 -5
- package/examples/feature-demos/sitewide-content/.astro/types.d.ts +0 -2
- package/examples/feature-demos/sitewide-content/README.md +0 -26
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +0 -74
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +0 -3
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
- package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +0 -1
- package/examples/feature-demos/sitewide-content/site/config.yaml +0 -1
- package/examples/feature-demos/sitewide-content/site/content.md +0 -17
- package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +0 -17
- package/examples/feature-demos/sitewide-content/site/pages/020-notices/content.md +0 -23
- package/examples/feature-demos/sitewide-content/site/pages/030-footer/content.md +0 -18
- package/examples/feature-demos/sitewide-content/site/public/logo.svg +0 -6
- package/examples/feature-demos/sitewide-content/site/public/robots.txt +0 -2
- package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +0 -14
- package/examples/feature-demos/sitewide-content/site/theme.yaml +0 -1
- package/examples/feature-demos/theme-presets/.astro/collections/routeTheme.schema.json +0 -746
- package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +0 -59
- package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +0 -138
- package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +0 -755
- package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +0 -4
- package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +0 -1
- package/examples/feature-demos/theme-presets/.astro/content.d.ts +0 -183
- package/examples/feature-demos/theme-presets/.astro/data-store.json +0 -1
- package/examples/feature-demos/theme-presets/.astro/dev-local.json +0 -8
- package/examples/feature-demos/theme-presets/.astro/dev.json +0 -15
- package/examples/feature-demos/theme-presets/.astro/dev.log +0 -164
- package/examples/feature-demos/theme-presets/.astro/settings.json +0 -5
- package/examples/feature-demos/theme-presets/.astro/types.d.ts +0 -2
- package/examples/feature-demos/theme-presets/README.md +0 -18
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/_metadata.json +0 -80
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +0 -1389
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +0 -3
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
- package/examples/feature-demos/theme-presets/site/config.yaml +0 -1
- package/examples/feature-demos/theme-presets/site/content.md +0 -14
- package/examples/feature-demos/theme-presets/site/pages/010-portfolio/content.md +0 -31
- package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/puppy-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/shepherd-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/white-puppy.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/010-portfolio/theme.yaml +0 -1
- package/examples/feature-demos/theme-presets/site/pages/020-documentation/content.md +0 -30
- package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/black-schnauzer.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/retriever-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/schnauzer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/020-documentation/theme.yaml +0 -1
- package/examples/feature-demos/theme-presets/site/pages/030-project/content.md +0 -31
- package/examples/feature-demos/theme-presets/site/pages/030-project/images/boxer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/030-project/images/grass-puppy.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/030-project/images/grey-street-dog.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/030-project/theme.yaml +0 -1
- package/examples/feature-demos/theme-presets/site/pages/040-statement/content.md +0 -31
- package/examples/feature-demos/theme-presets/site/pages/040-statement/images/black-pedigree.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/040-statement/images/sheepdog-grass.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/040-statement/images/sheepdog-wide.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/pages/040-statement/theme.yaml +0 -1
- package/examples/feature-demos/theme-presets/site/public/robots.txt +0 -2
- package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +0 -3
- package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
- package/fixtures/basic/site/.norna/generated-images.json +0 -1
- package/fixtures/basic/site/config.yaml +0 -1
- package/fixtures/basic/site/content.md +0 -14
- package/fixtures/basic/site/public/robots.txt +0 -2
- package/fixtures/basic/site/sitewide-content.yaml +0 -3
- package/fixtures/basic/site/theme.yaml +0 -8
- package/fixtures/content-model-v2/.astro/collections/site.schema.json +0 -776
- package/fixtures/content-model-v2/.astro/collections/theme.schema.json +0 -668
- package/fixtures/content-model-v2/.astro/content-assets.mjs +0 -4
- package/fixtures/content-model-v2/.astro/content-modules.mjs +0 -1
- package/fixtures/content-model-v2/.astro/content.d.ts +0 -175
- package/fixtures/content-model-v2/.astro/data-store.json +0 -1
- package/fixtures/content-model-v2/.astro/dev-local.json +0 -8
- package/fixtures/content-model-v2/.astro/dev.json +0 -13
- package/fixtures/content-model-v2/.astro/dev.log +0 -231
- package/fixtures/content-model-v2/.astro/settings.json +0 -5
- package/fixtures/content-model-v2/.astro/types.d.ts +0 -2
- package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
- package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +0 -1
- package/fixtures/content-model-v2/dist/guide/index.html +0 -3
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
- package/fixtures/content-model-v2/dist/index.html +0 -8
- package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +0 -80
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
- package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +0 -1389
- package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
- package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
- package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +0 -3
- package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
- package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
- package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
- package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
- package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
- package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/fixtures/content-model-v2/site/.norna/generated-images.json +0 -210
- package/fixtures/content-model-v2/site/config.yaml +0 -1
- package/fixtures/content-model-v2/site/content.md +0 -79
- package/fixtures/content-model-v2/site/images/adopt.svg +0 -9
- package/fixtures/content-model-v2/site/images/detail.jpg +0 -0
- package/fixtures/content-model-v2/site/images/duplicate.jpg +0 -0
- package/fixtures/content-model-v2/site/images/foster.svg +0 -12
- package/fixtures/content-model-v2/site/images/hero.jpg +0 -0
- package/fixtures/content-model-v2/site/images/image.jpg +0 -0
- package/fixtures/content-model-v2/site/images/slide-one.jpg +0 -0
- package/fixtures/content-model-v2/site/images/slide-three.jpg +0 -0
- package/fixtures/content-model-v2/site/images/slide-two.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/010-guide/content.md +0 -18
- package/fixtures/content-model-v2/site/pages/010-guide/images/duplicate.jpg +0 -0
- package/fixtures/content-model-v2/site/theme.yaml +0 -4
- package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
- package/fixtures/nested-pages/site/config.yaml +0 -1
- package/fixtures/nested-pages/site/content.md +0 -15
- package/fixtures/nested-pages/site/pages/010-guides/content.md +0 -15
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +0 -21
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +0 -21
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +0 -14
- package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
- package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -3
- package/fixtures/nested-pages/site/pages/020-reference/content.md +0 -10
- package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +0 -11
- package/fixtures/nested-pages/site/theme.yaml +0 -3
- package/scripts/build-pages.mjs +0 -69
- package/scripts/lib/example-sites.mjs +0 -37
- package/scripts/lib/frontmatter-yaml.mjs +0 -113
- package/scripts/lib/git-status.mjs +0 -7
- package/scripts/release.mjs +0 -153
- package/scripts/test-banner-visibility.mjs +0 -80
- package/scripts/test-ci-lockfile.mjs +0 -65
- package/scripts/test-cli-discovery.mjs +0 -124
- package/scripts/test-client-javascript.mjs +0 -218
- package/scripts/test-content-check.mjs +0 -621
- package/scripts/test-content-model-v2.mjs +0 -1629
- package/scripts/test-documentation.mjs +0 -187
- package/scripts/test-editor-language-service.mjs +0 -302
- package/scripts/test-engine-commands.mjs +0 -204
- package/scripts/test-examples.mjs +0 -24
- package/scripts/test-heading-ids.mjs +0 -68
- package/scripts/test-navigation-model.mjs +0 -63
- package/scripts/test-navigation-preview.mjs +0 -108
- package/scripts/test-navigation.mjs +0 -148
- package/scripts/test-nested-pages.mjs +0 -110
- package/scripts/test-package-check.mjs +0 -531
- package/scripts/test-page-model.mjs +0 -80
- package/scripts/test-project-config.mjs +0 -144
- package/scripts/test-schemas.mjs +0 -154
- package/scripts/test-site-public.mjs +0 -85
- package/scripts/test-theme-presets.mjs +0 -182
- package/src/components/SiteNotesScript.astro +0 -43
- package/starters/basic/site/images/.gitkeep +0 -1
- package/starters/project/.github/workflows/deploy.yml +0 -64
- package/starters/project/README.md +0 -84
- package/starters/project/package-lock.json +0 -4296
- package/starters/project/package.json +0 -37
- package/starters/project/site/config.yaml +0 -1
- package/starters/project/site/content.md +0 -119
- package/starters/project/site/pages/010-guide/content.md +0 -80
- package/starters/project/site/public/robots.txt +0 -2
- package/starters/project/site/sitewide-content.yaml +0 -3
- package/starters/project/site/theme.yaml +0 -31
- package/tsconfig.json +0 -5
- /package/starters/basic/site/{content.md → pages/000-home/content.md} +0 -0
- /package/{fixtures/basic/site → starters/basic/site/pages/000-home}/images/.gitkeep +0 -0
package/docs/site-files.md
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
# Site Files
|
|
2
|
-
|
|
3
|
-
Norna expects a defined set of files and directories. Their names and locations
|
|
4
|
-
are part of the site model: following the structure lets Norna find content,
|
|
5
|
-
presentation, configuration, pages, and assets without path configuration.
|
|
6
|
-
|
|
7
|
-
The selected site directory is `site/` by default:
|
|
8
|
-
|
|
9
|
-
```text
|
|
10
|
-
site/
|
|
11
|
-
|-- config.yaml
|
|
12
|
-
|-- theme.yaml
|
|
13
|
-
|-- sitewide-content.yaml
|
|
14
|
-
|-- content.md
|
|
15
|
-
|-- images/
|
|
16
|
-
| `-- image.jpg
|
|
17
|
-
|-- pages/
|
|
18
|
-
| `-- <NNN-page-id>/
|
|
19
|
-
| |-- content.md
|
|
20
|
-
| |-- theme.yaml
|
|
21
|
-
| `-- images/
|
|
22
|
-
| `-- image.jpg
|
|
23
|
-
|-- public/
|
|
24
|
-
`-- .norna/
|
|
25
|
-
|-- generated-images.json
|
|
26
|
-
`-- public/
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
File and directory names shown literally above must use that exact lowercase
|
|
30
|
-
spelling. This keeps sites portable between case-sensitive and
|
|
31
|
-
case-insensitive file systems.
|
|
32
|
-
|
|
33
|
-
## Root Files
|
|
34
|
-
|
|
35
|
-
| Path | Required | Responsibility |
|
|
36
|
-
| --- | --- | --- |
|
|
37
|
-
| `config.yaml` | Yes | Public URL, language, and browser scroll behavior. |
|
|
38
|
-
| `theme.yaml` | Yes | Complete visual preset and optional focused overrides. |
|
|
39
|
-
| `sitewide-content.yaml` | No | Shared logo display settings, banners, and footer. |
|
|
40
|
-
| `content.md` | Yes | Homepage title, optional metadata, sections, prose, and Norna blocks. |
|
|
41
|
-
|
|
42
|
-
These responsibilities are deliberately separate:
|
|
43
|
-
|
|
44
|
-
- [`config.yaml`](configuration.md) contains the few technical settings that
|
|
45
|
-
apply to the whole site.
|
|
46
|
-
- [`theme.yaml`](theme.md) controls presentation. A normal file can contain
|
|
47
|
-
only a preset selection.
|
|
48
|
-
- [`sitewide-content.yaml`](sitewide-content.md) contains editorial material
|
|
49
|
-
shared by every page.
|
|
50
|
-
- [`content.md`](content.md) is the homepage file and remains ordinary
|
|
51
|
-
Markdown. YAML frontmatter is optional.
|
|
52
|
-
|
|
53
|
-
Pages cannot provide `config.yaml` or `sitewide-content.yaml`. Technical
|
|
54
|
-
configuration and shared logo, banner, and footer settings have one site-wide
|
|
55
|
-
source.
|
|
56
|
-
|
|
57
|
-
## Images
|
|
58
|
-
|
|
59
|
-
Managed homepage images belong in:
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
site/images/
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
All managed images used by the homepage share this directory. Markdown blocks
|
|
66
|
-
refer to managed images by filename, not by path. See
|
|
67
|
-
[Images and Metadata](images-and-metadata.md) for supported formats, generated
|
|
68
|
-
variants, and syncing.
|
|
69
|
-
|
|
70
|
-
## Pages
|
|
71
|
-
|
|
72
|
-
Each first-level page is one directory under `pages/`:
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
site/pages/010-guide/
|
|
76
|
-
|-- content.md
|
|
77
|
-
|-- theme.yaml
|
|
78
|
-
`-- images/
|
|
79
|
-
`-- image.jpg
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
`content.md` is required for a page. The optional page `theme.yaml` replaces
|
|
83
|
-
the root visual theme for that page. Page images live directly in that page's
|
|
84
|
-
`images/` directory.
|
|
85
|
-
|
|
86
|
-
The three-digit page prefix controls navigation order and is not part of the
|
|
87
|
-
URL. See [Pages](pages.md) for exact directory-name and page-id rules.
|
|
88
|
-
|
|
89
|
-
## Public Files
|
|
90
|
-
|
|
91
|
-
`site/public/` contains static files copied without image processing. Most
|
|
92
|
-
names are site-owned, but Norna recognizes a small set of exact conventional
|
|
93
|
-
filenames for the navigation logo and browser icons.
|
|
94
|
-
|
|
95
|
-
See [Public Files](public-files.md) for navigation-logo and browser-icon
|
|
96
|
-
filenames, GitHub Pages `CNAME`, arbitrary static files, root-relative links,
|
|
97
|
-
and publishing paths.
|
|
98
|
-
|
|
99
|
-
## Selecting The Site Directory
|
|
100
|
-
|
|
101
|
-
Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select a site directory
|
|
102
|
-
explicitly.
|
|
103
|
-
|
|
104
|
-
Without an explicit selection, Norna first accepts the current directory when
|
|
105
|
-
it contains both `config.yaml` and `content.md`. Otherwise it walks upward until
|
|
106
|
-
it finds a default `site/` directory containing those two files.
|
|
107
|
-
|
|
108
|
-
## Versioned Files
|
|
109
|
-
|
|
110
|
-
Version the source files above together with:
|
|
111
|
-
|
|
112
|
-
- `site/.norna/generated-images.json`, which records reusable managed-image
|
|
113
|
-
output;
|
|
114
|
-
- `.github/workflows/deploy.yml`, when using the included GitHub Pages
|
|
115
|
-
publishing integration;
|
|
116
|
-
- `package.json` and `package-lock.json`, which pin the local Norna engine and
|
|
117
|
-
project scripts.
|
|
118
|
-
|
|
119
|
-
Source images and files under `site/public/` are also versioned site input.
|
|
120
|
-
|
|
121
|
-
## Generated Files
|
|
122
|
-
|
|
123
|
-
Do not edit these by hand:
|
|
124
|
-
|
|
125
|
-
- `site/.norna/public/`: build-preparation output copied from `site/public/`,
|
|
126
|
-
plus generated or copied managed images;
|
|
127
|
-
- `dist/`: final static website output;
|
|
128
|
-
- `.astro/`: Astro cache, generated types, and local dev-server state.
|
|
129
|
-
|
|
130
|
-
`norna site:public` removes stale copied static files from
|
|
131
|
-
`site/.norna/public/` while preserving managed image output under its `images/`
|
|
132
|
-
directory.
|
|
133
|
-
|
|
134
|
-
## Engine Repository Layout
|
|
135
|
-
|
|
136
|
-
These directories belong to the Norna engine repository, not to an ordinary
|
|
137
|
-
site:
|
|
138
|
-
|
|
139
|
-
- `bin/`: the launcher and public CLI dispatcher;
|
|
140
|
-
- `scripts/`: validation, image, preview, publishing, and test tools;
|
|
141
|
-
- `src/`: the Astro renderer, components, styles, and content schema;
|
|
142
|
-
- `starters/`: source copied by `norna init`;
|
|
143
|
-
- `examples/`: complete sites and focused feature demonstrations;
|
|
144
|
-
- `fixtures/`: engine regression input;
|
|
145
|
-
- root `site/`: the Norna introduction and documentation site.
|
package/docs/sitewide-content.md
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# `sitewide-content.yaml`
|
|
2
|
-
|
|
3
|
-
`site/sitewide-content.yaml` is optional. It contains editorial content and
|
|
4
|
-
optional logo display settings shared by every page: banners, footer, and an
|
|
5
|
-
optional navigation-logo height override.
|
|
6
|
-
|
|
7
|
-
The file contains plain YAML without Markdown frontmatter delimiters. Page
|
|
8
|
-
sections do not belong here; they remain in each page's `content.md`.
|
|
9
|
-
|
|
10
|
-
## Navigation Logo
|
|
11
|
-
|
|
12
|
-
A logo file is discovered from `site/public/`; no path or site name is
|
|
13
|
-
configured here. The logo links to the homepage, and its alternative text
|
|
14
|
-
comes from the homepage Markdown H1 in `site/content.md`.
|
|
15
|
-
|
|
16
|
-
Add `logo` only to override the discovered file's displayed height:
|
|
17
|
-
|
|
18
|
-
```yaml
|
|
19
|
-
logo:
|
|
20
|
-
height: 2.6rem
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The logo width follows the file's intrinsic aspect ratio. See
|
|
24
|
-
[Public Files: Navigation Logo](public-files.md#navigation-logo) for exact
|
|
25
|
-
filenames, placement, portability, and validation rules.
|
|
26
|
-
|
|
27
|
-
The logo is a separate home link and does not have a section menu. In a
|
|
28
|
-
multi-page site, the homepage remains the first ordinary navigation item, uses
|
|
29
|
-
its Markdown H1 as its label, and exposes its sections in the same way as
|
|
30
|
-
pages. Page content and page themes cannot replace the shared logo setting.
|
|
31
|
-
|
|
32
|
-
## Banners
|
|
33
|
-
|
|
34
|
-
Use `banners` for short notices shown above page content on every page. List
|
|
35
|
-
order controls presentation order. Each banner needs a unique lowercase `id`,
|
|
36
|
-
a title, and text:
|
|
37
|
-
|
|
38
|
-
```yaml
|
|
39
|
-
banners:
|
|
40
|
-
- id: project-status
|
|
41
|
-
tone: warning
|
|
42
|
-
visible:
|
|
43
|
-
from: "2026-08-01"
|
|
44
|
-
until: "2026-09-01"
|
|
45
|
-
title: Experimental code
|
|
46
|
-
text: Not for production use.
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`tone` currently supports `warning`. `visible` is optional. `from` is inclusive
|
|
50
|
-
and `until` is exclusive; both use `YYYY-MM-DD`, and either may be omitted.
|
|
51
|
-
|
|
52
|
-
Visitors can dismiss each active banner. Dismissal state is stored locally in
|
|
53
|
-
the browser and tied to the banner content, so an edited banner can appear
|
|
54
|
-
again. Keep banners concise; they are rendered as compact one-line notices and
|
|
55
|
-
may use an ellipsis when space is limited.
|
|
56
|
-
|
|
57
|
-
## Footer
|
|
58
|
-
|
|
59
|
-
The footer can contain copyright or ownership text and optional generated build
|
|
60
|
-
information:
|
|
61
|
-
|
|
62
|
-
```yaml
|
|
63
|
-
footer:
|
|
64
|
-
copyrightMessage: (c) Example Owner.
|
|
65
|
-
buildInfo: true
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Set `buildInfo` to `true` to show the generated build date and time. Norna uses
|
|
69
|
-
the site's configured language, a compact format, and UTC. If both copyright
|
|
70
|
-
text and build information are absent, no footer is rendered.
|
|
71
|
-
|
|
72
|
-
See [Site Files](site-files.md) for where this optional file belongs in the
|
|
73
|
-
complete site model.
|
package/docs/theme.md
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
# Theme
|
|
2
|
-
|
|
3
|
-
`site/theme.yaml` defines the site-wide visual theme for a Norna site. It is a
|
|
4
|
-
required plain YAML file. The normal setup selects one complete theme preset
|
|
5
|
-
and adds only focused overrides when needed.
|
|
6
|
-
|
|
7
|
-
An optional `theme.yaml` inside a page directory replaces the root visual
|
|
8
|
-
theme for that page. Navigation-logo display settings remain site-wide and
|
|
9
|
-
belong in `sitewide-content.yaml`.
|
|
10
|
-
|
|
11
|
-
## Theme Presets
|
|
12
|
-
|
|
13
|
-
Available complete theme presets are:
|
|
14
|
-
|
|
15
|
-
- `portfolio`: restrained typography and a broad image area for image-led
|
|
16
|
-
presentation.
|
|
17
|
-
- `documentation`: reading-focused typography, a paper palette, and compact
|
|
18
|
-
structural rhythm.
|
|
19
|
-
- `project`: compact layout and a light presentation for project and product
|
|
20
|
-
sites.
|
|
21
|
-
- `statement`: airy spacing and stronger typography for short editorial
|
|
22
|
-
content.
|
|
23
|
-
|
|
24
|
-
A normal `theme.yaml` can be only:
|
|
25
|
-
|
|
26
|
-
```yaml
|
|
27
|
-
preset: documentation
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Each preset supplies coordinated values for:
|
|
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.
|
|
40
|
-
|
|
41
|
-
## Overrides
|
|
42
|
-
|
|
43
|
-
Values written beside the top-level preset override only that part of the
|
|
44
|
-
preset. Other preset values remain active:
|
|
45
|
-
|
|
46
|
-
```yaml
|
|
47
|
-
preset: documentation
|
|
48
|
-
layout:
|
|
49
|
-
pageWidth: 1320px
|
|
50
|
-
palette: dark
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Nested objects are merged by key. `sectionSurfaces` replaces the preset array
|
|
54
|
-
when it is specified.
|
|
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.
|
|
60
|
-
|
|
61
|
-
## Export A Preset
|
|
62
|
-
|
|
63
|
-
Export the installed definition of a preset before choosing overrides:
|
|
64
|
-
|
|
65
|
-
```sh
|
|
66
|
-
norna theme:export documentation
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
In a generated site, the equivalent npm command is:
|
|
70
|
-
|
|
71
|
-
```sh
|
|
72
|
-
npm run norna:theme:export -- documentation
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
The command creates `site/orig-documentation-theme.yaml`, or the corresponding
|
|
76
|
-
path under the selected site directory. The file contains the preset values,
|
|
77
|
-
comments describing accepted alternatives, and an example of a fine-grained
|
|
78
|
-
typography override.
|
|
79
|
-
|
|
80
|
-
Norna never loads `orig-*-theme.yaml`; only `theme.yaml` is active. The export
|
|
81
|
-
command refuses to overwrite an existing reference file.
|
|
82
|
-
|
|
83
|
-
Page titles and site navigation are not part of the visual theme. Define
|
|
84
|
-
optional logo display settings in `site/sitewide-content.yaml`; see
|
|
85
|
-
[Sitewide Content](sitewide-content.md).
|
|
86
|
-
|
|
87
|
-
## Layout
|
|
88
|
-
|
|
89
|
-
`layout` is optional. It controls the outer page geometry:
|
|
90
|
-
|
|
91
|
-
- `pageWidth`: maximum width of the main page content area.
|
|
92
|
-
- `gutter`: side margin removed from the viewport before available content
|
|
93
|
-
width is calculated. Use either one CSS length for all viewports or
|
|
94
|
-
`desktop` / `mobile` values.
|
|
95
|
-
- `density`: default structural spacing profile. Allowed values are `compact`,
|
|
96
|
-
`normal`, and `airy`.
|
|
97
|
-
- `spacing`: optional spacing overrides for sections and content blocks. Every
|
|
98
|
-
spacing value accepts either one CSS length for all viewports or `desktop` /
|
|
99
|
-
`mobile` values.
|
|
100
|
-
|
|
101
|
-
Example:
|
|
102
|
-
|
|
103
|
-
```yaml
|
|
104
|
-
layout:
|
|
105
|
-
density: normal
|
|
106
|
-
pageWidth: 1180px
|
|
107
|
-
gutter:
|
|
108
|
-
desktop: clamp(1.25rem, 4vw, 3rem)
|
|
109
|
-
mobile: 1rem
|
|
110
|
-
spacing:
|
|
111
|
-
firstSectionTop:
|
|
112
|
-
desktop: clamp(1.875rem, 3vw, 2.75rem)
|
|
113
|
-
mobile: 1.375rem
|
|
114
|
-
sectionGap:
|
|
115
|
-
desktop: clamp(1.4rem, 3vw, 2.75rem)
|
|
116
|
-
mobile: 1.5rem
|
|
117
|
-
headingToBlock:
|
|
118
|
-
desktop: 0.75em
|
|
119
|
-
mobile: 0.7em
|
|
120
|
-
blockGap:
|
|
121
|
-
desktop: 1.5em
|
|
122
|
-
mobile: 1.25em
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
If omitted, Norna uses `1180px` for `pageWidth`, desktop
|
|
126
|
-
`clamp(1.25rem, 4vw, 3rem)` for `gutter`, mobile `1rem`, and `normal` layout
|
|
127
|
-
density.
|
|
128
|
-
|
|
129
|
-
Spacing keys:
|
|
130
|
-
|
|
131
|
-
- `firstSectionTop`: space above the first section heading.
|
|
132
|
-
- `sectionGap`: space above each following section.
|
|
133
|
-
- `finalSectionBottom`: space below the final section.
|
|
134
|
-
- `headingToBlock`: space between a section heading and its first visual content
|
|
135
|
-
block, such as an image stack, carousel, or card list.
|
|
136
|
-
- `blockGap`: space between content blocks in a section. It applies between
|
|
137
|
-
Markdown, image, carousel, and card-list blocks, but not after the final block.
|
|
138
|
-
- `imageGap`: space between stacked images or carousel blocks.
|
|
139
|
-
|
|
140
|
-
The default `compact`, `normal`, and `airy` density profiles provide values for
|
|
141
|
-
these spacing keys. The `em` values for `headingToBlock` and `blockGap` are
|
|
142
|
-
relative to the relevant text size, so the rhythm follows typography changes.
|
|
143
|
-
Use `sectionGap` and the other structural keys when the distance should describe
|
|
144
|
-
the page layout rather than the size of nearby text.
|
|
145
|
-
|
|
146
|
-
Text-near spacing inside Markdown, such as spacing after headings, spacing
|
|
147
|
-
before Markdown subheadings, paragraph spacing, and caption spacing, belongs to
|
|
148
|
-
`typography.rhythm` and typography overrides.
|
|
149
|
-
|
|
150
|
-
## Image Sizing
|
|
151
|
-
|
|
152
|
-
`images` is optional. It controls managed image sizing:
|
|
153
|
-
|
|
154
|
-
- `width`: hard maximum rendered image area width for images, captions, and
|
|
155
|
-
aligned text.
|
|
156
|
-
- `maxAvailableWidthPercent`: maximum share of available width after gutters.
|
|
157
|
-
- `maxAvailableHeightPercent`: maximum share of viewport height used by
|
|
158
|
-
images.
|
|
159
|
-
|
|
160
|
-
Example:
|
|
161
|
-
|
|
162
|
-
```yaml
|
|
163
|
-
images:
|
|
164
|
-
width: 900px
|
|
165
|
-
maxAvailableWidthPercent:
|
|
166
|
-
desktop: 100
|
|
167
|
-
mobile: 100
|
|
168
|
-
maxAvailableHeightPercent:
|
|
169
|
-
desktop: 74
|
|
170
|
-
mobile: 68
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
If omitted, Norna uses `900px`, full available width, and image height limits of
|
|
174
|
-
desktop `74` / mobile `68`.
|
|
175
|
-
|
|
176
|
-
## Typography
|
|
177
|
-
|
|
178
|
-
Top-level `typography` is the site-wide typographic base. It supports:
|
|
179
|
-
|
|
180
|
-
- `fontFamily`: global CSS font-family stack.
|
|
181
|
-
- `profile`: built-in typography profile.
|
|
182
|
-
- `rhythm`: text-near spacing profile. Allowed values are `compact`,
|
|
183
|
-
`normal`, and `airy`.
|
|
184
|
-
- `overrides`: focused changes to preset values.
|
|
185
|
-
|
|
186
|
-
Example:
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
typography:
|
|
190
|
-
fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
|
|
191
|
-
profile: reading
|
|
192
|
-
rhythm: normal
|
|
193
|
-
overrides:
|
|
194
|
-
headings:
|
|
195
|
-
h2:
|
|
196
|
-
size: medium
|
|
197
|
-
weight: 600
|
|
198
|
-
spacingAfter: 0.55em
|
|
199
|
-
h3:
|
|
200
|
-
size: medium
|
|
201
|
-
spacingBefore: 1.5em
|
|
202
|
-
spacingAfter: 0.5em
|
|
203
|
-
body:
|
|
204
|
-
width: narrow
|
|
205
|
-
lineHeight: 1.55
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
Use `norna typography profiles` to inspect built-in profile and rhythm values,
|
|
209
|
-
and `norna typography show` to inspect the resolved typography for the
|
|
210
|
-
selected site. See [Typography](typography.md).
|
|
211
|
-
|
|
212
|
-
## Palette And Section Surfaces
|
|
213
|
-
|
|
214
|
-
`palette` and `sectionSurfaces` are optional top-level theme settings:
|
|
215
|
-
|
|
216
|
-
- `palette`: `dark`, `light`, or `paper`. It coordinates page, navigation,
|
|
217
|
-
footer, and section colors.
|
|
218
|
-
- `sectionSurfaces`: one to three unique values chosen from `base`, `soft`, and
|
|
219
|
-
`emphasis`. One value gives every section the same surface. Multiple values
|
|
220
|
-
cycle in the listed order.
|
|
221
|
-
|
|
222
|
-
Example:
|
|
223
|
-
|
|
224
|
-
```yaml
|
|
225
|
-
palette: paper # Alternatives: dark, light
|
|
226
|
-
sectionSurfaces: [base, soft, emphasis]
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Page Themes
|
|
230
|
-
|
|
231
|
-
Add `theme.yaml` to a page directory when that page should have a different
|
|
232
|
-
visual expression:
|
|
233
|
-
|
|
234
|
-
```text
|
|
235
|
-
site/pages/010-guide/theme.yaml
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
The page theme uses the same visual schema and complete presets as the root
|
|
239
|
-
theme. A page can therefore select a different expression without repeating a
|
|
240
|
-
large configuration:
|
|
241
|
-
|
|
242
|
-
```yaml
|
|
243
|
-
preset: statement
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
It completely replaces the root visual theme for that page. If the page
|
|
247
|
-
theme selects no top-level preset, omitted values use engine defaults rather
|
|
248
|
-
than values from the root theme. It cannot define navigation-logo settings 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.
|
|
254
|
-
|
|
255
|
-
## Common Questions
|
|
256
|
-
|
|
257
|
-
### Should every page select its own preset?
|
|
258
|
-
|
|
259
|
-
No. A page without its own `theme.yaml` inherits the root theme, which is the
|
|
260
|
-
normal choice when the site should keep one visual expression.
|
|
261
|
-
|
|
262
|
-
Add a page theme only when the page should intentionally look different. If
|
|
263
|
-
the page should keep the same preset but demonstrate a focused change, repeat
|
|
264
|
-
the root preset in the page theme and override only that setting. This is
|
|
265
|
-
necessary because a page theme replaces the root visual theme rather than
|
|
266
|
-
merging with it.
|
|
267
|
-
|
|
268
|
-
For example, a page demonstrating section surfaces may keep `preset: project`
|
|
269
|
-
and change only `sectionSurfaces`. A page demonstrating image or content
|
|
270
|
-
blocks should normally inherit the root preset so that the blocks remain the
|
|
271
|
-
only variable being compared.
|
package/docs/typography.md
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
# Typography
|
|
2
|
-
|
|
3
|
-
Norna typography is configured in `site/theme.yaml` through a site-wide font,
|
|
4
|
-
profile, text rhythm, and optional overrides.
|
|
5
|
-
|
|
6
|
-
The normal workflow is to select a complete top-level theme preset. It already
|
|
7
|
-
chooses a coordinated font, typography profile, and rhythm:
|
|
8
|
-
|
|
9
|
-
```yaml
|
|
10
|
-
preset: documentation
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Use the nested `typography` block only when those typographic choices need to
|
|
14
|
-
differ from the selected theme preset. Typography is configured at root-theme
|
|
15
|
-
or page-theme level, not in page or section content.
|
|
16
|
-
|
|
17
|
-
## Typography Profiles
|
|
18
|
-
|
|
19
|
-
Available profiles:
|
|
20
|
-
|
|
21
|
-
- `restrained`: the default for image-led sites. Text is restrained and
|
|
22
|
-
supports the images without dominating the page.
|
|
23
|
-
- `dense`: tighter typography for many sections, many images, or
|
|
24
|
-
short information blocks.
|
|
25
|
-
- `reading`: more generous body text for pages where longer text carries
|
|
26
|
-
more of the experience.
|
|
27
|
-
- `statement`: tighter, more declarative line-height for short programmatic
|
|
28
|
-
statements. Use it sparingly, usually as a page-level exception.
|
|
29
|
-
|
|
30
|
-
If a complete top-level theme preset is selected, that preset supplies the
|
|
31
|
-
typography choice. If both the top-level preset and nested typography are
|
|
32
|
-
omitted, the engine default is `restrained`.
|
|
33
|
-
|
|
34
|
-
Profiles define alignment, size, weight, and line height for `headings.h1`
|
|
35
|
-
through `headings.h4`, `body`, and `caption`. They also choose a readable body
|
|
36
|
-
text width. Built-in presets use `medium` as the default size for every text
|
|
37
|
-
role. Visual heading hierarchy comes from the Markdown heading level, so `h1`
|
|
38
|
-
is larger than `h2`, `h2` is larger than `h3`, and so on.
|
|
39
|
-
|
|
40
|
-
The profiles use these controls deliberately:
|
|
41
|
-
|
|
42
|
-
- `restrained` uses restrained heading weights and a normal reading width.
|
|
43
|
-
- `dense` uses stronger headings and a wider text column for short,
|
|
44
|
-
scannable content.
|
|
45
|
-
- `reading` uses a narrower reading width and more generous body line
|
|
46
|
-
height.
|
|
47
|
-
- `statement` uses the strongest heading weights and a narrow text column for
|
|
48
|
-
short, declarative content.
|
|
49
|
-
|
|
50
|
-
`rhythm` defines text-near spacing for headings, paragraphs, and captions.
|
|
51
|
-
Available rhythms are `compact`, `normal`, and `airy`. Built-in rhythm values
|
|
52
|
-
use `em` so spacing follows the rendered text size.
|
|
53
|
-
|
|
54
|
-
Use this command to inspect the exact profile and rhythm values shipped with
|
|
55
|
-
the installed engine:
|
|
56
|
-
|
|
57
|
-
```sh
|
|
58
|
-
norna typography profiles
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Use this command to inspect the effective values for the selected site after
|
|
62
|
-
profiles, rhythms, and overrides have been applied:
|
|
63
|
-
|
|
64
|
-
```sh
|
|
65
|
-
norna typography show
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
The output includes the site theme, every page, and every section. Each
|
|
69
|
-
resolved value shows its `source`; values inherited by a page or section are
|
|
70
|
-
also marked with `inherited: true`.
|
|
71
|
-
|
|
72
|
-
## Configuration Shape
|
|
73
|
-
|
|
74
|
-
```yaml
|
|
75
|
-
typography:
|
|
76
|
-
fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
|
|
77
|
-
profile: restrained
|
|
78
|
-
rhythm: normal
|
|
79
|
-
overrides:
|
|
80
|
-
headings:
|
|
81
|
-
h2:
|
|
82
|
-
size: medium
|
|
83
|
-
weight: 600
|
|
84
|
-
spacingAfter: 0.55em
|
|
85
|
-
h3:
|
|
86
|
-
size: medium
|
|
87
|
-
spacingBefore: 1.5em
|
|
88
|
-
spacingAfter: 0.5em
|
|
89
|
-
body:
|
|
90
|
-
width: narrow
|
|
91
|
-
paragraphSpacing: 0.8em
|
|
92
|
-
caption:
|
|
93
|
-
spacingBefore: 0.5em
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
The typographic roles are:
|
|
97
|
-
|
|
98
|
-
- `headings.h1`: reserved for page-level Markdown `#` headings if the content
|
|
99
|
-
model starts supporting them.
|
|
100
|
-
- `headings.h2`: Markdown `##` section headings.
|
|
101
|
-
- `headings.h3`: Markdown `###` subheadings inside section body text.
|
|
102
|
-
- `headings.h4`: Markdown `####` subheadings inside section body text.
|
|
103
|
-
- `body`: Markdown body text inside sections.
|
|
104
|
-
- `caption`: image captions.
|
|
105
|
-
|
|
106
|
-
Allowed alignment values are `left`, `center`, and `right`. Alignment can be
|
|
107
|
-
responsive:
|
|
108
|
-
|
|
109
|
-
```yaml
|
|
110
|
-
align:
|
|
111
|
-
desktop: left
|
|
112
|
-
mobile: center
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Allowed size values are `small`, `medium`, `large`, and `xlarge`. `medium` is
|
|
116
|
-
the normal reading size. Use `small` for quieter supporting text, and use
|
|
117
|
-
`large` or `xlarge` only when a page or section needs stronger emphasis.
|
|
118
|
-
Each heading level uses its own scale but follows the same principle:
|
|
119
|
-
`medium` is the normal size for that level. Norna may render the first section
|
|
120
|
-
heading as an HTML `h1` for document structure, but its visual typography still
|
|
121
|
-
follows the Markdown level the user wrote: `##` uses `headings.h2`.
|
|
122
|
-
|
|
123
|
-
`lineHeight` is a unitless number from `1` through `3`. `spacingBefore`,
|
|
124
|
-
`spacingAfter`, and `paragraphSpacing` are CSS lengths such as `0`, `0.8em`,
|
|
125
|
-
`1rem`, or `12px`. Use `em` for spacing that should track the text size.
|
|
126
|
-
|
|
127
|
-
`weight` is a controlled heading weight. Allowed values are `400`, `500`,
|
|
128
|
-
`600`, and `700`. `body.width` is the readable text width and accepts
|
|
129
|
-
`narrow`, `normal`, or `wide`. It controls the prose column, not the page's
|
|
130
|
-
maximum width or the width of image blocks.
|
|
131
|
-
|
|
132
|
-
Supported override fields:
|
|
133
|
-
|
|
134
|
-
- `headings.h1.align`, `headings.h1.size`, `headings.h1.weight`,
|
|
135
|
-
`headings.h1.lineHeight`,
|
|
136
|
-
`headings.h1.spacingBefore`, `headings.h1.spacingAfter`
|
|
137
|
-
- `headings.h2.align`, `headings.h2.size`, `headings.h2.weight`,
|
|
138
|
-
`headings.h2.lineHeight`,
|
|
139
|
-
`headings.h2.spacingBefore`, `headings.h2.spacingAfter`
|
|
140
|
-
- `headings.h3.align`, `headings.h3.size`, `headings.h3.weight`,
|
|
141
|
-
`headings.h3.lineHeight`,
|
|
142
|
-
`headings.h3.spacingBefore`, `headings.h3.spacingAfter`
|
|
143
|
-
- `headings.h4.align`, `headings.h4.size`, `headings.h4.weight`,
|
|
144
|
-
`headings.h4.lineHeight`,
|
|
145
|
-
`headings.h4.spacingBefore`, `headings.h4.spacingAfter`
|
|
146
|
-
- `body.align`, `body.size`, `body.width`, `body.lineHeight`,
|
|
147
|
-
`body.paragraphSpacing`
|
|
148
|
-
- `caption.align`, `caption.size`, `caption.lineHeight`,
|
|
149
|
-
`caption.spacingBefore`
|
|
150
|
-
|
|
151
|
-
## Page Themes
|
|
152
|
-
|
|
153
|
-
The simplest page-specific typography change is to select a complete theme
|
|
154
|
-
preset:
|
|
155
|
-
|
|
156
|
-
```yaml
|
|
157
|
-
# site/pages/010-introduction/theme.yaml
|
|
158
|
-
preset: statement
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
A page-local `theme.yaml` replaces the root visual theme rather than inheriting
|
|
162
|
-
from it. The complete preset supplies a coherent page theme without repeating
|
|
163
|
-
the root values.
|
|
164
|
-
|
|
165
|
-
Use a nested typography choice when only the typographic character needs to be
|
|
166
|
-
specified explicitly:
|
|
167
|
-
|
|
168
|
-
```yaml
|
|
169
|
-
# site/pages/010-introduction/theme.yaml
|
|
170
|
-
typography:
|
|
171
|
-
profile: statement
|
|
172
|
-
rhythm: normal
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
Without a top-level theme preset, other omitted page-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.
|