@treeseed/core 0.1.2
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 +145 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/registry-helper.js +14 -0
- package/dist/agents/registry.js +88 -0
- package/dist/components/DevWatchReload.astro +45 -0
- package/dist/components/SiteTitle.astro +51 -0
- package/dist/components/content/ContentStatusLegend.astro +18 -0
- package/dist/components/content/StatusBadge.astro +11 -0
- package/dist/components/docs/BookFontControls.astro +180 -0
- package/dist/components/docs/DesktopSidebarToggle.astro +88 -0
- package/dist/components/docs/DownloadBook.astro +34 -0
- package/dist/components/docs/Footer.astro +196 -0
- package/dist/components/docs/Header.astro +150 -0
- package/dist/components/docs/PageFrame.astro +260 -0
- package/dist/components/docs/PageSidebar.astro +63 -0
- package/dist/components/docs/PageTitle.astro +39 -0
- package/dist/components/docs/Sidebar.astro +41 -0
- package/dist/components/docs/ThemeSelect.astro +3 -0
- package/dist/components/forms/ContactForm.astro +234 -0
- package/dist/components/forms/FooterSubscribeForm.astro +189 -0
- package/dist/components/site/BookList.astro +27 -0
- package/dist/components/site/CTASection.astro +24 -0
- package/dist/components/site/ChronicleList.astro +33 -0
- package/dist/components/site/Hero.astro +18 -0
- package/dist/components/site/NotesList.astro +18 -0
- package/dist/components/site/PathCard.astro +16 -0
- package/dist/components/site/ProfileList.astro +30 -0
- package/dist/components/site/SectionIntro.astro +9 -0
- package/dist/components/site/StageBanner.astro +8 -0
- package/dist/components/site/TrustCallout.astro +9 -0
- package/dist/components/starlight.js +6 -0
- package/dist/config.js +8 -0
- package/dist/content-config.js +9 -0
- package/dist/content.js +230 -0
- package/dist/contracts.d.ts +130 -0
- package/dist/contracts.js +0 -0
- package/dist/deploy/config.d.ts +4 -0
- package/dist/deploy/config.js +154 -0
- package/dist/deploy/runtime.js +77 -0
- package/dist/env.yaml +322 -0
- package/dist/environment.d.ts +130 -0
- package/dist/environment.js +324 -0
- package/dist/index.js +81 -0
- package/dist/layouts/AuthoredEntryLayout.astro +87 -0
- package/dist/layouts/BookLayout.astro +35 -0
- package/dist/layouts/BridgeLayout.astro +11 -0
- package/dist/layouts/ContentLayout.astro +24 -0
- package/dist/layouts/MainLayout.astro +203 -0
- package/dist/layouts/NoteLayout.astro +26 -0
- package/dist/layouts/ProfileLayout.astro +81 -0
- package/dist/middleware/starlightRouteData.js +45 -0
- package/dist/pages/404.astro +29 -0
- package/dist/pages/[slug].astro +30 -0
- package/dist/pages/agents/[slug].astro +29 -0
- package/dist/pages/agents/index.astro +27 -0
- package/dist/pages/api/form/submit.js +14 -0
- package/dist/pages/books/[slug].astro +19 -0
- package/dist/pages/books/index.astro +28 -0
- package/dist/pages/contact.astro +27 -0
- package/dist/pages/feed.xml.js +34 -0
- package/dist/pages/index.astro +290 -0
- package/dist/pages/notes/[slug].astro +19 -0
- package/dist/pages/notes/index.astro +21 -0
- package/dist/pages/objectives/[slug].astro +31 -0
- package/dist/pages/objectives/index.astro +30 -0
- package/dist/pages/people/[slug].astro +29 -0
- package/dist/pages/people/index.astro +28 -0
- package/dist/pages/questions/[slug].astro +31 -0
- package/dist/pages/questions/index.astro +30 -0
- package/dist/plugin-default.js +4 -0
- package/dist/plugins/builtin/default-plugin.d.ts +21 -0
- package/dist/plugins/builtin/default-plugin.js +32 -0
- package/dist/plugins/constants.d.ts +21 -0
- package/dist/plugins/constants.js +28 -0
- package/dist/plugins/plugin.d.ts +42 -0
- package/dist/plugins/plugin.js +6 -0
- package/dist/plugins/runtime.d.ts +31 -0
- package/dist/plugins/runtime.js +120 -0
- package/dist/scripts/aggregate-book.js +112 -0
- package/dist/scripts/assert-release-tag-version.js +21 -0
- package/dist/scripts/build-dist.js +384 -0
- package/dist/scripts/build-tenant-worker.js +36 -0
- package/dist/scripts/package-tools.js +88 -0
- package/dist/scripts/patch-starlight-content-path.js +172 -0
- package/dist/scripts/paths.js +11 -0
- package/dist/scripts/publish-package.js +20 -0
- package/dist/scripts/release-verify.js +52 -0
- package/dist/scripts/run-fixture-astro-command.js +21 -0
- package/dist/scripts/tenant-astro-command.js +3 -0
- package/dist/scripts/tenant-build.js +16 -0
- package/dist/scripts/tenant-check.js +7 -0
- package/dist/scripts/test-smoke.js +105 -0
- package/dist/server.js +53 -0
- package/dist/site-resources.d.ts +29 -0
- package/dist/site-resources.js +127 -0
- package/dist/site.js +313 -0
- package/dist/styles/global.css +683 -0
- package/dist/styles/prose.css +89 -0
- package/dist/styles/tokens.css +24 -0
- package/dist/tenant/bridge.js +5 -0
- package/dist/tenant/config.d.ts +9 -0
- package/dist/tenant/config.js +124 -0
- package/dist/tenant/runtime-config.js +20 -0
- package/dist/tsconfigs/strict.json +3 -0
- package/dist/types/agents.d.ts +1 -0
- package/dist/types/agents.js +1 -0
- package/dist/types/astro-build.d.js +0 -0
- package/dist/types/cloudflare-sockets.d.js +0 -0
- package/dist/types/cloudflare.d.ts +1 -0
- package/dist/types/cloudflare.js +1 -0
- package/dist/types/forms.js +4 -0
- package/dist/utils/agents/adapters/execution.js +90 -0
- package/dist/utils/agents/adapters/mutations.js +30 -0
- package/dist/utils/agents/adapters/notification.js +16 -0
- package/dist/utils/agents/adapters/repository.js +61 -0
- package/dist/utils/agents/adapters/research.js +25 -0
- package/dist/utils/agents/adapters/verification.js +62 -0
- package/dist/utils/agents/cli-tools.js +5 -0
- package/dist/utils/agents/contracts/messages.d.ts +88 -0
- package/dist/utils/agents/contracts/messages.js +138 -0
- package/dist/utils/agents/contracts/run.d.ts +20 -0
- package/dist/utils/agents/contracts/run.js +0 -0
- package/dist/utils/agents/runtime-types.d.ts +117 -0
- package/dist/utils/agents/runtime-types.js +4 -0
- package/dist/utils/books-data.js +82 -0
- package/dist/utils/content-status.js +38 -0
- package/dist/utils/forms/config.js +87 -0
- package/dist/utils/forms/constants.js +27 -0
- package/dist/utils/forms/contact-submissions-local.js +19 -0
- package/dist/utils/forms/contact-submissions.js +72 -0
- package/dist/utils/forms/crypto.js +64 -0
- package/dist/utils/forms/guard.js +76 -0
- package/dist/utils/forms/http.js +51 -0
- package/dist/utils/forms/provider-core.js +88 -0
- package/dist/utils/forms/routing-core.js +7 -0
- package/dist/utils/forms/routing.js +13 -0
- package/dist/utils/forms/runtime-core.js +17 -0
- package/dist/utils/forms/runtime.js +27 -0
- package/dist/utils/forms/service-core.js +256 -0
- package/dist/utils/forms/service.js +55 -0
- package/dist/utils/forms/session.js +57 -0
- package/dist/utils/forms/smtp-cloudflare.js +107 -0
- package/dist/utils/forms/smtp-node.js +27 -0
- package/dist/utils/forms/smtp.js +10 -0
- package/dist/utils/forms/subscribers-local.js +21 -0
- package/dist/utils/forms/subscribers.js +53 -0
- package/dist/utils/forms/turnstile.js +31 -0
- package/dist/utils/forms/validation.js +58 -0
- package/dist/utils/hub-content.js +28 -0
- package/dist/utils/plugin-runtime.js +158 -0
- package/dist/utils/routes.js +17 -0
- package/dist/utils/seo.js +4 -0
- package/dist/utils/site-config-schema.js +282 -0
- package/dist/utils/site-config.js +122 -0
- package/dist/utils/starlight-nav.js +62 -0
- package/dist/utils/theme.js +49 -0
- package/dist/vendor/starlight/components/AnchorHeading.astro +53 -0
- package/dist/vendor/starlight/components/Banner.astro +23 -0
- package/dist/vendor/starlight/components/ContentNotice.astro +33 -0
- package/dist/vendor/starlight/components/ContentPanel.astro +27 -0
- package/dist/vendor/starlight/components/DraftContentNotice.astro +5 -0
- package/dist/vendor/starlight/components/EditLink.astro +28 -0
- package/dist/vendor/starlight/components/FallbackContentNotice.astro +5 -0
- package/dist/vendor/starlight/components/Footer.astro +61 -0
- package/dist/vendor/starlight/components/Head.astro +5 -0
- package/dist/vendor/starlight/components/Header.astro +94 -0
- package/dist/vendor/starlight/components/Hero.astro +143 -0
- package/dist/vendor/starlight/components/Icons.js +121 -0
- package/dist/vendor/starlight/components/LanguageSelect.astro +57 -0
- package/dist/vendor/starlight/components/LastUpdated.astro +14 -0
- package/dist/vendor/starlight/components/MarkdownContent.astro +5 -0
- package/dist/vendor/starlight/components/MobileMenuFooter.astro +35 -0
- package/dist/vendor/starlight/components/MobileMenuToggle.astro +107 -0
- package/dist/vendor/starlight/components/MobileTableOfContents.astro +151 -0
- package/dist/vendor/starlight/components/Page.astro +126 -0
- package/dist/vendor/starlight/components/PageFrame.astro +97 -0
- package/dist/vendor/starlight/components/PageSidebar.astro +59 -0
- package/dist/vendor/starlight/components/PageTitle.astro +17 -0
- package/dist/vendor/starlight/components/Pagination.astro +79 -0
- package/dist/vendor/starlight/components/Search.astro +488 -0
- package/dist/vendor/starlight/components/Select.astro +99 -0
- package/dist/vendor/starlight/components/Sidebar.astro +15 -0
- package/dist/vendor/starlight/components/SidebarPersistState.js +43 -0
- package/dist/vendor/starlight/components/SidebarPersister.astro +78 -0
- package/dist/vendor/starlight/components/SidebarRestorePoint.astro +12 -0
- package/dist/vendor/starlight/components/SidebarSublist.astro +154 -0
- package/dist/vendor/starlight/components/SiteTitle.astro +59 -0
- package/dist/vendor/starlight/components/SkipLink.astro +26 -0
- package/dist/vendor/starlight/components/SocialIcons.astro +32 -0
- package/dist/vendor/starlight/components/StarlightPage.astro +17 -0
- package/dist/vendor/starlight/components/TableOfContents/TableOfContentsList.astro +79 -0
- package/dist/vendor/starlight/components/TableOfContents/starlight-toc.js +93 -0
- package/dist/vendor/starlight/components/TableOfContents.astro +18 -0
- package/dist/vendor/starlight/components/ThemeProvider.astro +38 -0
- package/dist/vendor/starlight/components/ThemeSelect.astro +73 -0
- package/dist/vendor/starlight/components/TwoColumnContent.astro +54 -0
- package/dist/vendor/starlight/components.js +26 -0
- package/dist/vendor/starlight/constants.js +4 -0
- package/dist/vendor/starlight/expressive-code.d.js +1 -0
- package/dist/vendor/starlight/global.d.js +0 -0
- package/dist/vendor/starlight/i18n.d.js +1 -0
- package/dist/vendor/starlight/index.js +119 -0
- package/dist/vendor/starlight/integrations/asides-error.js +12 -0
- package/dist/vendor/starlight/integrations/asides.js +179 -0
- package/dist/vendor/starlight/integrations/code-rtl-support.js +21 -0
- package/dist/vendor/starlight/integrations/expressive-code/hast.d.js +1 -0
- package/dist/vendor/starlight/integrations/expressive-code/index.js +63 -0
- package/dist/vendor/starlight/integrations/expressive-code/preprocessor.js +92 -0
- package/dist/vendor/starlight/integrations/expressive-code/themes/night-owl-dark.jsonc +1796 -0
- package/dist/vendor/starlight/integrations/expressive-code/themes/night-owl-dark.jsonc.js +1 -0
- package/dist/vendor/starlight/integrations/expressive-code/themes/night-owl-light.jsonc +1695 -0
- package/dist/vendor/starlight/integrations/expressive-code/themes/night-owl-light.jsonc.js +1 -0
- package/dist/vendor/starlight/integrations/expressive-code/theming.js +62 -0
- package/dist/vendor/starlight/integrations/expressive-code/translations.js +29 -0
- package/dist/vendor/starlight/integrations/heading-links.js +61 -0
- package/dist/vendor/starlight/integrations/pagefind.js +43 -0
- package/dist/vendor/starlight/integrations/remark-rehype.js +68 -0
- package/dist/vendor/starlight/integrations/shared/absolutePathToLang.js +15 -0
- package/dist/vendor/starlight/integrations/shared/localeToLang.js +9 -0
- package/dist/vendor/starlight/integrations/shared/slugToLocale.js +10 -0
- package/dist/vendor/starlight/integrations/sitemap.js +20 -0
- package/dist/vendor/starlight/integrations/virtual-user-config.js +110 -0
- package/dist/vendor/starlight/integrations/vite-layer-order.js +42 -0
- package/dist/vendor/starlight/internal.js +6 -0
- package/dist/vendor/starlight/loaders.js +36 -0
- package/dist/vendor/starlight/locals.d.js +0 -0
- package/dist/vendor/starlight/locals.js +30 -0
- package/dist/vendor/starlight/package.json +231 -0
- package/dist/vendor/starlight/package.json.js +248 -0
- package/dist/vendor/starlight/props.js +0 -0
- package/dist/vendor/starlight/route-data.js +6 -0
- package/dist/vendor/starlight/routes/common.astro +23 -0
- package/dist/vendor/starlight/routes/ssr/404.astro +7 -0
- package/dist/vendor/starlight/routes/ssr/index.astro +14 -0
- package/dist/vendor/starlight/routes/static/404.astro +7 -0
- package/dist/vendor/starlight/routes/static/index.astro +12 -0
- package/dist/vendor/starlight/schema.js +102 -0
- package/dist/vendor/starlight/schemas/badge.js +26 -0
- package/dist/vendor/starlight/schemas/components.js +235 -0
- package/dist/vendor/starlight/schemas/expressiveCode.js +12 -0
- package/dist/vendor/starlight/schemas/favicon.js +33 -0
- package/dist/vendor/starlight/schemas/head.js +32 -0
- package/dist/vendor/starlight/schemas/hero.js +57 -0
- package/dist/vendor/starlight/schemas/i18n.js +101 -0
- package/dist/vendor/starlight/schemas/icon.js +7 -0
- package/dist/vendor/starlight/schemas/logo.js +24 -0
- package/dist/vendor/starlight/schemas/pagefind.js +108 -0
- package/dist/vendor/starlight/schemas/prevNextLink.js +14 -0
- package/dist/vendor/starlight/schemas/sidebar.js +80 -0
- package/dist/vendor/starlight/schemas/site-title.js +19 -0
- package/dist/vendor/starlight/schemas/social.js +19 -0
- package/dist/vendor/starlight/schemas/tableOfContents.js +16 -0
- package/dist/vendor/starlight/style/anchor-links.css +131 -0
- package/dist/vendor/starlight/style/asides.css +51 -0
- package/dist/vendor/starlight/style/layers.css +1 -0
- package/dist/vendor/starlight/style/markdown.css +253 -0
- package/dist/vendor/starlight/style/print.css +175 -0
- package/dist/vendor/starlight/style/props.css +188 -0
- package/dist/vendor/starlight/style/reset.css +52 -0
- package/dist/vendor/starlight/style/util.css +63 -0
- package/dist/vendor/starlight/translations/ar.json +30 -0
- package/dist/vendor/starlight/translations/ar.json.js +32 -0
- package/dist/vendor/starlight/translations/ca.json +43 -0
- package/dist/vendor/starlight/translations/ca.json.js +45 -0
- package/dist/vendor/starlight/translations/cs.json +43 -0
- package/dist/vendor/starlight/translations/cs.json.js +45 -0
- package/dist/vendor/starlight/translations/da.json +30 -0
- package/dist/vendor/starlight/translations/da.json.js +32 -0
- package/dist/vendor/starlight/translations/de.json +30 -0
- package/dist/vendor/starlight/translations/de.json.js +32 -0
- package/dist/vendor/starlight/translations/el.json +30 -0
- package/dist/vendor/starlight/translations/el.json.js +32 -0
- package/dist/vendor/starlight/translations/en.json +30 -0
- package/dist/vendor/starlight/translations/en.json.js +32 -0
- package/dist/vendor/starlight/translations/es.json +43 -0
- package/dist/vendor/starlight/translations/es.json.js +45 -0
- package/dist/vendor/starlight/translations/fa.json +30 -0
- package/dist/vendor/starlight/translations/fa.json.js +32 -0
- package/dist/vendor/starlight/translations/fi.json +30 -0
- package/dist/vendor/starlight/translations/fi.json.js +32 -0
- package/dist/vendor/starlight/translations/fr.json +33 -0
- package/dist/vendor/starlight/translations/fr.json.js +35 -0
- package/dist/vendor/starlight/translations/gl.json +43 -0
- package/dist/vendor/starlight/translations/gl.json.js +45 -0
- package/dist/vendor/starlight/translations/he.json +30 -0
- package/dist/vendor/starlight/translations/he.json.js +32 -0
- package/dist/vendor/starlight/translations/hi.json +30 -0
- package/dist/vendor/starlight/translations/hi.json.js +32 -0
- package/dist/vendor/starlight/translations/hu.json +43 -0
- package/dist/vendor/starlight/translations/hu.json.js +45 -0
- package/dist/vendor/starlight/translations/id.json +30 -0
- package/dist/vendor/starlight/translations/id.json.js +32 -0
- package/dist/vendor/starlight/translations/index.js +77 -0
- package/dist/vendor/starlight/translations/it.json +30 -0
- package/dist/vendor/starlight/translations/it.json.js +32 -0
- package/dist/vendor/starlight/translations/ja.json +30 -0
- package/dist/vendor/starlight/translations/ja.json.js +32 -0
- package/dist/vendor/starlight/translations/ko.json +30 -0
- package/dist/vendor/starlight/translations/ko.json.js +32 -0
- package/dist/vendor/starlight/translations/lv.json +30 -0
- package/dist/vendor/starlight/translations/lv.json.js +32 -0
- package/dist/vendor/starlight/translations/nb.json +30 -0
- package/dist/vendor/starlight/translations/nb.json.js +32 -0
- package/dist/vendor/starlight/translations/nl.json +30 -0
- package/dist/vendor/starlight/translations/nl.json.js +32 -0
- package/dist/vendor/starlight/translations/pl.json +33 -0
- package/dist/vendor/starlight/translations/pl.json.js +35 -0
- package/dist/vendor/starlight/translations/pt.json +30 -0
- package/dist/vendor/starlight/translations/pt.json.js +32 -0
- package/dist/vendor/starlight/translations/ro.json +30 -0
- package/dist/vendor/starlight/translations/ro.json.js +32 -0
- package/dist/vendor/starlight/translations/ru.json +33 -0
- package/dist/vendor/starlight/translations/ru.json.js +35 -0
- package/dist/vendor/starlight/translations/sk.json +30 -0
- package/dist/vendor/starlight/translations/sk.json.js +32 -0
- package/dist/vendor/starlight/translations/sv.json +30 -0
- package/dist/vendor/starlight/translations/sv.json.js +32 -0
- package/dist/vendor/starlight/translations/th.json +30 -0
- package/dist/vendor/starlight/translations/th.json.js +32 -0
- package/dist/vendor/starlight/translations/tr.json +30 -0
- package/dist/vendor/starlight/translations/tr.json.js +32 -0
- package/dist/vendor/starlight/translations/uk.json +30 -0
- package/dist/vendor/starlight/translations/uk.json.js +32 -0
- package/dist/vendor/starlight/translations/vi.json +30 -0
- package/dist/vendor/starlight/translations/vi.json.js +32 -0
- package/dist/vendor/starlight/translations/zh-CN.json +30 -0
- package/dist/vendor/starlight/translations/zh-CN.json.js +32 -0
- package/dist/vendor/starlight/translations/zh-TW.json +30 -0
- package/dist/vendor/starlight/translations/zh-TW.json.js +32 -0
- package/dist/vendor/starlight/types.js +0 -0
- package/dist/vendor/starlight/user-components/Aside.astro +40 -0
- package/dist/vendor/starlight/user-components/Badge.astro +148 -0
- package/dist/vendor/starlight/user-components/Card.astro +68 -0
- package/dist/vendor/starlight/user-components/CardGrid.astro +38 -0
- package/dist/vendor/starlight/user-components/FileTree.astro +137 -0
- package/dist/vendor/starlight/user-components/Icon.astro +42 -0
- package/dist/vendor/starlight/user-components/LinkButton.astro +78 -0
- package/dist/vendor/starlight/user-components/LinkCard.astro +78 -0
- package/dist/vendor/starlight/user-components/Steps.astro +90 -0
- package/dist/vendor/starlight/user-components/TabItem.astro +19 -0
- package/dist/vendor/starlight/user-components/Tabs.astro +268 -0
- package/dist/vendor/starlight/user-components/file-tree-icons.js +608 -0
- package/dist/vendor/starlight/user-components/rehype-file-tree.js +160 -0
- package/dist/vendor/starlight/user-components/rehype-steps.js +53 -0
- package/dist/vendor/starlight/user-components/rehype-tabs.js +73 -0
- package/dist/vendor/starlight/utils/base.js +14 -0
- package/dist/vendor/starlight/utils/canonical.js +13 -0
- package/dist/vendor/starlight/utils/collection-fs.js +13 -0
- package/dist/vendor/starlight/utils/collection.js +16 -0
- package/dist/vendor/starlight/utils/createPathFormatter.js +39 -0
- package/dist/vendor/starlight/utils/createTranslationSystem.js +60 -0
- package/dist/vendor/starlight/utils/error-map.js +110 -0
- package/dist/vendor/starlight/utils/format-path.js +9 -0
- package/dist/vendor/starlight/utils/generateToC.js +18 -0
- package/dist/vendor/starlight/utils/git.js +92 -0
- package/dist/vendor/starlight/utils/gitInlined.js +13 -0
- package/dist/vendor/starlight/utils/head.js +156 -0
- package/dist/vendor/starlight/utils/i18n.js +121 -0
- package/dist/vendor/starlight/utils/localizedUrl.js +37 -0
- package/dist/vendor/starlight/utils/navigation.js +320 -0
- package/dist/vendor/starlight/utils/path.js +52 -0
- package/dist/vendor/starlight/utils/plugins.js +355 -0
- package/dist/vendor/starlight/utils/routing/data.js +116 -0
- package/dist/vendor/starlight/utils/routing/index.js +107 -0
- package/dist/vendor/starlight/utils/routing/middleware.js +40 -0
- package/dist/vendor/starlight/utils/routing/types.js +0 -0
- package/dist/vendor/starlight/utils/routing.js +1 -0
- package/dist/vendor/starlight/utils/slugs.js +70 -0
- package/dist/vendor/starlight/utils/starlight-page.js +123 -0
- package/dist/vendor/starlight/utils/translations-fs.js +31 -0
- package/dist/vendor/starlight/utils/translations.js +31 -0
- package/dist/vendor/starlight/utils/types.js +0 -0
- package/dist/vendor/starlight/utils/url.js +5 -0
- package/dist/vendor/starlight/utils/user-config.js +255 -0
- package/dist/vendor/starlight/utils/validateLogoImports.js +22 -0
- package/dist/vendor/starlight/virtual-internal.d.js +0 -0
- package/dist/vendor/starlight/virtual.d.js +0 -0
- package/dist/worker/forms-worker.js +141 -0
- package/package.json +156 -0
- package/style/anchor-links.css +131 -0
- package/templates/github/deploy.workflow.yml +47 -0
- package/tsconfigs/strict.json +3 -0
- package/utils/git.ts +121 -0
- package/utils/gitInlined.ts +20 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
import '../styles/global.css';
|
|
3
|
+
import { SITE_NAV_GROUPS, isCurrentSitePath } from '../utils/routes';
|
|
4
|
+
import { PROJECT_STAGE } from '../utils/content-status';
|
|
5
|
+
import { SITE } from '../utils/seo';
|
|
6
|
+
import { SITE_FOOTER_MENU, SITE_THEME_CSS } from '../utils/site-config';
|
|
7
|
+
import FooterSubscribeForm from '../components/forms/FooterSubscribeForm.astro';
|
|
8
|
+
import DevWatchReload from '../components/DevWatchReload.astro';
|
|
9
|
+
|
|
10
|
+
const { title, description, currentPath = '/' } = Astro.props;
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!doctype html>
|
|
14
|
+
<html lang="en">
|
|
15
|
+
<head>
|
|
16
|
+
<meta charset="UTF-8" />
|
|
17
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
18
|
+
<title>{title ? `${title} | ${SITE.name}` : SITE.name}</title>
|
|
19
|
+
<meta name="description" content={description ?? SITE.description} />
|
|
20
|
+
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
21
|
+
<link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml" />
|
|
22
|
+
{SITE_THEME_CSS && <style is:global>{SITE_THEME_CSS}</style>}
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<div class="flex min-h-screen flex-col">
|
|
26
|
+
<header class="sticky top-0 z-30 mb-12 bg-[color:rgba(244,237,224,0.92)]/95 backdrop-blur md:mb-16">
|
|
27
|
+
<div class="border-y border-[color:var(--site-border-strong)] px-4 py-4 md:px-6">
|
|
28
|
+
<div class="mx-auto flex max-w-[var(--site-max)] flex-col gap-4 sm:px-2 lg:flex-row lg:items-center lg:justify-between lg:px-4">
|
|
29
|
+
<a href="/" class="flex items-center gap-3">
|
|
30
|
+
<div class="flex h-11 w-11 items-center justify-center tracking-[0.2em]">
|
|
31
|
+
<img src={SITE.logo.src} alt={SITE.logo.alt} class="h-11 w-11" />
|
|
32
|
+
</div>
|
|
33
|
+
<div>
|
|
34
|
+
<p class="text-xl font-bold text-[color:var(--site-text)]">{SITE.name}</p>
|
|
35
|
+
<p class="text-sm text-[color:var(--site-text-soft)]">{SITE.statement}</p>
|
|
36
|
+
</div>
|
|
37
|
+
</a>
|
|
38
|
+
<div class="ml-auto flex w-full flex-wrap items-center justify-end gap-3 lg:w-auto lg:flex-nowrap">
|
|
39
|
+
<nav class="flex w-full justify-end text-base text-[color:var(--site-text-muted)] lg:w-auto">
|
|
40
|
+
<ul class="js-site-nav-disclosures flex flex-wrap justify-end gap-3">
|
|
41
|
+
{
|
|
42
|
+
SITE_NAV_GROUPS.map((group) => {
|
|
43
|
+
return (
|
|
44
|
+
<li class="relative">
|
|
45
|
+
<details class="group js-site-nav-disclosure">
|
|
46
|
+
<summary
|
|
47
|
+
class:list={[
|
|
48
|
+
'flex cursor-pointer list-none items-center gap-2 border-b-2 border-transparent px-1 py-2 font-medium transition marker:content-none hover:border-[color:var(--site-blue)] hover:text-[color:var(--site-text)]',
|
|
49
|
+
group.items.some((item) => isCurrentSitePath(currentPath, item.href)) &&
|
|
50
|
+
'border-[color:var(--site-accent)] text-[color:var(--site-text)]',
|
|
51
|
+
]}
|
|
52
|
+
>
|
|
53
|
+
{group.label}
|
|
54
|
+
<span class="text-xs transition group-open:rotate-180">▾</span>
|
|
55
|
+
</summary>
|
|
56
|
+
<div class="absolute right-0 top-full z-40 mt-2 min-w-56 border border-[color:var(--site-border-strong)] bg-[color:rgba(244,237,224,0.98)] p-2 shadow-[0_12px_30px_rgba(52,37,19,0.12)] backdrop-blur">
|
|
57
|
+
<ul class="flex flex-col gap-1">
|
|
58
|
+
{group.items.map((item) => (
|
|
59
|
+
<li>
|
|
60
|
+
<a
|
|
61
|
+
href={item.href}
|
|
62
|
+
class:list={[
|
|
63
|
+
'block px-3 py-2 text-sm transition hover:bg-[color:var(--site-blue-soft)] hover:text-[color:var(--site-text)]',
|
|
64
|
+
isCurrentSitePath(currentPath, item.href) &&
|
|
65
|
+
'bg-[color:var(--site-surface-strong)] text-[color:var(--site-text)]',
|
|
66
|
+
]}
|
|
67
|
+
>
|
|
68
|
+
{item.label}
|
|
69
|
+
</a>
|
|
70
|
+
</li>
|
|
71
|
+
))}
|
|
72
|
+
</ul>
|
|
73
|
+
</div>
|
|
74
|
+
</details>
|
|
75
|
+
</li>
|
|
76
|
+
);
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
</ul>
|
|
80
|
+
</nav>
|
|
81
|
+
<a
|
|
82
|
+
href={SITE.githubRepository}
|
|
83
|
+
target="_blank"
|
|
84
|
+
rel="noreferrer"
|
|
85
|
+
aria-label={`${SITE.name} GitHub repository`}
|
|
86
|
+
class="inline-flex h-12 w-12 shrink-0 items-center justify-center border-2 border-transparent bg-transparent text-[color:var(--site-text)] transition hover:-translate-y-0.5 hover:text-[color:var(--site-blue)] focus-visible:border-[color:var(--site-blue)] focus-visible:outline-none"
|
|
87
|
+
>
|
|
88
|
+
<svg
|
|
89
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
90
|
+
viewBox="0 0 16 16"
|
|
91
|
+
aria-hidden="true"
|
|
92
|
+
class="h-6 w-6 fill-current"
|
|
93
|
+
>
|
|
94
|
+
<path d="M8 0C3.58 0 0 3.67 0 8.2c0 3.63 2.29 6.7 5.47 7.78.4.08.55-.18.55-.39 0-.2-.01-.85-.01-1.54-2.01.38-2.53-.5-2.69-.95-.09-.24-.48-.95-.82-1.15-.28-.15-.68-.54-.01-.55.63-.01 1.08.59 1.23.84.72 1.24 1.87.89 2.33.68.07-.54.28-.89.5-1.09-1.78-.21-3.64-.92-3.64-4.08 0-.9.31-1.64.82-2.22-.08-.21-.36-1.06.08-2.2 0 0 .67-.22 2.2.85A7.34 7.34 0 0 1 8 4.83c.68 0 1.37.09 2.01.27 1.53-1.07 2.2-.85 2.2-.85.44 1.14.16 1.99.08 2.2.51.58.82 1.31.82 2.22 0 3.17-1.87 3.87-3.65 4.08.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.19 0 .21.15.48.55.39A8.22 8.22 0 0 0 16 8.2C16 3.67 12.42 0 8 0Z" />
|
|
95
|
+
</svg>
|
|
96
|
+
</a>
|
|
97
|
+
<a
|
|
98
|
+
href={SITE.discordLink}
|
|
99
|
+
target="_blank"
|
|
100
|
+
rel="noreferrer"
|
|
101
|
+
aria-label={`${SITE.name} Discord`}
|
|
102
|
+
class="inline-flex h-12 w-12 shrink-0 items-center justify-center border-2 border-transparent bg-transparent text-[color:var(--site-text)] transition hover:-translate-y-0.5 hover:text-[color:var(--site-blue)] focus-visible:border-[color:var(--site-blue)] focus-visible:outline-none"
|
|
103
|
+
>
|
|
104
|
+
<svg
|
|
105
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
106
|
+
viewBox="0 0 24 24"
|
|
107
|
+
aria-hidden="true"
|
|
108
|
+
class="h-6 w-6 fill-current"
|
|
109
|
+
>
|
|
110
|
+
<path d="M20.317 4.369A19.791 19.791 0 0 0 15.885 3c-.191.328-.403.762-.554 1.104a18.27 18.27 0 0 0-5.314 0A11.64 11.64 0 0 0 9.463 3a19.736 19.736 0 0 0-4.433 1.369C2.227 8.617 1.468 12.759 1.848 16.845a19.9 19.9 0 0 0 5.437 2.755c.438-.6.825-1.236 1.157-1.902-.637-.241-1.246-.545-1.818-.9.152-.111.3-.229.444-.347 3.507 1.648 7.316 1.648 10.782 0 .145.118.293.236.444.347-.573.355-1.183.659-1.82.9.332.666.719 1.302 1.158 1.902a19.87 19.87 0 0 0 5.438-2.755c.446-4.737-.762-8.842-3.753-12.476ZM9.954 14.379c-1.053 0-1.918-.966-1.918-2.153 0-1.188.845-2.153 1.918-2.153 1.082 0 1.938.975 1.918 2.153 0 1.187-.846 2.153-1.918 2.153Zm4.092 0c-1.053 0-1.918-.966-1.918-2.153 0-1.188.845-2.153 1.918-2.153 1.082 0 1.938.975 1.918 2.153 0 1.187-.836 2.153-1.918 2.153Z" />
|
|
111
|
+
</svg>
|
|
112
|
+
</a>
|
|
113
|
+
<a
|
|
114
|
+
href="/contact/"
|
|
115
|
+
aria-label={`Contact ${SITE.name}`}
|
|
116
|
+
class="inline-flex h-12 w-12 shrink-0 items-center justify-center border-2 border-transparent bg-transparent text-[color:var(--site-text)] transition hover:-translate-y-0.5 hover:text-[color:var(--site-blue)] focus-visible:border-[color:var(--site-blue)] focus-visible:outline-none"
|
|
117
|
+
>
|
|
118
|
+
<svg
|
|
119
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
120
|
+
viewBox="0 0 24 24"
|
|
121
|
+
aria-hidden="true"
|
|
122
|
+
class="h-6 w-6 fill-none stroke-current stroke-[1.8]"
|
|
123
|
+
>
|
|
124
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5v10.5H3.75z" />
|
|
125
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 7.5 7.5 6 7.5-6" />
|
|
126
|
+
</svg>
|
|
127
|
+
</a>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</header>
|
|
132
|
+
|
|
133
|
+
<main class="mx-auto flex-1 max-w-[var(--site-max)] px-4 pb-12 sm:px-6 lg:px-8">
|
|
134
|
+
<slot />
|
|
135
|
+
</main>
|
|
136
|
+
|
|
137
|
+
<footer class="mt-20 border-t-2 border-[color:var(--site-border-strong)] pt-8">
|
|
138
|
+
<div class="mb-15 mx-auto max-w-[var(--site-max)] px-4 sm:px-6 lg:px-8">
|
|
139
|
+
<div class="flex flex-wrap justify-center gap-8 pb-8">
|
|
140
|
+
<div class="w-64">
|
|
141
|
+
<p class="text-xl font-bold text-[color:var(--site-text)]">{SITE.name}</p>
|
|
142
|
+
<p class="mt-3 text-base leading-8 text-[color:var(--site-text-muted)]">
|
|
143
|
+
{SITE.summary}
|
|
144
|
+
</p>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="w-64">
|
|
147
|
+
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[color:var(--site-accent-strong)]">Project stage</p>
|
|
148
|
+
<p class="mt-3 text-base font-semibold text-[color:var(--site-text)]">{PROJECT_STAGE.label}</p>
|
|
149
|
+
<p class="mt-2 text-base leading-8 text-[color:var(--site-text-muted)]">{PROJECT_STAGE.description}</p>
|
|
150
|
+
</div>
|
|
151
|
+
{SITE_FOOTER_MENU.map((group) => (
|
|
152
|
+
<div class="w-64">
|
|
153
|
+
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[color:var(--site-blue-strong)]">{group.label}</p>
|
|
154
|
+
<div class="mt-3 flex flex-col gap-2 text-base text-[color:var(--site-text-muted)]">
|
|
155
|
+
{group.items.map((item) => (
|
|
156
|
+
<a href={item.href} class="hover:text-[color:var(--site-text)]">{item.label}</a>
|
|
157
|
+
))}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
))}
|
|
161
|
+
</div>
|
|
162
|
+
<FooterSubscribeForm currentPath={currentPath} />
|
|
163
|
+
</div>
|
|
164
|
+
</footer>
|
|
165
|
+
</div>
|
|
166
|
+
<script>
|
|
167
|
+
const navRoot = document.querySelector('.js-site-nav-disclosures');
|
|
168
|
+
const navDetails = document.querySelectorAll<HTMLDetailsElement>('details.js-site-nav-disclosure');
|
|
169
|
+
|
|
170
|
+
navDetails.forEach((details) => {
|
|
171
|
+
details.addEventListener('toggle', () => {
|
|
172
|
+
if (!details.open) return;
|
|
173
|
+
|
|
174
|
+
navDetails.forEach((otherDetails) => {
|
|
175
|
+
if (otherDetails !== details) {
|
|
176
|
+
otherDetails.open = false;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
document.addEventListener('click', (event) => {
|
|
183
|
+
if (!(navRoot instanceof HTMLElement)) return;
|
|
184
|
+
if (event.target instanceof Node && navRoot.contains(event.target)) return;
|
|
185
|
+
|
|
186
|
+
navDetails.forEach((details) => {
|
|
187
|
+
details.open = false;
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
navRoot?.addEventListener('click', (event) => {
|
|
192
|
+
const target = event.target;
|
|
193
|
+
if (!(target instanceof HTMLElement)) return;
|
|
194
|
+
if (!target.closest('a')) return;
|
|
195
|
+
|
|
196
|
+
navDetails.forEach((details) => {
|
|
197
|
+
details.open = false;
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
</script>
|
|
201
|
+
<DevWatchReload />
|
|
202
|
+
</body>
|
|
203
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
import MainLayout from './MainLayout.astro';
|
|
3
|
+
import StatusBadge from '../components/content/StatusBadge.astro';
|
|
4
|
+
|
|
5
|
+
const { note } = Astro.props;
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<MainLayout title={note.title} description={note.description} currentPath="/notes/">
|
|
9
|
+
<article class="max-w-4xl space-y-8">
|
|
10
|
+
<div class="space-y-4 border-b border-[color:var(--site-border)] pb-8">
|
|
11
|
+
<div class="flex flex-wrap items-center gap-3">
|
|
12
|
+
<StatusBadge status={note.status} />
|
|
13
|
+
<p class="text-sm font-medium text-[color:var(--site-text-soft)]">{note.date.toISOString().slice(0, 10)}</p>
|
|
14
|
+
<p class="text-sm text-[color:var(--site-text-soft)]">{note.author}</p>
|
|
15
|
+
</div>
|
|
16
|
+
<h1 class="max-w-4xl font-serif text-5xl font-bold tracking-tight text-[color:var(--site-text)] md:text-6xl">{note.title}</h1>
|
|
17
|
+
<p class="max-w-3xl text-xl leading-10 text-[color:var(--site-text-muted)]">{note.summary}</p>
|
|
18
|
+
{note.tags.length > 0 && (
|
|
19
|
+
<p class="text-sm uppercase tracking-[0.14em] text-[color:var(--site-accent-strong)]">{note.tags.join(' / ')}</p>
|
|
20
|
+
)}
|
|
21
|
+
</div>
|
|
22
|
+
<div class="prose-karyon">
|
|
23
|
+
<slot />
|
|
24
|
+
</div>
|
|
25
|
+
</article>
|
|
26
|
+
</MainLayout>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
import MainLayout from './MainLayout.astro';
|
|
3
|
+
import StatusBadge from '../components/content/StatusBadge.astro';
|
|
4
|
+
import type { CollectionEntry } from 'astro:content';
|
|
5
|
+
|
|
6
|
+
const {
|
|
7
|
+
entry,
|
|
8
|
+
currentPath,
|
|
9
|
+
metaLabel,
|
|
10
|
+
metaValue,
|
|
11
|
+
relatedQuestions = [],
|
|
12
|
+
relatedObjectives = [],
|
|
13
|
+
} = Astro.props as {
|
|
14
|
+
entry: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
summary: string;
|
|
18
|
+
status?: 'live' | 'in progress' | 'exploratory' | 'planned' | 'speculative';
|
|
19
|
+
tags: string[];
|
|
20
|
+
links: { label: string; href: string }[];
|
|
21
|
+
};
|
|
22
|
+
currentPath: string;
|
|
23
|
+
metaLabel: string;
|
|
24
|
+
metaValue: string;
|
|
25
|
+
relatedQuestions?: CollectionEntry<'questions'>[];
|
|
26
|
+
relatedObjectives?: CollectionEntry<'objectives'>[];
|
|
27
|
+
};
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
<MainLayout title={entry.name} description={entry.description} currentPath={currentPath}>
|
|
31
|
+
<article class="max-w-4xl space-y-8">
|
|
32
|
+
<div class="space-y-4 border-b border-[color:var(--site-border)] pb-8">
|
|
33
|
+
<div class="flex flex-wrap items-center gap-3">
|
|
34
|
+
{'status' in entry && entry.status && <StatusBadge status={entry.status} />}
|
|
35
|
+
<p class="text-sm font-medium text-[color:var(--site-text-soft)]">{metaLabel}: {metaValue}</p>
|
|
36
|
+
</div>
|
|
37
|
+
<h1 class="max-w-4xl font-serif text-5xl font-bold tracking-tight text-[color:var(--site-text)] md:text-6xl">{entry.name}</h1>
|
|
38
|
+
<p class="max-w-3xl text-xl leading-10 text-[color:var(--site-text-muted)]">{entry.summary}</p>
|
|
39
|
+
{entry.tags.length > 0 && (
|
|
40
|
+
<p class="text-sm uppercase tracking-[0.14em] text-[color:var(--site-accent-strong)]">{entry.tags.join(' / ')}</p>
|
|
41
|
+
)}
|
|
42
|
+
</div>
|
|
43
|
+
<div class="grid gap-6 md:grid-cols-[1.3fr_0.7fr]">
|
|
44
|
+
<div class="prose-karyon">
|
|
45
|
+
<slot />
|
|
46
|
+
</div>
|
|
47
|
+
<div class="space-y-6">
|
|
48
|
+
{entry.links.length > 0 && (
|
|
49
|
+
<div class="border border-[color:var(--site-border)] bg-[color:var(--site-surface)] p-5">
|
|
50
|
+
<p class="text-sm font-semibold uppercase tracking-[0.14em] text-[color:var(--site-blue-strong)]">Links</p>
|
|
51
|
+
<ul class="mt-3 space-y-2 text-[color:var(--site-text-muted)]">
|
|
52
|
+
{entry.links.map((link) => (
|
|
53
|
+
<li><a href={link.href} class="hover:text-[color:var(--site-text)]">{link.label}</a></li>
|
|
54
|
+
))}
|
|
55
|
+
</ul>
|
|
56
|
+
</div>
|
|
57
|
+
)}
|
|
58
|
+
{relatedQuestions.length > 0 && (
|
|
59
|
+
<div class="border border-[color:var(--site-border)] bg-[color:var(--site-surface)] p-5">
|
|
60
|
+
<p class="text-sm font-semibold uppercase tracking-[0.14em] text-[color:var(--site-blue-strong)]">Questions</p>
|
|
61
|
+
<ul class="mt-3 space-y-2 text-[color:var(--site-text-muted)]">
|
|
62
|
+
{relatedQuestions.map((question) => (
|
|
63
|
+
<li><a href={`/questions/${question.id}/`} class="hover:text-[color:var(--site-text)]">{question.data.title}</a></li>
|
|
64
|
+
))}
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
)}
|
|
68
|
+
{relatedObjectives.length > 0 && (
|
|
69
|
+
<div class="border border-[color:var(--site-border)] bg-[color:var(--site-surface)] p-5">
|
|
70
|
+
<p class="text-sm font-semibold uppercase tracking-[0.14em] text-[color:var(--site-blue-strong)]">Objectives</p>
|
|
71
|
+
<ul class="mt-3 space-y-2 text-[color:var(--site-text-muted)]">
|
|
72
|
+
{relatedObjectives.map((objective) => (
|
|
73
|
+
<li><a href={`/objectives/${objective.id}/`} class="hover:text-[color:var(--site-text)]">{objective.data.title}</a></li>
|
|
74
|
+
))}
|
|
75
|
+
</ul>
|
|
76
|
+
</div>
|
|
77
|
+
)}
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</article>
|
|
81
|
+
</MainLayout>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineRouteMiddleware } from "../vendor/starlight/route-data.js";
|
|
2
|
+
import { BOOKS, TREESEED_LINKS, normalizeHref } from "../utils/starlight-nav.js";
|
|
3
|
+
const copyLink = (entry) => ({ ...entry, attrs: { ...entry.attrs } });
|
|
4
|
+
const copyEntry = (entry) => entry.type === "link" ? copyLink(entry) : {
|
|
5
|
+
...entry,
|
|
6
|
+
entries: entry.entries.map(copyEntry)
|
|
7
|
+
};
|
|
8
|
+
const findTopLevelGroup = (sidebar, label) => sidebar.find((entry) => entry.type === "group" && entry.label === label);
|
|
9
|
+
const flattenLinks = (entries) => entries.flatMap((entry) => entry.type === "link" ? [copyLink(entry)] : flattenLinks(entry.entries));
|
|
10
|
+
const buildPagination = (entries, currentHref) => {
|
|
11
|
+
const flatLinks = flattenLinks(entries);
|
|
12
|
+
const currentIndex = flatLinks.findIndex((link) => normalizeHref(link.href) === normalizeHref(currentHref));
|
|
13
|
+
if (currentIndex === -1) {
|
|
14
|
+
return { prev: void 0, next: void 0 };
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
prev: currentIndex > 0 ? flatLinks[currentIndex - 1] : void 0,
|
|
18
|
+
next: currentIndex < flatLinks.length - 1 ? flatLinks[currentIndex + 1] : void 0
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
const setRouteSidebar = (route, currentPath, sidebar, paginationSource) => {
|
|
22
|
+
route.sidebar = sidebar;
|
|
23
|
+
route.hasSidebar = sidebar.length > 0;
|
|
24
|
+
route.pagination = paginationSource ? buildPagination(paginationSource, currentPath) : { prev: void 0, next: void 0 };
|
|
25
|
+
};
|
|
26
|
+
const onRequest = defineRouteMiddleware((context) => {
|
|
27
|
+
const route = context.locals.starlightRoute;
|
|
28
|
+
const currentPath = normalizeHref(context.url.pathname);
|
|
29
|
+
const activeBook = BOOKS.find(
|
|
30
|
+
(book) => currentPath.startsWith(normalizeHref(book.basePath))
|
|
31
|
+
);
|
|
32
|
+
if (activeBook) {
|
|
33
|
+
const bookGroup = findTopLevelGroup(route.sidebar, activeBook.sectionLabel);
|
|
34
|
+
if (!bookGroup) return;
|
|
35
|
+
setRouteSidebar(route, currentPath, [copyEntry(bookGroup)], bookGroup.entries);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (currentPath === normalizeHref(TREESEED_LINKS.home)) {
|
|
39
|
+
setRouteSidebar(route, currentPath, [], null);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
export {
|
|
44
|
+
onRequest
|
|
45
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
import MainLayout from '../layouts/MainLayout.astro';
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<MainLayout
|
|
6
|
+
title="Page Not Found"
|
|
7
|
+
description="The requested Treeseed page could not be found."
|
|
8
|
+
currentPath="/404/"
|
|
9
|
+
>
|
|
10
|
+
<section class="mx-auto max-w-3xl space-y-6 py-20">
|
|
11
|
+
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[color:var(--site-accent-strong)]">404</p>
|
|
12
|
+
<h1 class="font-serif text-5xl text-[color:var(--site-text)]">Page not found</h1>
|
|
13
|
+
<p class="text-lg leading-9 text-[color:var(--site-text-muted)]">
|
|
14
|
+
The page you requested is not available in this Treeseed. Try the homepage, the knowledge
|
|
15
|
+
library, or the current project status page instead.
|
|
16
|
+
</p>
|
|
17
|
+
<div class="flex flex-wrap gap-4">
|
|
18
|
+
<a href="/" class="border border-[color:var(--site-accent)] bg-[color:var(--site-accent)] px-5 py-3 text-base font-semibold text-[color:var(--site-text)] transition hover:border-[color:var(--site-blue)] hover:bg-[color:var(--site-blue-soft)]">
|
|
19
|
+
Go home
|
|
20
|
+
</a>
|
|
21
|
+
<a href="/knowledge/" class="border border-[color:var(--site-border-strong)] px-5 py-3 text-base font-semibold text-[color:var(--site-text)] transition hover:border-[color:var(--site-blue)] hover:bg-[color:var(--site-blue-soft)]">
|
|
22
|
+
Open knowledge
|
|
23
|
+
</a>
|
|
24
|
+
<a href="/status/" class="border border-[color:var(--site-border-strong)] px-5 py-3 text-base font-semibold text-[color:var(--site-text)] transition hover:border-[color:var(--site-blue)] hover:bg-[color:var(--site-blue-soft)]">
|
|
25
|
+
View status
|
|
26
|
+
</a>
|
|
27
|
+
</div>
|
|
28
|
+
</section>
|
|
29
|
+
</MainLayout>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getCollection, render } from 'astro:content';
|
|
3
|
+
import ContentLayout from '../layouts/ContentLayout.astro';
|
|
4
|
+
import BridgeLayout from '../layouts/BridgeLayout.astro';
|
|
5
|
+
|
|
6
|
+
export async function getStaticPaths() {
|
|
7
|
+
const entries = await getCollection('pages');
|
|
8
|
+
|
|
9
|
+
return entries.map((entry) => ({
|
|
10
|
+
params: { slug: entry.data.slug },
|
|
11
|
+
props: { entry },
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const { entry } = Astro.props;
|
|
16
|
+
const { Content } = await render(entry);
|
|
17
|
+
const currentPath = Astro.url.pathname;
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
{
|
|
21
|
+
entry.data.pageLayout === 'bridge' ? (
|
|
22
|
+
<BridgeLayout entry={entry.data} currentPath={currentPath}>
|
|
23
|
+
<Content />
|
|
24
|
+
</BridgeLayout>
|
|
25
|
+
) : (
|
|
26
|
+
<ContentLayout entry={entry.data} currentPath={currentPath}>
|
|
27
|
+
<Content />
|
|
28
|
+
</ContentLayout>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getCollection, render } from 'astro:content';
|
|
3
|
+
import ProfileLayout from '../../layouts/ProfileLayout.astro';
|
|
4
|
+
import { resolveReferences } from '../../utils/hub-content';
|
|
5
|
+
|
|
6
|
+
export async function getStaticPaths() {
|
|
7
|
+
const agents = await getCollection('agents');
|
|
8
|
+
return agents.map((agent) => ({
|
|
9
|
+
params: { slug: agent.id },
|
|
10
|
+
props: { agent },
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { agent } = Astro.props;
|
|
15
|
+
const { Content } = await render(agent);
|
|
16
|
+
const relatedQuestions = await resolveReferences(agent.data.relatedQuestions);
|
|
17
|
+
const relatedObjectives = await resolveReferences(agent.data.relatedObjectives);
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
<ProfileLayout
|
|
21
|
+
entry={agent.data}
|
|
22
|
+
currentPath="/agents/"
|
|
23
|
+
metaLabel="Operator"
|
|
24
|
+
metaValue={`${agent.data.operator} · ${agent.data.runtimeStatus}`}
|
|
25
|
+
relatedQuestions={relatedQuestions}
|
|
26
|
+
relatedObjectives={relatedObjectives}
|
|
27
|
+
>
|
|
28
|
+
<Content />
|
|
29
|
+
</ProfileLayout>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getCollection } from 'astro:content';
|
|
3
|
+
import MainLayout from '../../layouts/MainLayout.astro';
|
|
4
|
+
import SectionIntro from '../../components/site/SectionIntro.astro';
|
|
5
|
+
import ProfileList from '../../components/site/ProfileList.astro';
|
|
6
|
+
|
|
7
|
+
const agents = await getCollection('agents');
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<MainLayout title="Agents" description="Software contributors participating in the TreeSeed working site." currentPath="/agents/">
|
|
11
|
+
<div class="space-y-10">
|
|
12
|
+
<SectionIntro
|
|
13
|
+
eyebrow="Agents"
|
|
14
|
+
title="Agent contributors with explicit public profiles"
|
|
15
|
+
description="Agents are part of the working site’s contributor model, not hidden infrastructure. These profiles describe what each agent is for, who operates it, and which questions or objectives it supports."
|
|
16
|
+
/>
|
|
17
|
+
<ProfileList
|
|
18
|
+
items={agents.map((agent) => ({
|
|
19
|
+
href: `/agents/${agent.id}/`,
|
|
20
|
+
name: agent.data.name,
|
|
21
|
+
summary: agent.data.summary,
|
|
22
|
+
meta: `${agent.data.operator} · ${agent.data.runtimeStatus}`,
|
|
23
|
+
tags: agent.data.tags,
|
|
24
|
+
}))}
|
|
25
|
+
/>
|
|
26
|
+
</div>
|
|
27
|
+
</MainLayout>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { handleFormSubmission, handleTokenRequest } from "../../../utils/forms/service.js";
|
|
2
|
+
const prerender = false;
|
|
3
|
+
const GET = async (context) => {
|
|
4
|
+
return handleTokenRequest(context);
|
|
5
|
+
};
|
|
6
|
+
const POST = async (context) => {
|
|
7
|
+
const result = await handleFormSubmission(context);
|
|
8
|
+
return context.redirect(result.redirectTo, 303);
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
GET,
|
|
12
|
+
POST,
|
|
13
|
+
prerender
|
|
14
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getCollection, render } from 'astro:content';
|
|
3
|
+
import BookLayout from '../../layouts/BookLayout.astro';
|
|
4
|
+
|
|
5
|
+
export async function getStaticPaths() {
|
|
6
|
+
const books = (await getCollection('books')).sort((a, b) => a.data.order - b.data.order);
|
|
7
|
+
return books.map((book) => ({
|
|
8
|
+
params: { slug: book.id },
|
|
9
|
+
props: { book },
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const { book } = Astro.props;
|
|
14
|
+
const { Content } = await render(book);
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<BookLayout entry={book.data} currentPath="/books/">
|
|
18
|
+
<Content />
|
|
19
|
+
</BookLayout>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getCollection } from 'astro:content';
|
|
3
|
+
import MainLayout from '../../layouts/MainLayout.astro';
|
|
4
|
+
import SectionIntro from '../../components/site/SectionIntro.astro';
|
|
5
|
+
import BookList from '../../components/site/BookList.astro';
|
|
6
|
+
|
|
7
|
+
const books = (await getCollection('books')).sort((a, b) => a.data.order - b.data.order);
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<MainLayout title="Books" description="Queryable book metadata for the TreeSeed working site." currentPath="/books/">
|
|
11
|
+
<div class="space-y-10">
|
|
12
|
+
<SectionIntro
|
|
13
|
+
eyebrow="Books"
|
|
14
|
+
title="Books as first-class treeseed records"
|
|
15
|
+
description="Books hold the longer-form accumulated knowledge of the platform. This index exposes them as queryable metadata entries instead of burying them inside navigation code."
|
|
16
|
+
/>
|
|
17
|
+
<BookList
|
|
18
|
+
items={books.map((book) => ({
|
|
19
|
+
href: `/books/${book.id}/`,
|
|
20
|
+
title: book.data.title,
|
|
21
|
+
summary: book.data.summary,
|
|
22
|
+
meta: book.data.sectionLabel,
|
|
23
|
+
landingPath: book.data.landingPath,
|
|
24
|
+
downloadHref: book.data.downloadHref,
|
|
25
|
+
}))}
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
</MainLayout>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
import MainLayout from '../layouts/MainLayout.astro';
|
|
3
|
+
import ContactForm from '../components/forms/ContactForm.astro';
|
|
4
|
+
|
|
5
|
+
const status = Astro.url.searchParams.get('formStatus');
|
|
6
|
+
const code = Astro.url.searchParams.get('formCode');
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<MainLayout
|
|
10
|
+
title="Contact"
|
|
11
|
+
description="Questions, feedback, collaboration notes, and issue reports for TreeSeed."
|
|
12
|
+
currentPath="/contact/"
|
|
13
|
+
>
|
|
14
|
+
<div class="space-y-6">
|
|
15
|
+
<section class="max-w-3xl space-y-4 border-b border-[color:var(--site-border)] pb-6">
|
|
16
|
+
<p class="text-sm font-semibold uppercase tracking-[0.18em] text-[color:var(--site-accent-strong)]">Contact</p>
|
|
17
|
+
<h1 class="max-w-3xl font-serif text-5xl font-bold tracking-tight text-[color:var(--site-text)] md:text-6xl">
|
|
18
|
+
Get in touch...
|
|
19
|
+
</h1>
|
|
20
|
+
<p class="max-w-2xl text-lg leading-9 text-[color:var(--site-text-muted)]">
|
|
21
|
+
We welcome questions, feedback, collaboration, and issue reports. Messages are routed by topic so they land in the right inbox.
|
|
22
|
+
</p>
|
|
23
|
+
</section>
|
|
24
|
+
|
|
25
|
+
<ContactForm status={status} code={code} />
|
|
26
|
+
</div>
|
|
27
|
+
</MainLayout>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getCollection } from "astro:content";
|
|
2
|
+
async function GET(context) {
|
|
3
|
+
const notes = (await getCollection("notes", ({ data }) => !data.draft)).sort(
|
|
4
|
+
(a, b) => b.data.date.valueOf() - a.data.date.valueOf()
|
|
5
|
+
);
|
|
6
|
+
const origin = context.site?.origin ?? "https://treeseed.dev";
|
|
7
|
+
const items = notes.map(
|
|
8
|
+
(note) => `
|
|
9
|
+
<item>
|
|
10
|
+
<title><![CDATA[${note.data.title}]]></title>
|
|
11
|
+
<link>${origin}/notes/${note.id}/</link>
|
|
12
|
+
<guid>${origin}/notes/${note.id}/</guid>
|
|
13
|
+
<pubDate>${note.data.date.toUTCString()}</pubDate>
|
|
14
|
+
<description><![CDATA[${note.data.description}]]></description>
|
|
15
|
+
</item>`
|
|
16
|
+
).join("\n");
|
|
17
|
+
const xml = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
18
|
+
<rss version="2.0">
|
|
19
|
+
<channel>
|
|
20
|
+
<title>TreeSeed Notes</title>
|
|
21
|
+
<link>${origin}/notes/</link>
|
|
22
|
+
<description>Working notes from the TreeSeed fixture site.</description>
|
|
23
|
+
${items}
|
|
24
|
+
</channel>
|
|
25
|
+
</rss>`;
|
|
26
|
+
return new Response(xml, {
|
|
27
|
+
headers: {
|
|
28
|
+
"Content-Type": "application/xml; charset=utf-8"
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
GET
|
|
34
|
+
};
|