@janga/norna 0.7.24 → 0.7.26

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 (142) hide show
  1. package/README.md +5 -4
  2. package/astro.config.mjs +27 -11
  3. package/bin/norna-cli.mjs +12 -0
  4. package/package.json +26 -5
  5. package/schemas/card-list.schema.json +121 -0
  6. package/schemas/category.schema.json +2 -2
  7. package/schemas/config.schema.json +342 -33
  8. package/schemas/content-frontmatter.schema.json +7 -7
  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/check-config.mjs +5 -1
  16. package/scripts/dev-local.mjs +130 -13
  17. package/scripts/generate-schemas.mjs +15 -3
  18. package/scripts/init-site.mjs +2 -0
  19. package/scripts/lib/category-destinations.mjs +48 -0
  20. package/scripts/lib/code-fence-metadata.mjs +25 -43
  21. package/scripts/lib/content-tabs.mjs +155 -0
  22. package/scripts/lib/details-headings.mjs +58 -0
  23. package/scripts/lib/docusaurus-migration-audit.mjs +603 -0
  24. package/scripts/lib/edit-source-link.mjs +53 -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/navigation-model.mjs +1 -1
  78. package/scripts/lib/norna-markdown-blocks.mjs +123 -447
  79. package/scripts/lib/norna-markdown-render-plugin.mjs +4 -0
  80. package/scripts/lib/page-aliases.mjs +12 -1
  81. package/scripts/lib/page-markdown.mjs +63 -16
  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 +22 -163
  87. package/scripts/lib/schema-definitions.mjs +13 -12
  88. package/scripts/lib/schema-editor-metadata.mjs +42 -46
  89. package/scripts/lib/schema-value-definitions.mjs +7 -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/site-paths.mjs +14 -2
  95. package/scripts/lib/sitemap.mjs +5 -3
  96. package/scripts/lib/structured-blocks.mjs +108 -0
  97. package/scripts/lib/table-render-plugin.mjs +76 -0
  98. package/scripts/lib/table-row-headers.mjs +218 -0
  99. package/scripts/lib/theme-presets.mjs +3 -10
  100. package/scripts/lib/yaml-config.mjs +2 -6
  101. package/scripts/migrate-check.mjs +19 -0
  102. package/scripts/sync-content-sections.mjs +39 -10
  103. package/scripts/sync-site-public.mjs +7 -1
  104. package/src/components/CardList.astro +1 -0
  105. package/src/components/CodeBlockCopyScript.astro +49 -6
  106. package/src/components/ContentBlocks.astro +39 -0
  107. package/src/components/ContentTabsScript.astro +60 -0
  108. package/src/components/DisplaySettings.astro +17 -19
  109. package/src/components/ImageCarousel.astro +4 -1
  110. package/src/components/ImageStack.astro +34 -9
  111. package/src/components/ImageStackEnhancement.astro +331 -0
  112. package/src/components/NavigationPageTree.astro +1 -1
  113. package/src/components/NoteNavigationScript.astro +4 -0
  114. package/src/components/PageAliasRedirect.astro +5 -4
  115. package/src/components/PageContentsNavigation.astro +2 -3
  116. package/src/components/SearchNavigationScript.astro +4 -0
  117. package/src/components/SearchPage.astro +43 -2
  118. package/src/components/SectionNavigationScript.astro +86 -16
  119. package/src/components/SiteBreadcrumbs.astro +1 -1
  120. package/src/components/SiteNavigation.astro +98 -65
  121. package/src/components/SitePage.astro +73 -33
  122. package/src/components/SiteSection.astro +5 -81
  123. package/src/components/SiteTreeNavigation.astro +5 -2
  124. package/src/components/TableOverflowScript.astro +579 -0
  125. package/src/components/TopPageMenu.astro +47 -0
  126. package/src/components/TreeNavigationScript.astro +86 -23
  127. package/src/layouts/BaseLayout.astro +34 -12
  128. package/src/lib/generatedImages.ts +18 -0
  129. package/src/lib/navigationFollowing.ts +142 -0
  130. package/src/lib/noteNavigation.ts +50 -0
  131. package/src/lib/searchNavigation.ts +107 -0
  132. package/src/lib/sectionContent.ts +23 -116
  133. package/src/lib/siteNavigation.ts +0 -5
  134. package/src/lib/sitePages.ts +18 -4
  135. package/src/lib/table-sort-tooltip.ts +109 -0
  136. package/src/pages/[...slug].astro +16 -6
  137. package/src/styles/content.css +563 -26
  138. package/src/styles/foundations.css +9 -0
  139. package/src/styles/media.css +192 -3
  140. package/src/styles/navigation.css +214 -60
  141. package/src/styles/page-layout.css +55 -16
  142. package/src/styles/responsive.css +62 -20
