jekyll-theme-zer0 1.25.0 → 1.27.0

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +201 -0
  3. data/README.md +11 -28
  4. data/_data/authors.yml +4 -3
  5. data/_data/backlog.yml +54 -1
  6. data/_data/features.yml +101 -61
  7. data/_data/feedback_types.yml +148 -0
  8. data/_data/i18n/languages.yml +36 -0
  9. data/_data/navigation/README.md +1 -1
  10. data/_data/theme-manifest.yml +0 -2
  11. data/_data/ui-text.yml +36 -246
  12. data/_includes/README.md +4 -0
  13. data/_includes/components/README.md +1 -0
  14. data/_includes/components/author-avatar-url.html +4 -2
  15. data/_includes/components/env-switcher.html +3 -1
  16. data/_includes/components/language-toggle.html +81 -0
  17. data/_includes/components/page-feedback.html +252 -0
  18. data/_includes/components/search-modal.html +2 -2
  19. data/_includes/components/shortcuts-modal.html +1 -1
  20. data/_includes/components/translation-notice.html +27 -0
  21. data/_includes/content/intro.html +35 -76
  22. data/_includes/core/console-capture.html +89 -0
  23. data/_includes/core/footer.html +9 -4
  24. data/_includes/core/head.html +13 -0
  25. data/_includes/core/header.html +9 -4
  26. data/_includes/core/hreflang.html +33 -0
  27. data/_includes/core/i18n.html +36 -0
  28. data/_includes/navigation/breadcrumbs.html +1 -1
  29. data/_includes/navigation/navbar.html +5 -4
  30. data/_includes/navigation/sidebar-right.html +3 -2
  31. data/_includes/navigation/unified-drawer.html +1 -1
  32. data/_layouts/article.html +7 -1
  33. data/_layouts/default.html +5 -3
  34. data/_layouts/news.html +4 -2
  35. data/_layouts/root.html +17 -8
  36. data/_layouts/section.html +4 -2
  37. data/_sass/components/_page-feedback.scss +276 -0
  38. data/_sass/core/_docs-layout.scss +2 -78
  39. data/_sass/core/_obsidian.scss +9 -1
  40. data/_sass/layouts/_navbar-extras.scss +6 -1
  41. data/_sass/tokens/_layers.scss +4 -0
  42. data/assets/css/main.scss +1 -0
  43. data/assets/js/obsidian-graph.js +5 -1
  44. data/assets/js/page-feedback.js +660 -0
  45. data/scripts/README.md +20 -26
  46. data/scripts/bin/audit-consumer +1 -1
  47. data/scripts/bin/manifest +0 -1
  48. data/scripts/bin/sync-plugins +0 -1
  49. data/scripts/dev/rasterize-svg.js +65 -0
  50. data/scripts/features/generate-preview-images +49 -1390
  51. data/scripts/features/install-preview-generator +55 -33
  52. data/scripts/install/README.md +9 -20
  53. data/scripts/install/ai/prompts/wizard.system.md +8 -17
  54. data/scripts/lib/README.md +1 -5
  55. data/scripts/lib/install/deploy/README.md +3 -9
  56. data/scripts/lib/preview_generator.py +2261 -1341
  57. data/scripts/translate.rb +1114 -0
  58. metadata +14 -4
  59. data/_data/prompts.yml +0 -302
  60. data/_plugins/preview_image_generator.rb +0 -351
@@ -546,7 +546,8 @@ a.bd-intro-badge--tag:focus {
546
546
  white-space: nowrap;
547
547
  }
548
548
 
549
- // Plain link buttons: reserve the same trailing space as .dropdown-toggle::after.
549
+ // Plain link buttons: reserve the same trailing space as .dropdown-toggle::after
550
+ // so the plain "Improve" / "Edit on GitHub" buttons line up with the Share caret.
550
551
  .bd-intro-action-link.btn::after {
551
552
  content: "";
552
553
  display: inline-block;
@@ -554,83 +555,6 @@ a.bd-intro-badge--tag:focus {
554
555
  flex-shrink: 0;
555
556
  visibility: hidden;
556
557
  }
557
-
558
- // Copilot Agent prompt menu — compact, proportional to the trigger button.
559
- // Scoped here so the Share dropdown keeps Bootstrap defaults.
560
- .copilot-agent-menu.dropdown-menu {
561
- --bs-dropdown-min-width: 0;
562
- width: max-content;
563
- max-width: min(22rem, 90vw);
564
- padding: var(--zer0-space-1) 0;
565
- border-radius: var(--bs-border-radius);
566
- border-color: var(--zer0-color-border);
567
- }
568
-
569
- .copilot-agent-menu {
570
- .dropdown-header {
571
- padding: var(--zer0-space-1) var(--zer0-space-2) calc(var(--zer0-space-1) * .5);
572
- font-size: var(--zer0-text-sm);
573
- font-weight: var(--zer0-font-weight-semibold);
574
- line-height: var(--zer0-leading-tight);
575
- color: var(--zer0-color-ink-muted);
576
- white-space: normal;
577
- }
578
-
579
- .dropdown-divider {
580
- margin: var(--zer0-space-1) 0;
581
- }
582
-
583
- .dropdown-item {
584
- white-space: normal;
585
- padding: var(--zer0-space-1) var(--zer0-space-2);
586
- line-height: var(--zer0-leading-normal);
587
- border-radius: calc(var(--bs-border-radius) - 2px);
588
-
589
- &:hover,
590
- &:focus {
591
- .copilot-agent-item__desc {
592
- color: inherit;
593
- opacity: .85;
594
- }
595
- }
596
- }
597
- }
598
-
599
- .copilot-agent-item {
600
- display: flex;
601
- align-items: flex-start;
602
- gap: var(--zer0-space-2);
603
- min-width: 0;
604
- }
605
-
606
- .copilot-agent-item__icon {
607
- flex-shrink: 0;
608
- margin-top: .125rem;
609
- font-size: var(--zer0-text-sm);
610
- line-height: 1;
611
- opacity: .85;
612
- }
613
-
614
- .copilot-agent-item__text {
615
- display: flex;
616
- flex-direction: column;
617
- gap: .125rem;
618
- min-width: 0;
619
- }
620
-
621
- .copilot-agent-item__label {
622
- font-size: var(--zer0-text-sm);
623
- font-weight: var(--zer0-font-weight-medium);
624
- line-height: var(--zer0-leading-tight);
625
- }
626
-
627
- .copilot-agent-item__desc {
628
- display: block;
629
- font-size: .8125rem;
630
- font-weight: var(--zer0-font-weight-regular);
631
- line-height: var(--zer0-leading-normal);
632
- color: var(--zer0-color-ink-muted);
633
- }
634
558
  }
