@janga/norna 0.7.25 → 0.7.27

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 (137) hide show
  1. package/README.md +18 -10
  2. package/astro.config.mjs +26 -12
  3. package/bin/norna-cli.mjs +14 -2
  4. package/package.json +14 -5
  5. package/schemas/card-list.schema.json +121 -0
  6. package/schemas/category.schema.json +4 -4
  7. package/schemas/config.schema.json +306 -32
  8. package/schemas/content-frontmatter.schema.json +8 -8
  9. package/schemas/image-carousel.schema.json +43 -0
  10. package/schemas/image-stack.schema.json +43 -0
  11. package/schemas/manifest.json +6 -1
  12. package/schemas/page-theme.schema.json +26 -26
  13. package/schemas/sitewide-content.schema.json +18 -18
  14. package/schemas/theme.schema.json +237 -262
  15. package/scripts/add-site-node.mjs +1 -1
  16. package/scripts/dev-local.mjs +24 -2
  17. package/scripts/generate-schemas.mjs +15 -3
  18. package/scripts/lib/category-destinations.mjs +48 -0
  19. package/scripts/lib/code-fence-metadata.mjs +14 -37
  20. package/scripts/lib/content-tabs.mjs +155 -0
  21. package/scripts/lib/details-headings.mjs +58 -0
  22. package/scripts/lib/documentation-links.mjs +33 -2
  23. package/scripts/lib/documentation-routes.json +222 -0
  24. package/scripts/lib/docusaurus-migration-audit.mjs +603 -0
  25. package/scripts/lib/editor-language-service.mjs +238 -116
  26. package/scripts/lib/locale-registry.mjs +597 -0
  27. package/scripts/lib/locales/az-Latn.mjs +78 -0
  28. package/scripts/lib/locales/be.mjs +78 -0
  29. package/scripts/lib/locales/bg.mjs +78 -0
  30. package/scripts/lib/locales/bs.mjs +78 -0
  31. package/scripts/lib/locales/ca.mjs +78 -0
  32. package/scripts/lib/locales/cnr.mjs +78 -0
  33. package/scripts/lib/locales/cs.mjs +78 -0
  34. package/scripts/lib/locales/da.mjs +78 -0
  35. package/scripts/lib/locales/de.mjs +78 -0
  36. package/scripts/lib/locales/el.mjs +78 -0
  37. package/scripts/lib/locales/en.mjs +78 -0
  38. package/scripts/lib/locales/es.mjs +78 -0
  39. package/scripts/lib/locales/et.mjs +78 -0
  40. package/scripts/lib/locales/fi.mjs +78 -0
  41. package/scripts/lib/locales/fil.mjs +78 -0
  42. package/scripts/lib/locales/fr.mjs +78 -0
  43. package/scripts/lib/locales/ga.mjs +78 -0
  44. package/scripts/lib/locales/ha.mjs +78 -0
  45. package/scripts/lib/locales/hr.mjs +78 -0
  46. package/scripts/lib/locales/hu.mjs +78 -0
  47. package/scripts/lib/locales/id.mjs +78 -0
  48. package/scripts/lib/locales/is.mjs +78 -0
  49. package/scripts/lib/locales/it.mjs +78 -0
  50. package/scripts/lib/locales/jv.mjs +78 -0
  51. package/scripts/lib/locales/lb.mjs +78 -0
  52. package/scripts/lib/locales/lt.mjs +78 -0
  53. package/scripts/lib/locales/lv.mjs +78 -0
  54. package/scripts/lib/locales/mk.mjs +78 -0
  55. package/scripts/lib/locales/mt.mjs +78 -0
  56. package/scripts/lib/locales/nb.mjs +78 -0
  57. package/scripts/lib/locales/nl.mjs +78 -0
  58. package/scripts/lib/locales/nn.mjs +78 -0
  59. package/scripts/lib/locales/pcm.mjs +78 -0
  60. package/scripts/lib/locales/pl.mjs +78 -0
  61. package/scripts/lib/locales/pt.mjs +78 -0
  62. package/scripts/lib/locales/ro.mjs +78 -0
  63. package/scripts/lib/locales/ru.mjs +78 -0
  64. package/scripts/lib/locales/sk.mjs +78 -0
  65. package/scripts/lib/locales/sl.mjs +78 -0
  66. package/scripts/lib/locales/sq.mjs +78 -0
  67. package/scripts/lib/locales/sr-Cyrl.mjs +78 -0
  68. package/scripts/lib/locales/sr-Latn.mjs +78 -0
  69. package/scripts/lib/locales/sv.mjs +78 -0
  70. package/scripts/lib/locales/sw.mjs +78 -0
  71. package/scripts/lib/locales/tr.mjs +78 -0
  72. package/scripts/lib/locales/uk.mjs +78 -0
  73. package/scripts/lib/locales/vi.mjs +78 -0
  74. package/scripts/lib/markdown-links.mjs +4 -25
  75. package/scripts/lib/markdown-notes-render-plugin.mjs +75 -0
  76. package/scripts/lib/markdown-notes.mjs +165 -0
  77. package/scripts/lib/norna-markdown-blocks.mjs +32 -447
  78. package/scripts/lib/norna-markdown-render-plugin.mjs +4 -0
  79. package/scripts/lib/page-aliases.mjs +12 -1
  80. package/scripts/lib/page-markdown.mjs +63 -16
  81. package/scripts/lib/page-model.mjs +22 -0
  82. package/scripts/lib/page-move-plan.mjs +22 -5
  83. package/scripts/lib/pagefind-translations.mjs +620 -0
  84. package/scripts/lib/presentation-contract.mjs +6 -1
  85. package/scripts/lib/presentation.mjs +29 -30
  86. package/scripts/lib/project-config.mjs +2 -173
  87. package/scripts/lib/schema-definitions.mjs +6 -13
  88. package/scripts/lib/schema-editor-metadata.mjs +23 -44
  89. package/scripts/lib/schema-value-definitions.mjs +4 -8
  90. package/scripts/lib/semantic-callouts.mjs +4 -2
  91. package/scripts/lib/site-content.mjs +4 -2
  92. package/scripts/lib/site-link-graph.mjs +16 -6
  93. package/scripts/lib/site-navigation-tree.mjs +0 -11
  94. package/scripts/lib/sitemap.mjs +5 -3
  95. package/scripts/lib/structured-blocks.mjs +108 -0
  96. package/scripts/lib/table-render-plugin.mjs +46 -3
  97. package/scripts/lib/table-row-headers.mjs +218 -0
  98. package/scripts/lib/theme-presets.mjs +3 -10
  99. package/scripts/lib/yaml-config.mjs +2 -6
  100. package/scripts/migrate-check.mjs +19 -0
  101. package/scripts/sync-content-sections.mjs +39 -10
  102. package/scripts/sync-site-public.mjs +7 -1
  103. package/src/components/CodeBlockCopyScript.astro +47 -5
  104. package/src/components/ContentBlocks.astro +39 -0
  105. package/src/components/ContentTabsScript.astro +60 -0
  106. package/src/components/DisplaySettings.astro +17 -19
  107. package/src/components/NavigationPageTree.astro +1 -1
  108. package/src/components/NoteNavigationScript.astro +4 -0
  109. package/src/components/PageAliasRedirect.astro +49 -7
  110. package/src/components/SearchNavigationScript.astro +4 -0
  111. package/src/components/SearchPage.astro +43 -2
  112. package/src/components/SectionNavigationScript.astro +43 -11
  113. package/src/components/SiteBreadcrumbs.astro +1 -1
  114. package/src/components/SiteNavigation.astro +29 -20
  115. package/src/components/SitePage.astro +40 -15
  116. package/src/components/SiteSection.astro +5 -81
  117. package/src/components/SiteTreeNavigation.astro +2 -2
  118. package/src/components/TableOverflowScript.astro +386 -58
  119. package/src/components/TopPageMenu.astro +47 -0
  120. package/src/components/TreeNavigationScript.astro +10 -3
  121. package/src/content.config.ts +5 -8
  122. package/src/layouts/BaseLayout.astro +8 -12
  123. package/src/lib/navigationFollowing.ts +142 -0
  124. package/src/lib/noteNavigation.ts +50 -0
  125. package/src/lib/searchNavigation.ts +107 -0
  126. package/src/lib/sectionContent.ts +20 -90
  127. package/src/lib/siteNavigation.ts +0 -5
  128. package/src/lib/sitePages.ts +17 -20
  129. package/src/lib/table-sort-tooltip.ts +109 -0
  130. package/src/pages/[...slug].astro +16 -6
  131. package/src/styles/content.css +397 -134
  132. package/src/styles/foundations.css +9 -0
  133. package/src/styles/media.css +5 -0
  134. package/src/styles/navigation.css +63 -74
  135. package/src/styles/page-layout.css +7 -0
  136. package/src/styles/responsive.css +2 -7
  137. package/starters/basic/README.md +1 -1