@@ -40,7 +40,7 @@
40
40
  background-color: transparent;
41
41
  }
42
42
 
43
- @media (min-width: 701px) {
43
+ @media (min-width: 961px) {
44
44
  .site-page-layout-tree > .site-content {
45
45
  --layout-inline-start-margin: 0;
46
46
  --layout-inline-end-margin: auto;
@@ -48,7 +48,7 @@
48
48
  }
49
49
  }
50
50
 
51
- .tree-local-navigation {
51
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
52
52
  --tree-disclosure-icon-width: 0.9rem;
53
53
  --tree-disclosure-gap: 0.6rem;
54
54
  --tree-disclosure-offset: calc(var(--tree-disclosure-icon-width) + var(--tree-disclosure-gap));
@@ -57,6 +57,9 @@
57
57
  var(--color-surface-soft-background) 58%,
58
58
  var(--color-page)
59
59
  );
60
+ }
61
+
62
+ .tree-local-navigation {
60
63
  position: sticky;
61
64
  top: calc(var(--site-top-anchor-offset) + 1.25rem);
62
65
  z-index: 3;
@@ -177,13 +180,23 @@
177
180
  display: none;
178
181
  }
179
182
 
180
- :root[data-appearance='dark'] .tree-local-navigation {
181
- --tree-current-item-background: var(--color-surface-soft-background);
183
+ :root[data-appearance='dark']
184
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
185
+ --tree-current-item-background: color-mix(
186
+ in srgb,
187
+ var(--color-surface-emphasis-background) 64%,
188
+ var(--color-surface-soft-background)
189
+ );
182
190
  }
183
191
 
184
192
  @media (prefers-color-scheme: dark) {
185
- :root[data-appearance='system'] .tree-local-navigation {
186
- --tree-current-item-background: var(--color-surface-soft-background);
193
+ :root[data-appearance='system']
194
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
195
+ --tree-current-item-background: color-mix(
196
+ in srgb,
197
+ var(--color-surface-emphasis-background) 64%,
198
+ var(--color-surface-soft-background)
199
+ );
187
200
  }
188
201
  }
189
202
 
@@ -204,14 +217,6 @@
204
217
  overscroll-behavior: contain;
205
218
  }
206
219
 
207
- .page-contents-navigation-inline {
208
- display: none;
209
- width: min(100%, var(--reader-text-width, var(--page-text-width, var(--text-width))));
210
- margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
211
- border-block: 1px solid var(--color-nav-separator);
212
- padding: 0.85rem 0;
213
- }
214
-
215
220
  .page-contents-navigation-label {
216
221
  margin: 0 0 0.65rem;
217
222
  color: var(--color-primary-text);
@@ -221,7 +226,7 @@
221
226
  line-height: 1.3;
222
227
  }
223
228
 
