@janga/norna 0.7.26 → 0.7.28
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 +51 -35
- package/astro.config.mjs +19 -1
- package/bin/norna-cli.mjs +6 -4
- package/package.json +9 -5
- package/schemas/card-list.schema.json +1 -1
- package/schemas/config.schema.json +66 -66
- package/schemas/content-frontmatter.schema.json +17 -8
- package/schemas/manifest.json +49 -3
- package/schemas/page-theme.schema.json +1585 -41
- package/schemas/root-theme.schema.json +1767 -0
- package/schemas/sitewide-content.schema.json +18 -18
- package/schemas/theme.schema.json +243 -243
- package/scripts/add-site-node.mjs +13 -161
- package/scripts/build-site.mjs +11 -6
- package/scripts/check-config.mjs +7 -23
- package/scripts/dev-local.mjs +17 -10
- package/scripts/export-theme-preset.mjs +2 -2
- package/scripts/generate-images.mjs +7 -6
- package/scripts/generate-schemas.mjs +9 -6
- package/scripts/lib/category-destinations.mjs +13 -12
- package/scripts/lib/documentation-links.mjs +33 -2
- package/scripts/lib/documentation-routes.json +229 -0
- package/scripts/lib/docusaurus-migration-audit.mjs +9 -6
- package/scripts/lib/editor-file-policy.mjs +18 -0
- package/scripts/lib/editor-language-service.mjs +53 -55
- package/scripts/lib/editor-page-addresses.mjs +55 -0
- package/scripts/lib/editor-page-placement.mjs +172 -0
- package/scripts/lib/editor-site-editing-tree.mjs +146 -0
- package/scripts/lib/editor-site-files.mjs +153 -0
- package/scripts/lib/editor-site-links.mjs +79 -0
- package/scripts/lib/editor-site-tree.mjs +151 -0
- package/scripts/lib/editor-source-files.mjs +87 -0
- package/scripts/lib/editor-theme-help.mjs +43 -0
- package/scripts/lib/locale-registry.mjs +1 -1
- package/scripts/lib/locales/en.mjs +1 -1
- package/scripts/lib/navigation-model.mjs +2 -44
- package/scripts/lib/navigation-review.mjs +14 -50
- package/scripts/lib/norna-markdown-blocks.mjs +1 -1
- package/scripts/lib/page-aliases.mjs +3 -1
- package/scripts/lib/page-model.mjs +39 -20
- package/scripts/lib/page-move-apply.mjs +117 -0
- package/scripts/lib/page-move-plan.mjs +27 -59
- package/scripts/lib/presentation.mjs +3 -3
- package/scripts/lib/project-config.mjs +7 -8
- package/scripts/lib/schema-definitions.mjs +12 -39
- package/scripts/lib/schema-editor-metadata.mjs +12 -59
- package/scripts/lib/schema-value-definitions.mjs +1 -1
- package/scripts/lib/site-content.mjs +7 -24
- package/scripts/lib/site-conventions.mjs +19 -1
- package/scripts/lib/site-navigation-tree.mjs +2 -7
- package/scripts/lib/site-node-create.mjs +169 -0
- package/scripts/lib/site-paths.mjs +22 -10
- package/scripts/lib/site-structure.mjs +72 -82
- package/scripts/lib/site-upgrade.mjs +30 -0
- package/scripts/lib/source-files.mjs +34 -0
- package/scripts/lib/theme-config.mjs +26 -68
- package/scripts/lib/theme-packages.mjs +47 -0
- package/scripts/lib/theme-presets.mjs +20 -53
- package/scripts/lib/typography.mjs +2 -2
- package/scripts/lib/yaml-config.mjs +1 -1
- package/scripts/lib/yaml-source-edit.mjs +94 -0
- package/scripts/move-site-page.mjs +3 -124
- package/scripts/show-typography.mjs +32 -17
- package/scripts/sync-content-sections.mjs +9 -7
- package/scripts/sync-site-public.mjs +1 -1
- package/scripts/upgrade-site.mjs +17 -0
- package/src/components/AreaNavigationMenu.astro +24 -0
- package/src/components/AreaNavigationPanel.astro +55 -0
- package/src/components/AreaNavigationSwitcher.astro +30 -0
- package/src/components/ImageStackEnhancement.astro +0 -7
- package/src/components/NavigationContinuity.astro +26 -0
- package/src/components/NavigationPageTree.astro +13 -4
- package/src/components/NavigationState.astro +11 -0
- package/src/components/NavigationTreeControls.astro +3 -2
- package/src/components/PageAliasRedirect.astro +44 -3
- package/src/components/SearchPage.astro +9 -1
- package/src/components/SectionNavigationScript.astro +106 -26
- package/src/components/SiteNavigation.astro +45 -20
- package/src/components/SitePage.astro +37 -61
- package/src/components/SiteTreeNavigation.astro +38 -18
- package/src/components/TopPageMenu.astro +4 -3
- package/src/components/TreeNavigationScript.astro +50 -57
- package/src/content.config.ts +15 -16
- package/src/layouts/BaseLayout.astro +15 -39
- package/src/lib/areaNavigation.ts +42 -0
- package/src/lib/navigationContinuity.ts +212 -0
- package/src/lib/navigationFollowing.ts +28 -18
- package/src/lib/navigationState.mjs +88 -0
- package/src/lib/navigationStateScript.mjs +76 -0
- package/src/lib/navigationVisibility.ts +9 -0
- package/src/lib/pageThemes.ts +5 -42
- package/src/lib/sectionContent.ts +3 -2
- package/src/lib/siteNavigation.ts +6 -0
- package/src/lib/sitePages.ts +12 -23
- package/src/pages/404.astro +1 -1
- package/src/pages/[...slug].astro +5 -15
- package/src/pages/index.astro +1 -3
- package/src/styles/area-navigation.css +399 -0
- package/src/styles/content.css +5 -31
- package/src/styles/navigation-continuity.css +163 -0
- package/src/styles/page-layout.css +57 -68
- package/src/styles/responsive.css +0 -4
- package/starters/basic/README.md +10 -9
- package/starters/basic/site/{pages/000-home → root}/content.md +2 -2
- package/schemas/category.schema.json +0 -20
- package/src/components/PageContentsNavigation.astro +0 -20
- /package/starters/basic/site/{pages/000-home → root}/images/.gitkeep +0 -0
- /package/starters/basic/site/{theme.yaml → root/tree-theme.yaml} +0 -0
- /package/starters/basic/site/{config.yaml → site-config/settings.yaml} +0 -0
- /package/starters/basic/site/{sitewide-content.yaml → site-config/shared-content.yaml} +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* Stable reading positions and progressive navigation transitions. */
|
|
2
|
+
@view-transition {
|
|
3
|
+
navigation: auto;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
:root[data-navigation-continuity]:not([data-navigation-motion-ready]) {
|
|
7
|
+
scroll-behavior: auto !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Keep label widths stable when a page or its parent branch becomes current. */
|
|
11
|
+
:root[data-navigation-continuity] .navigation-page-tree
|
|
12
|
+
:is(.navigation-page-link, .navigation-page-open-link, .navigation-page-summary) {
|
|
13
|
+
font-weight: 400;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
:root[data-navigation-continuity]
|
|
17
|
+
:is(.navigation-page-tree-mobile, .navigation-page-tree-submenu)
|
|
18
|
+
:is(.navigation-page-link, .navigation-page-open-link) {
|
|
19
|
+
font-weight: 500;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
:root[data-navigation-continuity] .site-top {
|
|
23
|
+
view-transition-name: norna-header;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:root[data-navigation-continuity] .tree-local-navigation {
|
|
27
|
+
/* Keep this in the static root snapshot: Safari can blank a separately
|
|
28
|
+
captured scroll container after restoring a deep scroll position. */
|
|
29
|
+
view-transition-name: none;
|
|
30
|
+
max-height: calc(100svh - var(--navigation-scrollport-top,
|
|
31
|
+
calc(var(--site-top-anchor-offset) + 1.25rem)) - 1.25rem);
|
|
32
|
+
/* Leave a clear ending below the final visible row when the tree is scrolled. */
|
|
33
|
+
padding-block-end: 3rem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Mask the scrollport's top padding as rows pass behind the sticky controls. */
|
|
37
|
+
:root[data-navigation-continuity] .tree-local-navigation .navigation-tree-controls::before {
|
|
38
|
+
position: absolute;
|
|
39
|
+
inset-inline: 0;
|
|
40
|
+
bottom: 100%;
|
|
41
|
+
height: 1.25rem;
|
|
42
|
+
background: inherit;
|
|
43
|
+
content: '';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
:root[data-navigation-continuity] .navigation-category-link {
|
|
47
|
+
color: inherit;
|
|
48
|
+
font: inherit;
|
|
49
|
+
text-decoration: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:root[data-navigation-continuity] .navigation-category-link:hover,
|
|
53
|
+
:root[data-navigation-continuity] .navigation-category-link:focus-visible {
|
|
54
|
+
text-decoration: underline;
|
|
55
|
+
text-underline-offset: 0.28em;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Keep the article in the viewport's root snapshot. Capturing a long article
|
|
59
|
+
separately delays Safari's first paint even with a zero-duration fade. */
|
|
60
|
+
|
|
61
|
+
::view-transition-group(*) {
|
|
62
|
+
animation: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
::view-transition-old(root),
|
|
66
|
+
::view-transition-old(norna-header) {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
::view-transition-new(root),
|
|
71
|
+
::view-transition-new(norna-header) {
|
|
72
|
+
animation: none;
|
|
73
|
+
mix-blend-mode: normal;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
:root[data-navigation-continuity] .navigation-page-chevron::before {
|
|
77
|
+
transition: transform 120ms ease-out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:root[data-navigation-continuity]:not([data-navigation-motion-ready])
|
|
81
|
+
.navigation-page-chevron::before {
|
|
82
|
+
/* Restoring an open branch is not a new disclosure interaction. */
|
|
83
|
+
transition: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:root[data-navigation-continuity] [data-navigation-motion-open='true']
|
|
87
|
+
> summary .navigation-page-chevron::before {
|
|
88
|
+
transform: rotate(90deg);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:root[data-navigation-continuity] [data-navigation-motion-open='false']
|
|
92
|
+
> summary .navigation-page-chevron::before {
|
|
93
|
+
transform: rotate(0deg);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
:root[data-navigation-continuity] .navigation-page-tree-sidebar
|
|
97
|
+
[data-navigation-motion-open='true'] > summary .navigation-page-chevron::before {
|
|
98
|
+
transform: rotate(45deg);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
:root[data-navigation-continuity] .navigation-page-tree-sidebar
|
|
102
|
+
[data-navigation-motion-open='false'] > summary .navigation-page-chevron::before {
|
|
103
|
+
transform: rotate(-45deg);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:root[data-navigation-continuity] [data-navigation-motion-active] {
|
|
107
|
+
overflow: clip;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:root[data-navigation-continuity] .page-contents-links[data-navigation-marker] {
|
|
111
|
+
position: relative;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
:root[data-navigation-continuity] [data-navigation-marker] a[aria-current='location'] {
|
|
115
|
+
background: transparent;
|
|
116
|
+
box-shadow: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
:root[data-navigation-continuity] [data-navigation-marker]
|
|
120
|
+
a[aria-current='location']:not(:hover):not(:focus-visible) {
|
|
121
|
+
text-decoration: none;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
:root[data-navigation-continuity] [data-navigation-marker] a[aria-current='location']::before {
|
|
125
|
+
content: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
:root[data-navigation-continuity] [data-navigation-marker]::after {
|
|
129
|
+
position: absolute;
|
|
130
|
+
top: 0;
|
|
131
|
+
left: -0.85rem;
|
|
132
|
+
width: 2px;
|
|
133
|
+
height: var(--navigation-marker-height, 0px);
|
|
134
|
+
border-radius: 2px;
|
|
135
|
+
background: var(--color-primary-text);
|
|
136
|
+
content: '';
|
|
137
|
+
opacity: var(--navigation-marker-opacity, 0);
|
|
138
|
+
pointer-events: none;
|
|
139
|
+
transform: translateY(var(--navigation-marker-top, 0px));
|
|
140
|
+
transition: transform 160ms ease-out, height 160ms ease-out, opacity 120ms ease-out;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
:root[data-navigation-continuity] [data-navigation-marker-initial]::after {
|
|
144
|
+
transition: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@media (prefers-reduced-motion: reduce) {
|
|
148
|
+
@view-transition { navigation: none; }
|
|
149
|
+
|
|
150
|
+
:root[data-navigation-continuity][data-navigation-motion-ready] {
|
|
151
|
+
scroll-behavior: auto !important;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
:root[data-navigation-continuity] .navigation-page-chevron::before,
|
|
155
|
+
:root[data-navigation-continuity] [data-navigation-marker]::after {
|
|
156
|
+
transition: none;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
::view-transition-old(*),
|
|
160
|
+
::view-transition-new(*) {
|
|
161
|
+
animation: none !important;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -19,11 +19,10 @@
|
|
|
19
19
|
.site-page-layout-tree {
|
|
20
20
|
--tree-layout-width: max(var(--page-width), 86rem);
|
|
21
21
|
--tree-layout-outer-margin: max(var(--content-gutter), calc((100vw - var(--tree-layout-width)) / 2));
|
|
22
|
-
--tree-navigation-width:
|
|
23
|
-
--contents-navigation-width: 11rem;
|
|
22
|
+
--tree-navigation-width: 16rem;
|
|
24
23
|
--tree-layout-gap: var(--local-navigation-gap, clamp(1.5rem, 3vw, 3rem));
|
|
25
24
|
display: grid;
|
|
26
|
-
grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr)
|
|
25
|
+
grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
|
|
27
26
|
align-items: start;
|
|
28
27
|
gap: var(--tree-layout-gap);
|
|
29
28
|
min-height: calc(100svh - var(--site-top-anchor-offset));
|
|
@@ -48,7 +47,7 @@
|
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
:is(.tree-local-navigation, .mobile-site-nav
|
|
50
|
+
:is(.tree-local-navigation, .mobile-site-nav) {
|
|
52
51
|
--tree-disclosure-icon-width: 0.9rem;
|
|
53
52
|
--tree-disclosure-gap: 0.6rem;
|
|
54
53
|
--tree-disclosure-offset: calc(var(--tree-disclosure-icon-width) + var(--tree-disclosure-gap));
|
|
@@ -181,7 +180,7 @@
|
|
|
181
180
|
}
|
|
182
181
|
|
|
183
182
|
:root[data-appearance='dark']
|
|
184
|
-
:is(.tree-local-navigation, .mobile-site-nav
|
|
183
|
+
:is(.tree-local-navigation, .mobile-site-nav) {
|
|
185
184
|
--tree-current-item-background: color-mix(
|
|
186
185
|
in srgb,
|
|
187
186
|
var(--color-surface-emphasis-background) 64%,
|
|
@@ -191,7 +190,7 @@
|
|
|
191
190
|
|
|
192
191
|
@media (prefers-color-scheme: dark) {
|
|
193
192
|
:root[data-appearance='system']
|
|
194
|
-
:is(.tree-local-navigation, .mobile-site-nav
|
|
193
|
+
:is(.tree-local-navigation, .mobile-site-nav) {
|
|
195
194
|
--tree-current-item-background: color-mix(
|
|
196
195
|
in srgb,
|
|
197
196
|
var(--color-surface-emphasis-background) 64%,
|
|
@@ -200,50 +199,11 @@
|
|
|
200
199
|
}
|
|
201
200
|
}
|
|
202
201
|
|
|
203
|
-
.page-contents-navigation {
|
|
204
|
-
color: var(--color-secondary-text);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.page-contents-navigation-rail {
|
|
208
|
-
position: sticky;
|
|
209
|
-
top: calc(var(--site-top-anchor-offset) + 1.25rem);
|
|
210
|
-
z-index: 3;
|
|
211
|
-
min-height: 0;
|
|
212
|
-
max-height: calc(100svh - var(--site-top-anchor-offset) - 2.5rem);
|
|
213
|
-
border-inline-start: 1px solid var(--color-nav-separator);
|
|
214
|
-
padding: 1.5rem 0 1.5rem 1rem;
|
|
215
|
-
background: var(--color-page);
|
|
216
|
-
overflow-y: auto;
|
|
217
|
-
overscroll-behavior: contain;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.page-contents-navigation-label {
|
|
221
|
-
margin: 0 0 0.65rem;
|
|
222
|
-
color: var(--color-primary-text);
|
|
223
|
-
font-size: 0.7rem;
|
|
224
|
-
font-weight: 700;
|
|
225
|
-
letter-spacing: 0;
|
|
226
|
-
line-height: 1.3;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
202
|
@media (min-width: 961px) and (max-width: 1280px) {
|
|
230
203
|
.site-page-layout-tree {
|
|
231
204
|
--tree-layout-width: max(var(--page-width), 76rem);
|
|
232
205
|
grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
|
|
233
206
|
}
|
|
234
|
-
|
|
235
|
-
.page-contents-navigation-rail {
|
|
236
|
-
display: none;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
@media (min-width: 1281px) {
|
|
241
|
-
.site-page-layout-tree[data-page-contents-placement='contents-rail']
|
|
242
|
-
.tree-local-navigation .navigation-page-sections,
|
|
243
|
-
.site-page-layout-tree[data-page-contents-placement='contents-rail']
|
|
244
|
-
.tree-local-navigation .navigation-page-sections-disclosure {
|
|
245
|
-
display: none;
|
|
246
|
-
}
|
|
247
207
|
}
|
|
248
208
|
|
|
249
209
|
@media (max-width: 960px) {
|
|
@@ -256,8 +216,7 @@
|
|
|
256
216
|
width: min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));
|
|
257
217
|
}
|
|
258
218
|
|
|
259
|
-
.tree-local-navigation
|
|
260
|
-
.page-contents-navigation {
|
|
219
|
+
.tree-local-navigation {
|
|
261
220
|
display: none;
|
|
262
221
|
}
|
|
263
222
|
}
|
|
@@ -268,9 +227,15 @@
|
|
|
268
227
|
padding: 0.15rem 0 0.2rem 0.75rem;
|
|
269
228
|
}
|
|
270
229
|
|
|
230
|
+
.navigation-page-tree-sidebar .navigation-page-sections {
|
|
231
|
+
margin-inline-start: 0;
|
|
232
|
+
border-left: 0;
|
|
233
|
+
padding-inline-start: 1rem;
|
|
234
|
+
}
|
|
235
|
+
|
|
271
236
|
.navigation-page-tree-sidebar
|
|
272
|
-
.navigation-page-
|
|
273
|
-
|
|
237
|
+
.navigation-page-node-page-disclosure > .navigation-page-branch-content > .navigation-page-sections {
|
|
238
|
+
padding-inline-start: 0;
|
|
274
239
|
}
|
|
275
240
|
|
|
276
241
|
.navigation-page-sections-disclosure > summary {
|
|
@@ -292,6 +257,11 @@
|
|
|
292
257
|
display: none;
|
|
293
258
|
}
|
|
294
259
|
|
|
260
|
+
.navigation-page-tree-sidebar .navigation-page-sections-disclosure > summary {
|
|
261
|
+
right: 0;
|
|
262
|
+
left: auto;
|
|
263
|
+
}
|
|
264
|
+
|
|
295
265
|
.navigation-page-sections-disclosure > summary:hover,
|
|
296
266
|
.navigation-page-sections-disclosure > summary:focus-visible {
|
|
297
267
|
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
@@ -320,8 +290,9 @@
|
|
|
320
290
|
|
|
321
291
|
.navigation-page-tree-sidebar .navigation-page-link {
|
|
322
292
|
display: block;
|
|
293
|
+
width: calc(100% - var(--tree-disclosure-offset));
|
|
323
294
|
border-radius: var(--corner-radius-small, 2px);
|
|
324
|
-
padding: 0.375rem 0.3rem 0.375rem
|
|
295
|
+
padding: 0.375rem 0.3rem 0.375rem 0;
|
|
325
296
|
color: var(--color-secondary-text);
|
|
326
297
|
font-size: 0.84rem;
|
|
327
298
|
font-weight: 400;
|
|
@@ -358,9 +329,8 @@
|
|
|
358
329
|
}
|
|
359
330
|
|
|
360
331
|
.navigation-page-tree-sidebar .navigation-page-tree-sidebar {
|
|
361
|
-
margin: 0.15rem 0 0.2rem
|
|
362
|
-
|
|
363
|
-
padding-left: 0.75rem;
|
|
332
|
+
margin: 0.15rem 0 0.2rem;
|
|
333
|
+
padding-left: 1rem;
|
|
364
334
|
}
|
|
365
335
|
|
|
366
336
|
.navigation-page-disclosure > .navigation-page-summary {
|
|
@@ -397,25 +367,27 @@
|
|
|
397
367
|
.navigation-page-disclosure-sidebar.navigation-category-disclosure
|
|
398
368
|
> .navigation-page-summary {
|
|
399
369
|
display: grid;
|
|
400
|
-
grid-template-columns: var(--tree-disclosure-
|
|
401
|
-
|
|
370
|
+
grid-template-columns: minmax(0, 1fr) var(--tree-disclosure-offset);
|
|
371
|
+
align-items: start;
|
|
402
372
|
justify-content: normal;
|
|
373
|
+
padding-inline-end: 0;
|
|
403
374
|
}
|
|
404
375
|
|
|
405
376
|
.navigation-page-disclosure-sidebar.navigation-category-disclosure
|
|
406
377
|
> .navigation-page-summary > .navigation-page-summary-title {
|
|
407
|
-
grid-column:
|
|
378
|
+
grid-column: 1;
|
|
408
379
|
width: auto;
|
|
380
|
+
padding-inline-end: 0.3rem;
|
|
409
381
|
}
|
|
410
382
|
|
|
411
383
|
.navigation-page-disclosure-sidebar.navigation-category-disclosure
|
|
412
384
|
> .navigation-page-summary > .navigation-page-chevron {
|
|
413
|
-
grid-column:
|
|
385
|
+
grid-column: 2;
|
|
414
386
|
grid-row: 1;
|
|
415
387
|
display: grid;
|
|
416
388
|
place-items: center;
|
|
417
|
-
width: var(--tree-disclosure-
|
|
418
|
-
height: 1.
|
|
389
|
+
width: var(--tree-disclosure-offset);
|
|
390
|
+
height: 1.4em;
|
|
419
391
|
}
|
|
420
392
|
|
|
421
393
|
.navigation-page-node-page-disclosure {
|
|
@@ -445,6 +417,26 @@
|
|
|
445
417
|
grid-row: 1;
|
|
446
418
|
}
|
|
447
419
|
|
|
420
|
+
/* Labels keep their depth; disclosures share the tree's right edge. */
|
|
421
|
+
.navigation-page-tree-sidebar .navigation-page-node-page-disclosure {
|
|
422
|
+
grid-template-columns: minmax(0, 1fr) var(--tree-disclosure-offset);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.navigation-page-tree-sidebar
|
|
426
|
+
.navigation-page-node-page-disclosure > .navigation-page-disclosure {
|
|
427
|
+
grid-column: 2;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.navigation-page-tree-sidebar
|
|
431
|
+
.navigation-page-node-page-disclosure > .navigation-page-disclosure > .navigation-page-summary {
|
|
432
|
+
justify-content: normal;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.navigation-page-tree-sidebar
|
|
436
|
+
.navigation-page-node-page-disclosure > .navigation-page-open-link {
|
|
437
|
+
grid-column: 1;
|
|
438
|
+
}
|
|
439
|
+
|
|
448
440
|
.navigation-page-node-page-disclosure > .navigation-page-branch-content {
|
|
449
441
|
grid-column: 1 / -1;
|
|
450
442
|
grid-row: 2;
|
|
@@ -586,9 +578,8 @@
|
|
|
586
578
|
|
|
587
579
|
.navigation-page-tree-sidebar .navigation-page-disclosure > .navigation-page-branch-content,
|
|
588
580
|
.navigation-page-tree-sidebar .navigation-page-node-page-disclosure > .navigation-page-branch-content {
|
|
589
|
-
margin: 0.1rem 0 0.2rem
|
|
590
|
-
|
|
591
|
-
padding-left: 0.75rem;
|
|
581
|
+
margin: 0.1rem 0 0.2rem;
|
|
582
|
+
padding-left: 1rem;
|
|
592
583
|
}
|
|
593
584
|
|
|
594
585
|
.navigation-page-tree-sidebar .navigation-page-disclosure .navigation-page-tree-sidebar,
|
|
@@ -609,6 +600,10 @@
|
|
|
609
600
|
list-style: none;
|
|
610
601
|
}
|
|
611
602
|
|
|
603
|
+
.navigation-page-tree-sidebar .page-contents-links ol {
|
|
604
|
+
border-left: 0;
|
|
605
|
+
}
|
|
606
|
+
|
|
612
607
|
.page-contents-links a {
|
|
613
608
|
position: relative;
|
|
614
609
|
display: block;
|
|
@@ -626,12 +621,6 @@
|
|
|
626
621
|
text-underline-offset: 0.25em;
|
|
627
622
|
}
|
|
628
623
|
|
|
629
|
-
.page-contents-navigation-rail .page-contents-links a[aria-current='location'] {
|
|
630
|
-
border-radius: var(--corner-radius-small, 2px);
|
|
631
|
-
background: var(--tree-current-item-background);
|
|
632
|
-
box-shadow: 0 0 0 0.2rem var(--tree-current-item-background);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
624
|
.page-contents-links a[aria-current='location']::before {
|
|
636
625
|
position: absolute;
|
|
637
626
|
top: 0.15em;
|
package/starters/basic/README.md
CHANGED
|
@@ -13,11 +13,11 @@ Open the address printed by the development server. Stop it later with
|
|
|
13
13
|
`npm run norna:dev:stop`.
|
|
14
14
|
|
|
15
15
|
Edit shared logo settings, banners, and footer in
|
|
16
|
-
`site/
|
|
17
|
-
site-wide visual defaults in `site/theme.yaml`, homepage content and section
|
|
18
|
-
metadata in `site/
|
|
19
|
-
and locale in `site/config.yaml`. Keep managed homepage source images under
|
|
20
|
-
`site/
|
|
16
|
+
`site/site-config/shared-content.yaml`,
|
|
17
|
+
site-wide visual defaults in `site/root/tree-theme.yaml`, homepage content and section
|
|
18
|
+
metadata in `site/root/content.md`, and technical settings such as URL
|
|
19
|
+
and locale in `site/site-config/settings.yaml`. Keep managed homepage source images under
|
|
20
|
+
`site/root/images/` and static public files under `site/public/`.
|
|
21
21
|
|
|
22
22
|
For a GitHub Pages project site without a custom domain, include the repository
|
|
23
23
|
path in the public URL:
|
|
@@ -32,9 +32,10 @@ Norna derives `/repository-name/` as the base path. Use a root URL such as
|
|
|
32
32
|
In GitHub repository settings, configure Pages to build from GitHub Actions.
|
|
33
33
|
|
|
34
34
|
Page width, side gutters, content spacing, image sizing, palette, corners, and
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
typography are configured in the required `site/root/tree-theme.yaml`, including
|
|
36
|
+
a `preset`. A descendant `tree-theme.yaml` modifies inherited settings for its
|
|
37
|
+
branch; `page-theme.yaml` affects only its own page. Both accept all visual
|
|
38
|
+
settings. Adding `preset` starts a new base instead of inheriting ancestor values.
|
|
38
39
|
|
|
39
40
|
Commit `package-lock.json` after the first install so GitHub Actions can use
|
|
40
41
|
`npm ci`.
|
|
@@ -61,5 +62,5 @@ Use `npm run norna:engine:version` to inspect the installed engine and
|
|
|
61
62
|
`npm run norna:engine:update` to update it.
|
|
62
63
|
|
|
63
64
|
Start with the [illustrated Getting Started guide](https://janga.github.io/norna/getting-started/install-norna/).
|
|
64
|
-
Use the [
|
|
65
|
+
Use the [Norna reference](https://janga.github.io/norna/reference/)
|
|
65
66
|
for exact file contracts, syntax, commands, and publishing behavior.
|
|
@@ -10,11 +10,11 @@ of what visitors can find here.
|
|
|
10
10
|
|
|
11
11
|
## Welcome
|
|
12
12
|
|
|
13
|
-
Edit this page in `site/
|
|
13
|
+
Edit this page in `site/root/content.md`. Every H2 starts a section
|
|
14
14
|
and becomes a destination in this one-page site's navigation.
|
|
15
15
|
|
|
16
16
|
## Next steps
|
|
17
17
|
|
|
18
|
-
Add your own text, then choose a preset in `site/theme.yaml`. Put local images
|
|
18
|
+
Add your own text, then choose a preset in `site/root/tree-theme.yaml`. Put local images
|
|
19
19
|
in this page's `images/` directory and reference them through a Norna image
|
|
20
20
|
block when the site needs them.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"properties": {
|
|
5
|
-
"label": {
|
|
6
|
-
"type": "string",
|
|
7
|
-
"minLength": 1,
|
|
8
|
-
"description": "Navigation label for this non-routable page category.",
|
|
9
|
-
"markdownDescription": "```yaml\nlabel: Guides\n```\n\nThe category label shown in global navigation, tree navigation, mobile navigation, and breadcrumbs.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.26/docs/pages.md#navigation-categories)"
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
"required": [
|
|
13
|
-
"label"
|
|
14
|
-
],
|
|
15
|
-
"additionalProperties": false,
|
|
16
|
-
"description": "A non-routable navigation category containing child pages.",
|
|
17
|
-
"$id": "https://janga.github.io/norna/schemas/category.schema.json",
|
|
18
|
-
"title": "Norna page category",
|
|
19
|
-
"markdownDescription": "```yaml\nlabel: Guides\n```\n\n`category.yaml` groups child pages without editorial content. Its URL opens the first listed direct page, or a generated child list when the first child is a category.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.26/docs/pages.md#navigation-categories)"
|
|
20
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import projectConfig from '../../scripts/lib/project-config.mjs';
|
|
3
|
-
import type { HeadingNavigation } from '../lib/sectionContent';
|
|
4
|
-
import PageContentsLinks from './PageContentsLinks.astro';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
headings: HeadingNavigation[];
|
|
8
|
-
pageTitle: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const { headings, pageTitle } = Astro.props;
|
|
12
|
-
const label = `${projectConfig.locale.labels.pageNavigation}: ${pageTitle}`;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
<aside class="page-contents-navigation page-contents-navigation-rail">
|
|
16
|
-
<nav aria-label={label}>
|
|
17
|
-
<p class="page-contents-navigation-label">{projectConfig.locale.labels.pageNavigation}</p>
|
|
18
|
-
<PageContentsLinks headings={headings} variant="desktop" />
|
|
19
|
-
</nav>
|
|
20
|
-
</aside>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|