635
559
 
636
560
  .bd-toc {
@@ -208,11 +208,19 @@
208
208
  // in _sass/theme/_backgrounds.scss (specificity 0,5,0) and forces
209
209
  // `position: relative; z-index: 1` — dropping the FAB into page flow at the
210
210
  // bottom. An id (1,0,0) wins, mirroring `#aiChatToggle`. See ai-chat.html.
211
+ //
212
+ // Slot 2 on the left-side FAB stack: sits above the page-feedback FAB
213
+ // (slot 1 = var(--zer0-space-fab-offset)) — same stacking formula as
214
+ // .bd-toc-fab above #backToTopBtn on the right side.
211
215
  #obsidianLocalGraphFab.obsidian-local-graph-fab {
212
216
  position: fixed;
213
217
  left: var(--zer0-space-fab-offset, 1rem);
214
218
  right: auto;
215
- bottom: var(--zer0-space-fab-offset, 1rem);
219
+ bottom: calc(
220
+ var(--zer0-space-fab-offset, 1rem) +
221
+ var(--zer0-space-fab-size, 3.5rem) +
222
+ var(--zer0-space-fab-gap, 0.75rem)
223
+ );
216
224
  z-index: var(--zer0-layer-fab-local-graph);
217
225
 
218
226
  &[hidden] {
@@ -80,7 +80,12 @@
80
80
  &.bd-sidebar-fab--restore,
81
81
  html.bd-sidebar-pref-hidden &.bd-sidebar-fab {
82
82
  display: block !important;
83
- bottom: var(--zer0-space-fab-offset, 1rem);
83
+ // Stay at slot 2 (above the feedback FAB at slot 1) so neither overlaps.
84
+ bottom: calc(
85
+ var(--zer0-space-fab-offset, 1rem) +
86
+ var(--zer0-space-fab-size, 3.5rem) +
87
+ var(--zer0-space-fab-gap, 0.75rem)
88
+ );
84
89
  }
85
90
 
86
91
  @media (min-width: 992px) {
@@ -18,6 +18,7 @@
18
18
 
19
19
  // Floating action buttons (stack bottom-to-top) --------------------------
20
20
  --zer0-layer-fab-back-to-top: 1050;
21
+ --zer0-layer-fab-feedback: 1051; // page-feedback FAB (bottom-left)
21
22
  --zer0-layer-fab-chat: 1052;
22
23
  --zer0-layer-fab-toc: 1055;
23
24
  --zer0-layer-fab-local-graph: 1060;
@@ -25,6 +26,9 @@
25
26
  // Overlay surfaces -------------------------------------------------------
26
27
  --zer0-layer-offcanvas: 1045;
27
28
  --zer0-layer-modal: 1055;
29
+ --zer0-layer-feedback-modal: 1096; // page-feedback dialog — a focused dialog wins over
30
+ // every FAB, toast, AND the cookie banner (1095) so its
31
+ // controls are never intercepted; still below skip-link (1100)
28
32
  --zer0-layer-popover: 1070;
29
33
  --zer0-layer-tooltip: 1080;
30
34
 
data/assets/css/main.scss CHANGED
@@ -39,6 +39,7 @@
39
39
  @import "components/theme-preview";
40
40
  @import "components/content-tables";
41
41
  @import "components/search-modal";
42
+ @import "components/page-feedback";
42
43
 
43
44
  // 6. Layout partials
44
45
  @import "layouts/landing";
@@ -28,7 +28,11 @@
28
28
  'use strict';
29
29
 
30
30
  var CONTAINER_ID = 'obsidian-graph';
31
- var INDEX_URL = (window.OBSIDIAN_WIKI_INDEX_URL ||
31
+ // Index URL resolution mirrors obsidian-wiki-links.js: the baseurl-aware
32
+ // value js-cdn.html emits (OBSIDIAN_CONFIG.wikiIndexUrl), then the legacy
33
+ // per-page override global, then a <base>-relative fallback.
34
+ var INDEX_URL = ((window.OBSIDIAN_CONFIG || {}).wikiIndexUrl ||
35
+ window.OBSIDIAN_WIKI_INDEX_URL ||
32
36
  ((document.querySelector('base') || {}).href || '/') + 'assets/data/wiki-index.json');
33
37
 
34
38
  function normalize(value) {