@janga/norna 0.7.10 → 0.7.12
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 +120 -106
- package/bin/norna-cli.mjs +4 -1
- package/docs/README.md +107 -74
- package/docs/assets/norna-dog-shelter.jpg +0 -0
- package/docs/commands.md +13 -4
- package/docs/configuration.md +86 -184
- package/docs/content.md +14 -14
- package/docs/design/command-organization.md +1 -1
- package/docs/design/norna-diagram-design.md +2 -1
- package/docs/design/site-examples-structure.md +38 -24
- package/docs/engine-development.md +28 -15
- package/docs/getting-started.md +141 -124
- package/docs/how-to/embedded-site.md +35 -0
- package/docs/publishing.md +47 -46
- package/docs/requirements.md +54 -0
- package/docs/routes.md +3 -2
- package/docs/site-structure.md +12 -9
- package/docs/sitewide-content.md +2 -1
- package/docs/theme.md +104 -34
- package/docs/typography.md +32 -17
- package/examples/README.md +43 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/sitewide.schema.json +24 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/theme.schema.json +9 -24
- package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +9 -1
- package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +13 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -0
- package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-multi-page/README.md +16 -0
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/{typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js} +4 -4
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +151 -151
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +131 -131
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/icons-RyebKi45.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js} +2 -2
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js} +10 -10
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js} +1 -1
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/{typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js} +3 -3
- package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +98 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
- package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/content.md +12 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +22 -0
- package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/020-adopt/route-content.md +11 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +16 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +3 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +59 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +138 -0
- package/examples/{dog-gallery → complete-sites/dog-shelter-single-page}/.astro/collections/theme.schema.json +151 -68
- package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +183 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +13 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +14 -0
- package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +5 -0
- package/examples/complete-sites/dog-shelter-single-page/README.md +16 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +50 -0
- package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
- package/examples/complete-sites/dog-shelter-single-page/site/content.md +34 -0
- package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +9 -0
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +16 -0
- package/examples/complete-sites/dog-shelter-single-page/site/theme.md +3 -0
- package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +4 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
- package/examples/feature-demos/media-and-surfaces/.astro/dev.log +24 -0
- package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
- package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
- package/examples/feature-demos/media-and-surfaces/README.md +21 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +80 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +1389 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/{presentation → feature-demos/media-and-surfaces}/site/.norna/generated-images.json +16 -16
- package/examples/feature-demos/media-and-surfaces/site/config.md +4 -0
- package/examples/feature-demos/media-and-surfaces/site/content.md +18 -0
- package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/route-content.md +17 -24
- package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/route-content.md +1 -1
- package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/theme.md +1 -0
- package/examples/feature-demos/media-and-surfaces/site/sitewide-content.md +6 -0
- package/examples/feature-demos/media-and-surfaces/site/theme.md +3 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +1 -0
- package/examples/feature-demos/sitewide-content/.astro/content.d.ts +183 -0
- package/examples/feature-demos/sitewide-content/.astro/data-store.json +1 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.json +13 -0
- package/examples/feature-demos/sitewide-content/.astro/dev.log +18 -0
- package/examples/feature-demos/sitewide-content/.astro/settings.json +5 -0
- package/examples/feature-demos/sitewide-content/.astro/types.d.ts +2 -0
- package/examples/feature-demos/sitewide-content/README.md +18 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
- package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
- package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +1 -0
- package/examples/feature-demos/sitewide-content/site/config.md +3 -0
- package/examples/feature-demos/sitewide-content/site/content.md +16 -0
- package/examples/feature-demos/sitewide-content/site/public/logo.svg +6 -0
- package/examples/feature-demos/sitewide-content/site/routes/010-identity/route-content.md +20 -0
- package/examples/feature-demos/sitewide-content/site/routes/020-notices/route-content.md +22 -0
- package/examples/feature-demos/sitewide-content/site/routes/030-footer/route-content.md +17 -0
- package/examples/feature-demos/sitewide-content/site/sitewide-content.md +33 -0
- package/examples/feature-demos/sitewide-content/site/theme.md +3 -0
- package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +59 -0
- package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +138 -0
- package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +755 -0
- package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +4 -0
- package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/.astro/data-store.json +1 -1
- package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/.astro/dev.json +2 -2
- package/examples/feature-demos/theme-presets/.astro/dev.log +164 -0
- package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
- package/examples/feature-demos/theme-presets/README.md +18 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
- package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/.norna/generated-images.json +45 -45
- package/examples/feature-demos/theme-presets/site/config.md +3 -0
- package/examples/feature-demos/theme-presets/site/content.md +17 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/shepherd-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/white-puppy.jpg +0 -0
- package/examples/{typography-presets/site/routes/010-quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/images/documentation/retriever-portrait.jpg +0 -0
- package/examples/{typography-presets/site/routes/020-compact-gallery → feature-demos/theme-presets/site/routes/020-documentation}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/030-project/images/project/boxer-portrait.jpg +0 -0
- package/examples/feature-demos/theme-presets/site/routes/030-project/images/project/grass-puppy.jpg +0 -0
- package/examples/{typography-presets/site/routes/030-text-forward → feature-demos/theme-presets/site/routes/030-project}/route-content.md +8 -8
- package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
- package/examples/feature-demos/theme-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg +0 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/route-content.md +3 -3
- package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
- package/examples/{typography-presets → feature-demos/theme-presets}/site/sitewide-content.md +1 -1
- package/examples/feature-demos/theme-presets/site/theme.md +3 -0
- package/fixtures/basic/site/config.md +3 -0
- package/fixtures/content-model-v2/site/config.md +3 -0
- package/package.json +17 -8
- package/scripts/build-pages.mjs +69 -0
- package/scripts/check-config.mjs +3 -11
- package/scripts/deploy-site.mjs +12 -8
- package/scripts/export-theme-preset.mjs +31 -0
- package/scripts/init-site.mjs +1 -0
- package/scripts/lib/example-sites.mjs +37 -0
- package/scripts/lib/github-repository.mjs +44 -0
- package/scripts/lib/norna-markdown-blocks.mjs +97 -10
- package/scripts/lib/presentation.mjs +6 -5
- package/scripts/lib/project-config.mjs +114 -124
- package/scripts/lib/site-content.mjs +9 -2
- package/scripts/lib/site-paths.mjs +6 -2
- package/scripts/lib/theme-config.mjs +3 -0
- package/scripts/lib/theme-presets.mjs +209 -0
- package/scripts/show-typography.mjs +6 -5
- package/scripts/test-client-javascript.mjs +236 -0
- package/scripts/test-content-check.mjs +103 -0
- package/scripts/test-content-model-v2.mjs +9 -13
- package/scripts/test-documentation.mjs +116 -0
- package/scripts/test-engine-commands.mjs +13 -3
- package/scripts/test-examples.mjs +24 -0
- package/scripts/test-navigation.mjs +73 -45
- package/scripts/test-package-check.mjs +17 -9
- package/scripts/test-project-config.mjs +130 -0
- package/scripts/test-temporary-visibility.mjs +3 -10
- package/scripts/test-theme-presets.mjs +146 -0
- package/scripts/watch-pages-deploy.mjs +15 -11
- package/src/components/GalleryGrid.astro +30 -230
- package/src/components/ImageCarousel.astro +184 -0
- package/src/components/MobileSectionNavigationScript.astro +14 -0
- package/src/components/NornaSmoothScrollScript.astro +250 -0
- package/src/components/SiteNavigation.astro +58 -341
- package/src/components/SiteNotesScript.astro +43 -0
- package/src/components/SitePage.astro +6 -3
- package/src/components/SiteSection.astro +4 -47
- package/src/content.config.ts +2 -0
- package/src/layouts/BaseLayout.astro +1 -1
- package/src/lib/galleryImages.ts +53 -0
- package/src/styles/global.css +83 -1
- package/starters/basic/.github/workflows/deploy.yml +1 -2
- package/starters/basic/README.md +10 -8
- package/starters/basic/package.json +1 -0
- package/starters/basic/site/config.md +3 -0
- package/starters/project/.github/workflows/deploy.yml +1 -2
- package/starters/project/README.md +3 -4
- package/starters/project/package.json +1 -0
- package/starters/project/site/config.md +3 -0
- package/examples/001-dog-shelter-single-page/README.md +0 -9
- package/examples/001-dog-shelter-single-page/site/config.mjs +0 -27
- package/examples/001-dog-shelter-single-page/site/content.md +0 -38
- package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
- package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
- package/examples/001-dog-shelter-single-page/site/sitewide-content.md +0 -6
- package/examples/001-dog-shelter-single-page/site/theme.md +0 -25
- package/examples/002-dog-shelter-multi-page/README.md +0 -9
- package/examples/002-dog-shelter-multi-page/site/config.mjs +0 -27
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +0 -30
- package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +0 -6
- package/examples/002-dog-shelter-multi-page/site/theme.md +0 -25
- package/examples/dog-gallery/.astro/collections/site.schema.json +0 -776
- package/examples/dog-gallery/.astro/data-store.json +0 -1
- package/examples/dog-gallery/.astro/dev-local.json +0 -8
- package/examples/dog-gallery/.astro/dev.json +0 -13
- package/examples/dog-gallery/.astro/dev.log +0 -95
- package/examples/dog-gallery/.astro/settings.json +0 -5
- package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
- package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +0 -1
- package/examples/dog-gallery/dist/dog-care/index.html +0 -15
- package/examples/dog-gallery/dist/dog-shelter-logo.svg +0 -14
- package/examples/dog-gallery/dist/favicon.svg +0 -7
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
- package/examples/dog-gallery/dist/index.html +0 -45
- package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +0 -74
- package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
- package/examples/dog-gallery/site/config.mjs +0 -47
- package/examples/dog-gallery/site/content.md +0 -127
- package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
- package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
- package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
- package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
- package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
- package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
- package/examples/dog-gallery/site/public/favicon.svg +0 -7
- package/examples/dog-gallery/site/public/logo.svg +0 -14
- package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -38
- package/examples/dog-gallery/site/sitewide-content.md +0 -16
- package/examples/dog-gallery/site/theme.md +0 -101
- package/examples/presentation/README.md +0 -15
- package/examples/presentation/site/config.mjs +0 -29
- package/examples/presentation/site/content.md +0 -67
- package/examples/presentation/site/public/robots.txt +0 -2
- package/examples/presentation/site/routes/010-presets/route-content.md +0 -63
- package/examples/presentation/site/routes/010-presets/theme.md +0 -4
- package/examples/presentation/site/routes/020-media/theme.md +0 -4
- package/examples/presentation/site/sitewide-content.md +0 -6
- package/examples/presentation/site/theme.md +0 -43
- package/examples/typography-presets/.astro/dev.log +0 -45
- package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
- package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
- package/examples/typography-presets/site/config.mjs +0 -29
- package/examples/typography-presets/site/content.md +0 -16
- package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +0 -4
- package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +0 -4
- package/examples/typography-presets/site/routes/030-text-forward/theme.md +0 -4
- package/examples/typography-presets/site/routes/040-statement/theme.md +0 -4
- package/examples/typography-presets/site/theme.md +0 -43
- package/fixtures/basic/site/config.mjs +0 -27
- package/fixtures/content-model-v2/site/config.mjs +0 -11
- package/starters/basic/site/config.mjs +0 -27
- package/starters/project/site/config.mjs +0 -30
- /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/site.schema.json +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-assets.mjs +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-modules.mjs +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery/retriever-portrait.jpg → complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg} +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/favicon.svg +0 -0
- /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/white-puppy.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/boxer-portrait.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg → complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg} +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-assets.mjs +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-modules.mjs +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/types.d.ts +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/grass-puppy.jpg → complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg} +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/shepherd-portrait.jpg → complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg} +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/favicon.svg +0 -0
- /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/robots.txt +0 -0
- /package/examples/{dog-gallery/dist → feature-demos/media-and-surfaces/site/public}/robots.txt +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-carousel.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-stack.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-surfaces.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-one.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-three.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-two.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-one.svg +0 -0
- /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-two.svg +0 -0
- /package/examples/{dog-gallery → feature-demos/sitewide-content}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/collections/routeTheme.schema.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/content.d.ts +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/embla-carousel.js +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
- /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
- /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
- /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/black-pedigree.jpg +0 -0
- /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/sheepdog-wide.jpg +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
const noteParts = Array.from(document.querySelectorAll<HTMLElement>('[data-note-id]'));
|
|
3
|
+
const noteReferences = noteParts.filter((part) => part.matches('.section-note-ref a'));
|
|
4
|
+
const marginNotes = noteParts.filter((part) => part.matches('.section-note'));
|
|
5
|
+
|
|
6
|
+
const setNoteState = (noteId: string, active: boolean) => {
|
|
7
|
+
noteParts
|
|
8
|
+
.filter((part) => part.dataset.noteId === noteId)
|
|
9
|
+
.forEach((part) => part.classList.toggle('is-referenced', active));
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
noteParts.forEach((part) => {
|
|
13
|
+
const noteId = part.dataset.noteId;
|
|
14
|
+
if (!noteId) return;
|
|
15
|
+
|
|
16
|
+
part.addEventListener('pointerenter', () => setNoteState(noteId, true));
|
|
17
|
+
part.addEventListener('pointerleave', () => setNoteState(noteId, false));
|
|
18
|
+
part.addEventListener('focusin', () => setNoteState(noteId, true));
|
|
19
|
+
part.addEventListener('focusout', () => setNoteState(noteId, false));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const alignMarginNotes = () => {
|
|
23
|
+
const wideLayout = window.matchMedia('(min-width: 1101px)').matches;
|
|
24
|
+
if (!wideLayout) {
|
|
25
|
+
marginNotes.forEach((note) => note.style.removeProperty('--section-note-offset'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
marginNotes.forEach((note) => {
|
|
30
|
+
const noteId = note.dataset.noteId;
|
|
31
|
+
const reference = noteReferences.find((part) => part.dataset.noteId === noteId);
|
|
32
|
+
if (!noteId || !reference) return;
|
|
33
|
+
|
|
34
|
+
note.style.removeProperty('--section-note-offset');
|
|
35
|
+
const offset = reference.getBoundingClientRect().top - note.getBoundingClientRect().top;
|
|
36
|
+
note.style.setProperty('--section-note-offset', `${Math.max(0, offset)}px`);
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
alignMarginNotes();
|
|
41
|
+
window.addEventListener('resize', alignMarginNotes);
|
|
42
|
+
document.fonts?.ready.then(alignMarginNotes);
|
|
43
|
+
</script>
|
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import BaseLayout from '../layouts/BaseLayout.astro';
|
|
5
5
|
import SiteNavigation from './SiteNavigation.astro';
|
|
6
6
|
import SiteBanners from './SiteBanners.astro';
|
|
7
|
+
import SiteNotesScript from './SiteNotesScript.astro';
|
|
7
8
|
import SiteSection from './SiteSection.astro';
|
|
8
9
|
import { getSectionNavigation, getSectionsContent } from '../lib/sectionContent';
|
|
9
10
|
import { getRouteTheme } from '../lib/routeThemes';
|
|
@@ -57,14 +58,15 @@ const logo = logoAsset
|
|
|
57
58
|
height: logoSettings?.height,
|
|
58
59
|
}
|
|
59
60
|
: undefined;
|
|
60
|
-
const pagePresentation = resolvePagePresentation(themeData);
|
|
61
|
-
const frameColors = resolveFrameColors({ theme: themeData });
|
|
61
|
+
const pagePresentation = resolvePagePresentation(themeData, themeLabel);
|
|
62
|
+
const frameColors = resolveFrameColors({ theme: themeData, sourceLabel: themeLabel });
|
|
62
63
|
const sections = entry.data.sections;
|
|
63
64
|
const siteHtml = entry.rendered?.html ?? '';
|
|
64
65
|
const resolvedSections = await getSectionsContent(siteHtml, rawMarkdown, sections, currentPage);
|
|
65
66
|
const today = getToday();
|
|
66
67
|
const siteBanners = (sitewideData.banners ?? []).filter((banner) => isVisibleToday(banner.visible, today));
|
|
67
68
|
const visibleSections = resolvedSections.filter((section) => isVisibleToday(section.visible, today));
|
|
69
|
+
const hasMarginNotes = visibleSections.some((section) => section.contentBlocks.some((block) => block.type === 'note'));
|
|
68
70
|
|
|
69
71
|
const getPageContent = async (page: SitePage) => {
|
|
70
72
|
if (page.pathname === currentPage.pathname) {
|
|
@@ -102,7 +104,7 @@ if (visibleSections.length === 0) {
|
|
|
102
104
|
pageNavigation={pageNavigation}
|
|
103
105
|
frameColors={frameColors}
|
|
104
106
|
/>
|
|
105
|
-
<SiteBanners banners={siteBanners} />
|
|
107
|
+
{siteBanners.length > 0 && <SiteBanners banners={siteBanners} />}
|
|
106
108
|
|
|
107
109
|
<main id="main-content" class="site-content">
|
|
108
110
|
{visibleSections.map((section, index) => (
|
|
@@ -116,4 +118,5 @@ if (visibleSections.length === 0) {
|
|
|
116
118
|
/>
|
|
117
119
|
))}
|
|
118
120
|
</main>
|
|
121
|
+
{hasMarginNotes && <SiteNotesScript />}
|
|
119
122
|
</BaseLayout>
|
|
@@ -3,6 +3,7 @@ import projectConfig from '../../scripts/lib/project-config.mjs';
|
|
|
3
3
|
import { resolveSectionSurface } from '../../scripts/lib/presentation.mjs';
|
|
4
4
|
import CardList from './CardList.astro';
|
|
5
5
|
import GalleryGrid from './GalleryGrid.astro';
|
|
6
|
+
import ImageCarousel from './ImageCarousel.astro';
|
|
6
7
|
import type { ResolvedSection } from '../lib/sectionContent';
|
|
7
8
|
|
|
8
9
|
type ResponsiveValue<T> = { desktop: T; mobile: T };
|
|
@@ -379,9 +380,9 @@ const sectionStyle = [
|
|
|
379
380
|
const block = group.block;
|
|
380
381
|
if (block.type === 'image-carousel') {
|
|
381
382
|
return (
|
|
382
|
-
<
|
|
383
|
+
<ImageCarousel
|
|
383
384
|
title={section.title}
|
|
384
|
-
|
|
385
|
+
images={block.images}
|
|
385
386
|
maxAvailableWidthPercent={visualTheme.gallery.maxAvailableWidthPercent}
|
|
386
387
|
priorityFirstImage={priorityGalleryImage && groupIndex === 0}
|
|
387
388
|
/>
|
|
@@ -395,7 +396,7 @@ const sectionStyle = [
|
|
|
395
396
|
return (
|
|
396
397
|
<GalleryGrid
|
|
397
398
|
title={section.title}
|
|
398
|
-
|
|
399
|
+
images={block.images}
|
|
399
400
|
maxAvailableWidthPercent={visualTheme.gallery.maxAvailableWidthPercent}
|
|
400
401
|
priorityFirstImage={priorityGalleryImage && groupIndex === 0}
|
|
401
402
|
/>
|
|
@@ -404,47 +405,3 @@ const sectionStyle = [
|
|
|
404
405
|
</div>
|
|
405
406
|
</div>
|
|
406
407
|
</section>
|
|
407
|
-
|
|
408
|
-
<script>
|
|
409
|
-
const noteParts = Array.from(document.querySelectorAll<HTMLElement>('[data-note-id]'));
|
|
410
|
-
const noteReferences = noteParts.filter((part) => part.matches('.section-note-ref a'));
|
|
411
|
-
const marginNotes = noteParts.filter((part) => part.matches('.section-note'));
|
|
412
|
-
|
|
413
|
-
const setNoteState = (noteId: string, active: boolean) => {
|
|
414
|
-
noteParts
|
|
415
|
-
.filter((part) => part.dataset.noteId === noteId)
|
|
416
|
-
.forEach((part) => part.classList.toggle('is-referenced', active));
|
|
417
|
-
};
|
|
418
|
-
|
|
419
|
-
noteParts.forEach((part) => {
|
|
420
|
-
const noteId = part.dataset.noteId;
|
|
421
|
-
if (!noteId) return;
|
|
422
|
-
|
|
423
|
-
part.addEventListener('pointerenter', () => setNoteState(noteId, true));
|
|
424
|
-
part.addEventListener('pointerleave', () => setNoteState(noteId, false));
|
|
425
|
-
part.addEventListener('focusin', () => setNoteState(noteId, true));
|
|
426
|
-
part.addEventListener('focusout', () => setNoteState(noteId, false));
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
const alignMarginNotes = () => {
|
|
430
|
-
const wideLayout = window.matchMedia('(min-width: 1101px)').matches;
|
|
431
|
-
if (!wideLayout) {
|
|
432
|
-
marginNotes.forEach((note) => note.style.removeProperty('--section-note-offset'));
|
|
433
|
-
return;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
marginNotes.forEach((note) => {
|
|
437
|
-
const noteId = note.dataset.noteId;
|
|
438
|
-
const reference = noteReferences.find((part) => part.dataset.noteId === noteId);
|
|
439
|
-
if (!noteId || !reference) return;
|
|
440
|
-
|
|
441
|
-
note.style.removeProperty('--section-note-offset');
|
|
442
|
-
const offset = reference.getBoundingClientRect().top - note.getBoundingClientRect().top;
|
|
443
|
-
note.style.setProperty('--section-note-offset', `${Math.max(0, offset)}px`);
|
|
444
|
-
});
|
|
445
|
-
};
|
|
446
|
-
|
|
447
|
-
alignMarginNotes();
|
|
448
|
-
window.addEventListener('resize', alignMarginNotes);
|
|
449
|
-
document.fonts?.ready.then(alignMarginNotes);
|
|
450
|
-
</script>
|
package/src/content.config.ts
CHANGED
|
@@ -15,6 +15,7 @@ const textSize = z.enum(['small', 'medium', 'large', 'xlarge']);
|
|
|
15
15
|
const textWidth = z.enum(['narrow', 'normal', 'wide']);
|
|
16
16
|
const headingWeight = z.union([z.literal(400), z.literal(500), z.literal(600), z.literal(700)]);
|
|
17
17
|
const typographyPreset = z.enum(['quiet-gallery', 'compact-gallery', 'text-forward', 'statement']);
|
|
18
|
+
const themePreset = z.enum(['portfolio', 'documentation', 'project', 'statement']);
|
|
18
19
|
const presentationPalette = z.enum(['dark', 'light', 'paper']);
|
|
19
20
|
const sectionSurfaceMode = z.enum(['none', 'cycle']);
|
|
20
21
|
const sectionSurface = z.enum(['base', 'soft', 'emphasis']);
|
|
@@ -197,6 +198,7 @@ const siteSchema = z.object({
|
|
|
197
198
|
});
|
|
198
199
|
|
|
199
200
|
export const themeVisualSchema = z.object({
|
|
201
|
+
preset: themePreset.optional(),
|
|
200
202
|
layout: themeLayout.optional(),
|
|
201
203
|
gallery: themeGallery.optional(),
|
|
202
204
|
typography: themeTypography.optional(),
|
|
@@ -73,7 +73,7 @@ const {
|
|
|
73
73
|
const documentTitle = title;
|
|
74
74
|
const canonicalUrl = new URL(withBasePath(projectConfig.site.basePath, pathname), projectConfig.site.url).href;
|
|
75
75
|
const iconLinks = getIconLinks();
|
|
76
|
-
const scrollBehavior = projectConfig.navigation.
|
|
76
|
+
const scrollBehavior = projectConfig.navigation.scrollBehavior === 'browser-smooth' ? 'smooth' : 'auto';
|
|
77
77
|
const formatPercent = (value: number) => `${value}%`;
|
|
78
78
|
const formatViewportHeightPercent = (value: number) => `${value}svh`;
|
|
79
79
|
const layoutSpacing = visualTheme.layout.spacing;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getGeneratedImage } from './generatedImages';
|
|
2
|
+
|
|
3
|
+
export type GalleryImage = {
|
|
4
|
+
image: string;
|
|
5
|
+
src?: string;
|
|
6
|
+
alt?: string;
|
|
7
|
+
caption?: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type GeneratedImageWithDimensions = NonNullable<ReturnType<typeof getGeneratedImage>> & {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const hasDimensions = (image: ReturnType<typeof getGeneratedImage>): image is GeneratedImageWithDimensions => (
|
|
16
|
+
Boolean(image) && Number.isFinite(image.width) && Number.isFinite(image.height)
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export const getCaptionId = (image: GalleryImage, itemIndex: number, imageIndex = 0) => {
|
|
20
|
+
const source = (image.src ?? image.image)
|
|
21
|
+
.toLowerCase()
|
|
22
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
23
|
+
.replace(/^-|-$/g, '');
|
|
24
|
+
|
|
25
|
+
return `gallery-caption-${source}-${itemIndex}-${imageIndex}`;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const getGalleryImageSizes = (maxAvailableWidthPercent: { desktop: number; mobile: number }) => [
|
|
29
|
+
`(max-width: 700px) ${maxAvailableWidthPercent.mobile}vw`,
|
|
30
|
+
`${maxAvailableWidthPercent.desktop}vw`,
|
|
31
|
+
].join(', ');
|
|
32
|
+
|
|
33
|
+
export const getImageClass = (image: GalleryImage) => {
|
|
34
|
+
const generatedImage = getGeneratedImage(image.src ?? image.image);
|
|
35
|
+
return hasDimensions(generatedImage) && generatedImage.width > generatedImage.height
|
|
36
|
+
? 'gallery-image-landscape'
|
|
37
|
+
: undefined;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const getImageLoadingProps = (isPriority: boolean) => ({
|
|
41
|
+
decoding: 'async' as const,
|
|
42
|
+
fetchpriority: isPriority ? 'high' as const : 'low' as const,
|
|
43
|
+
loading: isPriority ? 'eager' as const : 'lazy' as const,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export const getCarouselAspectRatio = (images: GalleryImage[]) => {
|
|
47
|
+
const ratios = images
|
|
48
|
+
.map((image) => getGeneratedImage(image.src ?? image.image))
|
|
49
|
+
.filter(hasDimensions)
|
|
50
|
+
.map((image) => image.width / image.height);
|
|
51
|
+
|
|
52
|
+
return ratios.length > 0 ? Math.min(...ratios) : null;
|
|
53
|
+
};
|
package/src/styles/global.css
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
--space-content-block-gap-desktop: 1.5em;
|
|
35
35
|
--space-content-block-gap-mobile: 1.25em;
|
|
36
36
|
--space-content-block-gap: var(--space-content-block-gap-desktop);
|
|
37
|
+
--space-card-list-after: 0.5em;
|
|
37
38
|
--space-heading-to-block-desktop: 0.75em;
|
|
38
39
|
--space-heading-to-block-mobile: 0.7em;
|
|
39
40
|
--space-heading-to-block: var(--space-heading-to-block-desktop);
|
|
@@ -61,6 +62,12 @@ html {
|
|
|
61
62
|
background: var(--color-page);
|
|
62
63
|
}
|
|
63
64
|
|
|
65
|
+
@media (prefers-reduced-motion: reduce) {
|
|
66
|
+
html {
|
|
67
|
+
scroll-behavior: auto !important;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
64
71
|
body {
|
|
65
72
|
min-height: 100vh;
|
|
66
73
|
min-height: 100svh;
|
|
@@ -253,6 +260,55 @@ a {
|
|
|
253
260
|
display: none;
|
|
254
261
|
}
|
|
255
262
|
|
|
263
|
+
.page-nav {
|
|
264
|
+
border-top: 1px solid color-mix(in srgb, currentColor 14%, transparent);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.page-nav ul {
|
|
268
|
+
display: flex;
|
|
269
|
+
flex-wrap: wrap;
|
|
270
|
+
justify-content: center;
|
|
271
|
+
gap: 0 clamp(1.4rem, 4vw, 3.25rem);
|
|
272
|
+
margin: 0;
|
|
273
|
+
padding: 0;
|
|
274
|
+
list-style: none;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.page-nav li {
|
|
278
|
+
position: relative;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.page-nav li + li::before {
|
|
282
|
+
position: absolute;
|
|
283
|
+
top: 50%;
|
|
284
|
+
left: calc(clamp(1.4rem, 4vw, 3.25rem) / -2 - 0.1rem);
|
|
285
|
+
transform: translateY(-50%);
|
|
286
|
+
content: "·";
|
|
287
|
+
font-size: 0.75rem;
|
|
288
|
+
opacity: 0.28;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.page-nav a {
|
|
292
|
+
display: block;
|
|
293
|
+
padding: 1.05rem 0 0.95rem;
|
|
294
|
+
color: currentColor;
|
|
295
|
+
font-size: 0.76rem;
|
|
296
|
+
font-weight: 500;
|
|
297
|
+
letter-spacing: 0.08em;
|
|
298
|
+
line-height: 1.2;
|
|
299
|
+
opacity: 0.72;
|
|
300
|
+
text-decoration: none;
|
|
301
|
+
text-transform: uppercase;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.page-nav a:hover,
|
|
305
|
+
.page-nav a:focus-visible {
|
|
306
|
+
opacity: 1;
|
|
307
|
+
text-decoration: underline;
|
|
308
|
+
text-decoration-thickness: 1px;
|
|
309
|
+
text-underline-offset: 0.35em;
|
|
310
|
+
}
|
|
311
|
+
|
|
256
312
|
.mobile-page-nav a[aria-current='true'] {
|
|
257
313
|
opacity: 1;
|
|
258
314
|
text-decoration: underline;
|
|
@@ -287,6 +343,8 @@ a {
|
|
|
287
343
|
.site-banner {
|
|
288
344
|
display: flex;
|
|
289
345
|
align-items: flex-start;
|
|
346
|
+
width: 100%;
|
|
347
|
+
min-width: 0;
|
|
290
348
|
gap: 1rem;
|
|
291
349
|
border: 1px solid color-mix(in srgb, #ffd84d 42%, var(--color-border));
|
|
292
350
|
border-inline-start: 0.35rem solid #ffd84d;
|
|
@@ -437,6 +495,7 @@ ul {
|
|
|
437
495
|
}
|
|
438
496
|
|
|
439
497
|
.section-body {
|
|
498
|
+
display: flow-root;
|
|
440
499
|
width: 100%;
|
|
441
500
|
margin: 0 auto;
|
|
442
501
|
color: inherit;
|
|
@@ -640,11 +699,18 @@ ul {
|
|
|
640
699
|
|
|
641
700
|
.section-body > .section-reading-layout:not(:last-child),
|
|
642
701
|
.section-body > .section-markdown:not(:last-child),
|
|
643
|
-
.section-body > .card-list:not(:last-child),
|
|
644
702
|
.section-body > .gallery:not(:last-child) {
|
|
645
703
|
margin-bottom: var(--space-content-block-gap);
|
|
646
704
|
}
|
|
647
705
|
|
|
706
|
+
.section-body > .card-list:not(:last-child) {
|
|
707
|
+
margin-bottom: calc(var(--space-content-block-gap) + var(--space-card-list-after));
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.section-body > .card-list:last-child {
|
|
711
|
+
margin-bottom: var(--space-card-list-after);
|
|
712
|
+
}
|
|
713
|
+
|
|
648
714
|
@media (max-width: 1100px) {
|
|
649
715
|
.section-reading-layout {
|
|
650
716
|
display: block;
|
|
@@ -1082,6 +1148,22 @@ ul {
|
|
|
1082
1148
|
flex: 0 0 auto;
|
|
1083
1149
|
}
|
|
1084
1150
|
|
|
1151
|
+
.page-nav ul {
|
|
1152
|
+
gap: 0 1.55rem;
|
|
1153
|
+
padding: 0 1rem;
|
|
1154
|
+
text-align: center;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
.page-nav li + li::before {
|
|
1158
|
+
left: -0.95rem;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
.page-nav a {
|
|
1162
|
+
padding: 0.95rem 0 0.85rem;
|
|
1163
|
+
font-size: 0.72rem;
|
|
1164
|
+
white-space: nowrap;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1085
1167
|
.mobile-nav-menu summary {
|
|
1086
1168
|
display: flex;
|
|
1087
1169
|
align-items: center;
|
|
@@ -2,8 +2,6 @@ name: Deploy to GitHub Pages
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
5
|
workflow_dispatch:
|
|
8
6
|
|
|
9
7
|
permissions:
|
|
@@ -17,6 +15,7 @@ concurrency:
|
|
|
17
15
|
|
|
18
16
|
jobs:
|
|
19
17
|
build:
|
|
18
|
+
if: github.ref_name == github.event.repository.default_branch
|
|
20
19
|
runs-on: ubuntu-latest
|
|
21
20
|
steps:
|
|
22
21
|
- name: Checkout
|
package/starters/basic/README.md
CHANGED
|
@@ -18,21 +18,23 @@ npm run dev -- --kill
|
|
|
18
18
|
Edit shared brand, logo, banners and footer in `site/sitewide-content.md`,
|
|
19
19
|
site-wide visual defaults in `site/theme.md`, homepage content and section
|
|
20
20
|
metadata in `site/content.md`, and technical settings such as URL and locale
|
|
21
|
-
|
|
21
|
+
in `site/config.md`. Keep source images under `site/images/<section-id>/`
|
|
22
22
|
and static public files under `site/public/`. The image folder name should
|
|
23
23
|
match the section id in Markdown, for example `## Work {#work}` uses
|
|
24
24
|
`site/images/work/`.
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
For a GitHub Pages project site without a custom domain, include the repository
|
|
27
|
+
path in the public URL:
|
|
28
28
|
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
29
|
+
```yaml
|
|
30
|
+
---
|
|
31
|
+
url: https://owner.github.io/repository-name/
|
|
32
|
+
---
|
|
34
33
|
```
|
|
35
34
|
|
|
35
|
+
Norna derives `/repository-name/` as the base path. Use a root URL such as
|
|
36
|
+
`https://example.com/` for a custom domain or root-hosted site.
|
|
37
|
+
|
|
36
38
|
In GitHub repository settings, configure Pages to build from GitHub Actions.
|
|
37
39
|
|
|
38
40
|
Page width, side gutters, layout density, typography rhythm, image width, image
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"norna:config:check": "norna config:check",
|
|
15
15
|
"norna:content:check": "norna content:check",
|
|
16
16
|
"norna:sync": "norna content:sync",
|
|
17
|
+
"norna:theme:export": "norna theme:export",
|
|
17
18
|
"norna:typography:presets": "norna typography presets",
|
|
18
19
|
"norna:typography:show": "norna typography show",
|
|
19
20
|
"norna:public": "norna site:public",
|
|
@@ -2,8 +2,6 @@ name: Deploy to GitHub Pages
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
5
|
workflow_dispatch:
|
|
8
6
|
|
|
9
7
|
permissions:
|
|
@@ -17,6 +15,7 @@ concurrency:
|
|
|
17
15
|
|
|
18
16
|
jobs:
|
|
19
17
|
build:
|
|
18
|
+
if: github.ref_name == github.event.repository.default_branch
|
|
20
19
|
runs-on: ubuntu-latest
|
|
21
20
|
steps:
|
|
22
21
|
- name: Checkout
|
|
@@ -18,8 +18,7 @@ npm run dev -- --kill
|
|
|
18
18
|
|
|
19
19
|
## Files
|
|
20
20
|
|
|
21
|
-
- `site/config.
|
|
22
|
-
repository, and deploy workflow.
|
|
21
|
+
- `site/config.md`: public URL and optional language and smooth scrolling.
|
|
23
22
|
- `site/sitewide-content.md`: shared brand or logo, banners and footer content.
|
|
24
23
|
- `site/theme.md`: site-wide visual settings such as layout density, typography
|
|
25
24
|
rhythm, palettes, section surfaces, and typography.
|
|
@@ -45,8 +44,8 @@ GitHub Pages workflow uses `npm ci`.
|
|
|
45
44
|
surfaces, and typography.
|
|
46
45
|
5. Put any local source images in the image folder for the Markdown section
|
|
47
46
|
that references them, for example `site/images/intro/`.
|
|
48
|
-
6. Edit `site/config.
|
|
49
|
-
|
|
47
|
+
6. Edit `site/config.md` for the public URL and, when needed, language or smooth
|
|
48
|
+
scrolling. Deploy commands discover the GitHub repository and default branch.
|
|
50
49
|
7. Update `package.json` with the site's package name and keep
|
|
51
50
|
`package-lock.json` committed.
|
|
52
51
|
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"norna:config:check": "norna config:check",
|
|
15
15
|
"norna:content:check": "norna content:check",
|
|
16
16
|
"norna:sync": "norna content:sync",
|
|
17
|
+
"norna:theme:export": "norna theme:export",
|
|
17
18
|
"norna:typography:presets": "norna typography presets",
|
|
18
19
|
"norna:typography:show": "norna typography show",
|
|
19
20
|
"norna:public": "norna site:public",
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
site: {
|
|
3
|
-
url: 'http://localhost:4321/',
|
|
4
|
-
basePath: '/',
|
|
5
|
-
},
|
|
6
|
-
navigation: {
|
|
7
|
-
smoothScroll: {
|
|
8
|
-
enabled: true,
|
|
9
|
-
minimumDurationMs: 600,
|
|
10
|
-
maximumDurationMs: 1_200,
|
|
11
|
-
durationPerPixelMs: 0.2,
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
locale: {
|
|
15
|
-
lang: 'en',
|
|
16
|
-
labels: {
|
|
17
|
-
skipToContent: 'Skip to content',
|
|
18
|
-
sectionNavigation: 'Sections',
|
|
19
|
-
gallery: 'Images',
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
github: {
|
|
23
|
-
repo: 'owner/dog-shelter',
|
|
24
|
-
branch: 'main',
|
|
25
|
-
pagesWorkflow: 'Deploy to GitHub Pages',
|
|
26
|
-
},
|
|
27
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Home
|
|
3
|
-
description: A single-page dog shelter website built with Norna.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## What we do {#what-we-do}
|
|
7
|
-
|
|
8
|
-
We rescue and rehome dogs.
|
|
9
|
-
|
|
10
|
-
<!-- norna-image-provenance:
|
|
11
|
-
image: dog-house.svg
|
|
12
|
-
source: AI-assisted, hand-authored SVG
|
|
13
|
-
prompt: Draw a simple flat vector dog house with a friendly dog at the entrance,
|
|
14
|
-
using a small paper, red and dark-brown palette. No text and no external assets.
|
|
15
|
-
-->
|
|
16
|
-
|
|
17
|
-
```norna-image-stack
|
|
18
|
-
- image: dog-house.svg
|
|
19
|
-
alt: A brown dog standing at the entrance to a red dog house.
|
|
20
|
-
caption: Time to recover before adoption.
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## You can help {#you-can-help}
|
|
24
|
-
|
|
25
|
-
Adopt. Foster. Donate.
|
|
26
|
-
|
|
27
|
-
<!-- norna-image-provenance:
|
|
28
|
-
image: heart.svg
|
|
29
|
-
source: AI-assisted, hand-authored SVG
|
|
30
|
-
prompt: Draw two simple hands holding a red heart as a flat vector illustration,
|
|
31
|
-
using a small paper, red and dark-brown palette. No text or external assets.
|
|
32
|
-
-->
|
|
33
|
-
|
|
34
|
-
```norna-image-stack
|
|
35
|
-
- image: heart.svg
|
|
36
|
-
alt: Two open hands holding a red heart.
|
|
37
|
-
caption: Foster care helps another dog.
|
|
38
|
-
```
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 520" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">Dog at a shelter house</title>
|
|
3
|
-
<desc id="desc">A friendly brown dog stands at the entrance to a red wooden dog house.</desc>
|
|
4
|
-
<rect width="800" height="520" rx="32" fill="#eef3ef"/>
|
|
5
|
-
<path d="M0 405 Q180 365 380 405 T800 390 V520 H0Z" fill="#cad8bd"/>
|
|
6
|
-
<g stroke="#493c2b" stroke-width="8" stroke-linejoin="round">
|
|
7
|
-
<path d="M190 247 L400 82 L610 247" fill="#9f493a"/>
|
|
8
|
-
<path d="M236 222 H564 V432 H236Z" fill="#c8674f"/>
|
|
9
|
-
<path d="M327 432 V300 Q327 234 400 234 Q473 234 473 300 V432Z" fill="#332d29"/>
|
|
10
|
-
<path d="M213 244 L400 94 L587 244" fill="none" stroke="#7f3f32" stroke-width="24" stroke-linecap="round"/>
|
|
11
|
-
</g>
|
|
12
|
-
<g transform="translate(310 250)" stroke="#493c2b" stroke-width="6" stroke-linejoin="round">
|
|
13
|
-
<path d="M40 119 C47 80 93 64 142 76 C181 86 196 119 184 158 H58 C42 151 34 135 40 119Z" fill="#b8794d"/>
|
|
14
|
-
<path d="M62 94 C45 61 58 23 96 13 C133 3 169 27 168 64 C167 93 145 108 112 109 H76Z" fill="#b8794d"/>
|
|
15
|
-
<path d="M76 32 L53 3 L98 17" fill="#8c573a"/>
|
|
16
|
-
<path d="M143 25 L171 3 L164 46" fill="#8c573a"/>
|
|
17
|
-
<circle cx="92" cy="53" r="6" fill="#272522" stroke="none"/>
|
|
18
|
-
<circle cx="140" cy="53" r="6" fill="#272522" stroke="none"/>
|
|
19
|
-
<ellipse cx="116" cy="76" rx="25" ry="19" fill="#dca477"/>
|
|
20
|
-
<circle cx="116" cy="70" r="7" fill="#272522" stroke="none"/>
|
|
21
|
-
<path d="M105 84 Q116 96 129 84" fill="none" stroke-linecap="round"/>
|
|
22
|
-
<path d="M59 154 V188 M94 154 V188 M145 154 V188" fill="none" stroke-linecap="round"/>
|
|
23
|
-
<path d="M177 105 Q220 80 211 39" fill="none" stroke-linecap="round"/>
|
|
24
|
-
</g>
|
|
25
|
-
</svg>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 520" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">Hands holding a heart</title>
|
|
3
|
-
<desc id="desc">Two open hands support a large red heart.</desc>
|
|
4
|
-
<rect width="800" height="520" rx="32" fill="#f3eee5"/>
|
|
5
|
-
<circle cx="400" cy="250" r="176" fill="#e5dccd"/>
|
|
6
|
-
<path d="M400 354 C368 316 263 252 263 166 C263 108 309 79 354 92 C379 99 394 116 400 135 C406 116 421 99 446 92 C491 79 537 108 537 166 C537 252 432 316 400 354Z" fill="#b84f45" stroke="#493c2b" stroke-width="8" stroke-linejoin="round"/>
|
|
7
|
-
<g fill="#d5a071" stroke="#493c2b" stroke-width="7" stroke-linecap="round" stroke-linejoin="round">
|
|
8
|
-
<path d="M74 368 C144 330 211 328 291 365 L363 407 C382 420 373 451 350 450 L268 426 C228 414 191 421 154 451 L92 502 L30 429Z"/>
|
|
9
|
-
<path d="M726 368 C656 330 589 328 509 365 L437 407 C418 420 427 451 450 450 L532 426 C572 414 609 421 646 451 L708 502 L770 429Z"/>
|
|
10
|
-
<path d="M290 365 L350 349 C369 344 383 360 376 378 L363 407"/>
|
|
11
|
-
<path d="M510 365 L450 349 C431 344 417 360 424 378 L437 407"/>
|
|
12
|
-
</g>
|
|
13
|
-
</svg>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
layout:
|
|
3
|
-
density: normal
|
|
4
|
-
pageWidth: 1180px
|
|
5
|
-
gutter:
|
|
6
|
-
desktop: clamp(1.25rem, 4vw, 3rem)
|
|
7
|
-
mobile: 1rem
|
|
8
|
-
gallery:
|
|
9
|
-
width: 760px
|
|
10
|
-
maxAvailableWidthPercent:
|
|
11
|
-
desktop: 100
|
|
12
|
-
mobile: 100
|
|
13
|
-
maxAvailableHeightPercent:
|
|
14
|
-
desktop: 72
|
|
15
|
-
mobile: 68
|
|
16
|
-
typography:
|
|
17
|
-
fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
|
|
18
|
-
preset: text-forward
|
|
19
|
-
rhythm: normal
|
|
20
|
-
presentation:
|
|
21
|
-
palette: paper
|
|
22
|
-
sectionSurfaces:
|
|
23
|
-
mode: cycle
|
|
24
|
-
sequence: [base, soft]
|
|
25
|
-
---
|