@janga/norna 0.7.1 → 0.7.2

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.
Files changed (63) hide show
  1. package/README.md +18 -4
  2. package/astro.config.mjs +2 -0
  3. package/bin/norna-cli.mjs +170 -0
  4. package/bin/norna.mjs +149 -150
  5. package/docs/README.md +36 -16
  6. package/docs/commands.md +18 -5
  7. package/docs/configuration.md +37 -2
  8. package/docs/content.md +98 -257
  9. package/docs/{command-organization.md → design/command-organization.md} +9 -5
  10. package/docs/{site-examples-structure-note.md → design/site-examples-structure.md} +17 -22
  11. package/docs/engine-development.md +33 -5
  12. package/docs/getting-started.md +40 -4
  13. package/docs/local-development.md +13 -0
  14. package/docs/publishing.md +23 -0
  15. package/docs/routes.md +90 -0
  16. package/docs/site-structure.md +15 -8
  17. package/docs/theme.md +150 -0
  18. package/docs/typography.md +125 -0
  19. package/examples/dog-gallery/site/.norna/generated-images.json +226 -0
  20. package/examples/dog-gallery/site/config.mjs +97 -0
  21. package/examples/dog-gallery/site/content.md +146 -0
  22. package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
  23. package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
  24. package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
  25. package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
  26. package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
  27. package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
  28. package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
  29. package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
  30. package/examples/dog-gallery/site/public/favicon.svg +7 -0
  31. package/examples/dog-gallery/site/public/robots.txt +2 -0
  32. package/examples/dog-gallery/site/routes/dog-care/route-content.md +35 -0
  33. package/examples/dog-gallery/site/theme.md +55 -0
  34. package/fixtures/basic/site/config.mjs +1 -0
  35. package/package.json +8 -7
  36. package/scripts/check-config.mjs +1 -0
  37. package/scripts/dev-local.mjs +64 -15
  38. package/scripts/init-site.mjs +1 -1
  39. package/scripts/lib/project-config.mjs +22 -0
  40. package/scripts/lib/site-content.mjs +2 -1
  41. package/scripts/lib/site-paths.mjs +18 -3
  42. package/scripts/lib/typography.mjs +5 -5
  43. package/scripts/show-typography.mjs +252 -29
  44. package/scripts/test-cli-discovery.mjs +124 -0
  45. package/scripts/test-engine-commands.mjs +18 -4
  46. package/scripts/test-navigation.mjs +10 -6
  47. package/scripts/test-package-check.mjs +32 -4
  48. package/src/components/SiteNavigation.astro +7 -5
  49. package/src/components/SitePage.astro +3 -0
  50. package/src/components/SiteSection.astro +24 -24
  51. package/src/content.config.ts +4 -0
  52. package/src/layouts/BaseLayout.astro +2 -1
  53. package/src/lib/basePath.ts +21 -0
  54. package/src/lib/generatedImages.ts +8 -4
  55. package/src/lib/sectionContent.ts +6 -1
  56. package/src/lib/sitePublicAssets.ts +8 -1
  57. package/src/styles/global.css +8 -8
  58. package/starters/basic/.github/workflows/deploy.yml +3 -3
  59. package/starters/basic/README.md +21 -0
  60. package/starters/basic/package.json +1 -1
  61. package/starters/basic/site/config.mjs +1 -0
  62. package/starters/basic/site/content.md +5 -3
  63. package/starters/basic/site/theme.md +4 -0
