@janga/norna 0.7.6 → 0.7.8
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 +8 -7
- package/astro.config.mjs +76 -0
- package/bin/norna-cli.mjs +2 -2
- package/docs/README.md +3 -3
- package/docs/commands.md +7 -6
- package/docs/configuration.md +3 -2
- package/docs/content.md +202 -91
- package/docs/design/site-examples-structure.md +1 -1
- package/docs/engine-development.md +3 -3
- package/docs/getting-started.md +50 -8
- package/docs/images-and-metadata.md +117 -20
- package/docs/routes.md +20 -12
- package/docs/site-structure.md +9 -5
- package/docs/theme.md +12 -8
- package/docs/typography.md +9 -10
- package/examples/dog-gallery/site/content.md +38 -77
- package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -10
- package/fixtures/basic/site/content.md +2 -4
- package/fixtures/content-model-v2/.astro/collections/site.schema.json +776 -0
- package/fixtures/content-model-v2/.astro/collections/theme.schema.json +668 -0
- package/fixtures/content-model-v2/.astro/content-assets.mjs +4 -0
- package/fixtures/content-model-v2/.astro/content-modules.mjs +1 -0
- package/fixtures/content-model-v2/.astro/content.d.ts +175 -0
- package/fixtures/content-model-v2/.astro/data-store.json +1 -0
- package/fixtures/content-model-v2/.astro/dev-local.json +8 -0
- package/fixtures/content-model-v2/.astro/dev.json +13 -0
- package/fixtures/content-model-v2/.astro/dev.log +231 -0
- package/fixtures/content-model-v2/.astro/settings.json +5 -0
- package/fixtures/content-model-v2/.astro/types.d.ts +2 -0
- package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
- package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +1 -0
- package/fixtures/content-model-v2/dist/guide/index.html +3 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
- package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
- package/fixtures/content-model-v2/dist/index.html +8 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +80 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +1389 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +3 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/fixtures/content-model-v2/site/.norna/generated-images.json +210 -0
- package/fixtures/content-model-v2/site/config.mjs +11 -0
- package/fixtures/content-model-v2/site/content.md +84 -0
- package/fixtures/content-model-v2/site/images/card-section/adopt.svg +9 -0
- package/fixtures/content-model-v2/site/images/card-section/foster.svg +12 -0
- package/fixtures/content-model-v2/site/images/intro/detail.jpg +0 -0
- package/fixtures/content-model-v2/site/images/intro/duplicate.jpg +0 -0
- package/fixtures/content-model-v2/site/images/intro/hero.jpg +0 -0
- package/fixtures/content-model-v2/site/images/plain/image.jpg +0 -0
- package/fixtures/content-model-v2/site/images/timed/slide-one.jpg +0 -0
- package/fixtures/content-model-v2/site/images/timed/slide-three.jpg +0 -0
- package/fixtures/content-model-v2/site/images/timed/slide-two.jpg +0 -0
- package/fixtures/content-model-v2/site/routes/010-guide/images/intro/duplicate.jpg +0 -0
- package/fixtures/content-model-v2/site/routes/010-guide/route-content.md +17 -0
- package/fixtures/content-model-v2/site/theme.md +9 -0
- package/package.json +3 -2
- package/scripts/deploy-site.mjs +11 -4
- package/scripts/dev-local.mjs +6 -0
- package/scripts/generate-images.mjs +132 -56
- package/scripts/lib/image-dimensions.mjs +26 -0
- package/scripts/lib/norna-markdown-blocks.mjs +643 -0
- package/scripts/lib/site-content.mjs +31 -29
- package/scripts/show-typography.mjs +17 -9
- package/scripts/sync-content-sections.mjs +414 -412
- package/scripts/test-content-check.mjs +59 -45
- package/scripts/test-content-model-v2.mjs +1230 -0
- package/scripts/test-engine-commands.mjs +1 -1
- package/scripts/test-package-check.mjs +36 -8
- package/scripts/test-temporary-visibility.mjs +3 -6
- package/src/components/CardList.astro +77 -0
- package/src/components/GalleryGrid.astro +22 -12
- package/src/components/SiteNavigation.astro +5 -4
- package/src/components/SitePage.astro +9 -2
- package/src/components/SiteSection.astro +35 -13
- package/src/content.config.ts +4 -17
- package/src/lib/generatedImages.ts +50 -10
- package/src/lib/sectionContent.ts +130 -35
- package/src/styles/global.css +187 -0
- package/starters/basic/README.md +4 -2
- package/starters/basic/site/content.md +9 -11
- package/starters/project/README.md +7 -3
- package/starters/project/site/content.md +0 -9
- package/starters/project/site/routes/010-guide/route-content.md +0 -5
|
@@ -73,28 +73,42 @@ const withTempProject = async ({ site, theme = defaultTheme, files, siteDirector
|
|
|
73
73
|
|
|
74
74
|
const brokenSite = `---
|
|
75
75
|
sections:
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- id: min-konst
|
|
80
|
-
gallery:
|
|
81
|
-
- image: vav.jpeg
|
|
82
|
-
- image: missing.jpeg
|
|
83
|
-
- image: duplicate.jpg
|
|
84
|
-
- image: duplicate.jpg
|
|
85
|
-
- id: mitt-hem
|
|
86
|
-
gallery:
|
|
87
|
-
- image: home.jpg
|
|
76
|
+
karin-walde: {}
|
|
77
|
+
min-konst: {}
|
|
78
|
+
mitt-hem: {}
|
|
88
79
|
|
|
89
80
|
---
|
|
90
81
|
## Karin Walde {#karin-walde}
|
|
91
82
|
Text.
|
|
83
|
+
|
|
84
|
+
\`\`\`norna-image-stack
|
|
85
|
+
- image: karin.jpg
|
|
86
|
+
alt: Karin
|
|
87
|
+
\`\`\`
|
|
88
|
+
|
|
92
89
|
## Min konst {#min-konst}
|
|
93
90
|
Text.
|
|
91
|
+
|
|
92
|
+
\`\`\`norna-image-stack
|
|
93
|
+
- image: vav.jpeg
|
|
94
|
+
alt: Vav
|
|
95
|
+
- image: missing.jpeg
|
|
96
|
+
alt: Missing
|
|
97
|
+
- image: duplicate.jpg
|
|
98
|
+
alt: Duplicate one
|
|
99
|
+
- image: duplicate.jpg
|
|
100
|
+
alt: Duplicate two
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
94
103
|
## Extra {#extra}
|
|
95
104
|
Text.
|
|
96
105
|
## Mitt hem {#mitt-hem}
|
|
97
106
|
Text.
|
|
107
|
+
|
|
108
|
+
\`\`\`norna-image-stack
|
|
109
|
+
- image: home.jpg
|
|
110
|
+
alt: Home
|
|
111
|
+
\`\`\`
|
|
98
112
|
`;
|
|
99
113
|
|
|
100
114
|
test('content:check groups section issues, global issues, and unreferenced images', async () => {
|
|
@@ -113,28 +127,26 @@ test('content:check groups section issues, global issues, and unreferenced image
|
|
|
113
127
|
|
|
114
128
|
assert.equal(result.status, 1, output);
|
|
115
129
|
assert.match(output, /^Content check failed\./m);
|
|
116
|
-
assert.match(output, /
|
|
117
|
-
assert.match(output, /Image "vav\.jpeg" is used here but is located in site\/images\/mitt-hem
|
|
118
|
-
assert.match(output, /Image "missing\.jpeg" does not exist anywhere under
|
|
119
|
-
assert.match(output, /
|
|
120
|
-
assert.match(output, /\[extra\]\n Warnings:/);
|
|
121
|
-
assert.match(output, /Global Content Issues\n\nWarnings:\n- Markdown section order differs from frontmatter\./);
|
|
122
|
-
assert.match(output, /Unreferenced Images\nThese files are kept in site\/images\/ but are not mounted on the site:/);
|
|
130
|
+
assert.match(output, /Content Issues\n\n\[site\/content\.md \[min-konst\]\]\n Errors:/);
|
|
131
|
+
assert.match(output, /Image "vav\.jpeg" is used here but is located in site\/images\/mitt-hem\/vav\.jpeg\./);
|
|
132
|
+
assert.match(output, /Image "missing\.jpeg" does not exist at site\/images\/min-konst\/missing\.jpeg or anywhere under any page or route image root\./);
|
|
133
|
+
assert.match(output, /Unreferenced Images\nThese files are kept under page or route image roots but are not referenced by Norna-managed image references:/);
|
|
123
134
|
assert.match(output, /site\/images\/karin-walde\/unreferenced\.jpg/);
|
|
124
135
|
});
|
|
125
136
|
});
|
|
126
137
|
|
|
127
138
|
const carouselAspectRatioSite = `---
|
|
128
|
-
|
|
129
|
-
- id: puppies
|
|
130
|
-
gallery:
|
|
131
|
-
- carousel:
|
|
132
|
-
- image: wide.png
|
|
133
|
-
- image: wider.png
|
|
134
|
-
|
|
139
|
+
title: Carousel Aspect Ratio
|
|
135
140
|
---
|
|
136
141
|
## Puppies {#puppies}
|
|
137
142
|
Text.
|
|
143
|
+
|
|
144
|
+
\`\`\`norna-image-carousel
|
|
145
|
+
- image: wide.png
|
|
146
|
+
alt: Wide
|
|
147
|
+
- image: wider.png
|
|
148
|
+
alt: Wider
|
|
149
|
+
\`\`\`
|
|
138
150
|
`;
|
|
139
151
|
|
|
140
152
|
test('content:check warns when carousel images use different aspect ratios', async () => {
|
|
@@ -156,7 +168,7 @@ test('content:check warns when carousel images use different aspect ratios', asy
|
|
|
156
168
|
|
|
157
169
|
assert.equal(result.status, 0, output);
|
|
158
170
|
assert.match(output, /^Content check completed with warnings\./m);
|
|
159
|
-
assert.match(output, /Carousel on line
|
|
171
|
+
assert.match(output, /Carousel on line 7 uses images with different aspect ratios: wide\.png \(4:3\), wider\.png \(2:1\)\./);
|
|
160
172
|
assert.match(output, /Use images with exactly matching proportions in the same carousel/);
|
|
161
173
|
});
|
|
162
174
|
});
|
|
@@ -170,10 +182,7 @@ presentation:
|
|
|
170
182
|
`;
|
|
171
183
|
|
|
172
184
|
const inlineStyleSite = `---
|
|
173
|
-
|
|
174
|
-
- id: intro
|
|
175
|
-
gallery: []
|
|
176
|
-
|
|
185
|
+
title: Inline Style
|
|
177
186
|
---
|
|
178
187
|
## Intro {#intro}
|
|
179
188
|
This has [known text]{.highlight} and [unknown text]{.missing}.
|
|
@@ -190,7 +199,7 @@ test('content:check fails when Markdown uses undefined inline styles', async ()
|
|
|
190
199
|
|
|
191
200
|
assert.equal(result.status, 1, output);
|
|
192
201
|
assert.match(output, /^Content check failed\./m);
|
|
193
|
-
assert.match(output, /Inline style "\.missing" is used in
|
|
202
|
+
assert.match(output, /Inline style "\.missing" is used in site\/content\.md but is not defined in site\/theme\.md presentation\.inlineStyles\./);
|
|
194
203
|
assert.doesNotMatch(output, /"\.highlight" is used in Markdown/);
|
|
195
204
|
});
|
|
196
205
|
});
|
|
@@ -203,8 +212,7 @@ presentation:
|
|
|
203
212
|
body:
|
|
204
213
|
paragraphSpacing: 0.3em
|
|
205
214
|
sections:
|
|
206
|
-
|
|
207
|
-
gallery: []
|
|
215
|
+
intro: {}
|
|
208
216
|
|
|
209
217
|
---
|
|
210
218
|
## Intro {#intro}
|
|
@@ -234,8 +242,7 @@ presentation:
|
|
|
234
242
|
body:
|
|
235
243
|
paragraphSpacing: 0.3em
|
|
236
244
|
sections:
|
|
237
|
-
|
|
238
|
-
gallery: []
|
|
245
|
+
intro: {}
|
|
239
246
|
|
|
240
247
|
---
|
|
241
248
|
## Intro {#intro}
|
|
@@ -261,7 +268,7 @@ const topLevelGallerySite = `---
|
|
|
261
268
|
title: Example
|
|
262
269
|
description: Example site.
|
|
263
270
|
sections:
|
|
264
|
-
|
|
271
|
+
intro: {}
|
|
265
272
|
gallery:
|
|
266
273
|
- image: intro.jpg
|
|
267
274
|
|
|
@@ -281,7 +288,7 @@ test('content:check explains likely misindented frontmatter keys', async () => {
|
|
|
281
288
|
assert.equal(result.status, 1, output);
|
|
282
289
|
assert.match(output, /^Content check failed\./m);
|
|
283
290
|
assert.match(output, /Frontmatter line 6 defines "gallery" at the top level, but it is not a valid top-level content field\./);
|
|
284
|
-
assert.match(output, /Indent "gallery:" under the
|
|
291
|
+
assert.match(output, /Indent "gallery:" under the object it belongs to, or move image content into Norna Markdown blocks\./);
|
|
285
292
|
});
|
|
286
293
|
});
|
|
287
294
|
|
|
@@ -304,18 +311,25 @@ test('content:check respects NORNA_SITE_DIR', async () => {
|
|
|
304
311
|
|
|
305
312
|
const movableSite = `---
|
|
306
313
|
sections:
|
|
307
|
-
-
|
|
308
|
-
|
|
309
|
-
- image: move-me.jpg
|
|
310
|
-
- id: mitt-hem
|
|
311
|
-
gallery:
|
|
312
|
-
- image: home.jpg
|
|
314
|
+
min-konst: {}
|
|
315
|
+
mitt-hem: {}
|
|
313
316
|
|
|
314
317
|
---
|
|
315
318
|
## Min konst {#min-konst}
|
|
316
319
|
Text.
|
|
320
|
+
|
|
321
|
+
\`\`\`norna-image-stack
|
|
322
|
+
- image: move-me.jpg
|
|
323
|
+
alt: Move me
|
|
324
|
+
\`\`\`
|
|
325
|
+
|
|
317
326
|
## Mitt hem {#mitt-hem}
|
|
318
327
|
Text.
|
|
328
|
+
|
|
329
|
+
\`\`\`norna-image-stack
|
|
330
|
+
- image: home.jpg
|
|
331
|
+
alt: Home
|
|
332
|
+
\`\`\`
|
|
319
333
|
`;
|
|
320
334
|
|
|
321
335
|
test('content:sync moves referenced images and keeps unreferenced images in place', async () => {
|
|
@@ -340,7 +354,7 @@ test('content:sync moves referenced images and keeps unreferenced images in plac
|
|
|
340
354
|
const checkOutput = getOutput(checkResult);
|
|
341
355
|
|
|
342
356
|
assert.equal(checkResult.status, 0, checkOutput);
|
|
343
|
-
assert.match(checkOutput, /Content check
|
|
357
|
+
assert.match(checkOutput, /Content check completed with warnings\./);
|
|
344
358
|
assert.match(checkOutput, /site\/images\/mitt-hem\/unreferenced\.jpg/);
|
|
345
359
|
});
|
|
346
360
|
});
|