224
- @media (min-width: 701px) and (max-width: 1100px) {
229
+ @media (min-width: 961px) and (max-width: 1280px) {
225
230
  .site-page-layout-tree {
226
231
  --tree-layout-width: max(var(--page-width), 76rem);
227
232
  grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
@@ -230,9 +235,30 @@
230
235
  .page-contents-navigation-rail {
231
236
  display: none;
232
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
+ }
233
248
 
234
- .page-contents-navigation-inline {
249
+ @media (max-width: 960px) {
250
+ .site-page-layout-tree {
235
251
  display: block;
252
+ width: 100%;
253
+ }
254
+
255
+ .site-page-layout-tree > .site-content {
256
+ width: min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));
257
+ }
258
+
259
+ .tree-local-navigation,
260
+ .page-contents-navigation {
261
+ display: none;
236
262
  }
237
263
  }
238
264
 
@@ -500,6 +526,13 @@
500
526
  text-underline-offset: 0.28em;
501
527
  }
502
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
+
503
536
  .navigation-page-chevron::before {
504
537
  display: block;
505
538
  content: "›";
@@ -593,6 +626,12 @@
593
626
  text-underline-offset: 0.25em;
594
627
  }
595
628
 
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
+
596
635
  .page-contents-links a[aria-current='location']::before {
597
636
  position: absolute;
598
637
  top: 0.15em;
@@ -88,18 +88,6 @@
88
88
  text-transform: uppercase;
89
89
  }
90
90
 
91
- .mobile-nav-menu > summary::after {
92
- content: "☰";
93
- font-size: 1rem;
94
- line-height: 1;
95
- opacity: 0.86;
96
- }
97
-
98
- .mobile-nav-menu[open] > summary::after {
99
- content: "×";
100
- font-size: 1.25rem;
101
- }
102
-
103
91
  .mobile-nav-menu > summary::-webkit-details-marker {
104
92
  display: none;
105
93
  }
@@ -511,11 +499,21 @@
511
499
  gap: var(--space-image-item);
512
500
  }
513
501
 
514
- .image-details {
515
- padding: 0 0.25rem;
516
- font-size: 1rem;
502
+ .image-details {
503
+ padding: 0 0.25rem;
504
+ font-size: 1rem;
505
+ }
506
+
507
+ .image-inspector {
508
+ width: calc(100% - 1rem);
509
+ height: calc(100svh - 1rem);
510
+ }
511
+
512
+ .image-inspector-layout {
513
+ gap: 0.5rem;
514
+ padding: 0.5rem;
515
+ }
517
516
  }
518
- }
519
517
 
520
518
  @media (forced-colors: active) {
521
519
  :root,
@@ -571,10 +569,17 @@
571
569
  .card-list-item,
572
570
  .page-sequence-link,
573
571
  .image-carousel-button,
574
- .image-carousel-position {
575
- border: 1px solid CanvasText;
576
- box-shadow: none;
577
- }
572
+ .image-carousel-position {
573
+ border: 1px solid CanvasText;
574
+ box-shadow: none;
575
+ }
576
+
577
+ .image-inspector,
578
+ .image-inspector-controls button,
579
+ .managed-image-inspection-affordance {
580
+ border: 1px solid CanvasText;
581
+ box-shadow: none;
582
+ }
578
583
 
579
584
  :is(.display-settings button, .display-settings-segmented span, .mobile-nav-menu > summary, .site-banner-dismiss) {
580
585
  border-color: ButtonText;
@@ -587,6 +592,43 @@
587
592
  background: Canvas !important;
588
593
  }
589
594
 
595
+ .norna-table-frame::before,
596
+ .norna-table-frame::after {
597
+ top: 50%;
598
+ bottom: auto;
599
+ width: 0.55rem;
600
+ height: 0.55rem;
601
+ border-block-start: 2px solid CanvasText;
602
+ border-inline-end: 2px solid CanvasText;
603
+ background: none;
604
+ }
605
+
606
+ .norna-table-sticky-heading,
607
+ .norna-table-sticky-heading-cell,
608
+ .norna-table-frame[data-table-row-headers='true'] tbody th[scope='row'] {
609
+ border-color: CanvasText;
610
+ background: Canvas;
611
+ color: CanvasText;
612
+ }
613
+
614
+ .norna-table-frame::before {
615
+ inset-inline-start: 0.4rem;
616
+ transform: translateY(-50%) rotate(-135deg);
617
+ }
618
+
619
+ .norna-table-frame::after {
620
+ inset-inline-end: 0.4rem;
621
+ transform: translateY(-50%) rotate(45deg);
622
+ }
623
+
624
+ .norna-table-frame:dir(rtl)::before {
625
+ transform: translateY(-50%) rotate(45deg);
626
+ }
627
+
628
+ .norna-table-frame:dir(rtl)::after {
629
+ transform: translateY(-50%) rotate(-135deg);
630
+ }
631
+
590
632
  :is(.display-settings-segmented input:checked + span, .image-carousel-button:hover:not(:disabled)) {
591
633
  background: Highlight;
592
634
  color: HighlightText;