@@ -23,6 +23,9 @@
23
23
  --color-warning-accent: var(--palette-light-warning-accent, #7a5600);
24
24
  --color-warning-surface: var(--palette-light-warning-surface, #fff4c2);
25
25
  --color-warning-text: var(--palette-light-warning-text, #3b2b00);
26
+ --color-caution-accent: var(--palette-light-caution-accent, #a34b00);
27
+ --color-caution-surface: var(--palette-light-caution-surface, #ffead6);
28
+ --color-caution-text: var(--palette-light-caution-text, #542300);
26
29
  --color-error-accent: var(--palette-light-error-accent, #a12d2d);
27
30
  --color-error-surface: var(--palette-light-error-surface, #fce8e8);
28
31
  --color-error-text: var(--palette-light-error-text, #5f1616);
@@ -113,6 +116,9 @@
113
116
  --color-warning-accent: var(--palette-dark-warning-accent);
114
117
  --color-warning-surface: var(--palette-dark-warning-surface);
115
118
  --color-warning-text: var(--palette-dark-warning-text);
119
+ --color-caution-accent: var(--palette-dark-caution-accent);
120
+ --color-caution-surface: var(--palette-dark-caution-surface);
121
+ --color-caution-text: var(--palette-dark-caution-text);
116
122
  --color-error-accent: var(--palette-dark-error-accent);
117
123
  --color-error-surface: var(--palette-dark-error-surface);
118
124
  --color-error-text: var(--palette-dark-error-text);
@@ -158,6 +164,9 @@
158
164
  --color-warning-accent: var(--palette-dark-warning-accent);
159
165
  --color-warning-surface: var(--palette-dark-warning-surface);
160
166
  --color-warning-text: var(--palette-dark-warning-text);
167
+ --color-caution-accent: var(--palette-dark-caution-accent);
168
+ --color-caution-surface: var(--palette-dark-caution-surface);
169
+ --color-caution-text: var(--palette-dark-caution-text);
161
170
  --color-error-accent: var(--palette-dark-error-accent);
162
171
  --color-error-surface: var(--palette-dark-error-surface);
163
172
  --color-error-text: var(--palette-dark-error-text);
@@ -191,6 +191,7 @@
191
191
 
192
192
  .card-list-content p:not(.card-list-badge) {
193
193
  margin: 0;
194
+ white-space: pre-line;
194
195
  font-size: calc(var(--section-body-font-size-desktop, 1rem) * var(--card-list-text-scale));
195
196
  line-height: var(--section-body-line-height, 1.5);
196
197
  }
@@ -674,6 +675,10 @@
674
675
  text-align: var(--section-caption-align-desktop, center);
675
676
  }
676
677
 
678
+ .image-meta .image-details > span {
679
+ white-space: pre-line;
680
+ }
681
+
677
682
  :root[data-image-presentation='prose-aligned'] .image-stack .image-meta {
678
683
  margin-inline: 0 auto;
679
684
  }
@@ -277,8 +277,7 @@
277
277
  .site-brand,
278
278
  .site-nav a,
279
279
  .mobile-nav-menu summary,
280
- .mobile-nav-panel a,
281
- .site-nav-submenu a {
280
+ .mobile-nav-panel a {
282
281
  color: currentColor;
283
282
  text-decoration: none;
284
283
  }
@@ -321,8 +320,66 @@
321
320
 
322
321
  .site-nav-item {
323
322
  position: relative;
323
+ display: flex;
324
+ align-items: center;
325
+ }
326
+
327
+ .top-page-menu > summary {
328
+ display: flex;
329
+ align-items: center;
330
+ justify-content: center;
331
+ width: var(--target-size-minimum);
332
+ min-height: var(--target-size-minimum);
333
+ list-style: none;
334
+ cursor: pointer;
335
+ }
336
+
337
+ .top-page-menu > summary::-webkit-details-marker { display: none; }
338
+ .top-page-menu > summary svg { width: 1rem; height: 1rem; }
339
+ .top-page-menu[open] > summary svg { transform: rotate(180deg); }
340
+ .top-page-menu > summary:hover { color: var(--color-accent); }
341
+ .top-page-menu > summary:focus-visible { outline: 2px solid var(--color-focus-ring); }
342
+
343
+ .top-page-panel {
344
+ position: absolute;
345
+ inset-block-start: 100%;
346
+ inset-inline-end: 0;
347
+ z-index: 10;
348
+ width: max-content;
349
+ min-width: 12rem;
350
+ max-width: min(24rem, calc(100vw - (var(--content-gutter) * 2)));
351
+ max-height: calc(100svh - var(--site-top-anchor-offset, 8rem) - 1rem);
352
+ overflow: auto;
353
+ border: 1px solid var(--color-border);
354
+ padding: 0.75rem;
355
+ background: var(--site-top-background-color, var(--color-page));
356
+ box-shadow: 0 0.5rem 1.5rem rgb(0 0 0 / 0.16);
357
+ transform: translateX(var(--top-page-panel-shift, 0px));
358
+ }
359
+
360
+ .site-nav-item:first-child .top-page-panel {
361
+ inset-inline-start: 0;
362
+ inset-inline-end: auto;
363
+ }
364
+
365
+ .site-nav .top-page-panel a {
366
+ padding: 0.4rem;
367
+ font-size: 0.875rem;
368
+ letter-spacing: 0;
369
+ line-height: 1.4;
370
+ text-transform: none;
371
+ overflow-wrap: break-word;
324
372
  }
325
373
 
374
+ .top-page-panel a:is(:hover, :focus-visible, [aria-current='location']) {
375
+ text-decoration: underline;
376
+ text-underline-offset: 0.2em;
377
+ }
378
+
379
+ .top-page-children:not(:first-child) { border-top: 1px solid var(--color-border); margin-top: 0.5rem; }
380
+ .top-page-children > p { margin: 0.5rem 0; font-size: 0.75rem; }
381
+ .top-page-children .navigation-page-tree .navigation-page-tree { padding-inline-start: 1rem; }
382
+
326
383
  .site-nav a,
327
384
  .mobile-nav-panel a {
328
385
  display: block;
@@ -353,78 +410,6 @@
353
410
  text-underline-offset: 0.35em;
354
411
  }
355
412
 
356
- .site-nav-submenu {
357
- position: absolute;
358
- top: 100%;
359
- left: 50%;
360
- z-index: 10;
361
- width: max-content;
362
- max-width: min(24rem, calc(100vw - (var(--content-gutter) * 2)));
363
- min-width: 12rem;
364
- padding-top: 0.7rem;
365
- opacity: 0;
366
- visibility: hidden;
367
- pointer-events: none;
368
- transform: translate(-50%, -0.35rem);
369
- transition: opacity 0.16s ease, transform 0.16s ease, visibility 0.16s ease;
370
- }
371
-
372
- .site-nav-submenu > nav {
373
- border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
374
- padding: 0.8rem 1rem;
375
- background: var(--site-top-background-color, var(--color-page));
376
- box-shadow: 0 1rem 2.5rem rgb(0 0 0 / 0.22);
377
- }
378
-
379
- .site-nav-submenu ul {
380
- display: grid;
381
- gap: 0.65rem;
382
- }
383
-
384
- .site-nav-submenu .navigation-page-tree-submenu {
385
- gap: 0.75rem;
386
- }
387
-
388
- .site-nav-submenu .navigation-page-tree-submenu .navigation-page-tree-submenu {
389
- margin: 0.15rem 0 0 0.35rem;
390
- border-left: 1px solid color-mix(in srgb, currentColor 24%, transparent);
391
- padding-left: 0.75rem;
392
- }
393
-
394
- .site-nav-submenu .navigation-page-link {
395
- font-weight: 650;
396
- }
397
-
398
- .site-nav-submenu a {
399
- font-size: 0.76rem;
400
- letter-spacing: 0.03em;
401
- line-height: 1.3;
402
- text-transform: none;
403
- white-space: normal;
404
- }
405
-
406
- .site-nav-submenu a:hover,
407
- .site-nav-submenu a:focus-visible,
408
- .site-nav-submenu a[aria-current='location'] {
409
- color: var(--site-top-text-color, var(--color-primary-text));
410
- text-decoration: underline;
411
- text-underline-offset: 0.25em;
412
- }
413
-
414
- .site-nav-item:hover .site-nav-submenu,
415
- .site-nav-item:focus-within .site-nav-submenu {
416
- opacity: 1;
417
- visibility: visible;
418
- pointer-events: auto;
419
- transform: translate(-50%, 0);
420
- }
421
-
422
- .site-nav-item[data-submenu-dismissed='true'] .site-nav-submenu {
423
- opacity: 0;
424
- visibility: hidden;
425
- pointer-events: none;
426
- transform: translate(-50%, -0.35rem);
427
- }
428
413
 
429
414
  .mobile-nav-menu {
430
415
  display: none;
@@ -447,10 +432,14 @@
447
432
  }
448
433
 
449
434
  .mobile-nav-panel-actions {
435
+ position: sticky;
436
+ top: 0;
437
+ z-index: 5;
450
438
  display: flex;
451
439
  justify-content: flex-end;
452
440
  width: min(100%, 32rem);
453
441
  margin: 0 auto 0.5rem;
442
+ background: var(--site-top-background-color, var(--color-page));
454
443
  }
455
444
 
456
445
  .mobile-nav-close {
@@ -526,6 +526,13 @@
526
526
  text-underline-offset: 0.28em;
527
527
  }
528
528
 
529
+ :is(.tree-local-navigation, .mobile-site-nav) [data-reading-position-ancestor] {
530
+ background: var(--tree-current-item-background);
531
+ color: var(--color-primary-text);
532
+ text-decoration: underline;
533
+ text-underline-offset: 0.28em;
534
+ }
535
+
529
536
  .navigation-page-chevron::before {
530
537
  display: block;
531
538
  content: "›";
@@ -576,17 +576,11 @@
576
576
 
577
577
  .image-inspector,
578
578
  .image-inspector-controls button,
579
- .norna-table-navigation button,
580
579
  .managed-image-inspection-affordance {
581
580
  border: 1px solid CanvasText;
582
581
  box-shadow: none;
583
582
  }
584
583
 
585
- .norna-table-navigation button::before {
586
- border: 0;
587
- background: transparent;
588
- }
589
-
590
584
  :is(.display-settings button, .display-settings-segmented span, .mobile-nav-menu > summary, .site-banner-dismiss) {
591
585
  border-color: ButtonText;
592
586
  background: ButtonFace;
@@ -610,7 +604,8 @@
610
604
  }
611
605
 
612
606
  .norna-table-sticky-heading,
613
- .norna-table-sticky-heading-cell {
607
+ .norna-table-sticky-heading-cell,
608
+ .norna-table-frame[data-table-row-headers='true'] tbody th[scope='row'] {
614
609
  border-color: CanvasText;
615
610
  background: Canvas;
616
611
  color: CanvasText;
@@ -61,5 +61,5 @@ Use `npm run norna:engine:version` to inspect the installed engine and
61
61
  `npm run norna:engine:update` to update it.
62
62
 
63
63
  Start with the [illustrated Getting Started guide](https://janga.github.io/norna/getting-started/install-norna/).
64
- Use the [Markdown reference index](https://github.com/janga/norna/blob/main/docs/README.md)
64
+ Use the [Norna reference](https://janga.github.io/norna/reference/)
65
65
  for exact file contracts, syntax, commands, and publishing behavior.