@janga/norna 0.7.18 → 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 +22 -12
- package/astro.config.mjs +22 -0
- package/bin/norna-cli.mjs +6 -0
- package/package.json +45 -12
- package/schemas/category.schema.json +20 -0
- package/schemas/config.schema.json +16 -6
- package/schemas/content-frontmatter.schema.json +5 -5
- package/schemas/manifest.json +2 -1
- package/schemas/page-theme.schema.json +22 -22
- package/schemas/sitewide-content.schema.json +18 -18
- package/schemas/theme.schema.json +312 -146
- package/scripts/add-site-node.mjs +251 -0
- package/scripts/check-config.mjs +10 -2
- package/scripts/deploy-site.mjs +5 -8
- package/scripts/generate-images.mjs +11 -15
- package/scripts/generate-schemas.mjs +4 -1
- package/scripts/init-site.mjs +35 -0
- package/scripts/lib/astro-command.mjs +14 -9
- package/scripts/lib/editor-language-service.mjs +28 -177
- 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/presentation-contract.mjs +266 -0
- package/scripts/lib/presentation-palette-metadata.mjs +51 -0
- package/scripts/lib/presentation.mjs +526 -79
- package/scripts/lib/project-config.mjs +53 -6
- package/scripts/lib/schema-definitions.mjs +53 -13
- package/scripts/lib/schema-editor-metadata.mjs +107 -18
- package/scripts/lib/schema-value-definitions.mjs +24 -10
- package/scripts/lib/site-content.mjs +23 -238
- package/scripts/lib/site-paths.mjs +2 -3
- package/scripts/lib/site-structure.mjs +189 -0
- package/scripts/lib/theme-presets.mjs +75 -104
- 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 +2 -3
- package/scripts/sync-content-sections.mjs +87 -76
- package/src/components/DisplaySettings.astro +107 -0
- package/src/components/ImageCarousel.astro +34 -13
- package/src/components/NavigationPageTree.astro +74 -43
- package/src/components/SectionNavigationScript.astro +56 -2
- package/src/components/SiteBreadcrumbs.astro +15 -12
- package/src/components/SiteNavigation.astro +92 -41
- package/src/components/SitePage.astro +35 -39
- package/src/components/SiteSection.astro +35 -191
- package/src/components/SiteTreeNavigation.astro +10 -9
- package/src/layouts/BaseLayout.astro +46 -6
- package/src/lib/generatedImages.ts +0 -7
- package/src/lib/readerPreferencesScript.mjs +141 -0
- package/src/lib/sectionContent.ts +119 -201
- package/src/lib/siteNavigation.ts +36 -18
- package/src/lib/sitePages.ts +91 -20
- package/src/pages/[...slug].astro +2 -2
- package/src/styles/global.css +759 -296
- package/starters/basic/README.md +2 -2
- package/docs/README.md +0 -137
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +0 -189
- package/docs/configuration.md +0 -142
- package/docs/content.md +0 -351
- package/docs/design/command-organization.md +0 -414
- package/docs/design/navigation-and-theme-plan.md +0 -186
- package/docs/design/norna-diagram-design.md +0 -159
- package/docs/design/site-examples-structure.md +0 -119
- package/docs/engine-development.md +0 -215
- package/docs/getting-started.md +0 -206
- package/docs/how-to/embedded-site.md +0 -35
- package/docs/images-and-metadata.md +0 -188
- package/docs/local-development.md +0 -82
- package/docs/pages.md +0 -190
- 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 -152
- package/docs/sitewide-content.md +0 -73
- package/docs/theme.md +0 -237
- package/docs/typography.md +0 -168
- package/examples/README.md +0 -49
- 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/pages/000-home/content.md +0 -23
- package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/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/pages/000-home/content.md +0 -37
- package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/foster-dog.jpg +0 -0
- package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/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 -844
- 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/pages/000-home/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 -42
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -2
- 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/pages/000-home/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-preset-documentation/README.md +0 -16
- package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +0 -74
- package/examples/feature-demos/theme-preset-documentation/site/config.yaml +0 -1
- package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/content.md +0 -30
- package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/black-schnauzer.jpg +0 -0
- package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/retriever-portrait.jpg +0 -0
- package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/schnauzer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-preset-documentation/site/public/robots.txt +0 -2
- package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +0 -3
- package/examples/feature-demos/theme-preset-documentation/site/theme.yaml +0 -1
- package/examples/feature-demos/theme-preset-portfolio/README.md +0 -16
- package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +0 -74
- package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +0 -1
- package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/content.md +0 -31
- package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/puppy-portrait.jpg +0 -0
- package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/shepherd-portrait.jpg +0 -0
- package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/white-puppy.jpg +0 -0
- package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +0 -2
- package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +0 -3
- package/examples/feature-demos/theme-preset-portfolio/site/theme.yaml +0 -1
- package/examples/feature-demos/theme-preset-project/.astro/collections/routeTheme.schema.json +0 -746
- package/examples/feature-demos/theme-preset-project/.astro/collections/site.schema.json +0 -59
- package/examples/feature-demos/theme-preset-project/.astro/collections/sitewide.schema.json +0 -138
- package/examples/feature-demos/theme-preset-project/.astro/collections/theme.schema.json +0 -755
- package/examples/feature-demos/theme-preset-project/.astro/content-assets.mjs +0 -4
- package/examples/feature-demos/theme-preset-project/.astro/content-modules.mjs +0 -1
- package/examples/feature-demos/theme-preset-project/.astro/content.d.ts +0 -183
- package/examples/feature-demos/theme-preset-project/.astro/data-store.json +0 -1
- package/examples/feature-demos/theme-preset-project/.astro/dev-local.json +0 -8
- package/examples/feature-demos/theme-preset-project/.astro/dev.json +0 -15
- package/examples/feature-demos/theme-preset-project/.astro/dev.log +0 -164
- package/examples/feature-demos/theme-preset-project/.astro/settings.json +0 -5
- package/examples/feature-demos/theme-preset-project/.astro/types.d.ts +0 -2
- package/examples/feature-demos/theme-preset-project/README.md +0 -16
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/_metadata.json +0 -80
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js +0 -1389
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/package.json +0 -3
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
- package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +0 -74
- package/examples/feature-demos/theme-preset-project/site/config.yaml +0 -1
- package/examples/feature-demos/theme-preset-project/site/pages/000-home/content.md +0 -31
- package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/boxer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grass-puppy.jpg +0 -0
- package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grey-street-dog.jpg +0 -0
- package/examples/feature-demos/theme-preset-project/site/public/robots.txt +0 -2
- package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +0 -3
- package/examples/feature-demos/theme-preset-project/site/theme.yaml +0 -1
- package/examples/feature-demos/theme-preset-statement/README.md +0 -16
- package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +0 -74
- package/examples/feature-demos/theme-preset-statement/site/config.yaml +0 -1
- package/examples/feature-demos/theme-preset-statement/site/pages/000-home/content.md +0 -31
- package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/black-pedigree.jpg +0 -0
- package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-grass.jpg +0 -0
- package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-wide.jpg +0 -0
- package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +0 -2
- package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +0 -3
- package/examples/feature-demos/theme-preset-statement/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/pages/000-home/content.md +0 -14
- package/fixtures/basic/site/pages/000-home/images/.gitkeep +0 -1
- 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 -1
- 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/pages/000-home/content.md +0 -79
- package/fixtures/content-model-v2/site/pages/000-home/images/adopt.svg +0 -9
- package/fixtures/content-model-v2/site/pages/000-home/images/detail.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/images/duplicate.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/images/foster.svg +0 -12
- package/fixtures/content-model-v2/site/pages/000-home/images/hero.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/images/image.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/images/slide-one.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/images/slide-three.jpg +0 -0
- package/fixtures/content-model-v2/site/pages/000-home/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/.astro/collections/site.schema.json +0 -35
- package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +0 -97
- package/fixtures/nested-pages/.astro/collections/theme.schema.json +0 -844
- package/fixtures/nested-pages/.astro/content-assets.mjs +0 -4
- package/fixtures/nested-pages/.astro/content-modules.mjs +0 -1
- package/fixtures/nested-pages/.astro/content.d.ts +0 -183
- package/fixtures/nested-pages/.astro/data-store.json +0 -1
- package/fixtures/nested-pages/.astro/dev-local.json +0 -8
- package/fixtures/nested-pages/.astro/dev.log +0 -1128
- package/fixtures/nested-pages/.astro/settings.json +0 -5
- package/fixtures/nested-pages/.astro/types.d.ts +0 -2
- package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +0 -74
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/package.json +0 -3
- package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
- package/fixtures/nested-pages/site/config.yaml +0 -3
- package/fixtures/nested-pages/site/pages/000-home/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 -18
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +0 -2
- package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
- package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +0 -9
- package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +0 -3
- package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -7
- 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 -1
- package/scripts/build-pages.mjs +0 -69
- package/scripts/lib/example-sites.mjs +0 -49
- 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 -225
- package/scripts/test-content-check.mjs +0 -621
- package/scripts/test-content-model-v2.mjs +0 -1693
- package/scripts/test-documentation.mjs +0 -189
- package/scripts/test-editor-language-service.mjs +0 -305
- package/scripts/test-engine-commands.mjs +0 -204
- package/scripts/test-examples.mjs +0 -53
- 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 -157
- package/scripts/test-nested-pages.mjs +0 -125
- package/scripts/test-package-check.mjs +0 -500
- package/scripts/test-page-model.mjs +0 -108
- package/scripts/test-project-config.mjs +0 -139
- package/scripts/test-schemas.mjs +0 -169
- package/scripts/test-site-public.mjs +0 -85
- package/scripts/test-theme-presets.mjs +0 -188
- package/src/components/SiteNotesScript.astro +0 -43
- 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/pages/000-home/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 -1
- package/tsconfig.json +0 -5
|
@@ -51,6 +51,16 @@ const readEnum = (object, key, path, allowedValues, fallback, sourceLabel = site
|
|
|
51
51
|
return value;
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
+
const readBoolean = (object, key, path, fallback, sourceLabel = siteConfigLabel) => {
|
|
55
|
+
const value = object[key] ?? fallback;
|
|
56
|
+
|
|
57
|
+
if (typeof value !== 'boolean') {
|
|
58
|
+
throw new Error(`${path}.${key} must be true or false in ${sourceLabel}.`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return value;
|
|
62
|
+
};
|
|
63
|
+
|
|
54
64
|
const readFontFamily = (object, key, path, fallback, sourceLabel = siteConfigLabel) => {
|
|
55
65
|
const value = object[key] ?? fallback;
|
|
56
66
|
|
|
@@ -184,26 +194,54 @@ const readSiteUrl = (config) => {
|
|
|
184
194
|
const localeLabels = Object.freeze({
|
|
185
195
|
en: Object.freeze({
|
|
186
196
|
breadcrumb: 'Breadcrumb',
|
|
197
|
+
colorMode: 'Color mode',
|
|
198
|
+
colorModeDark: 'Dark',
|
|
199
|
+
colorModeLight: 'Light',
|
|
200
|
+
colorModeSystem: 'System',
|
|
201
|
+
displaySettings: 'Display',
|
|
202
|
+
focusReading: 'Focus reading',
|
|
203
|
+
readingWidth: 'Reading width',
|
|
204
|
+
readingWidthNarrow: 'Narrow',
|
|
205
|
+
readingWidthStandard: 'Standard',
|
|
206
|
+
readingWidthWide: 'Wide',
|
|
207
|
+
resetDisplaySettings: 'Reset',
|
|
187
208
|
dismissBanner: 'Dismiss notice',
|
|
188
209
|
built: 'Built',
|
|
189
210
|
images: 'Images',
|
|
211
|
+
imageCarousel: 'image carousel',
|
|
190
212
|
navigationChildren: 'Child pages',
|
|
191
213
|
navigationMenu: 'Menu',
|
|
214
|
+
nextImage: 'Next image',
|
|
192
215
|
note: 'Note',
|
|
193
216
|
pageNavigation: 'Page contents',
|
|
217
|
+
previousImage: 'Previous image',
|
|
194
218
|
siteBanners: 'Site notices',
|
|
195
219
|
siteNavigation: 'Pages',
|
|
196
220
|
skipToContent: 'Skip to content',
|
|
197
221
|
}),
|
|
198
222
|
sv: Object.freeze({
|
|
199
223
|
breadcrumb: 'Brödsmulor',
|
|
224
|
+
colorMode: 'Färgläge',
|
|
225
|
+
colorModeDark: 'Mörkt',
|
|
226
|
+
colorModeLight: 'Ljust',
|
|
227
|
+
colorModeSystem: 'System',
|
|
228
|
+
displaySettings: 'Visning',
|
|
229
|
+
focusReading: 'Fokuserad läsning',
|
|
230
|
+
readingWidth: 'Textbredd',
|
|
231
|
+
readingWidthNarrow: 'Smal',
|
|
232
|
+
readingWidthStandard: 'Standard',
|
|
233
|
+
readingWidthWide: 'Bred',
|
|
234
|
+
resetDisplaySettings: 'Återställ',
|
|
200
235
|
dismissBanner: 'Stäng meddelande',
|
|
201
236
|
built: 'Byggd',
|
|
202
237
|
images: 'Bilder',
|
|
238
|
+
imageCarousel: 'bildkarusell',
|
|
203
239
|
navigationChildren: 'Undersidor',
|
|
204
240
|
navigationMenu: 'Meny',
|
|
241
|
+
nextImage: 'Nästa bild',
|
|
205
242
|
note: 'Not',
|
|
206
243
|
pageNavigation: 'Sidinnehåll',
|
|
244
|
+
previousImage: 'Föregående bild',
|
|
207
245
|
siteBanners: 'Meddelanden',
|
|
208
246
|
siteNavigation: 'Sidor',
|
|
209
247
|
skipToContent: 'Hoppa till innehållet',
|
|
@@ -326,7 +364,7 @@ export const resolveThemeVisualConfig = (theme, sourceLabel = siteThemeLabel) =>
|
|
|
326
364
|
const rawTypographyConfig = assertObject(rawThemeConfig.typography ?? {}, 'typography', sourceLabel);
|
|
327
365
|
const resolvedContentSpacing = readEnum(rawLayoutConfig, 'contentSpacing', 'layout', contentSpacingNames, 'normal', sourceLabel);
|
|
328
366
|
const resolvedLayoutSpacingDefaults = contentSpacingProfiles[resolvedContentSpacing];
|
|
329
|
-
const
|
|
367
|
+
const corners = readEnum(rawThemeConfig, 'corners', 'theme', ['square', 'rounded'], 'rounded', sourceLabel);
|
|
330
368
|
|
|
331
369
|
return Object.freeze({
|
|
332
370
|
layout: Object.freeze({
|
|
@@ -337,6 +375,8 @@ export const resolveThemeVisualConfig = (theme, sourceLabel = siteThemeLabel) =>
|
|
|
337
375
|
'layout.localNavigationGap',
|
|
338
376
|
sourceLabel,
|
|
339
377
|
),
|
|
378
|
+
noteWidth: readCssLengthValue(rawLayoutConfig.noteWidth ?? '12rem', 'layout.noteWidth', sourceLabel),
|
|
379
|
+
noteGap: readCssLengthValue(rawLayoutConfig.noteGap ?? '1.25rem', 'layout.noteGap', sourceLabel),
|
|
340
380
|
gutter: readResponsiveCssLength(rawLayoutConfig, 'gutter', 'layout', Object.freeze({
|
|
341
381
|
desktop: 'clamp(1.25rem, 4vw, 3rem)',
|
|
342
382
|
mobile: '1rem',
|
|
@@ -365,11 +405,11 @@ export const resolveThemeVisualConfig = (theme, sourceLabel = siteThemeLabel) =>
|
|
|
365
405
|
typography: Object.freeze({
|
|
366
406
|
fontFamily: readFontFamily(rawTypographyConfig, 'fontFamily', 'typography', defaultFontFamily, sourceLabel),
|
|
367
407
|
}),
|
|
368
|
-
|
|
369
|
-
name:
|
|
370
|
-
radiusSmall:
|
|
371
|
-
radiusMedium:
|
|
372
|
-
radiusLarge:
|
|
408
|
+
corners: Object.freeze({
|
|
409
|
+
name: corners,
|
|
410
|
+
radiusSmall: corners === 'square' ? '0' : '2px',
|
|
411
|
+
radiusMedium: corners === 'square' ? '0' : '6px',
|
|
412
|
+
radiusLarge: corners === 'square' ? '0' : '8px',
|
|
373
413
|
}),
|
|
374
414
|
});
|
|
375
415
|
};
|
|
@@ -386,6 +426,13 @@ export const resolveNavigationConfig = (config, sourceLabel = siteConfigLabel) =
|
|
|
386
426
|
'automatic',
|
|
387
427
|
sourceLabel,
|
|
388
428
|
),
|
|
429
|
+
sectionTracking: readBoolean(
|
|
430
|
+
rawNavigation,
|
|
431
|
+
'sectionTracking',
|
|
432
|
+
'navigation',
|
|
433
|
+
false,
|
|
434
|
+
sourceLabel,
|
|
435
|
+
),
|
|
389
436
|
});
|
|
390
437
|
};
|
|
391
438
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'astro/zod';
|
|
2
2
|
import { navigationModeNames } from './navigation-model.mjs';
|
|
3
|
+
import { presentationPaletteNames } from './presentation-palette-metadata.mjs';
|
|
3
4
|
import { themePresetNames } from './theme-presets.mjs';
|
|
4
5
|
|
|
5
6
|
const isDateOnly = (value) => {
|
|
@@ -15,16 +16,33 @@ const textWidth = z.enum(['narrow', 'normal', 'wide']).describe('Maximum width o
|
|
|
15
16
|
const headingWeight = z.union([z.literal(400), z.literal(500), z.literal(600), z.literal(700)]).describe('CSS font weight.');
|
|
16
17
|
const typographyProfile = z.enum(['restrained', 'dense', 'reading', 'statement']).describe('Coordinated typography defaults. Omit this to use the selected preset.');
|
|
17
18
|
const themePreset = z.enum(themePresetNames).describe('Complete Norna visual preset. Start here and add overrides only when needed.');
|
|
18
|
-
const presentationPalette = z.enum(
|
|
19
|
+
const presentationPalette = z.enum(presentationPaletteNames).describe('Coordinated site color palette. Every palette provides light and dark variants. Omit this to use the selected preset.');
|
|
20
|
+
const themeColorMode = z.object({
|
|
21
|
+
default: z.enum(['system', 'light', 'dark']).optional().describe('Initial color mode. System follows the visitor\'s operating-system preference.'),
|
|
22
|
+
}).strict().refine(
|
|
23
|
+
(value) => value.default !== undefined,
|
|
24
|
+
'Specify default.',
|
|
25
|
+
).describe('Site-wide light and dark mode behaviour.');
|
|
26
|
+
const readerControls = z.object({
|
|
27
|
+
colorMode: z.boolean().optional().describe('Let readers choose System, Light, or Dark color mode in the site-wide Display panel.'),
|
|
28
|
+
focusReading: z.boolean().optional().describe('Let readers temporarily hide navigation and other secondary page chrome while reading. Tree navigation always provides this control.'),
|
|
29
|
+
}).strict().refine(
|
|
30
|
+
(value) => value.colorMode !== undefined || value.focusReading !== undefined,
|
|
31
|
+
'Specify colorMode, focusReading, or both.',
|
|
32
|
+
).describe('Optional site-wide reader choices grouped with the always-available reading-width choice in the Display panel.');
|
|
19
33
|
const spacingDensity = z.enum(['compact', 'normal', 'airy']).describe('Coordinated spacing density. Omit this to use the selected preset.');
|
|
20
34
|
const contentSpacing = z.enum(['compact', 'normal', 'spacious']).describe('Vertical spacing between page sections and structured content blocks.');
|
|
21
|
-
const backgroundPattern = z.enum(['uniform', 'alternating', '
|
|
22
|
-
const
|
|
35
|
+
const backgroundPattern = z.enum(['uniform', 'alternating', 'accented']).describe('How coordinated backgrounds are assigned to H2 sections. Non-uniform patterns are unavailable with tree navigation.');
|
|
36
|
+
const cornerTreatment = z.enum(['square', 'rounded']).describe('Site-wide corner treatment for navigation, cards and framed content.');
|
|
37
|
+
const cardListWidth = z.enum(['text', 'narrow', 'normal', 'wide']).describe('Default maximum width for card lists. A width written in a norna-card-list block overrides this value.');
|
|
23
38
|
const navigationMode = z.enum(navigationModeNames).describe('Site-wide navigation model. Automatic selects from the site structure.');
|
|
24
|
-
const
|
|
25
|
-
.min(
|
|
26
|
-
.max(3,
|
|
27
|
-
.describe(
|
|
39
|
+
const createLineHeight = (minimum, role) => z.number()
|
|
40
|
+
.min(minimum, `Use a unitless ${role} line height of at least ${minimum}.`)
|
|
41
|
+
.max(3, `Use a unitless ${role} line height of at most 3.`)
|
|
42
|
+
.describe(`Unitless ${role} line height between ${minimum} and 3.`);
|
|
43
|
+
const headingLineHeight = createLineHeight(1, 'heading');
|
|
44
|
+
const bodyLineHeight = createLineHeight(1.4, 'body-text');
|
|
45
|
+
const captionLineHeight = createLineHeight(1.25, 'caption');
|
|
28
46
|
const cssLength = z.string().regex(
|
|
29
47
|
/^(?:0|(?:\d+(?:\.\d+)?|\.\d+)(?:px|rem|em|ch|lh))$/,
|
|
30
48
|
'Use a CSS length such as "0", "0.8em", "1rem", or "12px".',
|
|
@@ -59,10 +77,10 @@ const overrideResponsiveTextAlign = z.object({
|
|
|
59
77
|
const commonTextPresentationOverride = {
|
|
60
78
|
align: overrideResponsiveTextAlign.optional().describe('Responsive text alignment override.'),
|
|
61
79
|
size: textSize.optional(),
|
|
62
|
-
lineHeight: lineHeight.optional(),
|
|
63
80
|
};
|
|
64
81
|
const headingPresentationOverride = z.object({
|
|
65
82
|
...commonTextPresentationOverride,
|
|
83
|
+
lineHeight: headingLineHeight.optional(),
|
|
66
84
|
weight: headingWeight.optional().describe('Heading font weight. Omit this to keep the profile value.'),
|
|
67
85
|
spacingBefore: cssLength.optional().describe('Vertical space before the heading.'),
|
|
68
86
|
spacingAfter: cssLength.optional().describe('Vertical space after the heading.'),
|
|
@@ -75,10 +93,12 @@ const headingLevelsPresentationOverride = z.object({
|
|
|
75
93
|
}).strict().describe('Heading overrides by Markdown level.');
|
|
76
94
|
const bodyPresentationOverride = z.object({
|
|
77
95
|
...commonTextPresentationOverride,
|
|
96
|
+
lineHeight: bodyLineHeight.optional(),
|
|
78
97
|
paragraphSpacing: cssLength.optional().describe('Vertical space between body paragraphs.'),
|
|
79
98
|
}).strict().describe('Focused overrides for body text.');
|
|
80
99
|
const captionPresentationOverride = z.object({
|
|
81
100
|
...commonTextPresentationOverride,
|
|
101
|
+
lineHeight: captionLineHeight.optional(),
|
|
82
102
|
spacingBefore: cssLength.optional().describe('Vertical space between an image and its caption.'),
|
|
83
103
|
}).strict().describe('Focused overrides for image captions.');
|
|
84
104
|
const typographyOverrides = z.object({
|
|
@@ -140,14 +160,24 @@ const themeImages = z.object({
|
|
|
140
160
|
maxAvailableWidthPercent: responsivePercent.optional().describe('Maximum percentage of available horizontal space used by managed images.'),
|
|
141
161
|
maxAvailableHeightPercent: responsivePercent.optional().describe('Maximum percentage of viewport height used by managed images.'),
|
|
142
162
|
}).strict().describe('Optional defaults for managed image presentation.');
|
|
163
|
+
const themeCardList = z.object({
|
|
164
|
+
width: cardListWidth,
|
|
165
|
+
}).strict().describe('Site-wide card-list defaults.');
|
|
166
|
+
const themeBlocks = z.object({
|
|
167
|
+
cardList: themeCardList.optional(),
|
|
168
|
+
}).strict().refine(
|
|
169
|
+
(value) => value.cardList !== undefined,
|
|
170
|
+
'Specify cardList.',
|
|
171
|
+
).describe('Optional site-wide defaults for structured Norna content blocks.');
|
|
143
172
|
const configNavigation = z.object({
|
|
144
173
|
mode: navigationMode.optional().describe('Navigation model. Omit this to let Norna choose from the site structure.'),
|
|
174
|
+
sectionTracking: z.boolean().optional().default(false).describe('As the reader scrolls in tree navigation, mark the last H2 or H3 that has reached the reading area below the sticky header. The URL and keyboard focus do not change.'),
|
|
145
175
|
}).strict().describe('Site-wide navigation behavior.');
|
|
146
176
|
const themeSections = z.object({
|
|
147
|
-
backgroundPattern: backgroundPattern.optional().describe('Section background
|
|
177
|
+
backgroundPattern: backgroundPattern.optional().describe('Section background pattern. Alternating and accented create full-width bands with sections or top navigation; tree navigation requires uniform.'),
|
|
148
178
|
}).strict().describe('Defaults for page section presentation.');
|
|
149
179
|
const pageThemeSections = z.object({
|
|
150
|
-
backgroundPattern: backgroundPattern.optional().describe('Section background sequence inherited by descendant pages.'),
|
|
180
|
+
backgroundPattern: backgroundPattern.optional().describe('Section background sequence inherited by descendant pages. Non-uniform patterns are invalid with tree navigation.'),
|
|
151
181
|
}).strict().refine(
|
|
152
182
|
(value) => value.backgroundPattern !== undefined,
|
|
153
183
|
'Specify backgroundPattern.',
|
|
@@ -159,7 +189,7 @@ const pageMetadata = z.object({
|
|
|
159
189
|
description: z.string().min(1).optional().describe('Optional page-specific meta description.'),
|
|
160
190
|
}).strict().describe('Optional metadata for this homepage or additional page. The Markdown H1 supplies the page title.');
|
|
161
191
|
const sitewideLogo = z.object({
|
|
162
|
-
height: visualCssLength.optional().describe('Displayed logo height. Width follows the intrinsic aspect ratio.'),
|
|
192
|
+
height: visualCssLength.optional().describe('Displayed logo height on wider screens. Omit it to use 2.6rem; narrow screens cap the height at 2.15rem. Width follows the intrinsic aspect ratio.'),
|
|
163
193
|
}).strict().describe('Optional display settings for a convention-based navigation logo.');
|
|
164
194
|
|
|
165
195
|
const banner = z.object({
|
|
@@ -192,9 +222,12 @@ const siteShape = {
|
|
|
192
222
|
|
|
193
223
|
const themeVisualShape = {
|
|
194
224
|
preset: themePreset.optional().describe('Complete visual starting point. Add only the overrides the site actually needs.'),
|
|
195
|
-
|
|
225
|
+
colorMode: themeColorMode.optional(),
|
|
226
|
+
readerControls: readerControls.optional(),
|
|
227
|
+
corners: cornerTreatment.optional().describe('Site-wide corner treatment. Omit this to use the selected preset.'),
|
|
196
228
|
layout: themeLayout.optional(),
|
|
197
229
|
images: themeImages.optional(),
|
|
230
|
+
blocks: themeBlocks.optional(),
|
|
198
231
|
typography: themeTypography.optional(),
|
|
199
232
|
palette: presentationPalette.optional(),
|
|
200
233
|
sections: themeSections.optional(),
|
|
@@ -212,8 +245,13 @@ const sitewideShape = {
|
|
|
212
245
|
footer: sitewideFooter.optional().describe('Site-wide footer content.'),
|
|
213
246
|
};
|
|
214
247
|
|
|
248
|
+
const categoryShape = {
|
|
249
|
+
label: z.string().trim().min(1).describe('Navigation label for this non-routable page category.'),
|
|
250
|
+
};
|
|
251
|
+
|
|
215
252
|
export const schemaTopLevelKeys = Object.freeze({
|
|
216
253
|
config: Object.freeze(Object.keys(configShape)),
|
|
254
|
+
category: Object.freeze(Object.keys(categoryShape)),
|
|
217
255
|
content: Object.freeze(Object.keys(siteShape)),
|
|
218
256
|
sitewide: Object.freeze(Object.keys(sitewideShape)),
|
|
219
257
|
theme: Object.freeze(Object.keys(themeVisualShape)),
|
|
@@ -222,6 +260,8 @@ export const schemaTopLevelKeys = Object.freeze({
|
|
|
222
260
|
|
|
223
261
|
export const configSchema = z.object(configShape).strict()
|
|
224
262
|
.describe('Technical settings for one Norna site. Additional pages cannot provide technical configuration.');
|
|
263
|
+
export const categorySchema = z.object(categoryShape).strict()
|
|
264
|
+
.describe('A non-routable navigation category containing child pages.');
|
|
225
265
|
export const siteSchema = z.object(siteShape).strict()
|
|
226
266
|
.describe('Frontmatter for a homepage or additional page content.md file.');
|
|
227
267
|
export const themeVisualSchema = z.object(themeVisualShape).strict()
|
|
@@ -231,6 +271,6 @@ export const pageThemeSchema = z.object(pageThemeShape).strict()
|
|
|
231
271
|
(value) => value.layout !== undefined || value.images !== undefined || value.sections !== undefined,
|
|
232
272
|
'Specify layout, images, sections, or a combination of them.',
|
|
233
273
|
)
|
|
234
|
-
.describe('Limited page presentation overrides inherited by descendant pages. Site colors,
|
|
274
|
+
.describe('Limited page presentation overrides inherited by descendant pages. Site colors, corners, typography, content-block defaults and navigation remain global.');
|
|
235
275
|
export const sitewideSchema = z.object(sitewideShape).strict()
|
|
236
276
|
.describe('Editorial content and optional navigation logo display settings shared by every page.');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { documentationLink } from './documentation-links.mjs';
|
|
2
|
+
import { presentationPaletteNames } from './presentation-palette-metadata.mjs';
|
|
2
3
|
import { getSchemaValueDefinition } from './schema-value-definitions.mjs';
|
|
3
4
|
|
|
4
5
|
const yamlExample = (source) => `\`\`\`yaml\n${source}\n\`\`\``;
|
|
@@ -121,7 +122,7 @@ const addSitewideLogoHelp = (jsonSchema) => {
|
|
|
121
122
|
|
|
122
123
|
logo.markdownDescription = [
|
|
123
124
|
yamlExample('logo:\n height: 2rem'),
|
|
124
|
-
'`logo` optionally overrides the displayed height of the convention-based logo file. The logo links home, and its alternative text comes from the homepage Markdown H1. This setting does not enable or select the file.',
|
|
125
|
+
'`logo` optionally overrides the displayed height of the convention-based logo file. Without an override, Norna uses 2.6rem on wider screens and caps the logo at 2.15rem on narrow screens. The logo links home, and its alternative text comes from the homepage Markdown H1. This setting does not enable or select the file.',
|
|
125
126
|
documentationLink('Navigation logo filenames and placement', 'public-files.md', 'navigation-logo'),
|
|
126
127
|
].join('\n\n');
|
|
127
128
|
logo.properties.height.examples = ['2rem'];
|
|
@@ -164,6 +165,14 @@ const addConfigHelp = (jsonSchema) => {
|
|
|
164
165
|
'navigation',
|
|
165
166
|
['automatic', 'sections', 'top', 'tree'],
|
|
166
167
|
);
|
|
168
|
+
addFieldHelp(
|
|
169
|
+
jsonSchema,
|
|
170
|
+
'navigation.sectionTracking',
|
|
171
|
+
'navigation:\n sectionTracking: true',
|
|
172
|
+
'configuration.md',
|
|
173
|
+
'navigationsectiontracking',
|
|
174
|
+
[true, false],
|
|
175
|
+
);
|
|
167
176
|
addHelp(jsonSchema, 'scrollBehavior', [
|
|
168
177
|
yamlExample('scrollBehavior: smooth'),
|
|
169
178
|
'Controls same-page anchor movement. `instant` is the default; `smooth` uses the browser\'s native smooth scrolling.',
|
|
@@ -179,14 +188,14 @@ const addThemeHelp = (jsonSchema) => {
|
|
|
179
188
|
].join('\n\n');
|
|
180
189
|
addHelp(jsonSchema, 'preset', [
|
|
181
190
|
yamlExample('preset: documentation'),
|
|
182
|
-
'Selects coordinated
|
|
191
|
+
'Selects coordinated corners, layout, image sizing, content-block defaults, typography, palette and section backgrounds. This is the normal starting point for a theme.',
|
|
183
192
|
documentationLink('Compare theme presets', 'theme.md', 'theme-presets'),
|
|
184
193
|
]);
|
|
185
|
-
addHelp(jsonSchema, '
|
|
186
|
-
yamlExample('
|
|
194
|
+
addHelp(jsonSchema, 'corners', [
|
|
195
|
+
yamlExample('corners: rounded'),
|
|
187
196
|
'Chooses one consistent corner treatment for navigation, cards and framed content throughout the site.',
|
|
188
|
-
documentationLink('
|
|
189
|
-
], ['square', '
|
|
197
|
+
documentationLink('Corner reference', 'theme.md', 'corners'),
|
|
198
|
+
], ['square', 'rounded']);
|
|
190
199
|
addHelp(jsonSchema, 'layout', [
|
|
191
200
|
yamlExample('layout:\n contentSpacing: compact\n textWidth: narrow'),
|
|
192
201
|
'Overrides text width, content spacing, page width and gutters after the selected preset.',
|
|
@@ -197,22 +206,88 @@ const addThemeHelp = (jsonSchema) => {
|
|
|
197
206
|
'Overrides the available width and height used by Norna-managed images.',
|
|
198
207
|
documentationLink('Image sizing reference', 'theme.md', 'image-sizing'),
|
|
199
208
|
]);
|
|
209
|
+
addHelp(jsonSchema, 'blocks', [
|
|
210
|
+
yamlExample('blocks:\n cardList:\n width: text'),
|
|
211
|
+
'Overrides preset defaults for structured Norna content blocks throughout the site. Options written directly in a Markdown block take priority.',
|
|
212
|
+
documentationLink('Content block defaults', 'theme.md', 'content-block-defaults'),
|
|
213
|
+
]);
|
|
214
|
+
addHelp(jsonSchema, 'blocks.cardList', [
|
|
215
|
+
yamlExample('blocks:\n cardList:\n width: text'),
|
|
216
|
+
'Sets site-wide defaults for card lists. A `width` option in an individual `norna-card-list` block overrides this setting.',
|
|
217
|
+
documentationLink('Content block defaults', 'theme.md', 'content-block-defaults'),
|
|
218
|
+
]);
|
|
219
|
+
addFieldHelp(
|
|
220
|
+
jsonSchema,
|
|
221
|
+
'blocks.cardList.width',
|
|
222
|
+
'blocks:\n cardList:\n width: text',
|
|
223
|
+
'theme.md',
|
|
224
|
+
'content-block-defaults',
|
|
225
|
+
['text', 'narrow', 'normal', 'wide'],
|
|
226
|
+
);
|
|
227
|
+
addSnippets(jsonSchema, 'blocks', [schemaSnippet({
|
|
228
|
+
label: 'Override content-block defaults',
|
|
229
|
+
body: {
|
|
230
|
+
cardList: {
|
|
231
|
+
width: '${1:text}',
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
description: 'Override a preset default for structured content blocks across the site.',
|
|
235
|
+
file: 'theme.md',
|
|
236
|
+
anchor: 'content-block-defaults',
|
|
237
|
+
})]);
|
|
200
238
|
addHelp(jsonSchema, 'typography', [
|
|
201
239
|
yamlExample('typography:\n profile: reading\n rhythm: normal'),
|
|
202
240
|
'Overrides the preset\'s font stack, typography profile, rhythm or individual text settings.',
|
|
203
241
|
documentationLink('Typography configuration reference', 'typography.md', 'configuration-shape'),
|
|
204
242
|
]);
|
|
205
243
|
addHelp(jsonSchema, 'palette', [
|
|
206
|
-
yamlExample('palette: paper'),
|
|
207
|
-
'Chooses
|
|
208
|
-
documentationLink('Palette and
|
|
209
|
-
],
|
|
244
|
+
yamlExample('palette: warm-paper'),
|
|
245
|
+
'Chooses the site color character. Every palette provides coordinated light and dark variants.',
|
|
246
|
+
documentationLink('Palette and color mode', 'theme.md', 'palette-and-color-mode'),
|
|
247
|
+
], presentationPaletteNames);
|
|
248
|
+
addHelp(jsonSchema, 'colorMode', [
|
|
249
|
+
yamlExample('colorMode:\n default: system'),
|
|
250
|
+
'Controls the initial light or dark appearance. Enable the reader-facing choice under readerControls.',
|
|
251
|
+
documentationLink('Color mode', 'theme.md', 'color-mode'),
|
|
252
|
+
]);
|
|
253
|
+
addFieldHelp(jsonSchema, 'colorMode.default', 'colorMode:\n default: system', 'theme.md', 'color-mode', ['system', 'light', 'dark']);
|
|
254
|
+
addSnippets(jsonSchema, 'colorMode', [schemaSnippet({
|
|
255
|
+
label: 'Set the initial color mode',
|
|
256
|
+
body: 'colorMode:\n default: ${1:system}',
|
|
257
|
+
description: 'Follow the system color preference or choose a fixed initial appearance.',
|
|
258
|
+
file: 'theme.md',
|
|
259
|
+
anchor: 'color-mode',
|
|
260
|
+
})]);
|
|
261
|
+
addHelp(jsonSchema, 'readerControls', [
|
|
262
|
+
yamlExample('readerControls:\n colorMode: true\n focusReading: true'),
|
|
263
|
+
'Adds optional color-mode and focus-reading choices to the site-wide Display panel. Reading width is always available, and tree navigation always provides Focus reading.',
|
|
264
|
+
documentationLink('Reader Display controls', 'theme.md', 'reader-display-controls'),
|
|
265
|
+
]);
|
|
266
|
+
for (const [propertyPath, example] of [
|
|
267
|
+
['readerControls.colorMode', 'readerControls:\n colorMode: true'],
|
|
268
|
+
['readerControls.focusReading', 'readerControls:\n focusReading: true'],
|
|
269
|
+
]) {
|
|
270
|
+
addFieldHelp(
|
|
271
|
+
jsonSchema,
|
|
272
|
+
propertyPath,
|
|
273
|
+
example,
|
|
274
|
+
'theme.md',
|
|
275
|
+
'reader-display-controls',
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
addSnippets(jsonSchema, 'readerControls', [schemaSnippet({
|
|
279
|
+
label: 'Configure the Display panel',
|
|
280
|
+
body: 'readerControls:\n colorMode: ${1:true}\n focusReading: ${2:true}',
|
|
281
|
+
description: 'Offer optional color-mode and focus-reading choices alongside the universal reading-width control. Tree navigation always provides Focus reading.',
|
|
282
|
+
file: 'theme.md',
|
|
283
|
+
anchor: 'reader-display-controls',
|
|
284
|
+
})]);
|
|
210
285
|
addHelp(jsonSchema, 'sections', [
|
|
211
286
|
yamlExample('sections:\n backgroundPattern: alternating'),
|
|
212
|
-
'Chooses whether section backgrounds stay uniform, alternate between two
|
|
213
|
-
documentationLink('
|
|
287
|
+
'Chooses whether H2 section backgrounds stay uniform, alternate between two backgrounds or move from base to soft to emphasis and back through soft. Non-uniform patterns are available with sections and top navigation; tree navigation requires uniform.',
|
|
288
|
+
documentationLink('Section backgrounds', 'theme.md', 'section-backgrounds'),
|
|
214
289
|
]);
|
|
215
|
-
addFieldHelp(jsonSchema, 'sections.backgroundPattern', 'sections:\n backgroundPattern: alternating', 'theme.md', '
|
|
290
|
+
addFieldHelp(jsonSchema, 'sections.backgroundPattern', 'sections:\n backgroundPattern: alternating', 'theme.md', 'section-backgrounds', ['uniform', 'alternating', 'accented']);
|
|
216
291
|
|
|
217
292
|
const layoutFields = [
|
|
218
293
|
['layout.contentSpacing', 'layout:\n contentSpacing: compact'],
|
|
@@ -378,19 +453,19 @@ const addThemeHelp = (jsonSchema) => {
|
|
|
378
453
|
const addPageThemeHelp = (jsonSchema) => {
|
|
379
454
|
jsonSchema.markdownDescription = [
|
|
380
455
|
yamlExample('layout:\n textWidth: narrow\n contentSpacing: compact'),
|
|
381
|
-
'A
|
|
456
|
+
'A limited theme in a page or category directory may adjust only page layout, managed-image sizing and the section background pattern. Descendant pages inherit these values. Tree navigation requires a uniform section background. Site colors, corners, typography, content-block defaults and navigation stay consistent.',
|
|
382
457
|
documentationLink('Page theme reference', 'theme.md', 'page-themes'),
|
|
383
458
|
].join('\n\n');
|
|
384
459
|
addHelp(jsonSchema, 'layout', [
|
|
385
460
|
yamlExample('layout:\n textWidth: narrow\n contentSpacing: compact'),
|
|
386
|
-
'Adjusts body-text line length and vertical content spacing for
|
|
461
|
+
'Adjusts body-text line length and vertical content spacing for pages below this directory.',
|
|
387
462
|
documentationLink('Page theme reference', 'theme.md', 'page-themes'),
|
|
388
463
|
]);
|
|
389
464
|
addFieldHelp(jsonSchema, 'layout.textWidth', 'layout:\n textWidth: narrow', 'theme.md', 'page-themes', ['narrow', 'normal', 'wide']);
|
|
390
465
|
addFieldHelp(jsonSchema, 'layout.contentSpacing', 'layout:\n contentSpacing: compact', 'theme.md', 'page-themes', ['compact', 'normal', 'spacious']);
|
|
391
466
|
addHelp(jsonSchema, 'images', [
|
|
392
467
|
yamlExample('images:\n width: 900px'),
|
|
393
|
-
'Adjusts managed-image sizing for
|
|
468
|
+
'Adjusts managed-image sizing for pages below this directory.',
|
|
394
469
|
documentationLink('Image sizing reference', 'theme.md', 'image-sizing'),
|
|
395
470
|
]);
|
|
396
471
|
const imageFields = [
|
|
@@ -407,10 +482,10 @@ const addPageThemeHelp = (jsonSchema) => {
|
|
|
407
482
|
}
|
|
408
483
|
addHelp(jsonSchema, 'sections', [
|
|
409
484
|
yamlExample('sections:\n backgroundPattern: alternating'),
|
|
410
|
-
'Adjusts the section background
|
|
485
|
+
'Adjusts the H2 section background pattern for pages below this directory. Alternating and accented create full-width bands but are invalid when navigation resolves to tree.',
|
|
411
486
|
documentationLink('Page theme reference', 'theme.md', 'page-themes'),
|
|
412
487
|
]);
|
|
413
|
-
addFieldHelp(jsonSchema, 'sections.backgroundPattern', 'sections:\n backgroundPattern: alternating', 'theme.md', 'page-themes', ['uniform', 'alternating', '
|
|
488
|
+
addFieldHelp(jsonSchema, 'sections.backgroundPattern', 'sections:\n backgroundPattern: alternating', 'theme.md', 'page-themes', ['uniform', 'alternating', 'accented']);
|
|
414
489
|
};
|
|
415
490
|
|
|
416
491
|
const addSitewideHelp = (jsonSchema) => {
|
|
@@ -505,8 +580,22 @@ const addContentHelp = (jsonSchema) => {
|
|
|
505
580
|
addFieldHelp(jsonSchema, 'navigation.listed', 'navigation:\n listed: false', 'pages.md', 'navigation', [true, false]);
|
|
506
581
|
};
|
|
507
582
|
|
|
583
|
+
const addCategoryHelp = (jsonSchema) => {
|
|
584
|
+
jsonSchema.markdownDescription = [
|
|
585
|
+
yamlExample('label: Guides'),
|
|
586
|
+
'`category.yaml` creates a navigation-only group for child pages. It has no page content and produces no URL of its own.',
|
|
587
|
+
documentationLink('Navigation category reference', 'pages.md', 'navigation-categories'),
|
|
588
|
+
].join('\n\n');
|
|
589
|
+
addHelp(jsonSchema, 'label', [
|
|
590
|
+
yamlExample('label: Guides'),
|
|
591
|
+
'The category label shown in global navigation, tree navigation, mobile navigation, and breadcrumbs.',
|
|
592
|
+
documentationLink('Navigation category reference', 'pages.md', 'navigation-categories'),
|
|
593
|
+
]);
|
|
594
|
+
};
|
|
595
|
+
|
|
508
596
|
export const applySchemaEditorMetadata = (filename, jsonSchema) => {
|
|
509
597
|
addValueDescriptions(jsonSchema);
|
|
598
|
+
if (filename === 'category.schema.json') addCategoryHelp(jsonSchema);
|
|
510
599
|
if (filename === 'config.schema.json') {
|
|
511
600
|
addLanguageSuggestions(jsonSchema);
|
|
512
601
|
addConfigHelp(jsonSchema);
|
|
@@ -2,6 +2,10 @@ import {
|
|
|
2
2
|
getThemePresetMetadata,
|
|
3
3
|
themePresetNames,
|
|
4
4
|
} from './theme-presets.mjs';
|
|
5
|
+
import {
|
|
6
|
+
getPresentationPaletteMetadata,
|
|
7
|
+
presentationPaletteNames,
|
|
8
|
+
} from './presentation-palette-metadata.mjs';
|
|
5
9
|
|
|
6
10
|
const option = (title, description) => Object.freeze({ title, description });
|
|
7
11
|
const definition = (values, options) => Object.freeze({
|
|
@@ -44,6 +48,12 @@ export const schemaValueDefinitions = Object.freeze([
|
|
|
44
48
|
normal: option('Normal', 'Use the balanced default line length.'),
|
|
45
49
|
wide: option('Wide', 'Allow body text to use more horizontal space.'),
|
|
46
50
|
}),
|
|
51
|
+
definition(['text', 'narrow', 'normal', 'wide'], {
|
|
52
|
+
text: option('Text width', 'Match the active body-text width, including a reader-selected reading width.'),
|
|
53
|
+
narrow: option('Narrow', 'Limit the complete card list to at most 48rem.'),
|
|
54
|
+
normal: option('Normal', 'Limit the complete card list to at most 56rem.'),
|
|
55
|
+
wide: option('Wide', 'Allow the complete card list to use the available page-layout width.'),
|
|
56
|
+
}),
|
|
47
57
|
definition([400, 500, 600, 700], {
|
|
48
58
|
400: option('Regular', 'Use regular font weight.'),
|
|
49
59
|
500: option('Medium', 'Use medium font weight.'),
|
|
@@ -56,19 +66,23 @@ export const schemaValueDefinitions = Object.freeze([
|
|
|
56
66
|
reading: option('Reading', 'Reading-focused typography with narrower text and relaxed line height.'),
|
|
57
67
|
statement: option('Statement', 'Stronger headings and tighter body rhythm for short, expressive pages.'),
|
|
58
68
|
}),
|
|
59
|
-
definition(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
definition(presentationPaletteNames, Object.fromEntries(presentationPaletteNames.map((name) => {
|
|
70
|
+
const metadata = getPresentationPaletteMetadata(name);
|
|
71
|
+
return [name, option(metadata.title, `${metadata.description} Includes coordinated light and dark variants.`)];
|
|
72
|
+
}))),
|
|
73
|
+
definition(['system', 'light', 'dark'], {
|
|
74
|
+
system: option('System', 'Follow the visitor\'s operating-system light or dark preference.'),
|
|
75
|
+
light: option('Light', 'Start with the palette\'s light appearance.'),
|
|
76
|
+
dark: option('Dark', 'Start with the palette\'s dark appearance.'),
|
|
63
77
|
}),
|
|
64
|
-
definition(['square', '
|
|
78
|
+
definition(['square', 'rounded'], {
|
|
65
79
|
square: option('Square', 'Use square corners for navigation, cards and framed content.'),
|
|
66
|
-
|
|
80
|
+
rounded: option('Rounded', 'Use restrained rounded corners consistently across the site.'),
|
|
67
81
|
}),
|
|
68
|
-
definition(['uniform', 'alternating', '
|
|
69
|
-
uniform: option('Uniform', 'Use the
|
|
70
|
-
alternating: option('Alternating', 'Alternate
|
|
71
|
-
|
|
82
|
+
definition(['uniform', 'alternating', 'accented'], {
|
|
83
|
+
uniform: option('Uniform', 'Use the normal page background for every H2 section. Tree navigation requires this pattern.'),
|
|
84
|
+
alternating: option('Alternating', 'Alternate normal and subtly contrasting full-width section backgrounds. Available with sections and top navigation.'),
|
|
85
|
+
accented: option('Accented', 'Move through base, soft, emphasis and soft full-width section backgrounds before repeating. Available with sections and top navigation.'),
|
|
72
86
|
}),
|
|
73
87
|
definition(['compact', 'normal', 'spacious'], {
|
|
74
88
|
compact: option('Compact', 'Use restrained spacing between sections and structured blocks.'),
|