@treeseed/core 0.10.22 → 0.11.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 (108) hide show
  1. package/README.md +69 -125
  2. package/dist/dev-watch.js +2 -1
  3. package/dist/dev.d.ts +1 -1
  4. package/dist/dev.js +51 -35
  5. package/dist/pages/404.astro +1 -1
  6. package/dist/pages/[slug].astro +4 -4
  7. package/dist/pages/agents/[slug].astro +3 -3
  8. package/dist/pages/agents/index.astro +3 -3
  9. package/dist/pages/books/[slug].astro +3 -3
  10. package/dist/pages/books/index.astro +3 -3
  11. package/dist/pages/contact.astro +2 -2
  12. package/dist/pages/decisions/[slug].astro +3 -3
  13. package/dist/pages/decisions/index.astro +3 -3
  14. package/dist/pages/docs-runtime/[...slug].astro +3 -3
  15. package/dist/pages/docs-runtime/index.astro +3 -3
  16. package/dist/pages/index.astro +11 -11
  17. package/dist/pages/notes/[slug].astro +3 -3
  18. package/dist/pages/notes/index.astro +3 -3
  19. package/dist/pages/objectives/[slug].astro +3 -3
  20. package/dist/pages/objectives/index.astro +3 -3
  21. package/dist/pages/people/[slug].astro +3 -3
  22. package/dist/pages/people/index.astro +3 -3
  23. package/dist/pages/proposals/[slug].astro +3 -3
  24. package/dist/pages/proposals/index.astro +3 -3
  25. package/dist/pages/questions/[slug].astro +3 -3
  26. package/dist/pages/questions/index.astro +3 -3
  27. package/dist/pages/ui/index.astro +23 -23
  28. package/dist/platform-resources.js +5 -1
  29. package/dist/scripts/build-dist.js +2 -0
  30. package/dist/scripts/release-verify.js +24 -2
  31. package/dist/scripts/workspace-bootstrap.js +3 -0
  32. package/dist/site.js +49 -11
  33. package/dist/styles/global.css +5 -5
  34. package/package.json +3 -45
  35. package/templates/github/deploy-web.workflow.yml +36 -2
  36. package/dist/components/DevWatchReload.astro +0 -45
  37. package/dist/components/SiteTitle.astro +0 -51
  38. package/dist/components/content/ContentStatusLegend.astro +0 -18
  39. package/dist/components/content/StatusBadge.astro +0 -11
  40. package/dist/components/docs/BookFontControls.astro +0 -180
  41. package/dist/components/docs/DesktopSidebarToggle.astro +0 -88
  42. package/dist/components/docs/DownloadBook.astro +0 -34
  43. package/dist/components/docs/Footer.astro +0 -112
  44. package/dist/components/docs/Header.astro +0 -157
  45. package/dist/components/docs/PageFrame.astro +0 -260
  46. package/dist/components/docs/PageSidebar.astro +0 -63
  47. package/dist/components/docs/PageTitle.astro +0 -39
  48. package/dist/components/docs/Sidebar.astro +0 -41
  49. package/dist/components/docs/ThemeSelect.astro +0 -5
  50. package/dist/components/forms/ContactForm.astro +0 -233
  51. package/dist/components/forms/FooterSubscribeForm.astro +0 -188
  52. package/dist/components/site/BookList.astro +0 -27
  53. package/dist/components/site/CTASection.astro +0 -24
  54. package/dist/components/site/ChronicleList.astro +0 -33
  55. package/dist/components/site/Hero.astro +0 -18
  56. package/dist/components/site/NotesList.astro +0 -29
  57. package/dist/components/site/PathCard.astro +0 -16
  58. package/dist/components/site/ProfileList.astro +0 -30
  59. package/dist/components/site/PublishedContentBody.astro +0 -5
  60. package/dist/components/site/RouteNotFound.astro +0 -25
  61. package/dist/components/site/SectionIntro.astro +0 -9
  62. package/dist/components/site/StageBanner.astro +0 -8
  63. package/dist/components/site/TrustCallout.astro +0 -9
  64. package/dist/components/starlight.js +0 -6
  65. package/dist/components/ui/data/ActionList.astro +0 -51
  66. package/dist/components/ui/data/Badge.astro +0 -19
  67. package/dist/components/ui/data/DataTable.astro +0 -51
  68. package/dist/components/ui/data/KeyValueList.astro +0 -28
  69. package/dist/components/ui/data/MetricCard.astro +0 -25
  70. package/dist/components/ui/data/MetricGrid.astro +0 -27
  71. package/dist/components/ui/data/StatusPill.astro +0 -20
  72. package/dist/components/ui/forms/Button.astro +0 -59
  73. package/dist/components/ui/forms/Field.astro +0 -39
  74. package/dist/components/ui/forms/FormActions.astro +0 -12
  75. package/dist/components/ui/forms/PasswordMeter.astro +0 -80
  76. package/dist/components/ui/forms/RadioGroup.astro +0 -55
  77. package/dist/components/ui/forms/Select.astro +0 -47
  78. package/dist/components/ui/forms/TextInput.astro +0 -58
  79. package/dist/components/ui/forms/Textarea.astro +0 -45
  80. package/dist/components/ui/layout/PageHeader.astro +0 -45
  81. package/dist/components/ui/shell/AppShell.astro +0 -130
  82. package/dist/components/ui/shell/BottomNav.astro +0 -42
  83. package/dist/components/ui/shell/ProjectHeader.astro +0 -66
  84. package/dist/components/ui/shell/PublicFooter.astro +0 -39
  85. package/dist/components/ui/shell/PublicShell.astro +0 -184
  86. package/dist/components/ui/shell/RailNav.astro +0 -42
  87. package/dist/components/ui/shell/ShellIconLink.astro +0 -30
  88. package/dist/components/ui/shell/TopBar.astro +0 -52
  89. package/dist/components/ui/surface/Card.astro +0 -46
  90. package/dist/components/ui/surface/EmptyState.astro +0 -45
  91. package/dist/components/ui/surface/Panel.astro +0 -54
  92. package/dist/components/ui/theme/ThemeMenu.astro +0 -58
  93. package/dist/components/ui/theme/ThemePreviewSwatch.astro +0 -18
  94. package/dist/components/ui/theme/ThemeScript.astro +0 -112
  95. package/dist/components/ui/theme/ThemeSelector.astro +0 -202
  96. package/dist/components/ui/types.js +0 -0
  97. package/dist/layouts/AuthoredEntryLayout.astro +0 -195
  98. package/dist/layouts/BookLayout.astro +0 -35
  99. package/dist/layouts/BridgeLayout.astro +0 -11
  100. package/dist/layouts/ContentLayout.astro +0 -24
  101. package/dist/layouts/MainLayout.astro +0 -76
  102. package/dist/layouts/NoteLayout.astro +0 -26
  103. package/dist/layouts/ProfileLayout.astro +0 -85
  104. package/dist/styles/app-shell.css +0 -626
  105. package/dist/styles/forms.css +0 -274
  106. package/dist/styles/theme.css +0 -198
  107. package/dist/styles/tokens.css +0 -65
  108. package/dist/styles/ui.css +0 -551
