@treeseed/core 0.10.21 → 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.
- package/README.md +69 -125
- package/dist/content.js +1 -0
- package/dist/dev-watch.js +2 -1
- package/dist/dev.d.ts +1 -1
- package/dist/dev.js +51 -35
- package/dist/pages/404.astro +1 -1
- package/dist/pages/[slug].astro +4 -4
- package/dist/pages/agents/[slug].astro +3 -3
- package/dist/pages/agents/index.astro +3 -3
- package/dist/pages/books/[slug].astro +3 -3
- package/dist/pages/books/index.astro +3 -3
- package/dist/pages/contact.astro +2 -2
- package/dist/pages/decisions/[slug].astro +3 -3
- package/dist/pages/decisions/index.astro +3 -3
- package/dist/pages/docs-runtime/[...slug].astro +3 -3
- package/dist/pages/docs-runtime/index.astro +3 -3
- package/dist/pages/index.astro +11 -11
- package/dist/pages/notes/[slug].astro +3 -3
- package/dist/pages/notes/index.astro +3 -3
- package/dist/pages/objectives/[slug].astro +3 -3
- package/dist/pages/objectives/index.astro +3 -3
- package/dist/pages/people/[slug].astro +3 -3
- package/dist/pages/people/index.astro +3 -3
- package/dist/pages/proposals/[slug].astro +3 -3
- package/dist/pages/proposals/index.astro +3 -3
- package/dist/pages/questions/[slug].astro +3 -3
- package/dist/pages/questions/index.astro +3 -3
- package/dist/pages/ui/index.astro +23 -23
- package/dist/platform-resources.js +5 -1
- package/dist/scripts/build-dist.js +2 -0
- package/dist/scripts/release-verify.js +24 -2
- package/dist/scripts/workspace-bootstrap.js +3 -0
- package/dist/site.js +49 -11
- package/dist/styles/global.css +5 -5
- package/dist/templates.d.ts +2 -0
- package/dist/templates.js +8 -6
- package/package.json +3 -45
- package/templates/github/deploy-web.workflow.yml +36 -2
- package/dist/components/DevWatchReload.astro +0 -45
- package/dist/components/SiteTitle.astro +0 -51
- package/dist/components/content/ContentStatusLegend.astro +0 -18
- package/dist/components/content/StatusBadge.astro +0 -11
- package/dist/components/docs/BookFontControls.astro +0 -180
- package/dist/components/docs/DesktopSidebarToggle.astro +0 -88
- package/dist/components/docs/DownloadBook.astro +0 -34
- package/dist/components/docs/Footer.astro +0 -112
- package/dist/components/docs/Header.astro +0 -157
- package/dist/components/docs/PageFrame.astro +0 -260
- package/dist/components/docs/PageSidebar.astro +0 -63
- package/dist/components/docs/PageTitle.astro +0 -39
- package/dist/components/docs/Sidebar.astro +0 -41
- package/dist/components/docs/ThemeSelect.astro +0 -5
- package/dist/components/forms/ContactForm.astro +0 -233
- package/dist/components/forms/FooterSubscribeForm.astro +0 -188
- package/dist/components/site/BookList.astro +0 -27
- package/dist/components/site/CTASection.astro +0 -24
- package/dist/components/site/ChronicleList.astro +0 -33
- package/dist/components/site/Hero.astro +0 -18
- package/dist/components/site/NotesList.astro +0 -29
- package/dist/components/site/PathCard.astro +0 -16
- package/dist/components/site/ProfileList.astro +0 -30
- package/dist/components/site/PublishedContentBody.astro +0 -5
- package/dist/components/site/RouteNotFound.astro +0 -25
- package/dist/components/site/SectionIntro.astro +0 -9
- package/dist/components/site/StageBanner.astro +0 -8
- package/dist/components/site/TrustCallout.astro +0 -9
- package/dist/components/starlight.js +0 -6
- package/dist/components/ui/data/ActionList.astro +0 -51
- package/dist/components/ui/data/Badge.astro +0 -19
- package/dist/components/ui/data/DataTable.astro +0 -51
- package/dist/components/ui/data/KeyValueList.astro +0 -28
- package/dist/components/ui/data/MetricCard.astro +0 -25
- package/dist/components/ui/data/MetricGrid.astro +0 -27
- package/dist/components/ui/data/StatusPill.astro +0 -20
- package/dist/components/ui/forms/Button.astro +0 -59
- package/dist/components/ui/forms/Field.astro +0 -39
- package/dist/components/ui/forms/FormActions.astro +0 -12
- package/dist/components/ui/forms/PasswordMeter.astro +0 -80
- package/dist/components/ui/forms/RadioGroup.astro +0 -55
- package/dist/components/ui/forms/Select.astro +0 -47
- package/dist/components/ui/forms/TextInput.astro +0 -58
- package/dist/components/ui/forms/Textarea.astro +0 -45
- package/dist/components/ui/layout/PageHeader.astro +0 -45
- package/dist/components/ui/shell/AppShell.astro +0 -130
- package/dist/components/ui/shell/BottomNav.astro +0 -42
- package/dist/components/ui/shell/ProjectHeader.astro +0 -66
- package/dist/components/ui/shell/PublicFooter.astro +0 -39
- package/dist/components/ui/shell/PublicShell.astro +0 -184
- package/dist/components/ui/shell/RailNav.astro +0 -42
- package/dist/components/ui/shell/ShellIconLink.astro +0 -30
- package/dist/components/ui/shell/TopBar.astro +0 -52
- package/dist/components/ui/surface/Card.astro +0 -46
- package/dist/components/ui/surface/EmptyState.astro +0 -45
- package/dist/components/ui/surface/Panel.astro +0 -54
- package/dist/components/ui/theme/ThemeMenu.astro +0 -58
- package/dist/components/ui/theme/ThemePreviewSwatch.astro +0 -18
- package/dist/components/ui/theme/ThemeScript.astro +0 -112
- package/dist/components/ui/theme/ThemeSelector.astro +0 -202
- package/dist/components/ui/types.js +0 -0
- package/dist/layouts/AuthoredEntryLayout.astro +0 -195
- package/dist/layouts/BookLayout.astro +0 -35
- package/dist/layouts/BridgeLayout.astro +0 -11
- package/dist/layouts/ContentLayout.astro +0 -24
- package/dist/layouts/MainLayout.astro +0 -76
- package/dist/layouts/NoteLayout.astro +0 -26
- package/dist/layouts/ProfileLayout.astro +0 -85
- package/dist/styles/app-shell.css +0 -626
- package/dist/styles/forms.css +0 -274
- package/dist/styles/theme.css +0 -198
- package/dist/styles/tokens.css +0 -65
- package/dist/styles/ui.css +0 -551
|
@@ -93,14 +93,48 @@ __WORKING_DIRECTORY_BLOCK__ web:
|
|
|
93
93
|
shell: bash
|
|
94
94
|
run: |
|
|
95
95
|
set -euo pipefail
|
|
96
|
-
node
|
|
96
|
+
node <<'NODE'
|
|
97
|
+
const fs = require('fs');
|
|
98
|
+
const path = require('path');
|
|
99
|
+
const packageRoot = 'packages';
|
|
100
|
+
if (fs.existsSync(packageRoot)) {
|
|
101
|
+
const localPackageNames = new Set();
|
|
102
|
+
for (const entry of fs.readdirSync(packageRoot, { withFileTypes: true })) {
|
|
103
|
+
if (!entry.isDirectory()) continue;
|
|
104
|
+
const file = path.join(packageRoot, entry.name, 'package.json');
|
|
105
|
+
if (!fs.existsSync(file)) continue;
|
|
106
|
+
const manifest = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
107
|
+
if (typeof manifest.name === 'string') localPackageNames.add(manifest.name);
|
|
108
|
+
}
|
|
109
|
+
for (const entry of fs.readdirSync(packageRoot, { withFileTypes: true })) {
|
|
110
|
+
if (!entry.isDirectory()) continue;
|
|
111
|
+
const file = path.join(packageRoot, entry.name, 'package.json');
|
|
112
|
+
if (!fs.existsSync(file)) continue;
|
|
113
|
+
const manifest = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
114
|
+
let changed = false;
|
|
115
|
+
if (manifest.scripts?.prepare) {
|
|
116
|
+
delete manifest.scripts.prepare;
|
|
117
|
+
changed = true;
|
|
118
|
+
}
|
|
119
|
+
for (const section of ['dependencies', 'devDependencies', 'optionalDependencies']) {
|
|
120
|
+
for (const dependencyName of Object.keys(manifest[section] ?? {})) {
|
|
121
|
+
if (dependencyName !== manifest.name && localPackageNames.has(dependencyName)) {
|
|
122
|
+
delete manifest[section][dependencyName];
|
|
123
|
+
changed = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (changed) fs.writeFileSync(file, `${JSON.stringify(manifest, null, '\t')}\n`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
NODE
|
|
97
131
|
npm ci --ignore-scripts
|
|
98
132
|
|
|
99
133
|
- name: Build package artifacts
|
|
100
134
|
shell: bash
|
|
101
135
|
run: |
|
|
102
136
|
set -euo pipefail
|
|
103
|
-
for dir in packages/sdk packages/core packages/cli; do
|
|
137
|
+
for dir in packages/sdk packages/ui packages/core packages/cli; do
|
|
104
138
|
if test -f "${dir}/package.json"; then npm --prefix "${dir}" run build:dist; fi
|
|
105
139
|
done
|
|
106
140
|
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
const enabled = import.meta.env.TREESEED_PUBLIC_DEV_WATCH_RELOAD;
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
{
|
|
6
|
-
enabled && (
|
|
7
|
-
<script is:inline>
|
|
8
|
-
(() => {
|
|
9
|
-
const endpoint = '/__treeseed/dev-reload.json';
|
|
10
|
-
let currentBuildId = null;
|
|
11
|
-
|
|
12
|
-
async function poll() {
|
|
13
|
-
try {
|
|
14
|
-
const response = await fetch(`${endpoint}?t=${Date.now()}`, {
|
|
15
|
-
cache: 'no-store',
|
|
16
|
-
credentials: 'same-origin',
|
|
17
|
-
});
|
|
18
|
-
if (!response.ok) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const payload = await response.json();
|
|
23
|
-
if (!payload || typeof payload.buildId !== 'string') {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (!currentBuildId) {
|
|
28
|
-
currentBuildId = payload.buildId;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (payload.buildId !== currentBuildId) {
|
|
33
|
-
window.location.reload();
|
|
34
|
-
}
|
|
35
|
-
} catch {
|
|
36
|
-
// Ignore transient polling failures while the local worker rebuilds.
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
poll();
|
|
41
|
-
window.setInterval(poll, 1200);
|
|
42
|
-
})();
|
|
43
|
-
</script>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
@@ -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>
|