@@ -0,0 +1,226 @@
1
+ {
2
+ "black-puppy-meadow.png": {
3
+ "outputVersion": 2,
4
+ "sourceHash": "7255e3d9148c1ded01ae6ae6809b9a8261b553a1516d3f8f4de0554bc321f652",
5
+ "width": 1536,
6
+ "height": 1024,
7
+ "variants": [
8
+ {
9
+ "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp",
10
+ "width": 480
11
+ },
12
+ {
13
+ "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp",
14
+ "width": 768
15
+ },
16
+ {
17
+ "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp",
18
+ "width": 1080
19
+ },
20
+ {
21
+ "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp",
22
+ "width": 1440
23
+ },
24
+ {
25
+ "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp",
26
+ "width": 1536
27
+ }
28
+ ]
29
+ },
30
+ "photo-of-a-black-dog.jpg": {
31
+ "outputVersion": 2,
32
+ "sourceHash": "5cf614d2863ca8f86b6162c7b477fd2690adbc101816206c9e675bf36d9962d0",
33
+ "width": 960,
34
+ "height": 1600,
35
+ "variants": [
36
+ {
37
+ "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp",
38
+ "width": 480
39
+ },
40
+ {
41
+ "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp",
42
+ "width": 768
43
+ },
44
+ {
45
+ "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp",
46
+ "width": 960
47
+ }
48
+ ]
49
+ },
50
+ "brown-dog.jpg": {
51
+ "outputVersion": 2,
52
+ "sourceHash": "50ef114e49ae48491c015157b4a25f4f1fd69140170fe6d4202c551858c3e03d",
53
+ "width": 3939,
54
+ "height": 2626,
55
+ "variants": [
56
+ {
57
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-480.webp",
58
+ "width": 480
59
+ },
60
+ {
61
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-768.webp",
62
+ "width": 768
63
+ },
64
+ {
65
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp",
66
+ "width": 1080
67
+ },
68
+ {
69
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp",
70
+ "width": 1440
71
+ },
72
+ {
73
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp",
74
+ "width": 1920
75
+ },
76
+ {
77
+ "src": "/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp",
78
+ "width": 3939
79
+ }
80
+ ]
81
+ },
82
+ "dog-accompanies-master.jpg": {
83
+ "outputVersion": 2,
84
+ "sourceHash": "7ef804d5ebe27724409f4ffa94389c7b1102c2c8bb9c1dae29ecbd4c56e61af9",
85
+ "width": 2400,
86
+ "height": 1800,
87
+ "variants": [
88
+ {
89
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp",
90
+ "width": 480
91
+ },
92
+ {
93
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp",
94
+ "width": 768
95
+ },
96
+ {
97
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp",
98
+ "width": 1080
99
+ },
100
+ {
101
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp",
102
+ "width": 1440
103
+ },
104
+ {
105
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp",
106
+ "width": 1920
107
+ },
108
+ {
109
+ "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp",
110
+ "width": 2400
111
+ }
112
+ ]
113
+ },
114
+ "golden-retriever.jpg": {
115
+ "outputVersion": 2,
116
+ "sourceHash": "f797fd880d6c3b112ceb3408f468fbeaf442efc792f935fd6c9954b812fdc838",
117
+ "width": 1600,
118
+ "height": 1200,
119
+ "variants": [
120
+ {
121
+ "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp",
122
+ "width": 480
123
+ },
124
+ {
125
+ "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp",
126
+ "width": 768
127
+ },
128
+ {
129
+ "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp",
130
+ "width": 1080
131
+ },
132
+ {
133
+ "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp",
134
+ "width": 1440
135
+ },
136
+ {
137
+ "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp",
138
+ "width": 1600
139
+ }
140
+ ]
141
+ },
142
+ "toller-puppy.jpg": {
143
+ "outputVersion": 2,
144
+ "sourceHash": "a2a8fbc0d599deb019d45f7b11de98bcbcb4f1fd609e931073161dcb88cbf63f",
145
+ "width": 2576,
146
+ "height": 1932,
147
+ "variants": [
148
+ {
149
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp",
150
+ "width": 480
151
+ },
152
+ {
153
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp",
154
+ "width": 768
155
+ },
156
+ {
157
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp",
158
+ "width": 1080
159
+ },
160
+ {
161
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp",
162
+ "width": 1440
163
+ },
164
+ {
165
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp",
166
+ "width": 1920
167
+ },
168
+ {
169
+ "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp",
170
+ "width": 2576
171
+ }
172
+ ]
173
+ },
174
+ "white-cute-dog.jpg": {
175
+ "outputVersion": 2,
176
+ "sourceHash": "077a06891d97eafb4593cfcaa5c9b04fdb1e3a6206d56acd4ebd3eadb83356bf",
177
+ "width": 1277,
178
+ "height": 1060,
179
+ "variants": [
180
+ {
181
+ "src": "/images/generated/white-dogs/white-cute-dog-077a0689-480.webp",
182
+ "width": 480
183
+ },
184
+ {
185
+ "src": "/images/generated/white-dogs/white-cute-dog-077a0689-768.webp",
186
+ "width": 768
187
+ },
188
+ {
189
+ "src": "/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp",
190
+ "width": 1080
191
+ },
192
+ {
193
+ "src": "/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp",
194
+ "width": 1277
195
+ }
196
+ ]
197
+ },
198
+ "white-puppy-garden.png": {
199
+ "outputVersion": 2,
200
+ "sourceHash": "d3ab2ca04fb37dfbf010e7f9f3adf2ba8401553bd1946e3b388cb662eac58ee9",
201
+ "width": 1536,
202
+ "height": 1024,
203
+ "variants": [
204
+ {
205
+ "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp",
206
+ "width": 480
207
+ },
208
+ {
209
+ "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp",
210
+ "width": 768
211
+ },
212
+ {
213
+ "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp",
214
+ "width": 1080
215
+ },
216
+ {
217
+ "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp",
218
+ "width": 1440
219
+ },
220
+ {
221
+ "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp",
222
+ "width": 1536
223
+ }
224
+ ]
225
+ }
226
+ }
@@ -0,0 +1,97 @@
1
+ const siteUrl = 'http://localhost:4321/';
2
+
3
+ export default {
4
+ site: {
5
+ // Public canonical URL for this site.
6
+ url: siteUrl,
7
+
8
+ // URL path prefix. Use "/" for root sites and "/repository-name/" for
9
+ // GitHub Pages project sites without a custom domain.
10
+ basePath: '/',
11
+ },
12
+ layout: {
13
+ // Maximum width of the page content area.
14
+ pageWidth: '2048px',
15
+
16
+ // Side margin on desktop and mobile before available gallery width is calculated.
17
+ gutter: {
18
+ desktop: 'clamp(1.25rem, 4vw, 3rem)',
19
+ mobile: '16px',
20
+ },
21
+ },
22
+ gallery: {
23
+ // Hard maximum rendered gallery width for images and aligned text.
24
+ width: '55vw',
25
+
26
+ // Maximum share of the available width after gutters.
27
+ maxAvailableWidthPercent: {
28
+ desktop: 100,
29
+ mobile: 100,
30
+ },
31
+
32
+ // Maximum share of viewport height used by gallery images.
33
+ maxAvailableHeightPercent: {
34
+ desktop: 74,
35
+ mobile: 68,
36
+ },
37
+ },
38
+ typography: {
39
+ // CSS font-family stack used by the whole site, including sticky navigation.
40
+ fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif",
41
+ },
42
+ navigation: {
43
+ smoothScroll: {
44
+ // Set to false to make section links jump directly to the target anchor.
45
+ enabled: true,
46
+
47
+ // Minimum and maximum animation time for controlled anchor navigation.
48
+ minimumDurationMs: 2_000,
49
+ maximumDurationMs: 4_000,
50
+
51
+ // Additional duration per pixel of scroll distance, before min/max clamping.
52
+ durationPerPixelMs: 0.22,
53
+ },
54
+ },
55
+ locale: {
56
+ lang: 'en',
57
+ labels: {
58
+ skipToContent: 'Skip to content',
59
+ sectionNavigation: 'Sections',
60
+ gallery: 'Gallery',
61
+ },
62
+ },
63
+ footer: {
64
+ // Omit this value to hide the copyright sentence.
65
+ copyrightMessage: 'Dog images from Wikimedia Commons; see image captions for license details.',
66
+
67
+ // Set enabled to false to hide the build timestamp while keeping its config.
68
+ buildInfo: {
69
+ enabled: true,
70
+
71
+ // Text shown before the formatted build timestamp.
72
+ text: 'Built',
73
+
74
+ // Standard Intl.DateTimeFormat options for the build timestamp.
75
+ dateTimeFormat: {
76
+ locale: 'en-GB',
77
+ timeZone: 'UTC',
78
+ dateStyle: 'short',
79
+ timeStyle: 'short',
80
+ },
81
+ },
82
+ },
83
+ github: {
84
+ // Example repository and workflow details used by deploy scripts.
85
+ repo: 'owner/example-gallery',
86
+ branch: 'main',
87
+ pagesWorkflow: 'Deploy to GitHub Pages',
88
+ },
89
+ deploy: {
90
+ watch: {
91
+ // Defaults for npm run deploy:watch.
92
+ intervalMs: 10_000,
93
+ timeoutMs: 15 * 60_000,
94
+ runLimit: 10,
95
+ },
96
+ },
97
+ };
@@ -0,0 +1,146 @@
1
+ ---
2
+ title: Local Dog Gallery
3
+ description: A small norna example with free dog images.
4
+ navigation:
5
+ label: Dog site!
6
+ order: 10
7
+ sections:
8
+ - id: black-dogs
9
+ presentation:
10
+ typography:
11
+ preset: statement
12
+ gallery:
13
+ - image: photo-of-a-black-dog.jpg
14
+ alt: "A black dog sitting outdoors and looking at the camera."
15
+ caption:
16
+ "Photo of a dog. ContaDeletada2906, CC0 1.0, via Wikimedia Commons."
17
+ - image: black-puppy-meadow.png
18
+ alt:
19
+ "A black puppy standing in a grassy meadow and looking at the camera."
20
+ caption: "AI-generated image."
21
+ - id: summer-dogs
22
+ visible:
23
+ from: "2026-08-01"
24
+ until: "2026-09-01"
25
+ presentation:
26
+ backgroundColor: "#181818"
27
+ typography:
28
+ preset: compact-gallery
29
+ gallery: []
30
+ - id: brown-dogs
31
+ presentation:
32
+ typography:
33
+ preset: text-forward
34
+ gallery:
35
+ - image: brown-dog.jpg
36
+ alt: "A brown dog looking directly at the camera."
37
+ caption: "DogBrown. Frank-3, CC0 1.0, via Wikimedia Commons."
38
+ - image: dog-accompanies-master.jpg
39
+ alt: "A man walks outdoors with a dog at his side."
40
+ caption:
41
+ "Dog accompanies his master. Steve Hillebrand, U.S. Fish and Wildlife
42
+ Service, public domain."
43
+ - id: golden-dogs
44
+ presentation:
45
+ typography:
46
+ overrides:
47
+ body:
48
+ lineHeight: 1.58
49
+ paragraphSpacing: 1em
50
+ gallery:
51
+ - image: golden-retriever.jpg
52
+ alt: "A golden retriever standing outdoors."
53
+ caption: "Golden Retriever. Ribo, public domain, via Wikimedia Commons."
54
+ - image: toller-puppy.jpg
55
+ alt:
56
+ "A young Nova Scotia Duck Tolling Retriever puppy sitting on grass."
57
+ caption:
58
+ "Nova Scotia Duck Tolling Retriever puppy. RM, public domain, via
59
+ Wikimedia Commons."
60
+ - id: white-dogs
61
+ presentation:
62
+ typography:
63
+ overrides:
64
+ caption:
65
+ spacing: 0.35em
66
+ gallery:
67
+ - carousel:
68
+ - image: white-cute-dog.jpg
69
+ alt: "A white dog looking toward the camera."
70
+ caption:
71
+ "White cute dog. Neal Ziring, public domain, via Wikimedia
72
+ Commons."
73
+ - image: white-puppy-garden.png
74
+ alt: "A fluffy white puppy standing on grass in a garden."
75
+ caption: "AI-generated image."
76
+ - id: sources
77
+ ---
78
+
79
+ ## Black Dogs {#black-dogs}
80
+
81
+ Black-coated dogs from the local norna development collection. This
82
+ sentence contains [yellow highlighted text]{.highlight} for inline style
83
+ inspection.
84
+
85
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a
86
+ ante venenatis dapibus posuere velit aliquet.
87
+
88
+ Curabitur blandit tempus porttitor. Donec id elit non mi porta gravida at eget
89
+ metus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
90
+
91
+ ## Summer Dogs {#summer-dogs}
92
+
93
+ This temporary section is visible during August 2026. It is here to demonstrate
94
+ date-controlled sections and [warm alert text]{.alert} in the local dog gallery.
95
+
96
+ Lorem ipsum dolor sit amet.
97
+
98
+ Vestibulum id ligula porta felis euismod semper. Maecenas faucibus mollis
99
+ interdum. Nullam quis risus eget urna mollis ornare vel eu leo.
100
+
101
+ ## Brown Dogs {#brown-dogs}
102
+
103
+ Brown dogs provide a second gallery section for local navigation checks.
104
+
105
+ Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac
106
+ cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit
107
+ amet risus.
108
+
109
+ Maecenas sed diam eget risus varius blandit sit amet non magna. Morbi leo risus,
110
+ porta ac consectetur ac, vestibulum at eros. Sed posuere consectetur est at
111
+ lobortis.
112
+
113
+ ## Golden Dogs {#golden-dogs}
114
+
115
+ Golden-coated retrievers add a third gallery section and more scrolling depth.
116
+
117
+ Cras justo odio, dapibus ac facilisis in, egestas eget quam.
118
+
119
+ Nulla vitae elit libero, a pharetra augue. Integer posuere erat a ante venenatis
120
+ dapibus posuere velit aliquet. Aenean eu leo quam. Pellentesque ornare sem
121
+ lacinia quam venenatis vestibulum.
122
+
123
+ ## White Dogs {#white-dogs}
124
+
125
+ A white dog completes the colour-based gallery sequence.
126
+
127
+ Etiam porta sem malesuada magna mollis euismod. Donec id elit non mi porta
128
+ gravida at eget metus.
129
+
130
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Lorem ipsum
131
+ dolor sit amet, consectetur adipiscing elit. Donec sed odio dui. Vestibulum id
132
+ ligula porta felis euismod semper.
133
+
134
+ ## Sources {#sources}
135
+
136
+ Most images are sourced from Wikimedia Commons pages that list CC0 or
137
+ public-domain licensing:
138
+
139
+ - [Photo of a dog](https://commons.wikimedia.org/wiki/File:Photo_of_a_dog.jpg)
140
+ - [DogBrown](https://commons.wikimedia.org/wiki/File:DogBrown.jpg)
141
+ - [Dog accompanies his master](https://commons.wikimedia.org/wiki/File:Dog_accompanies_his_master.jpg)
142
+ - [Golden Retriever](https://commons.wikimedia.org/wiki/File:Golden_Retriever.jpg)
143
+ - [Toller pup7wks2](https://commons.wikimedia.org/wiki/File:Toller_pup7wks2.JPG)
144
+ - [White cute dog](https://commons.wikimedia.org/wiki/File:White_cute_dog.jpg)
145
+
146
+ The black and white puppy images are AI-generated.
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
2
+ <rect width="128" height="128" rx="24" fill="#111111" />
3
+ <circle cx="40" cy="43" r="13" fill="#ffffff" />
4
+ <circle cx="64" cy="34" r="13" fill="#ffffff" />
5
+ <circle cx="88" cy="43" r="13" fill="#ffffff" />
6
+ <path fill="#ffffff" d="M31 83c0-18 15-31 33-31s33 13 33 31c0 12-9 18-20 14-7-3-19-3-26 0-11 4-20-2-20-14Z" />
7
+ </svg>
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Allow: /
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: Dog care
3
+ description: A small route for testing multi-page norna navigation.
4
+ navigation:
5
+ label: Dog care
6
+ order: 20
7
+ sections:
8
+ - id: daily-rhythm
9
+ - id: calm-training
10
+ - id: gallery-notes
11
+ ---
12
+
13
+ ## Daily rhythm {#daily-rhythm}
14
+
15
+ Dogs often settle into a home when the day has a clear rhythm. Meals, walks,
16
+ rest and play do not need to be dramatic events, but they become easier to
17
+ understand when they happen in a predictable order.
18
+
19
+ Short routines also make a gallery page easier to scan. This route exists mainly
20
+ to test how page navigation and site navigation behave together.
21
+
22
+ ## Calm training {#calm-training}
23
+
24
+ Good training can be quiet. A short session with one clear task is often more
25
+ useful than a long session with many competing signals.
26
+
27
+ The same principle applies to navigation. The page should show where the visitor
28
+ is in the site first, and then offer a simple way to jump within the current
29
+ page.
30
+
31
+ ## Gallery notes {#gallery-notes}
32
+
33
+ This section is intentionally text-only. Image routes can be added later, but a
34
+ first navigation test should make it easy to judge menus, active states and
35
+ anchor positions without layout noise from new media.
@@ -0,0 +1,55 @@
1
+ ---
2
+ # norna:start theme-help
3
+ # Site-wide visual defaults. Remove a value to use the engine default.
4
+ # Active values below are ordinary YAML; this marked comment block is only help text.
5
+ #
6
+ # Available structure:
7
+ # presentation:
8
+ # backgroundColor: quoted hex color, e.g. "#000000"
9
+ # textColor: quoted hex color, e.g. "#f7f4ee"
10
+ # inlineStyles:
11
+ # style-name:
12
+ # color: quoted hex color
13
+ # typography:
14
+ # preset: quiet-gallery | compact-gallery | text-forward | statement
15
+ # overrides:
16
+ # heading:
17
+ # align:
18
+ # desktop: left | center | right
19
+ # mobile: left | center | right
20
+ # size: small | medium | large | xlarge
21
+ # lineHeight: number from 1 through 3
22
+ # spacing: CSS length, e.g. 0.65em
23
+ # body:
24
+ # align:
25
+ # desktop: left | center | right
26
+ # mobile: left | center | right
27
+ # size: small | medium | large | xlarge
28
+ # lineHeight: number from 1 through 3
29
+ # paragraphSpacing: CSS length, e.g. 0.85em
30
+ # caption:
31
+ # align:
32
+ # desktop: left | center | right
33
+ # mobile: left | center | right
34
+ # size: small | medium | large | xlarge
35
+ # lineHeight: number from 1 through 3
36
+ # spacing: CSS length, e.g. 0.5em
37
+ # frame:
38
+ # colors: presentation | theme
39
+ # colors:
40
+ # backgroundColor: quoted hex color
41
+ # textColor: quoted hex color
42
+ # norna:end theme-help
43
+ presentation:
44
+ backgroundColor: "#550000"
45
+ textColor: "#ffffff"
46
+ inlineStyles:
47
+ highlight:
48
+ color: "#ffd84d"
49
+ alert:
50
+ color: "#ff9a3d"
51
+ typography:
52
+ preset: quiet-gallery
53
+ frame:
54
+ colors: presentation
55
+ ---
@@ -1,6 +1,7 @@
1
1
  export default {
2
2
  site: {
3
3
  url: 'https://example.com/',
4
+ basePath: '/',
4
5
  },
5
6
  layout: {
6
7
  pageWidth: '1180px',
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@janga/norna",
3
3
  "description": "A command-line publishing workflow for simple static sites.",
4
4
  "type": "module",
5
- "version": "0.7.1",
5
+ "version": "0.7.2",
6
6
  "license": "GPL-3.0-only",
7
7
  "repository": {
8
8
  "type": "git",
@@ -25,6 +25,7 @@
25
25
  "astro.config.mjs",
26
26
  "bin/",
27
27
  "docs/",
28
+ "examples/",
28
29
  "fixtures/",
29
30
  "scripts/",
30
31
  "src/",
@@ -40,8 +41,8 @@
40
41
  "node": ">=22.12.0"
41
42
  },
42
43
  "scripts": {
43
- "dev": "npm run dev:local",
44
- "dev:local": "npm run demo:dev",
44
+ "dev": "npm run dev:local --",
45
+ "dev:local": "node bin/norna.mjs dev:local",
45
46
  "dev:lan": "node bin/norna.mjs dev:lan",
46
47
  "dev:restart": "node bin/norna.mjs dev:restart",
47
48
  "dev:status": "node bin/norna.mjs dev:status",
@@ -54,18 +55,18 @@
54
55
  "typography:show": "node bin/norna.mjs typography:show",
55
56
  "site:public": "node bin/norna.mjs site:public",
56
57
  "images": "node bin/norna.mjs images",
57
- "build": "npm run demo:build",
58
+ "build": "node bin/norna.mjs build",
58
59
  "build:local": "node bin/norna.mjs build:local",
59
60
  "deploy": "node bin/norna.mjs deploy",
60
61
  "deploy:commit": "node bin/norna.mjs deploy:commit",
61
62
  "deploy:watch": "node bin/norna.mjs deploy:watch",
62
63
  "doctor": "node bin/norna.mjs doctor",
63
- "demo:dev": "node bin/norna.mjs dev:local",
64
- "demo:build": "node bin/norna.mjs build",
65
- "test": "npm run test:content-check && npm run test:site-public && npm run test:engine-commands && npm run test:ci-lockfile && npm run test:temporary-visibility && npm run test:fixture:build && npm run demo:build && npm run package:check",
64
+ "demo:build": "node bin/norna.mjs --site-dir examples/dog-gallery/site build",
65
+ "test": "npm run test:content-check && npm run test:site-public && npm run test:cli-discovery && npm run test:engine-commands && npm run test:ci-lockfile && npm run test:temporary-visibility && npm run test:fixture:build && npm run package:check",
66
66
  "test:fixture:build": "node bin/norna.mjs --site-dir fixtures/basic/site build",
67
67
  "test:content-check": "node scripts/test-content-check.mjs",
68
68
  "test:site-public": "node scripts/test-site-public.mjs",
69
+ "test:cli-discovery": "node scripts/test-cli-discovery.mjs",
69
70
  "test:engine-commands": "node scripts/test-engine-commands.mjs",
70
71
  "test:ci-lockfile": "node scripts/test-ci-lockfile.mjs",
71
72
  "test:temporary-visibility": "node scripts/test-temporary-visibility.mjs",
@@ -20,6 +20,7 @@ try {
20
20
 
21
21
  console.log('Config check passed.');
22
22
  console.log(`Site URL: ${projectConfig.site.url}`);
23
+ console.log(`Base path: ${projectConfig.site.basePath}`);
23
24
  console.log(`Page width: ${projectConfig.layout.pageWidth}`);
24
25
  console.log(`Gutter: desktop ${projectConfig.layout.gutter.desktop}, mobile ${projectConfig.layout.gutter.mobile}`);
25
26
  console.log(`Gallery width: ${projectConfig.gallery.width}`);