@@ -1,51 +0,0 @@
1
- ---
2
- import { SITE } from '../utils/seo';
3
-
4
- const { siteTitleHref } = Astro.locals.starlightRoute;
5
- ---
6
-
7
- <a href={siteTitleHref} class="site-header-custom sl-flex" aria-label={SITE.name}>
8
- <img src={SITE.logo.src} alt={SITE.logo.alt} class="site-header-logo" />
9
- <span class="site-header-copy">
10
- <span class="site-header-name" translate="no">{SITE.name}</span>
11
- <span class="site-header-statement">{SITE.statement}</span>
12
- </span>
13
- </a>
14
-
15
- <style>
16
- @layer starlight.core {
17
- .site-header-custom {
18
- align-items: center;
19
- gap: 0.85rem;
20
- color: var(--sl-color-white);
21
- text-decoration: none;
22
- min-width: 0;
23
- }
24
-
25
- .site-header-logo {
26
- width: 3.75rem;
27
- height: 3.75rem;
28
- object-fit: contain;
29
- flex: 0 0 auto;
30
- }
31
-
32
- .site-header-copy {
33
- display: grid;
34
- min-width: 0;
35
- }
36
-
37
- .site-header-name {
38
- font-size: var(--sl-text-h4);
39
- font-weight: 600;
40
- line-height: 1.1;
41
- }
42
-
43
- .site-header-statement {
44
- font-size: var(--sl-text-xs);
45
- color: var(--sl-color-gray-3);
46
- white-space: nowrap;
47
- overflow: hidden;
48
- text-overflow: ellipsis;
49
- }
50
- }
51
- </style>
@@ -1,18 +0,0 @@
1
- ---
2
- import { CONTENT_STATUSES, CONTENT_STATUS_META } from '../../utils/content-status';
3
- ---
4
-
5
- <section class="border-t border-[color:var(--ts-color-border-strong)] pt-8">
6
- <p class="text-sm font-semibold uppercase tracking-[0.18em] text-[color:var(--ts-color-accent-strong)]">Content status legend</p>
7
- <div class="mt-5 grid gap-3 md:grid-cols-2 xl:grid-cols-5">
8
- {CONTENT_STATUSES.map((status) => {
9
- const meta = CONTENT_STATUS_META[status];
10
- return (
11
- <div class:list={['border-l-4 bg-[color:var(--ts-color-canvas-subtle)] px-4 py-4', meta.tone]}>
12
- <p class="font-semibold">{meta.label}</p>
13
- <p class="mt-2 text-sm leading-7 text-[color:var(--ts-color-text-muted)]">{meta.description}</p>
14
- </div>
15
- );
16
- })}
17
- </div>
18
- </section>
@@ -1,11 +0,0 @@
1
- ---
2
- import type { ContentStatus } from '../../utils/content-status';
3
- import { CONTENT_STATUS_META } from '../../utils/content-status';
4
-
5
- const { status } = Astro.props as { status: ContentStatus };
6
- const meta = CONTENT_STATUS_META[status];
7
- ---
8
-
9
- <span class:list={['inline-flex items-center rounded-sm border px-3 py-1 text-[0.72rem] font-bold uppercase tracking-[0.18em]', meta.tone]}>
10
- {meta.label}
11
- </span>
@@ -1,180 +0,0 @@
1
- ---
2
- import { getBookForPath } from '../../utils/starlight-nav';
3
-
4
- const isBookPage = Boolean(getBookForPath(Astro.url.pathname));
5
- ---
6
-
7
- {
8
- isBookPage && (
9
- <div class="book-font-controls print:hidden" data-book-font-controls>
10
- <div class="book-font-controls__buttons" role="group" aria-label="Book text size">
11
- <button
12
- type="button"
13
- class="book-font-controls__button"
14
- data-book-font-action="decrease"
15
- data-book-font-tooltip="Text size"
16
- aria-label="Decrease book text size"
17
- >
18
- -
19
- </button>
20
- <button
21
- type="button"
22
- class="book-font-controls__button"
23
- data-book-font-action="increase"
24
- data-book-font-tooltip="Text size"
25
- aria-label="Increase book text size"
26
- >
27
- +
28
- </button>
29
- </div>
30
- </div>
31
- )
32
- }
33
-
34
- <script is:inline>
35
- const storageKey = 'docs.book-font-scale';
36
- const cssVariableName = '--docs-book-font-scale';
37
- const defaultScale = 1;
38
- const step = 0.1;
39
- const minScale = 0.85;
40
- const maxScale = 1.35;
41
-
42
- const clampScale = (value) => Math.min(maxScale, Math.max(minScale, value));
43
-
44
- const readScale = () => {
45
- try {
46
- const rawValue = localStorage.getItem(storageKey);
47
- const parsedValue = rawValue === null ? defaultScale : Number(rawValue);
48
- return Number.isFinite(parsedValue) ? clampScale(parsedValue) : defaultScale;
49
- } catch {
50
- return defaultScale;
51
- }
52
- };
53
-
54
- const writeScale = (value) => {
55
- try {
56
- localStorage.setItem(storageKey, String(value));
57
- } catch {
58
- // Ignore storage failures and keep the reader controls functional.
59
- }
60
- };
61
-
62
- const updateButtons = (controls, value) => {
63
- const decreaseButton = controls.querySelector('[data-book-font-action="decrease"]');
64
- const increaseButton = controls.querySelector('[data-book-font-action="increase"]');
65
-
66
- if (decreaseButton instanceof HTMLButtonElement) {
67
- decreaseButton.disabled = value <= minScale;
68
- }
69
-
70
- if (increaseButton instanceof HTMLButtonElement) {
71
- increaseButton.disabled = value >= maxScale;
72
- }
73
- };
74
-
75
- const applyScale = (controls, value) => {
76
- const normalizedValue = clampScale(value);
77
- document.documentElement.style.setProperty(cssVariableName, String(normalizedValue));
78
- updateButtons(controls, normalizedValue);
79
- return normalizedValue;
80
- };
81
-
82
- const bindControls = () => {
83
- for (const controls of document.querySelectorAll('[data-book-font-controls]')) {
84
- if (!(controls instanceof HTMLElement) || controls.dataset.bookFontBound === 'true') continue;
85
- controls.dataset.bookFontBound = 'true';
86
-
87
- const currentValue = applyScale(controls, readScale());
88
- controls.dataset.bookFontScale = String(currentValue);
89
-
90
- for (const button of controls.querySelectorAll('[data-book-font-action]')) {
91
- if (!(button instanceof HTMLButtonElement)) continue;
92
- button.addEventListener('click', () => {
93
- const direction = button.dataset.bookFontAction === 'decrease' ? -1 : 1;
94
- const nextValue = applyScale(controls, readScale() + direction * step);
95
- writeScale(nextValue);
96
- controls.dataset.bookFontScale = String(nextValue);
97
- });
98
- }
99
- }
100
- };
101
-
102
- bindControls();
103
- document.addEventListener('astro:page-load', bindControls);
104
- </script>
105
-
106
- <style>
107
- .book-font-controls {
108
- display: inline-flex;
109
- align-items: center;
110
- color: var(--sl-color-text);
111
- }
112
-
113
- .book-font-controls__buttons {
114
- display: inline-flex;
115
- align-items: center;
116
- border: 1px solid var(--ts-color-border-strong);
117
- border-radius: 999px;
118
- background: color-mix(in srgb, var(--ts-color-canvas-subtle) 78%, white 22%);
119
- }
120
-
121
- .book-font-controls__button {
122
- display: inline-flex;
123
- align-items: center;
124
- justify-content: center;
125
- width: 2rem;
126
- height: 2rem;
127
- border: 0;
128
- background: transparent;
129
- color: var(--ts-color-text);
130
- font-size: 1rem;
131
- font-weight: 700;
132
- line-height: 1;
133
- cursor: pointer;
134
- position: relative;
135
- }
136
-
137
- .book-font-controls__button + .book-font-controls__button {
138
- border-inline-start: 1px solid var(--ts-color-border-strong);
139
- }
140
-
141
- .book-font-controls__button:hover,
142
- .book-font-controls__button:focus-visible {
143
- background: color-mix(in srgb, var(--ts-color-info-soft) 66%, white 34%);
144
- color: var(--ts-color-info-text);
145
- }
146
-
147
- .book-font-controls__button::after {
148
- content: attr(data-book-font-tooltip);
149
- position: absolute;
150
- inset-inline-start: 50%;
151
- inset-block-start: calc(100% + 0.45rem);
152
- transform: translateX(-50%) translateY(-0.2rem);
153
- padding: 0.3rem 0.5rem;
154
- border: 1px solid var(--ts-color-border-strong);
155
- border-radius: 0.45rem;
156
- background: color-mix(in srgb, var(--ts-color-canvas-subtle) 88%, white 12%);
157
- color: var(--ts-color-text);
158
- font-size: 0.76rem;
159
- font-weight: 700;
160
- letter-spacing: 0.04em;
161
- text-transform: uppercase;
162
- white-space: nowrap;
163
- opacity: 0;
164
- pointer-events: none;
165
- transition:
166
- opacity 140ms ease,
167
- transform 140ms ease;
168
- }
169
-
170
- .book-font-controls__button:hover::after,
171
- .book-font-controls__button:focus-visible::after {
172
- opacity: 1;
173
- transform: translateX(-50%) translateY(0);
174
- }
175
-
176
- .book-font-controls__button:disabled {
177
- opacity: 0.45;
178
- cursor: not-allowed;
179
- }
180
- </style>
@@ -1,88 +0,0 @@
1
- ---
2
- interface Props {
3
- side: 'left' | 'right';
4
- label: string;
5
- }
6
-
7
- const { side, label } = Astro.props;
8
-
9
- const sidebarId = side === 'left' ? 'starlight__sidebar' : 'starlight__page-toc';
10
- const iconPath =
11
- side === 'left'
12
- ? 'M15.75 19.5 8.25 12l7.5-7.5'
13
- : 'M8.25 4.5 15.75 12l-7.5 7.5';
14
- ---
15
-
16
- <button
17
- type="button"
18
- class="desktop-sidebar-toggle"
19
- data-docs-sidebar-toggle={side}
20
- data-label={label}
21
- aria-controls={sidebarId}
22
- aria-expanded="false"
23
- >
24
- <span class="desktop-sidebar-toggle__icon" aria-hidden="true">
25
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
26
- <path d={iconPath} />
27
- </svg>
28
- </span>
29
- <span class="desktop-sidebar-toggle__text">{label}</span>
30
- </button>
31
-
32
- <style>
33
- @layer starlight.components {
34
- .desktop-sidebar-toggle {
35
- display: none;
36
- }
37
-
38
- @media (min-width: 72rem) {
39
- .desktop-sidebar-toggle {
40
- display: inline-flex;
41
- align-items: center;
42
- gap: 0.45rem;
43
- border: 1px solid var(--sl-color-hairline);
44
- border-radius: 999px;
45
- padding: 0.45rem 0.8rem;
46
- background: color-mix(in srgb, var(--ts-color-canvas-subtle) 84%, white 16%);
47
- color: var(--ts-color-text-muted);
48
- font-size: 0.85rem;
49
- line-height: 1;
50
- transition:
51
- background-color 160ms ease,
52
- border-color 160ms ease,
53
- color 160ms ease;
54
- }
55
-
56
- .desktop-sidebar-toggle:hover,
57
- .desktop-sidebar-toggle:focus-visible {
58
- background: color-mix(in srgb, var(--ts-color-info-soft) 52%, white 48%);
59
- border-color: var(--ts-color-info);
60
- color: var(--ts-color-text);
61
- }
62
-
63
- .desktop-sidebar-toggle[aria-expanded='true'] {
64
- background: color-mix(in srgb, var(--ts-color-info-soft) 68%, white 32%);
65
- border-color: var(--ts-color-info);
66
- color: var(--ts-color-text);
67
- }
68
-
69
- .desktop-sidebar-toggle__icon {
70
- display: inline-flex;
71
- align-items: center;
72
- justify-content: center;
73
- width: 1rem;
74
- height: 1rem;
75
- }
76
-
77
- .desktop-sidebar-toggle__icon svg {
78
- width: 1rem;
79
- height: 1rem;
80
- fill: none;
81
- stroke: currentColor;
82
- stroke-width: 1.8;
83
- stroke-linecap: round;
84
- stroke-linejoin: round;
85
- }
86
- }
87
- }
88
- </style>
@@ -1,34 +0,0 @@
1
- ---
2
- import { getDocsDownloadForPath } from '../../utils/starlight-nav';
3
-
4
- const download = getDocsDownloadForPath(Astro.url.pathname);
5
- ---
6
-
7
- {
8
- download && (
9
- <a
10
- href={download.downloadHref}
11
- download={download.downloadFileName}
12
- aria-label={download.downloadTitle}
13
- class="download-button docs-download-button print:hidden"
14
- >
15
- <svg
16
- xmlns="http://www.w3.org/2000/svg"
17
- width="16"
18
- height="16"
19
- viewBox="0 0 24 24"
20
- fill="none"
21
- stroke="currentColor"
22
- stroke-width="2"
23
- stroke-linecap="round"
24
- stroke-linejoin="round"
25
- aria-hidden="true"
26
- >
27
- <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
28
- <polyline points="7 10 12 15 17 10" />
29
- <line x1="12" x2="12" y1="15" y2="3" />
30
- </svg>
31
- <span>Download Book</span>
32
- </a>
33
- )
34
- }
@@ -1,112 +0,0 @@
1
- ---
2
- import EditLink from '../../vendor/starlight/components/EditLink.astro';
3
- import LastUpdated from '../../vendor/starlight/components/LastUpdated.astro';
4
- import Pagination from '../../vendor/starlight/components/Pagination.astro';
5
- import config from 'virtual:starlight/user-config';
6
- import PublicFooter from '../ui/shell/PublicFooter.astro';
7
- import DevWatchReload from '../DevWatchReload.astro';
8
- ---
9
-
10
- <div class="docs-footer-shell">
11
- <div class="docs-footer-page-band">
12
- <div class="docs-footer-page-inner">
13
- <div class="docs-footer-page-meta">
14
- <EditLink />
15
- <LastUpdated />
16
- </div>
17
- <Pagination />
18
- {
19
- config.credits && (
20
- <p class="docs-footer-credits">
21
- Built with <a href="https://starlight.astro.build">Starlight</a>
22
- </p>
23
- )
24
- }
25
- </div>
26
- </div>
27
-
28
- <PublicFooter currentPath={Astro.url.pathname} />
29
- <DevWatchReload />
30
- </div>
31
-
32
- <style>
33
- @layer starlight.core {
34
- .docs-footer-shell {
35
- margin-top: 4rem;
36
- width: 100%;
37
- }
38
-
39
- .docs-footer-page-inner,
40
- .docs-footer-shell :global(.ts-public-footer__inner) {
41
- width: min(100%, var(--ts-content-width));
42
- margin-inline: auto;
43
- padding-inline: 1rem;
44
- }
45
-
46
- .docs-footer-page-band {
47
- padding-bottom: 2.5rem;
48
- }
49
-
50
- .docs-footer-page-inner {
51
- display: grid;
52
- gap: 1.5rem;
53
- }
54
-
55
- :global(:root[data-docs-book-page='true']) .docs-footer-page-inner {
56
- max-width: var(--docs-book-panel-width);
57
- }
58
-
59
- :global(:root[data-docs-book-page='true']) .docs-footer-page-inner .pagination-links > :only-child {
60
- max-width: min(28rem, 100%);
61
- margin-inline: auto;
62
- }
63
-
64
- .docs-footer-page-meta {
65
- display: flex;
66
- flex-wrap: wrap;
67
- gap: 0.75rem 3rem;
68
- justify-content: space-between;
69
- margin-top: 3rem;
70
- font-size: var(--sl-text-sm);
71
- color: var(--sl-color-gray-3);
72
- }
73
-
74
- .docs-footer-page-meta :global(p:only-child) {
75
- margin-inline-start: auto;
76
- }
77
-
78
- .docs-footer-credits {
79
- margin: 0 auto;
80
- font-size: var(--sl-text-xs);
81
- color: var(--sl-color-gray-3);
82
- }
83
-
84
- .docs-footer-credits a {
85
- color: inherit;
86
- text-decoration: none;
87
- }
88
-
89
- .docs-footer-credits a:hover,
90
- .docs-footer-credits a:focus-visible {
91
- color: var(--sl-color-white);
92
- }
93
-
94
- .docs-footer-shell :global(.ts-public-footer) {
95
- margin-top: 0;
96
- }
97
-
98
- @media (min-width: 40rem) {
99
- .docs-footer-page-inner,
100
- .docs-footer-shell :global(.ts-public-footer__inner) {
101
- padding-inline: 1.5rem;
102
- }
103
- }
104
-
105
- @media (min-width: 64rem) {
106
- .docs-footer-page-inner,
107
- .docs-footer-shell :global(.ts-public-footer__inner) {
108
- padding-inline: 2rem;
109
- }
110
- }
111
- }
112
- </style>
@@ -1,157 +0,0 @@
1
- ---
2
- import config from 'virtual:starlight/user-config';
3
-
4
- import LanguageSelect from '../../vendor/starlight/components/LanguageSelect.astro';
5
- import Search from '../../vendor/starlight/components/Search.astro';
6
- import SocialIcons from '../../vendor/starlight/components/SocialIcons.astro';
7
- import DesktopSidebarToggle from './DesktopSidebarToggle.astro';
8
- import BookFontControls from './BookFontControls.astro';
9
- import DownloadBook from './DownloadBook.astro';
10
- import { SITE } from '../../utils/seo';
11
-
12
- const shouldRenderSearch =
13
- config.pagefind || config.components.Search !== '../../vendor/starlight/components/Search.astro';
14
- const { hasSidebar, toc } = Astro.locals.starlightRoute;
15
- const hasToc = Boolean(toc);
16
- ---
17
-
18
- <div class="header">
19
- <div class="title-wrapper sl-flex">
20
- <a class="ts-shell-brand" href="/">
21
- <span class="ts-shell-brand__mark">
22
- <img src={SITE.logo.src} alt={SITE.logo.alt} width="60" height="60" loading="eager" />
23
- </span>
24
- <span class="ts-shell-brand__text">
25
- <span class="ts-shell-brand__name">{SITE.name}</span>
26
- <span class="ts-shell-brand__tag">{SITE.statement}</span>
27
- </span>
28
- </a>
29
- </div>
30
- <div class="sl-hidden md:sl-flex print:hidden right-group">
31
- <div class="desktop-sidebar-toggles" aria-label="Reading controls">
32
- {hasSidebar && <DesktopSidebarToggle side="left" label="book contents" />}
33
- {hasToc && <DesktopSidebarToggle side="right" label="page contents" />}
34
- </div>
35
- <BookFontControls />
36
- {shouldRenderSearch && <Search class="docs-header-search" />}
37
- <DownloadBook />
38
- <div class="sl-flex social-icons">
39
- <SocialIcons />
40
- <a href="/contact/" aria-label={`Contact ${SITE.name}`} class="contact-icon">
41
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
42
- <path d="M3.75 6.75h16.5v10.5H3.75z" />
43
- <path d="m4.5 7.5 7.5 6 7.5-6" />
44
- </svg>
45
- </a>
46
- </div>
47
- <LanguageSelect />
48
- </div>
49
- </div>
50
-
51
- <style>
52
- @layer starlight.core {
53
- .header {
54
- display: flex;
55
- gap: var(--sl-nav-gap);
56
- justify-content: space-between;
57
- align-items: center;
58
- height: 100%;
59
- width: 100%;
60
- }
61
-
62
- .title-wrapper {
63
- overflow: clip;
64
- padding: 0.25rem;
65
- margin: -0.25rem;
66
- min-width: 0;
67
- }
68
-
69
- .right-group,
70
- .social-icons {
71
- align-items: center;
72
- }
73
-
74
- .right-group {
75
- margin-inline-start: auto;
76
- gap: 1.25rem;
77
- min-width: 0;
78
- }
79
-
80
- .desktop-sidebar-toggles {
81
- display: none;
82
- }
83
-
84
- .social-icons {
85
- gap: 1rem;
86
- flex: 0 0 auto;
87
- }
88
-
89
- .social-icons :global(a) {
90
- display: inline-flex;
91
- align-items: center;
92
- justify-content: center;
93
- padding: 0.5rem;
94
- margin: 0;
95
- flex: 0 0 auto;
96
- }
97
-
98
- .contact-icon {
99
- display: inline-flex;
100
- align-items: center;
101
- justify-content: center;
102
- width: 2rem;
103
- height: 2rem;
104
- color: var(--sl-color-text);
105
- }
106
-
107
- .contact-icon:hover,
108
- .contact-icon:focus-visible {
109
- color: var(--sl-color-text-accent);
110
- }
111
-
112
- .contact-icon svg {
113
- width: 1.25rem;
114
- height: 1.25rem;
115
- fill: none;
116
- stroke: currentColor;
117
- stroke-width: 1.8;
118
- stroke-linecap: round;
119
- stroke-linejoin: round;
120
- }
121
-
122
- .social-icons::before {
123
- content: '';
124
- height: 2rem;
125
- border-inline-start: 1px solid var(--sl-color-gray-5);
126
- margin-inline-end: 0.25rem;
127
- flex: 0 0 auto;
128
- }
129
-
130
- :global(.docs-header-search) {
131
- margin-inline-start: auto;
132
- flex: 1 1 22rem;
133
- }
134
-
135
- @media (min-width: 50rem) {
136
- :global(:root[data-has-sidebar]) {
137
- --__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
138
- }
139
- :global(:root:not([data-has-toc])) {
140
- --__toc-width: 0rem;
141
- }
142
- .header {
143
- display: grid;
144
- grid-template-columns: minmax(0, 1fr) auto;
145
- align-content: center;
146
- }
147
- }
148
-
149
- @media (min-width: 72rem) {
150
- .desktop-sidebar-toggles {
151
- display: inline-flex;
152
- align-items: center;
153
- gap: 0.65rem;
154
- }
155
- }
156
- }
157
- </style>