@janga/norna 0.7.8 → 0.7.10
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 +1 -1
- package/docs/README.md +18 -11
- package/docs/configuration.md +9 -54
- package/docs/content.md +6 -7
- package/docs/design/norna-diagram-design.md +158 -0
- package/docs/getting-started.md +18 -16
- package/docs/routes.md +7 -6
- package/docs/site-structure.md +4 -2
- package/docs/sitewide-content.md +74 -0
- package/docs/theme.md +61 -128
- package/docs/typography.md +45 -33
- package/examples/001-dog-shelter-single-page/README.md +9 -0
- package/examples/001-dog-shelter-single-page/site/config.mjs +27 -0
- package/examples/001-dog-shelter-single-page/site/content.md +38 -0
- package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
- package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
- package/examples/001-dog-shelter-single-page/site/public/favicon.svg +10 -0
- package/examples/001-dog-shelter-single-page/site/public/robots.txt +2 -0
- package/examples/001-dog-shelter-single-page/site/sitewide-content.md +6 -0
- package/examples/001-dog-shelter-single-page/site/theme.md +25 -0
- package/examples/002-dog-shelter-multi-page/README.md +9 -0
- package/examples/002-dog-shelter-multi-page/site/config.mjs +27 -0
- package/examples/002-dog-shelter-multi-page/site/content.md +12 -0
- package/examples/002-dog-shelter-multi-page/site/public/favicon.svg +10 -0
- package/examples/002-dog-shelter-multi-page/site/public/robots.txt +2 -0
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
- package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
- package/examples/002-dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
- package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +6 -0
- package/examples/002-dog-shelter-multi-page/site/theme.md +25 -0
- package/examples/dog-gallery/.astro/collections/site.schema.json +776 -0
- package/examples/dog-gallery/.astro/collections/theme.schema.json +672 -0
- package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
- package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
- package/examples/dog-gallery/.astro/content.d.ts +175 -0
- package/examples/dog-gallery/.astro/data-store.json +1 -0
- package/examples/dog-gallery/.astro/dev-local.json +8 -0
- package/examples/dog-gallery/.astro/dev.json +13 -0
- package/examples/dog-gallery/.astro/dev.log +95 -0
- package/examples/dog-gallery/.astro/settings.json +5 -0
- package/examples/dog-gallery/.astro/types.d.ts +2 -0
- package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
- package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +1 -0
- package/examples/dog-gallery/dist/dog-care/index.html +15 -0
- package/examples/dog-gallery/dist/dog-shelter-logo.svg +14 -0
- package/examples/dog-gallery/dist/favicon.svg +7 -0
- 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 +45 -0
- package/examples/dog-gallery/dist/robots.txt +2 -0
- package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +7 -7
- package/examples/dog-gallery/site/.norna/generated-images.json +8 -8
- package/examples/dog-gallery/site/config.mjs +0 -20
- package/examples/dog-gallery/site/content.md +4 -5
- package/examples/dog-gallery/site/public/logo.svg +14 -0
- package/examples/dog-gallery/site/sitewide-content.md +16 -0
- package/examples/dog-gallery/site/theme.md +13 -24
- package/examples/presentation/README.md +15 -0
- package/examples/presentation/site/.norna/generated-images.json +66 -0
- package/examples/presentation/site/config.mjs +29 -0
- package/examples/presentation/site/content.md +67 -0
- package/examples/presentation/site/public/robots.txt +2 -0
- package/examples/presentation/site/routes/010-presets/route-content.md +63 -0
- package/examples/presentation/site/routes/010-presets/theme.md +4 -0
- package/examples/presentation/site/routes/020-media/images/cards/card-carousel.svg +11 -0
- package/examples/presentation/site/routes/020-media/images/cards/card-stack.svg +9 -0
- package/examples/presentation/site/routes/020-media/images/cards/card-surfaces.svg +8 -0
- package/examples/presentation/site/routes/020-media/images/carousel/carousel-one.svg +8 -0
- package/examples/presentation/site/routes/020-media/images/carousel/carousel-three.svg +13 -0
- package/examples/presentation/site/routes/020-media/images/carousel/carousel-two.svg +8 -0
- package/examples/presentation/site/routes/020-media/images/stack/stack-one.svg +8 -0
- package/examples/presentation/site/routes/020-media/images/stack/stack-two.svg +9 -0
- package/examples/presentation/site/routes/020-media/route-content.md +77 -0
- package/examples/presentation/site/routes/020-media/theme.md +4 -0
- package/examples/presentation/site/routes/030-surfaces/route-content.md +44 -0
- package/examples/presentation/site/routes/030-surfaces/theme.md +7 -0
- package/examples/presentation/site/sitewide-content.md +6 -0
- package/examples/presentation/site/theme.md +43 -0
- package/examples/typography-presets/.astro/collections/routeTheme.schema.json +746 -0
- package/examples/typography-presets/.astro/collections/site.schema.json +59 -0
- package/examples/typography-presets/.astro/collections/sitewide.schema.json +114 -0
- package/examples/typography-presets/.astro/collections/theme.schema.json +770 -0
- package/examples/typography-presets/.astro/content-assets.mjs +4 -0
- package/examples/typography-presets/.astro/content-modules.mjs +1 -0
- package/examples/typography-presets/.astro/content.d.ts +183 -0
- package/examples/typography-presets/.astro/data-store.json +1 -0
- package/examples/typography-presets/.astro/dev-local.json +8 -0
- package/examples/typography-presets/.astro/dev.json +15 -0
- package/examples/typography-presets/.astro/dev.log +45 -0
- package/examples/typography-presets/.astro/settings.json +5 -0
- package/examples/typography-presets/.astro/types.d.ts +2 -0
- package/examples/typography-presets/node_modules/.vite/deps/_metadata.json +80 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/typography-presets/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 +1534 -0
- package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
- package/examples/typography-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/package.json +3 -0
- package/examples/typography-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/examples/typography-presets/site/.norna/generated-images.json +290 -0
- package/examples/typography-presets/site/config.mjs +29 -0
- package/examples/typography-presets/site/content.md +16 -0
- package/examples/typography-presets/site/public/robots.txt +2 -0
- package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/puppy-portrait.jpg +0 -0
- package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/shepherd-portrait.jpg +0 -0
- package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/white-puppy.jpg +0 -0
- package/examples/typography-presets/site/routes/010-quiet-gallery/route-content.md +34 -0
- package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +4 -0
- package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/black-schnauzer.jpg +0 -0
- package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/retriever-portrait.jpg +0 -0
- package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/schnauzer-portrait.jpg +0 -0
- package/examples/typography-presets/site/routes/020-compact-gallery/route-content.md +33 -0
- package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +4 -0
- package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/boxer-portrait.jpg +0 -0
- package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/grass-puppy.jpg +0 -0
- package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/grey-street-dog.jpg +0 -0
- package/examples/typography-presets/site/routes/030-text-forward/route-content.md +34 -0
- package/examples/typography-presets/site/routes/030-text-forward/theme.md +4 -0
- package/examples/typography-presets/site/routes/040-statement/images/statement/black-pedigree.jpg +0 -0
- package/examples/typography-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg +0 -0
- package/examples/typography-presets/site/routes/040-statement/images/statement/sheepdog-wide.jpg +0 -0
- package/examples/typography-presets/site/routes/040-statement/route-content.md +34 -0
- package/examples/typography-presets/site/routes/040-statement/theme.md +4 -0
- package/examples/typography-presets/site/sitewide-content.md +14 -0
- package/examples/typography-presets/site/theme.md +43 -0
- package/fixtures/basic/site/config.mjs +0 -13
- package/fixtures/basic/site/sitewide-content.md +12 -0
- package/fixtures/basic/site/theme.md +2 -2
- package/fixtures/content-model-v2/site/content.md +2 -5
- package/fixtures/content-model-v2/site/theme.md +1 -3
- package/package.json +3 -2
- package/scripts/check-config.mjs +22 -1
- package/scripts/lib/frontmatter-yaml.mjs +28 -0
- package/scripts/lib/logo-assets.mjs +35 -0
- package/scripts/lib/norna-markdown-blocks.mjs +166 -0
- package/scripts/lib/presentation.mjs +104 -46
- package/scripts/lib/project-config.mjs +67 -105
- package/scripts/lib/site-content.mjs +26 -42
- package/scripts/lib/site-paths.mjs +2 -0
- package/scripts/lib/sitewide-config.mjs +34 -0
- package/scripts/lib/theme-config.mjs +72 -6
- package/scripts/lib/typography.mjs +20 -26
- package/scripts/show-typography.mjs +40 -147
- package/scripts/sync-content-sections.mjs +19 -14
- package/scripts/test-content-check.mjs +76 -14
- package/scripts/test-content-model-v2.mjs +154 -0
- package/scripts/test-engine-commands.mjs +3 -1
- package/scripts/test-package-check.mjs +78 -19
- package/scripts/test-temporary-visibility.mjs +19 -2
- package/src/components/CardList.astro +5 -2
- package/src/components/GalleryGrid.astro +37 -16
- package/src/components/SiteBanners.astro +100 -0
- package/src/components/SiteNavigation.astro +48 -31
- package/src/components/SitePage.astro +55 -13
- package/src/components/SiteSection.astro +194 -36
- package/src/content.config.ts +78 -48
- package/src/layouts/BaseLayout.astro +64 -14
- package/src/lib/routeThemes.ts +61 -0
- package/src/lib/sectionContent.ts +236 -44
- package/src/lib/sitePublicAssets.ts +1 -0
- package/src/styles/global.css +282 -93
- package/starters/basic/.github/workflows/deploy.yml +1 -1
- package/starters/basic/README.md +7 -6
- package/starters/basic/site/config.mjs +0 -13
- package/starters/basic/site/content.md +1 -1
- package/starters/basic/site/sitewide-content.md +14 -0
- package/starters/basic/site/theme.md +13 -24
- package/starters/project/.github/workflows/deploy.yml +1 -1
- package/starters/project/README.md +10 -8
- package/starters/project/site/config.mjs +0 -13
- package/starters/project/site/sitewide-content.md +14 -0
- package/starters/project/site/theme.md +3 -11
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ A `norna` site is file-driven:
|
|
|
24
24
|
2. The site keeps technical settings, including public URL and optional URL
|
|
25
25
|
base path, in `site/config.mjs`.
|
|
26
26
|
3. The site keeps site-wide visual theme defaults, including layout, image
|
|
27
|
-
sizing, font, typography,
|
|
27
|
+
sizing, font, typography, palettes, and section surfaces, in `site/theme.md`.
|
|
28
28
|
4. The site keeps homepage content, Markdown section order, managed media
|
|
29
29
|
blocks, alt text, captions, and optional section metadata in
|
|
30
30
|
`site/content.md`.
|
package/docs/README.md
CHANGED
|
@@ -10,13 +10,14 @@ For a site maintainer:
|
|
|
10
10
|
1. [Getting Started](getting-started.md)
|
|
11
11
|
2. [Site Structure](site-structure.md)
|
|
12
12
|
3. [Theme](theme.md)
|
|
13
|
-
4. [
|
|
14
|
-
5. [
|
|
15
|
-
6. [
|
|
16
|
-
7. [
|
|
17
|
-
8. [
|
|
18
|
-
9. [
|
|
19
|
-
10. [
|
|
13
|
+
4. [Sitewide Content](sitewide-content.md)
|
|
14
|
+
5. [Configuration](configuration.md)
|
|
15
|
+
6. [Content](content.md)
|
|
16
|
+
7. [Typography](typography.md)
|
|
17
|
+
8. [Routes](routes.md)
|
|
18
|
+
9. [Images And Metadata](images-and-metadata.md)
|
|
19
|
+
10. [Local Development](local-development.md)
|
|
20
|
+
11. [Publishing](publishing.md)
|
|
20
21
|
|
|
21
22
|
For a developer integrating or updating the engine:
|
|
22
23
|
|
|
@@ -32,17 +33,20 @@ For design and naming principles:
|
|
|
32
33
|
|
|
33
34
|
1. [Command Organization](design/command-organization.md)
|
|
34
35
|
2. [Site Examples Structure](design/site-examples-structure.md)
|
|
36
|
+
3. [Norna Diagram Design](design/norna-diagram-design.md)
|
|
35
37
|
|
|
36
38
|
For a quick reference:
|
|
37
39
|
|
|
38
40
|
- [Configuration](configuration.md) describes technical `site/config.mjs`
|
|
39
|
-
fields such as URL, base path, locale labels,
|
|
41
|
+
fields such as URL, base path, locale labels, GitHub, and deploy
|
|
40
42
|
settings.
|
|
43
|
+
- [Sitewide Content](sitewide-content.md) describes shared site identity, banners
|
|
44
|
+
and footer content in `site/sitewide-content.md`.
|
|
41
45
|
- [Content](content.md) describes page frontmatter, Markdown-authored
|
|
42
|
-
sections, optional section metadata, managed media blocks, temporary
|
|
43
|
-
|
|
46
|
+
sections, optional section metadata, managed media blocks, temporary sections,
|
|
47
|
+
and content validation.
|
|
44
48
|
- [Theme](theme.md) describes site-wide layout, layout density, image sizing,
|
|
45
|
-
font, typography rhythm, presentation
|
|
49
|
+
font, typography rhythm, presentation palettes, and section surfaces.
|
|
46
50
|
- [Typography](typography.md) describes presets, rhythms, roles, overrides,
|
|
47
51
|
inheritance, and inspection commands.
|
|
48
52
|
- [Routes](routes.md) describes route files, slugs, route navigation, and
|
|
@@ -58,6 +62,9 @@ Design documents are intentionally separate from the user reference:
|
|
|
58
62
|
- [Site Examples Structure](design/site-examples-structure.md) defines the
|
|
59
63
|
intended vocabulary for starters, examples, documentation sites, reference
|
|
60
64
|
docs, and fixtures.
|
|
65
|
+
- [Norna Diagram Design](design/norna-diagram-design.md) defines the first
|
|
66
|
+
experiment for technical and pedagogical diagrams without adding external
|
|
67
|
+
diagram tooling to the build pipeline.
|
|
61
68
|
|
|
62
69
|
Site repositories should document only their site-specific choices and link here
|
|
63
70
|
for generic `norna` behavior.
|
package/docs/configuration.md
CHANGED
|
@@ -72,7 +72,7 @@ Use [Theme](theme.md) for:
|
|
|
72
72
|
- `gallery.maxAvailableHeightPercent`
|
|
73
73
|
- `typography.fontFamily`
|
|
74
74
|
- typography presets, rhythm, and overrides
|
|
75
|
-
- presentation
|
|
75
|
+
- presentation palettes and section surfaces
|
|
76
76
|
|
|
77
77
|
## Navigation
|
|
78
78
|
|
|
@@ -141,6 +141,10 @@ Fields:
|
|
|
141
141
|
`Sections`.
|
|
142
142
|
- `locale.labels.menu`: mobile menu summary text, default `Menu`.
|
|
143
143
|
- `locale.labels.closeMenu`: reserved close-menu label, default `Close menu`.
|
|
144
|
+
- `locale.labels.dismissBanner`: banner dismissal button label, default
|
|
145
|
+
`Dismiss notice`.
|
|
146
|
+
- `locale.labels.siteBanners`: ARIA label for the banner stack, default
|
|
147
|
+
`Site notices`.
|
|
144
148
|
- `locale.labels.gallery`: Norna managed media ARIA label prefix, default
|
|
145
149
|
`Images`.
|
|
146
150
|
|
|
@@ -160,60 +164,11 @@ locale: {
|
|
|
160
164
|
}
|
|
161
165
|
```
|
|
162
166
|
|
|
163
|
-
##
|
|
167
|
+
## Sitewide Content
|
|
164
168
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
- Type: string.
|
|
169
|
-
- Required: no.
|
|
170
|
-
- Default: hidden.
|
|
171
|
-
- Validation: if set, it must be a non-empty string. `undefined`, `null`, and
|
|
172
|
-
`''` are treated as absent.
|
|
173
|
-
- Consequence: footer rendering is enabled when this or enabled build info is
|
|
174
|
-
present.
|
|
175
|
-
|
|
176
|
-
### `footer.buildInfo`
|
|
177
|
-
|
|
178
|
-
- Purpose: optional footer build timestamp.
|
|
179
|
-
- Type: object, `false`, `null`, or omitted.
|
|
180
|
-
- Required: no.
|
|
181
|
-
- Default: hidden.
|
|
182
|
-
- Validation: object fields are validated when the object is present. `false`,
|
|
183
|
-
`null`, or omission hides build info.
|
|
184
|
-
|
|
185
|
-
Fields:
|
|
186
|
-
|
|
187
|
-
- `footer.buildInfo.enabled`: boolean, default `true`.
|
|
188
|
-
- `footer.buildInfo.text`: required non-empty string.
|
|
189
|
-
- `footer.buildInfo.dateTimeFormat`: required object.
|
|
190
|
-
- `footer.buildInfo.dateTimeFormat.locale`: required string.
|
|
191
|
-
- `footer.buildInfo.dateTimeFormat.timeZone`: required string.
|
|
192
|
-
- `footer.buildInfo.dateTimeFormat.dateStyle`: required string.
|
|
193
|
-
- `footer.buildInfo.dateTimeFormat.timeStyle`: required string.
|
|
194
|
-
|
|
195
|
-
The date/time object must be accepted by `Intl.DateTimeFormat`.
|
|
196
|
-
|
|
197
|
-
Example:
|
|
198
|
-
|
|
199
|
-
```js
|
|
200
|
-
footer: {
|
|
201
|
-
copyrightMessage: '(c) Example Artist.',
|
|
202
|
-
buildInfo: {
|
|
203
|
-
enabled: true,
|
|
204
|
-
text: 'Built',
|
|
205
|
-
dateTimeFormat: {
|
|
206
|
-
locale: 'en-GB',
|
|
207
|
-
timeZone: 'UTC',
|
|
208
|
-
dateStyle: 'short',
|
|
209
|
-
timeStyle: 'short',
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
If both `footer.copyrightMessage` and enabled `footer.buildInfo` are absent, the
|
|
216
|
-
footer is not rendered.
|
|
169
|
+
Shared site identity, banners and footer content are defined in
|
|
170
|
+
`site/sitewide-content.md`. See [Sitewide Content](sitewide-content.md) for the
|
|
171
|
+
schema and examples.
|
|
217
172
|
|
|
218
173
|
## GitHub
|
|
219
174
|
|
package/docs/content.md
CHANGED
|
@@ -18,9 +18,6 @@ The Astro content schema validates these top-level fields in page files:
|
|
|
18
18
|
- `title`: required string. Rendered as the document title.
|
|
19
19
|
- `description`: required string. Rendered as the meta description.
|
|
20
20
|
- `navigation`: optional page navigation metadata. See [Routes](routes.md).
|
|
21
|
-
- `presentation`: optional page-level presentation overrides. See
|
|
22
|
-
[Theme](theme.md) and [Typography](typography.md).
|
|
23
|
-
- `frame`: optional page-level frame color source. See [Theme](theme.md).
|
|
24
21
|
- `sections`: optional section metadata keyed by section id.
|
|
25
22
|
|
|
26
23
|
Minimal homepage:
|
|
@@ -71,16 +68,18 @@ current section, not new sections.
|
|
|
71
68
|
## Section Metadata
|
|
72
69
|
|
|
73
70
|
Use `sections` only when a section needs structured metadata that is not
|
|
74
|
-
naturally expressed by Markdown
|
|
71
|
+
naturally expressed by Markdown. Currently this is date-based visibility.
|
|
75
72
|
|
|
76
73
|
```yaml
|
|
77
74
|
sections:
|
|
78
75
|
work:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
visible:
|
|
77
|
+
from: "2026-08-01"
|
|
78
|
+
until: "2026-09-16"
|
|
82
79
|
```
|
|
83
80
|
|
|
81
|
+
See [Temporary Sections](#temporary-sections) for visibility semantics.
|
|
82
|
+
|
|
84
83
|
Each `sections.<section-id>` key must match a Markdown heading id in the same
|
|
85
84
|
page file:
|
|
86
85
|
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Norna Diagram Design
|
|
2
|
+
|
|
3
|
+
This document defines a repository-local workflow for creating technical and
|
|
4
|
+
pedagogical diagrams for Norna.
|
|
5
|
+
|
|
6
|
+
It is intentionally not a vendored copy of any external skill, MCP server, or
|
|
7
|
+
diagram tool. The first experiment should use hand-authored SVG assets managed
|
|
8
|
+
by Norna's existing image model.
|
|
9
|
+
|
|
10
|
+
## Goal
|
|
11
|
+
|
|
12
|
+
Norna diagrams should help a new reader understand the site model faster than
|
|
13
|
+
text alone.
|
|
14
|
+
|
|
15
|
+
A diagram should explain one idea clearly, not show every related feature. If a
|
|
16
|
+
topic needs several ideas, split it into several diagrams.
|
|
17
|
+
|
|
18
|
+
## Current Scope
|
|
19
|
+
|
|
20
|
+
Use this workflow for diagrams in the Norna documentation site under `site/`.
|
|
21
|
+
|
|
22
|
+
Do not add diagram generation to the Norna build pipeline yet. Diagram creation
|
|
23
|
+
is an authoring workflow for now, not product functionality.
|
|
24
|
+
|
|
25
|
+
Do not require Excalidraw, MCP servers, browser plugins, or external layout
|
|
26
|
+
tools for the first experiment.
|
|
27
|
+
|
|
28
|
+
## Diagram Brief
|
|
29
|
+
|
|
30
|
+
Before creating or replacing a diagram, write a short brief:
|
|
31
|
+
|
|
32
|
+
```md
|
|
33
|
+
Purpose:
|
|
34
|
+
Audience:
|
|
35
|
+
Main message:
|
|
36
|
+
Concepts to show:
|
|
37
|
+
Concepts to avoid:
|
|
38
|
+
Norna features that must not be implied:
|
|
39
|
+
Suggested layout:
|
|
40
|
+
Mobile/readability requirement:
|
|
41
|
+
Where the SVG will live:
|
|
42
|
+
Markdown block and alt text:
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The brief can live in the discussion, in a source-only Markdown comment near
|
|
46
|
+
the image, or in `docs/design/` when it is useful for future maintenance.
|
|
47
|
+
|
|
48
|
+
## Design Principles
|
|
49
|
+
|
|
50
|
+
- Show one primary flow or relationship.
|
|
51
|
+
- Prefer two to five main objects.
|
|
52
|
+
- Use short labels.
|
|
53
|
+
- Use one clear visual hierarchy.
|
|
54
|
+
- Keep arrows few and directional.
|
|
55
|
+
- Avoid diagrams where every object connects to every other object.
|
|
56
|
+
- Prefer multiple simple diagrams over one dense diagram.
|
|
57
|
+
- Make route order, URL slugs, section ids, image folders, source files, and
|
|
58
|
+
generated output visually distinct when those ideas matter.
|
|
59
|
+
- Do not show templates, components, custom rendering logic, route-level
|
|
60
|
+
technical configuration, or hosting integrations that Norna does not support.
|
|
61
|
+
- Do not show page layouts that Norna cannot actually render unless the diagram
|
|
62
|
+
is clearly abstract and not a product capability example.
|
|
63
|
+
|
|
64
|
+
## Norna-Specific Accuracy
|
|
65
|
+
|
|
66
|
+
Diagrams must match the current Norna model:
|
|
67
|
+
|
|
68
|
+
- A Norna site is described with site files, not arbitrary project structure.
|
|
69
|
+
- `content.md` is the homepage content file.
|
|
70
|
+
- `sitewide-content.md` contains shared site identity, banners, and footer
|
|
71
|
+
content.
|
|
72
|
+
- Additional pages are route directories with `route-content.md`.
|
|
73
|
+
- Route folder prefixes control route presentation order.
|
|
74
|
+
- Route ids become default URL slugs.
|
|
75
|
+
- Images belong under the image root for the page or route, usually grouped by
|
|
76
|
+
section id.
|
|
77
|
+
- Markdown remains the primary writing format.
|
|
78
|
+
- Norna managed media blocks cover fixed site patterns such as image stacks,
|
|
79
|
+
carousels, and card lists.
|
|
80
|
+
- `theme.md` controls visual presentation.
|
|
81
|
+
- `config.mjs` controls technical site configuration.
|
|
82
|
+
- `dist/` is generated static output.
|
|
83
|
+
- GitHub Pages is the integrated publishing target today.
|
|
84
|
+
|
|
85
|
+
## SVG Requirements
|
|
86
|
+
|
|
87
|
+
Use hand-authored SVG for the first experiment.
|
|
88
|
+
|
|
89
|
+
SVG assets should:
|
|
90
|
+
|
|
91
|
+
- have a `viewBox`;
|
|
92
|
+
- include `<title>` and `<desc>`;
|
|
93
|
+
- use real text, not outlined text;
|
|
94
|
+
- avoid external fonts and external image files;
|
|
95
|
+
- remain readable at the size used on the site;
|
|
96
|
+
- work when scaled down on a phone;
|
|
97
|
+
- use restrained colors that fit the surrounding page;
|
|
98
|
+
- avoid decorative effects that compete with the explanation;
|
|
99
|
+
- keep text inside boxes with visible margins;
|
|
100
|
+
- be maintainable by editing the SVG source.
|
|
101
|
+
|
|
102
|
+
If a diagram is too wide for mobile, prefer splitting it into smaller diagrams
|
|
103
|
+
over relying on horizontal scrolling.
|
|
104
|
+
|
|
105
|
+
## Source Placement
|
|
106
|
+
|
|
107
|
+
Store diagram SVG files as normal Norna managed image assets:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
site/routes/<NNN-route-id>/images/<section-id>/<diagram-name>.svg
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Reference them with a Norna managed media block:
|
|
114
|
+
|
|
115
|
+
````md
|
|
116
|
+
<!-- norna-image-provenance:
|
|
117
|
+
image: diagram-name.svg
|
|
118
|
+
source: hand-authored
|
|
119
|
+
Short maintenance note explaining why the diagram exists.
|
|
120
|
+
-->
|
|
121
|
+
|
|
122
|
+
```norna-image-stack
|
|
123
|
+
- image: diagram-name.svg
|
|
124
|
+
alt: Concise explanation of what the diagram shows.
|
|
125
|
+
```
|
|
126
|
+
````
|
|
127
|
+
|
|
128
|
+
## Review Checklist
|
|
129
|
+
|
|
130
|
+
Before accepting a diagram:
|
|
131
|
+
|
|
132
|
+
- The main message is obvious without reading the surrounding section.
|
|
133
|
+
- The diagram does not imply unsupported Norna functionality.
|
|
134
|
+
- URL, route, section, image, theme, config, and output terminology is
|
|
135
|
+
consistent with documentation.
|
|
136
|
+
- Text fits inside boxes at desktop and mobile widths.
|
|
137
|
+
- Arrows clarify the relationship instead of adding noise.
|
|
138
|
+
- The SVG has title, description, and useful alt text in Markdown.
|
|
139
|
+
- `norna content:check` passes.
|
|
140
|
+
- A desktop and mobile visual check has been done when layout changed.
|
|
141
|
+
|
|
142
|
+
## Relationship To Excalidraw
|
|
143
|
+
|
|
144
|
+
Excalidraw can be useful as a sketching style or inspiration for box-and-arrow
|
|
145
|
+
clarity, but the first Norna experiment should not depend on Excalidraw files,
|
|
146
|
+
exports, or MCP tooling.
|
|
147
|
+
|
|
148
|
+
If future experiments show that diagram generation should be automated, evaluate
|
|
149
|
+
that as a separate authoring tool or CLI. Do not make it part of the site build
|
|
150
|
+
engine unless there is a clear product reason.
|
|
151
|
+
|
|
152
|
+
## Future Questions
|
|
153
|
+
|
|
154
|
+
- Should diagram briefs become tracked files next to SVG assets?
|
|
155
|
+
- Should Norna have a separate authoring helper for diagrams?
|
|
156
|
+
- Should generated diagrams store both a source format and exported SVG?
|
|
157
|
+
- Should a later tool create Excalidraw-compatible files, plain SVG, or both?
|
|
158
|
+
- What review rules are needed before diagrams are used in starters or examples?
|
package/docs/getting-started.md
CHANGED
|
@@ -57,6 +57,7 @@ The starter contains:
|
|
|
57
57
|
- `.github/workflows/deploy.yml` for GitHub Pages
|
|
58
58
|
- `site/config.mjs`
|
|
59
59
|
- `site/theme.md`
|
|
60
|
+
- `site/sitewide-content.md`
|
|
60
61
|
- `site/content.md`
|
|
61
62
|
- `site/public/robots.txt`
|
|
62
63
|
|
|
@@ -88,21 +89,22 @@ Relevant documentation: [Commands](commands.md), [Site Structure](site-structure
|
|
|
88
89
|
## First Edits
|
|
89
90
|
|
|
90
91
|
1. Edit `site/config.mjs` for the site's URL, language labels, GitHub
|
|
91
|
-
repository,
|
|
92
|
-
2. Edit `site/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
repository, and deploy settings.
|
|
93
|
+
2. Edit `site/sitewide-content.md` for the shared brand or logo, banners and
|
|
94
|
+
footer content.
|
|
95
|
+
3. Edit `site/theme.md` for site-wide layout, layout density, typography
|
|
96
|
+
rhythm, image sizing, font, typography preset, palettes, and section
|
|
97
|
+
surfaces, or omit it to use engine defaults.
|
|
98
|
+
4. Edit `site/content.md` for homepage title, description, Markdown sections,
|
|
99
|
+
text, Norna managed media blocks, alt text, and captions.
|
|
100
|
+
5. Put source images under `site/images/<section-id>/`, where `<section-id>`
|
|
99
101
|
matches a `## Section {#section-id}` heading in `site/content.md`.
|
|
100
|
-
|
|
102
|
+
6. Add optional route pages under
|
|
101
103
|
`site/routes/<NNN-route-id>/route-content.md`, for example
|
|
102
104
|
`site/routes/010-about/route-content.md`.
|
|
103
|
-
|
|
105
|
+
7. Put static files such as `robots.txt`, `CNAME`, and favicons under
|
|
104
106
|
`site/public/`.
|
|
105
|
-
|
|
107
|
+
8. Run:
|
|
106
108
|
|
|
107
109
|
```sh
|
|
108
110
|
npm run norna:config:check
|
|
@@ -158,12 +160,12 @@ Read [Site Structure](site-structure.md), [Content](content.md),
|
|
|
158
160
|
[Configuration](configuration.md) before publishing a real site.
|
|
159
161
|
|
|
160
162
|
To change the site's maximum page width, side gutters, layout density,
|
|
161
|
-
typography rhythm, image width, image height limits, font,
|
|
163
|
+
typography rhythm, image width, image height limits, font, palettes, or
|
|
162
164
|
site-wide typography preset, edit `site/theme.md`. See [Theme](theme.md) for
|
|
163
165
|
the accepted shape.
|
|
164
166
|
|
|
165
|
-
To
|
|
166
|
-
|
|
167
|
-
`norna typography presets` to inspect the installed preset and rhythm values
|
|
168
|
-
`norna typography show` to inspect the resolved typography for the selected
|
|
167
|
+
To give a route a different visual expression, add a complete route-local
|
|
168
|
+
`theme.md`. See [Theme](theme.md#route-themes) and [Typography](typography.md).
|
|
169
|
+
Use `norna typography presets` to inspect the installed preset and rhythm values
|
|
170
|
+
and `norna typography show` to inspect the resolved typography for the selected
|
|
169
171
|
site.
|
package/docs/routes.md
CHANGED
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
under `site/routes/<NNN-route-id>/route-content.md` and build to first-level
|
|
5
5
|
URLs.
|
|
6
6
|
|
|
7
|
-
Routes use the same page frontmatter, optional section metadata, Norna
|
|
8
|
-
media blocks, and Markdown section model as the homepage. See
|
|
9
|
-
|
|
7
|
+
Routes use the same page frontmatter, optional section metadata, Norna-managed
|
|
8
|
+
media blocks, and Markdown section model as the homepage. See [Content](content.md)
|
|
9
|
+
for the page and section model.
|
|
10
10
|
|
|
11
11
|
Route directories can contain route content, route-local images, and
|
|
12
|
-
route-local
|
|
13
|
-
|
|
14
|
-
site directory's
|
|
12
|
+
an optional route-local `theme.md`. The route theme replaces the root visual
|
|
13
|
+
theme for that route. Route directories cannot contain technical site
|
|
14
|
+
configuration; technical configuration stays in the selected site directory's
|
|
15
|
+
top-level `config.mjs`.
|
|
15
16
|
|
|
16
17
|
## Route Directory Format
|
|
17
18
|
|
package/docs/site-structure.md
CHANGED
|
@@ -11,6 +11,7 @@ The selected site directory defaults to `site/`:
|
|
|
11
11
|
site/
|
|
12
12
|
|-- config.mjs
|
|
13
13
|
|-- theme.md
|
|
14
|
+
|-- sitewide-content.md
|
|
14
15
|
|-- content.md
|
|
15
16
|
|-- images/
|
|
16
17
|
| `-- <section-id>/
|
|
@@ -38,9 +39,10 @@ Version these files in a site repository:
|
|
|
38
39
|
|
|
39
40
|
- `site/config.mjs`: technical site configuration.
|
|
40
41
|
- `site/theme.md`: optional site-wide visual theme, including layout, spacing,
|
|
41
|
-
image sizing, font, typography defaults,
|
|
42
|
-
colors.
|
|
42
|
+
image sizing, font, typography defaults, palettes, and section surfaces.
|
|
43
43
|
See [Theme](theme.md).
|
|
44
|
+
- `site/sitewide-content.md`: shared site identity, banners and footer content.
|
|
45
|
+
See [Sitewide Content](sitewide-content.md).
|
|
44
46
|
- `site/content.md`: homepage page file with editable content, Markdown
|
|
45
47
|
sections, optional section metadata, managed media blocks, alt text, and
|
|
46
48
|
captions.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Sitewide Content
|
|
2
|
+
|
|
3
|
+
`site/sitewide-content.md` contains content and settings shared by the whole site. It
|
|
4
|
+
is separate from `content.md`, which defines the homepage, and from
|
|
5
|
+
`config.mjs`, which defines technical behaviour.
|
|
6
|
+
|
|
7
|
+
## Site identity
|
|
8
|
+
|
|
9
|
+
Use the optional `navigation` object for identity shared by all pages. `brand`
|
|
10
|
+
is the text shown in the home link when no logo is present. A logo is discovered
|
|
11
|
+
from one convention-based file in `site/public`: `logo.svg`, `logo.png`,
|
|
12
|
+
`logo.jpg`, or `logo.jpeg`.
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
navigation:
|
|
16
|
+
brand: Example Site
|
|
17
|
+
logo:
|
|
18
|
+
alt: Example Site
|
|
19
|
+
height: 2.6rem
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If `navigation.brand` is omitted, Norna uses the homepage `title` from
|
|
23
|
+
`site/content.md`. The logo's width is derived from its intrinsic aspect ratio.
|
|
24
|
+
If both a logo and a brand are present, the logo is displayed and the brand is
|
|
25
|
+
used as its text fallback and accessible default.
|
|
26
|
+
|
|
27
|
+
## Banners
|
|
28
|
+
|
|
29
|
+
Use `banners` for short notices shown above the page content on every route.
|
|
30
|
+
The list order controls the presentation order. Each banner needs a unique
|
|
31
|
+
`id`, a title and text:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
---
|
|
35
|
+
banners:
|
|
36
|
+
- id: project-status
|
|
37
|
+
tone: warning
|
|
38
|
+
visible:
|
|
39
|
+
from: "2026-08-01"
|
|
40
|
+
until: "2026-09-01"
|
|
41
|
+
title: Experimental code
|
|
42
|
+
text: Not for production use.
|
|
43
|
+
---
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`visible` uses the same date-window rules as temporary sections. Visitors can
|
|
47
|
+
dismiss individual active banners. The dismissal is stored locally in the
|
|
48
|
+
browser and is tied to the banner content, so an edited banner can appear
|
|
49
|
+
again.
|
|
50
|
+
|
|
51
|
+
The first version supports the `warning` tone. Keep banner text short; banners
|
|
52
|
+
are presented as compact single-line notices and may use an ellipsis when the
|
|
53
|
+
text does not fit.
|
|
54
|
+
|
|
55
|
+
## Footer
|
|
56
|
+
|
|
57
|
+
The footer is also sitewide content. `copyrightMessage` adds a copyright or
|
|
58
|
+
license sentence. `buildInfo` optionally adds a generated build timestamp:
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
footer:
|
|
62
|
+
copyrightMessage: (c) Example Artist.
|
|
63
|
+
buildInfo:
|
|
64
|
+
enabled: true
|
|
65
|
+
text: Built
|
|
66
|
+
dateTimeFormat:
|
|
67
|
+
locale: en-GB
|
|
68
|
+
timeZone: UTC
|
|
69
|
+
dateStyle: short
|
|
70
|
+
timeStyle: short
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If both the copyright message and enabled build information are absent, the
|
|
74
|
+
footer is not rendered.
|