@janga/norna 0.7.2 → 0.7.4
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 +16 -16
- package/bin/norna-cli.mjs +12 -7
- package/docs/README.md +11 -12
- package/docs/commands.md +9 -9
- package/docs/configuration.md +14 -145
- package/docs/content.md +17 -15
- package/docs/design/command-organization.md +58 -57
- package/docs/design/site-examples-structure.md +6 -5
- package/docs/engine-development.md +5 -5
- package/docs/getting-started.md +20 -26
- package/docs/images-and-metadata.md +1 -1
- package/docs/local-development.md +2 -2
- package/docs/publishing.md +1 -1
- package/docs/routes.md +2 -2
- package/docs/site-structure.md +8 -7
- package/docs/theme.md +133 -7
- package/docs/typography.md +78 -43
- package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
- package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
- package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/examples/dog-gallery/site/config.mjs +12 -42
- package/examples/dog-gallery/site/content.md +28 -6
- package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
- package/examples/dog-gallery/site/theme.md +83 -26
- package/fixtures/basic/site/config.mjs +2 -22
- package/fixtures/basic/site/content.md +1 -1
- package/fixtures/basic/site/theme.md +7 -3
- package/package.json +3 -3
- package/scripts/check-config.mjs +4 -3
- package/scripts/deploy-site.mjs +3 -3
- package/scripts/init-site.mjs +10 -8
- package/scripts/lib/frontmatter-yaml.mjs +85 -0
- package/scripts/lib/presentation.mjs +10 -11
- package/scripts/lib/project-config.mjs +146 -45
- package/scripts/lib/site-content.mjs +21 -3
- package/scripts/lib/theme-config.mjs +34 -0
- package/scripts/lib/typography.mjs +155 -35
- package/scripts/show-typography.mjs +127 -159
- package/scripts/sync-content-sections.mjs +6 -6
- package/scripts/test-content-check.mjs +3 -4
- package/scripts/test-engine-commands.mjs +21 -3
- package/scripts/test-package-check.mjs +34 -17
- package/scripts/test-temporary-visibility.mjs +2 -3
- package/src/components/SitePage.astro +2 -3
- package/src/components/SiteSection.astro +115 -19
- package/src/content.config.ts +66 -6
- package/src/layouts/BaseLayout.astro +11 -0
- package/src/styles/global.css +83 -52
- package/starters/basic/README.md +11 -15
- package/starters/basic/package.json +2 -2
- package/starters/basic/site/config.mjs +3 -24
- package/starters/basic/site/content.md +40 -7
- package/starters/basic/site/theme.md +84 -18
- package/starters/project/.github/workflows/deploy.yml +65 -0
- package/starters/project/README.md +72 -0
- package/starters/project/package-lock.json +4296 -0
- package/starters/project/package.json +35 -0
- package/starters/project/site/config.mjs +43 -0
- package/starters/project/site/content.md +128 -0
- package/starters/project/site/public/robots.txt +2 -0
- package/starters/project/site/routes/guide/route-content.md +85 -0
- package/starters/project/site/theme.md +43 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# norna
|
|
2
2
|
|
|
3
|
-
`norna` is a reusable command-line toolchain for small static
|
|
4
|
-
|
|
3
|
+
`norna` is a reusable command-line toolchain for small static websites.
|
|
4
|
+
It provides the CLI, Astro renderer, validation scripts, image pipeline,
|
|
5
5
|
starter project, fixtures, and deploy helpers used by site repositories such as
|
|
6
6
|
`www.walde.se`.
|
|
7
7
|
|
|
@@ -21,11 +21,11 @@ belong in each site repository. For example, Karin Walde's site lives in
|
|
|
21
21
|
A `norna` site is file-driven:
|
|
22
22
|
|
|
23
23
|
1. A site repository depends on this package.
|
|
24
|
-
2. The site keeps technical settings, including
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
4. The site keeps homepage content, section order,
|
|
24
|
+
2. The site keeps technical settings, including public URL and optional URL
|
|
25
|
+
base path, in `site/config.mjs`.
|
|
26
|
+
3. The site keeps site-wide visual theme defaults, including layout, image
|
|
27
|
+
sizing, font, typography, colors, and frame colors, in `site/theme.md`.
|
|
28
|
+
4. The site keeps homepage content, section order, image rows, alt text, and
|
|
29
29
|
captions in `site/content.md`.
|
|
30
30
|
5. Optional route pages live under
|
|
31
31
|
`site/routes/<route-folder>/route-content.md`.
|
|
@@ -56,10 +56,10 @@ For a new site repository:
|
|
|
56
56
|
|
|
57
57
|
```sh
|
|
58
58
|
cd ../
|
|
59
|
-
npx @janga/norna@latest init my-
|
|
60
|
-
cd my-
|
|
59
|
+
npx @janga/norna@latest init my-site
|
|
60
|
+
cd my-site
|
|
61
61
|
npm install
|
|
62
|
-
npm run
|
|
62
|
+
npm run dev
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Run `init` before `npm install`. A new site directory is not a Node project
|
|
@@ -75,18 +75,18 @@ Actions use the same engine version.
|
|
|
75
75
|
|
|
76
76
|
- Create a site: [Getting Started](docs/getting-started.md)
|
|
77
77
|
- Understand required site files: [Site Structure](docs/site-structure.md)
|
|
78
|
-
- Edit sections and
|
|
78
|
+
- Edit sections and image rows: [Content](docs/content.md)
|
|
79
79
|
- Configure a site: [Configuration](docs/configuration.md)
|
|
80
80
|
- Publish under a GitHub Pages project path:
|
|
81
81
|
[`site.basePath`](docs/configuration.md#sitebasepath)
|
|
82
82
|
- Configure site-wide theme: [Theme](docs/theme.md)
|
|
83
83
|
- Add route pages: [Routes](docs/routes.md)
|
|
84
|
-
- Set page width: [`layout.pageWidth`](docs/
|
|
85
|
-
- Set side gutters: [`layout.gutter`](docs/
|
|
86
|
-
- Set
|
|
84
|
+
- Set page width: [`layout.pageWidth`](docs/theme.md#layout)
|
|
85
|
+
- Set side gutters: [`layout.gutter`](docs/theme.md#layout)
|
|
86
|
+
- Set image area width: [`gallery.width`](docs/theme.md#image-sizing)
|
|
87
87
|
- Keep images within viewport height:
|
|
88
|
-
[`gallery.maxAvailableHeightPercent`](docs/
|
|
89
|
-
- Set the site font: [`typography.fontFamily`](docs/
|
|
88
|
+
[`gallery.maxAvailableHeightPercent`](docs/theme.md#image-sizing)
|
|
89
|
+
- Set the site font: [`typography.fontFamily`](docs/theme.md#typography)
|
|
90
90
|
- Choose typography presets and overrides: [Typography](docs/typography.md)
|
|
91
91
|
- Look up CLI and npm scripts: [Commands](docs/commands.md)
|
|
92
92
|
- Understand generated images: [Images And Metadata](docs/images-and-metadata.md)
|
package/bin/norna-cli.mjs
CHANGED
|
@@ -15,10 +15,10 @@ Commands:
|
|
|
15
15
|
dev:logs Show local dev server logs
|
|
16
16
|
dev:stop Stop local dev server
|
|
17
17
|
config:check Validate site/config.mjs
|
|
18
|
-
content:check Validate site/content.md and
|
|
18
|
+
content:check Validate site/content.md and image references
|
|
19
19
|
content:sync Rewrite section order and move misplaced images
|
|
20
|
-
typography
|
|
21
|
-
typography
|
|
20
|
+
typography presets Show built-in typography preset values
|
|
21
|
+
typography show Show resolved typography for the selected site
|
|
22
22
|
site:public Sync site/public/ to public/
|
|
23
23
|
images Generate optimized image variants
|
|
24
24
|
engine:update Update @janga/norna in a site repository
|
|
@@ -86,6 +86,7 @@ if (siteDir) {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
const [command = 'help', ...rest] = commandArgs;
|
|
89
|
+
const [subcommand, ...subcommandRest] = rest;
|
|
89
90
|
|
|
90
91
|
if (command === '-h' || command === '--help' || command === 'help') {
|
|
91
92
|
console.log(usage);
|
|
@@ -130,10 +131,14 @@ try {
|
|
|
130
131
|
await runAstroInherit(['sync']);
|
|
131
132
|
} else if (command === 'content:sync') {
|
|
132
133
|
await runScript('scripts/sync-content-sections.mjs', ['--write', ...rest]);
|
|
133
|
-
} else if (command === 'typography:presets') {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
} else if (command === 'typography:presets' || (command === 'typography' && subcommand === 'presets')) {
|
|
135
|
+
const scriptArgs = command === 'typography' ? subcommandRest : rest;
|
|
136
|
+
await runScript('scripts/show-typography.mjs', ['presets', ...scriptArgs]);
|
|
137
|
+
} else if (command === 'typography:show' || (command === 'typography' && subcommand === 'show')) {
|
|
138
|
+
const scriptArgs = command === 'typography' ? subcommandRest : rest;
|
|
139
|
+
await runScript('scripts/show-typography.mjs', ['show', ...scriptArgs]);
|
|
140
|
+
} else if (command === 'typography') {
|
|
141
|
+
throw new Error(`Unknown typography command: ${subcommand ?? ''}\n${usage}`);
|
|
137
142
|
} else if (command === 'site:public') {
|
|
138
143
|
await runScript('scripts/sync-site-public.mjs', rest);
|
|
139
144
|
} else if (command === 'images') {
|
package/docs/README.md
CHANGED
|
@@ -9,9 +9,9 @@ For a site maintainer:
|
|
|
9
9
|
|
|
10
10
|
1. [Getting Started](getting-started.md)
|
|
11
11
|
2. [Site Structure](site-structure.md)
|
|
12
|
-
3. [
|
|
13
|
-
4. [
|
|
14
|
-
5. [
|
|
12
|
+
3. [Theme](theme.md)
|
|
13
|
+
4. [Configuration](configuration.md)
|
|
14
|
+
5. [Content](content.md)
|
|
15
15
|
6. [Typography](typography.md)
|
|
16
16
|
7. [Routes](routes.md)
|
|
17
17
|
8. [Images And Metadata](images-and-metadata.md)
|
|
@@ -35,16 +35,15 @@ For design and naming principles:
|
|
|
35
35
|
|
|
36
36
|
For a quick reference:
|
|
37
37
|
|
|
38
|
-
- [Configuration](configuration.md) describes
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
default.
|
|
38
|
+
- [Configuration](configuration.md) describes technical `site/config.mjs`
|
|
39
|
+
fields such as URL, base path, locale labels, footer, GitHub, and deploy
|
|
40
|
+
settings.
|
|
42
41
|
- [Content](content.md) describes page frontmatter, section frontmatter,
|
|
43
|
-
|
|
42
|
+
image rows, carousels, temporary sections, Markdown section matching, and
|
|
44
43
|
content validation.
|
|
45
|
-
- [Theme](theme.md) describes site-wide
|
|
46
|
-
presentation
|
|
47
|
-
- [Typography](typography.md) describes presets, roles, overrides,
|
|
44
|
+
- [Theme](theme.md) describes site-wide layout, layout density, image sizing,
|
|
45
|
+
font, typography rhythm, presentation colors, frame colors, and inline styles.
|
|
46
|
+
- [Typography](typography.md) describes presets, rhythms, roles, overrides,
|
|
48
47
|
inheritance, and inspection commands.
|
|
49
48
|
- [Routes](routes.md) describes route files, slugs, route navigation, and
|
|
50
49
|
route image directories.
|
|
@@ -55,7 +54,7 @@ For a quick reference:
|
|
|
55
54
|
Design documents are intentionally separate from the user reference:
|
|
56
55
|
|
|
57
56
|
- [Command Organization](design/command-organization.md) defines command
|
|
58
|
-
namespaces for
|
|
57
|
+
namespaces for standalone sites, mixed projects, and engine development.
|
|
59
58
|
- [Site Examples Structure](design/site-examples-structure.md) defines the
|
|
60
59
|
intended vocabulary for starters, examples, documentation sites, reference
|
|
61
60
|
docs, and fixtures.
|
package/docs/commands.md
CHANGED
|
@@ -25,8 +25,8 @@ norna dev:stop
|
|
|
25
25
|
norna config:check
|
|
26
26
|
norna content:check
|
|
27
27
|
norna content:sync
|
|
28
|
-
norna typography
|
|
29
|
-
norna typography
|
|
28
|
+
norna typography presets
|
|
29
|
+
norna typography show
|
|
30
30
|
norna site:public
|
|
31
31
|
norna images
|
|
32
32
|
norna engine:update [version|latest]
|
|
@@ -55,7 +55,7 @@ norna --help
|
|
|
55
55
|
## Starter npm Scripts
|
|
56
56
|
|
|
57
57
|
The starter uses `norna:*` for norna-specific work. This avoids collisions
|
|
58
|
-
when a
|
|
58
|
+
when a Norna site is embedded inside a larger GitHub project
|
|
59
59
|
whose own `build`, `test`, or deploy scripts mean something different.
|
|
60
60
|
|
|
61
61
|
The starter defines:
|
|
@@ -90,7 +90,7 @@ npm run build
|
|
|
90
90
|
|
|
91
91
|
`npm run dev` calls `npm run norna:dev`. In the pure starter,
|
|
92
92
|
`npm run build` aliases `npm run norna:build`. In mixed repositories, such as
|
|
93
|
-
a GitHub project that embeds a
|
|
93
|
+
a GitHub project that embeds a Norna site next to an app, `build`
|
|
94
94
|
should normally mean the repository's complete publishable artifact, while
|
|
95
95
|
`norna:build` builds only the `norna` part.
|
|
96
96
|
|
|
@@ -101,13 +101,13 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
101
101
|
cache path.
|
|
102
102
|
- `config:check`: validates `site/config.mjs` against the runtime config
|
|
103
103
|
reader.
|
|
104
|
-
- `content:check`: validates section structure and
|
|
104
|
+
- `content:check`: validates section structure and image references, then
|
|
105
105
|
runs `astro sync`.
|
|
106
106
|
- `content:sync` / `norna:sync`: rewrites Markdown section order and moves misplaced referenced
|
|
107
107
|
image files after confirmation.
|
|
108
|
-
- `typography
|
|
109
|
-
|
|
110
|
-
- `typography
|
|
108
|
+
- `typography presets`: prints the exact built-in values for typography
|
|
109
|
+
presets and rhythms.
|
|
110
|
+
- `typography show`: prints the selected site's resolved typography for the
|
|
111
111
|
theme, every page route, and every section. Each value includes its source,
|
|
112
112
|
and inherited page or section values are marked with `inherited: true`.
|
|
113
113
|
- `site:public`: copies `site/public/` into `site/.norna/public/` and
|
|
@@ -125,7 +125,7 @@ should normally mean the repository's complete publishable artifact, while
|
|
|
125
125
|
engine version, engine root, Astro dependency, and installed Astro version.
|
|
126
126
|
With `--latest`, it also asks npm for the latest published engine version.
|
|
127
127
|
- `init <target-dir> [--type pure|embedded] [--site-dir <path>]`: creates a
|
|
128
|
-
|
|
128
|
+
standalone site project from the packaged starter, or adds a Norna site
|
|
129
129
|
directory plus `norna:*` scripts to an existing project in embedded mode.
|
|
130
130
|
Pure setup pins `@janga/norna` to the version that created it.
|
|
131
131
|
- `build`: runs config check, content check, public sync, image generation, and
|
package/docs/configuration.md
CHANGED
|
@@ -58,152 +58,21 @@ site: {
|
|
|
58
58
|
}
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
##
|
|
61
|
+
## Visual Theme
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Visual configuration lives in `site/theme.md`, not `site/config.mjs`.
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
headings, section text, galleries, sticky-navigation alignment, and footer.
|
|
67
|
-
- Type: string containing a simple positive CSS length.
|
|
68
|
-
- Required: no.
|
|
69
|
-
- Default: `1180px`.
|
|
70
|
-
- Validation: if set, it must be a positive number followed by one of `px`,
|
|
71
|
-
`rem`, `em`, `vw`, `vh`, `vmin`, `vmax`, `ch`, or `%`.
|
|
72
|
-
- Consequence: the value overrides the global `--page-width` CSS variable.
|
|
73
|
-
It is the outer width limit for content that is centered on the page.
|
|
74
|
-
`gallery.width` cannot render wider than this page width or the available
|
|
75
|
-
viewport width after responsive gutters.
|
|
76
|
-
|
|
77
|
-
Example:
|
|
78
|
-
|
|
79
|
-
```js
|
|
80
|
-
layout: {
|
|
81
|
-
pageWidth: '1180px',
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### `layout.gutter`
|
|
86
|
-
|
|
87
|
-
- Purpose: side margin removed from the viewport before the available content
|
|
88
|
-
width is calculated.
|
|
89
|
-
- Type: either a CSS length string used on all viewports, or an object with
|
|
90
|
-
`desktop` and `mobile` CSS length strings.
|
|
91
|
-
- Required: no.
|
|
92
|
-
- Default: desktop `clamp(1.25rem, 4vw, 3rem)`, mobile `1rem`.
|
|
93
|
-
- Validation: if set, each value must be a positive CSS length such as `16px`,
|
|
94
|
-
`3rem`, or `4vw`. `clamp()` with those simple lengths is also accepted.
|
|
95
|
-
- Consequence: wider gutters leave more side margin and reduce the maximum
|
|
96
|
-
available width for galleries and aligned text.
|
|
97
|
-
|
|
98
|
-
Example:
|
|
99
|
-
|
|
100
|
-
```js
|
|
101
|
-
layout: {
|
|
102
|
-
gutter: {
|
|
103
|
-
desktop: '48px',
|
|
104
|
-
mobile: '16px',
|
|
105
|
-
},
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Gallery
|
|
110
|
-
|
|
111
|
-
### `gallery.width`
|
|
112
|
-
|
|
113
|
-
- Purpose: maximum rendered width for gallery images, gallery captions, and
|
|
114
|
-
left- or right-aligned section text that is intended to line up with gallery
|
|
115
|
-
edges.
|
|
116
|
-
- Type: string containing a simple positive CSS length.
|
|
117
|
-
- Required: no.
|
|
118
|
-
- Default: `900px`.
|
|
119
|
-
- Validation: if set, it must be a positive number followed by one of `px`,
|
|
120
|
-
`rem`, `em`, `vw`, `vh`, `vmin`, `vmax`, `ch`, or `%`.
|
|
121
|
-
- Consequence: the value overrides the global `--gallery-width` CSS variable.
|
|
122
|
-
Images and aligned text cannot render wider than this value, but the
|
|
123
|
-
effective width is also limited by `layout.pageWidth`, `layout.gutter`, and
|
|
124
|
-
`gallery.maxAvailableWidthPercent`.
|
|
125
|
-
|
|
126
|
-
Example:
|
|
127
|
-
|
|
128
|
-
```js
|
|
129
|
-
gallery: {
|
|
130
|
-
width: '900px',
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### `gallery.maxAvailableWidthPercent`
|
|
65
|
+
Use [Theme](theme.md) for:
|
|
135
66
|
|
|
136
|
-
-
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
|
|
140
|
-
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
|
|
144
|
-
-
|
|
145
|
-
smaller value keeps galleries narrower without changing the page width or
|
|
146
|
-
gutters.
|
|
147
|
-
|
|
148
|
-
Example:
|
|
149
|
-
|
|
150
|
-
```js
|
|
151
|
-
gallery: {
|
|
152
|
-
maxAvailableWidthPercent: {
|
|
153
|
-
desktop: 100,
|
|
154
|
-
mobile: 100,
|
|
155
|
-
},
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### `gallery.maxAvailableHeightPercent`
|
|
160
|
-
|
|
161
|
-
- Purpose: maximum share of viewport height that gallery images may use.
|
|
162
|
-
- Type: either a number used on all viewports, or an object with `desktop` and
|
|
163
|
-
`mobile` numbers.
|
|
164
|
-
- Required: no.
|
|
165
|
-
- Default: desktop `74`, mobile `68`.
|
|
166
|
-
- Validation: each value must be greater than `0` and less than or equal to
|
|
167
|
-
`100`.
|
|
168
|
-
- Consequence: images keep their proportions and are scaled down when filling
|
|
169
|
-
the available width would make them taller than this limit. This applies to
|
|
170
|
-
both landscape and portrait images.
|
|
171
|
-
|
|
172
|
-
Example:
|
|
173
|
-
|
|
174
|
-
```js
|
|
175
|
-
gallery: {
|
|
176
|
-
maxAvailableHeightPercent: {
|
|
177
|
-
desktop: 74,
|
|
178
|
-
mobile: 68,
|
|
179
|
-
},
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
## Typography
|
|
184
|
-
|
|
185
|
-
### `typography.fontFamily`
|
|
186
|
-
|
|
187
|
-
- Purpose: global CSS `font-family` stack used by site text and sticky
|
|
188
|
-
navigation.
|
|
189
|
-
- Type: string containing a CSS font-family value.
|
|
190
|
-
- Required: no.
|
|
191
|
-
- Default: `Arial, 'Helvetica Neue', Helvetica, sans-serif`, matching the
|
|
192
|
-
engine's existing sticky-navigation font stack.
|
|
193
|
-
- Validation: if set, it must be a non-empty string and must not contain
|
|
194
|
-
semicolons, braces, or line breaks.
|
|
195
|
-
- Consequence: the value overrides the global `--font-sans` CSS variable for
|
|
196
|
-
the whole page. Section headings, body text, gallery captions, footer text,
|
|
197
|
-
and sticky navigation all inherit from that variable unless engine CSS gives a
|
|
198
|
-
more specific rule.
|
|
199
|
-
|
|
200
|
-
Example:
|
|
201
|
-
|
|
202
|
-
```js
|
|
203
|
-
typography: {
|
|
204
|
-
fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
205
|
-
}
|
|
206
|
-
```
|
|
67
|
+
- `layout.pageWidth`
|
|
68
|
+
- `layout.gutter`
|
|
69
|
+
- `layout.density`
|
|
70
|
+
- `gallery.width`
|
|
71
|
+
- `gallery.maxAvailableWidthPercent`
|
|
72
|
+
- `gallery.maxAvailableHeightPercent`
|
|
73
|
+
- `typography.fontFamily`
|
|
74
|
+
- typography presets, rhythm, and overrides
|
|
75
|
+
- presentation colors, inline styles, and frame colors
|
|
207
76
|
|
|
208
77
|
## Navigation
|
|
209
78
|
|
|
@@ -272,7 +141,7 @@ Fields:
|
|
|
272
141
|
`Sections`.
|
|
273
142
|
- `locale.labels.menu`: mobile menu summary text, default `Menu`.
|
|
274
143
|
- `locale.labels.closeMenu`: reserved close-menu label, default `Close menu`.
|
|
275
|
-
- `locale.labels.gallery`:
|
|
144
|
+
- `locale.labels.gallery`: image row ARIA label prefix, default `Images`.
|
|
276
145
|
|
|
277
146
|
Example:
|
|
278
147
|
|
|
@@ -285,7 +154,7 @@ locale: {
|
|
|
285
154
|
pageNavigation: 'På denna sida',
|
|
286
155
|
sectionNavigation: 'Sektioner',
|
|
287
156
|
menu: 'Meny',
|
|
288
|
-
gallery: '
|
|
157
|
+
gallery: 'Bilder',
|
|
289
158
|
},
|
|
290
159
|
}
|
|
291
160
|
```
|
package/docs/content.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Content
|
|
2
2
|
|
|
3
3
|
`site/content.md` is the homepage page file for a `norna` site. It defines the
|
|
4
|
-
page metadata, section order, section ids,
|
|
4
|
+
page metadata, section order, section ids, image rows, and Markdown text for
|
|
5
5
|
the homepage.
|
|
6
6
|
|
|
7
7
|
Route pages use the same page and section model in
|
|
@@ -25,14 +25,14 @@ The Astro content schema validates these top-level fields in page files:
|
|
|
25
25
|
[Theme](theme.md) and [Typography](typography.md).
|
|
26
26
|
- `frame`: optional page-level frame color source. See [Theme](theme.md).
|
|
27
27
|
- `sections`: required non-empty array. Defines section order, ids,
|
|
28
|
-
presentation overrides, and
|
|
28
|
+
presentation overrides, and image rows.
|
|
29
29
|
|
|
30
30
|
Minimal homepage:
|
|
31
31
|
|
|
32
32
|
```md
|
|
33
33
|
---
|
|
34
|
-
title: My
|
|
35
|
-
description: A small
|
|
34
|
+
title: My Site
|
|
35
|
+
description: A small Norna site.
|
|
36
36
|
sections:
|
|
37
37
|
- id: intro
|
|
38
38
|
---
|
|
@@ -81,9 +81,9 @@ Keep these values aligned:
|
|
|
81
81
|
The visible section navigation label comes from the Markdown heading text, not
|
|
82
82
|
from the frontmatter id.
|
|
83
83
|
|
|
84
|
-
##
|
|
84
|
+
## Image Rows
|
|
85
85
|
|
|
86
|
-
Each
|
|
86
|
+
Each image row can contain a single image:
|
|
87
87
|
|
|
88
88
|
```yaml
|
|
89
89
|
gallery:
|
|
@@ -105,7 +105,7 @@ images from `site/routes/<route-folder>/images/<section-id>/`.
|
|
|
105
105
|
|
|
106
106
|
## Carousels
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
An image row can contain a carousel instead of a single image:
|
|
109
109
|
|
|
110
110
|
```yaml
|
|
111
111
|
gallery:
|
|
@@ -147,7 +147,7 @@ Both `from` and `until` use `YYYY-MM-DD`. Either value may be omitted, but a
|
|
|
147
147
|
|
|
148
148
|
Hidden sections are omitted from the rendered HTML and sticky navigation. They
|
|
149
149
|
remain in the page file, and `content:check` still validates their matching
|
|
150
|
-
Markdown headings and
|
|
150
|
+
Markdown headings and image references.
|
|
151
151
|
|
|
152
152
|
The current date is evaluated at dev/build time. Set `NORNA_TODAY` to preview
|
|
153
153
|
or test a specific date:
|
|
@@ -187,21 +187,23 @@ npm run norna:content:check
|
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
This checks section order and heading ids, duplicate image names, missing image
|
|
190
|
-
files, misplaced referenced images, duplicate
|
|
190
|
+
files, misplaced referenced images, duplicate image references, invalid image
|
|
191
191
|
references, unreferenced images, undefined inline styles, and common
|
|
192
192
|
frontmatter indentation and structure mistakes.
|
|
193
193
|
|
|
194
194
|
Frontmatter uses YAML indentation. Use ordinary spaces, not tabs or
|
|
195
195
|
non-breaking spaces. `content:check` reports a focused error when indentation is
|
|
196
196
|
invalid, when a key is indented under a line that already has a value, or when a
|
|
197
|
-
known nested key such as `gallery`
|
|
197
|
+
known nested key such as `gallery` or section-specific `typography` appears at
|
|
198
|
+
the top level:
|
|
198
199
|
|
|
199
200
|
```yaml
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
201
|
+
presentation:
|
|
202
|
+
typography:
|
|
203
|
+
preset: quiet-gallery
|
|
204
|
+
overrides:
|
|
205
|
+
body:
|
|
206
|
+
paragraphSpacing: 0.8em
|
|
205
207
|
```
|
|
206
208
|
|
|
207
209
|
Top-level page frontmatter may contain only `title`, `description`, `slug`,
|