blume 2.0.3 → 2.1.1
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/AGENTS.md +1 -0
- package/CHANGELOG.md +142 -0
- package/README.md +1 -1
- package/dist/cli/{chunk-5f86nr5m.js → chunk-073rdvgb.js} +21 -48
- package/dist/cli/{chunk-5f86nr5m.js.map → chunk-073rdvgb.js.map} +4 -5
- package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
- package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
- package/dist/cli/chunk-150jk7km.js +52 -0
- package/dist/cli/chunk-150jk7km.js.map +10 -0
- package/dist/cli/{chunk-9t7a85s3.js → chunk-313vnn40.js} +30 -19
- package/dist/cli/chunk-313vnn40.js.map +10 -0
- package/dist/cli/{chunk-tkacnehg.js → chunk-3v3ffbrj.js} +2 -2
- package/dist/cli/{chunk-q58y5e6a.js → chunk-3x6x3pph.js} +46 -24
- package/dist/cli/chunk-3x6x3pph.js.map +10 -0
- package/dist/cli/{chunk-1d7ve1dm.js → chunk-42t4jxdx.js} +37 -5
- package/dist/cli/chunk-42t4jxdx.js.map +12 -0
- package/dist/cli/{chunk-8ktnccpt.js → chunk-54ztw1nj.js} +21 -2
- package/dist/cli/chunk-54ztw1nj.js.map +10 -0
- package/dist/cli/{chunk-hm3vjy5s.js → chunk-5vjtgs6e.js} +28 -10
- package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-5vjtgs6e.js.map} +4 -4
- package/dist/cli/chunk-66w9j7p6.js +322 -0
- package/dist/cli/chunk-66w9j7p6.js.map +14 -0
- package/dist/cli/{chunk-2hsdwb9n.js → chunk-7ppf1rva.js} +34 -18
- package/dist/cli/chunk-7ppf1rva.js.map +10 -0
- package/dist/cli/{chunk-r9rcc4w7.js → chunk-8y2kmjv8.js} +7 -7
- package/dist/cli/{chunk-r20tn01b.js → chunk-c1y538kd.js} +8 -2
- package/dist/cli/{chunk-r20tn01b.js.map → chunk-c1y538kd.js.map} +3 -3
- package/dist/cli/{chunk-2eytanqx.js → chunk-c887fj0s.js} +2 -2
- package/dist/cli/{chunk-p3v96n38.js → chunk-cfyg47zg.js} +16 -6
- package/dist/cli/chunk-cfyg47zg.js.map +10 -0
- package/dist/cli/chunk-cm89scdv.js +443 -0
- package/dist/cli/chunk-cm89scdv.js.map +11 -0
- package/dist/cli/{chunk-akbpwfxc.js → chunk-dzwehpy7.js} +2 -2
- package/dist/cli/{chunk-wrr3j9w9.js → chunk-e6atmn4h.js} +299 -72
- package/dist/cli/chunk-e6atmn4h.js.map +36 -0
- package/dist/cli/{chunk-tzmab476.js → chunk-e8xw9qkh.js} +8 -6
- package/dist/cli/{chunk-tzmab476.js.map → chunk-e8xw9qkh.js.map} +3 -3
- package/dist/cli/{chunk-6dsbexzp.js → chunk-e9q7a2ak.js} +17 -15
- package/dist/cli/{chunk-6dsbexzp.js.map → chunk-e9q7a2ak.js.map} +2 -2
- package/dist/cli/{chunk-pv29h0wf.js → chunk-ehweg4fr.js} +5155 -1249
- package/dist/cli/chunk-ehweg4fr.js.map +218 -0
- package/dist/cli/{chunk-c8chx29p.js → chunk-ep6nd0rn.js} +390 -318
- package/dist/cli/chunk-ep6nd0rn.js.map +36 -0
- package/dist/cli/{chunk-p73c0m7w.js → chunk-fdrkhpjy.js} +18 -15
- package/dist/cli/{chunk-p73c0m7w.js.map → chunk-fdrkhpjy.js.map} +3 -3
- package/dist/cli/{chunk-2z928egk.js → chunk-ft9vfys6.js} +5 -5
- package/dist/cli/{chunk-5m5nmvyq.js → chunk-gb420vvz.js} +316 -79
- package/dist/cli/chunk-gb420vvz.js.map +17 -0
- package/dist/cli/{chunk-vg9r4eb9.js → chunk-hebn0tpx.js} +86 -13
- package/dist/cli/chunk-hebn0tpx.js.map +14 -0
- package/dist/cli/{chunk-35d4wj9f.js → chunk-htrwgabr.js} +41 -23
- package/dist/cli/chunk-htrwgabr.js.map +15 -0
- package/dist/cli/{chunk-g4hq16wv.js → chunk-hx3xqnk9.js} +16 -14
- package/dist/cli/{chunk-g4hq16wv.js.map → chunk-hx3xqnk9.js.map} +2 -2
- package/dist/cli/chunk-j134vrp2.js +65 -0
- package/dist/cli/chunk-j134vrp2.js.map +10 -0
- package/dist/cli/{chunk-a58773jm.js → chunk-kma9f6sf.js} +2 -2
- package/dist/cli/chunk-kwrg63tm.js +31 -0
- package/dist/cli/chunk-kwrg63tm.js.map +10 -0
- package/dist/cli/{chunk-ey84smr6.js → chunk-mrcccgnh.js} +6 -6
- package/dist/cli/{chunk-ey84smr6.js.map → chunk-mrcccgnh.js.map} +1 -1
- package/dist/cli/{chunk-yfyb25rh.js → chunk-n0v7m8ry.js} +24 -8
- package/dist/cli/chunk-n0v7m8ry.js.map +14 -0
- package/dist/cli/{chunk-j85vccga.js → chunk-ncj7w596.js} +576 -367
- package/dist/cli/chunk-ncj7w596.js.map +35 -0
- package/dist/cli/{chunk-5xvm6tfj.js → chunk-nq1d20w2.js} +17 -15
- package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-nq1d20w2.js.map} +2 -2
- package/dist/cli/{chunk-pehfxfta.js → chunk-nrns10mj.js} +6 -98
- package/dist/cli/chunk-nrns10mj.js.map +10 -0
- package/dist/cli/{chunk-crgn1q09.js → chunk-sds923fa.js} +4 -4
- package/dist/cli/chunk-t2m5j4pr.js +104 -0
- package/dist/cli/chunk-t2m5j4pr.js.map +11 -0
- package/dist/cli/{chunk-acanzt5p.js → chunk-tdqhyxfz.js} +6 -6
- package/dist/cli/chunk-tphac74f.js +126 -0
- package/dist/cli/chunk-tphac74f.js.map +11 -0
- package/dist/cli/chunk-w1r4vase.js +18 -0
- package/dist/cli/chunk-w1r4vase.js.map +10 -0
- package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
- package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
- package/dist/cli/index.js +31 -20
- package/dist/cli/index.js.map +5 -5
- package/dist/types/ai/agent-surface.d.ts +8 -7
- package/dist/types/ai/ai-catalog.d.ts +7 -0
- package/dist/types/ai/ask-context.d.ts +26 -0
- package/dist/types/ai/ask.d.ts +271 -58
- package/dist/types/ai/component-markdown.d.ts +2 -0
- package/dist/types/ai/index.d.ts +2 -2
- package/dist/types/ai/openapi-components.d.ts +4 -1
- package/dist/types/ai/site-skill.d.ts +26 -0
- package/dist/types/ai/skills.d.ts +16 -0
- package/dist/types/astro/integration.d.ts +9 -0
- package/dist/types/astro/markdown-negotiation.d.ts +3 -0
- package/dist/types/astro/pages.d.ts +10 -0
- package/dist/types/captcha/hcaptcha.d.ts +27 -0
- package/dist/types/captcha/index.d.ts +28 -0
- package/dist/types/captcha/schema.d.ts +29 -0
- package/dist/types/captcha/turnstile.d.ts +28 -0
- package/dist/types/cli/init/scaffold.d.ts +1 -1
- package/dist/types/components/content/api-field.d.ts +62 -0
- package/dist/types/components/content/api-page.d.ts +100 -0
- package/dist/types/components/layout/nav-utils.d.ts +26 -0
- package/dist/types/components/openapi/code-samples.d.ts +29 -0
- package/dist/types/components/openapi/helpers.d.ts +158 -0
- package/dist/types/components/openapi/security.d.ts +95 -0
- package/dist/types/components/openapi/snippets.d.ts +60 -0
- package/dist/types/consent/ethyca.d.ts +48 -0
- package/dist/types/consent/index.d.ts +37 -0
- package/dist/types/consent/native.d.ts +28 -0
- package/dist/types/consent/osano.d.ts +42 -0
- package/dist/types/consent/schema.d.ts +110 -0
- package/dist/types/core/changelog-index.d.ts +8 -0
- package/dist/types/core/config-input.d.ts +217 -23
- package/dist/types/core/data.d.ts +53 -4
- package/dist/types/core/footer.d.ts +8 -0
- package/dist/types/core/i18n-ui.d.ts +88 -0
- package/dist/types/core/includes.d.ts +8 -2
- package/dist/types/core/links.d.ts +8 -0
- package/dist/types/core/localizable.d.ts +7 -0
- package/dist/types/core/page-modes.d.ts +29 -0
- package/dist/types/core/probe.d.ts +2 -0
- package/dist/types/core/project-graph.d.ts +6 -0
- package/dist/types/core/redirect-patterns.d.ts +152 -0
- package/dist/types/core/related.d.ts +40 -0
- package/dist/types/core/schema.d.ts +670 -56
- package/dist/types/core/sources/cache.d.ts +3 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
- package/dist/types/core/sources/contentful.d.ts +17 -1
- package/dist/types/core/sources/lexical.d.ts +5 -0
- package/dist/types/core/sources/normalize.d.ts +20 -1
- package/dist/types/core/sources/read.d.ts +5 -0
- package/dist/types/core/sources/remote.d.ts +37 -10
- package/dist/types/core/sources/sanity.d.ts +1 -1
- package/dist/types/core/types.d.ts +18 -1
- package/dist/types/core/variables.d.ts +42 -0
- package/dist/types/deploy/adapter-output.d.ts +2 -1
- package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
- package/dist/types/deploy/adapters/node.d.ts +58 -23
- package/dist/types/deploy/adapters/registry.d.ts +10 -0
- package/dist/types/deploy/adapters/types.d.ts +3 -2
- package/dist/types/deploy/node-headers.d.ts +13 -2
- package/dist/types/deploy/platforms/cloudflare.d.ts +15 -7
- package/dist/types/deploy/platforms/netlify.d.ts +7 -0
- package/dist/types/deploy/platforms/node.d.ts +3 -1
- package/dist/types/deploy/platforms/types.d.ts +18 -7
- package/dist/types/deploy/platforms/vercel.d.ts +26 -1
- package/dist/types/deploy/redirects.d.ts +55 -11
- package/dist/types/deploy/sitemap.d.ts +2 -1
- package/dist/types/deploy/vercel-negotiation.d.ts +51 -21
- package/dist/types/markdown/code-title.d.ts +17 -0
- package/dist/types/markdown/features.d.ts +3 -2
- package/dist/types/narration/build.d.ts +70 -0
- package/dist/types/narration/provider.d.ts +26 -0
- package/dist/types/narration/script.d.ts +154 -0
- package/dist/types/openapi/checks.d.ts +27 -0
- package/dist/types/openapi/graphql.d.ts +6 -0
- package/dist/types/openapi/model.d.ts +27 -10
- package/dist/types/openapi/overlay.d.ts +54 -0
- package/dist/types/openapi/parse.d.ts +16 -0
- package/dist/types/openapi/references.d.ts +30 -4
- package/dist/types/ratelimit/cloudflare.d.ts +39 -0
- package/dist/types/ratelimit/index.d.ts +27 -0
- package/dist/types/ratelimit/memory.d.ts +36 -0
- package/dist/types/ratelimit/schema.d.ts +119 -0
- package/dist/types/ratelimit/upstash.d.ts +46 -0
- package/dist/types/ratelimit/wrangler.d.ts +23 -0
- package/dist/types/reference/asyncapi.d.ts +10 -10
- package/dist/types/reference/graphql.d.ts +89 -11
- package/dist/types/reference/index.d.ts +1 -1
- package/dist/types/reference/openapi.d.ts +33 -12
- package/dist/types/reference/options.d.ts +82 -6
- package/dist/types/reference/scalar.d.ts +13 -0
- package/dist/types/reference/schema.d.ts +144 -36
- package/dist/types/search/adapters/registry.d.ts +3 -0
- package/dist/types/search/adapters/typesense.d.ts +14 -4
- package/dist/types/search/build.d.ts +3 -1
- package/dist/types/search/documents.d.ts +12 -1
- package/dist/types/search/orama-index.d.ts +13 -9
- package/dist/types/search/sync/algolia.d.ts +5 -2
- package/dist/types/search/sync/index.d.ts +3 -1
- package/dist/types/search/sync/typesense.d.ts +11 -7
- package/dist/types/seo/metatags.d.ts +20 -0
- package/dist/types/sources/contentful.d.ts +16 -0
- package/dist/types/sources/github-releases.d.ts +8 -1
- package/dist/types/sources/payload.d.ts +2 -0
- package/dist/types/sources/registry.d.ts +54 -0
- package/dist/types/sources/shared.d.ts +3 -0
- package/dist/types/sources/strapi.d.ts +2 -0
- package/docs/01-quickstart.mdx +4 -2
- package/docs/02-deployment.mdx +71 -17
- package/docs/03-upgrading.mdx +4 -4
- package/docs/04-migrating.mdx +1 -1
- package/docs/advanced/changelog.mdx +13 -2
- package/docs/advanced/skills.mdx +15 -1
- package/docs/cli/audit.mdx +51 -8
- package/docs/cli/doctor.mdx +5 -1
- package/docs/cli/evals.mdx +4 -4
- package/docs/cli/index.mdx +1 -0
- package/docs/cli/translate.mdx +1 -0
- package/docs/cli/validate.mdx +4 -3
- package/docs/configuration/analytics.mdx +3 -1
- package/docs/configuration/assistant.mdx +194 -38
- package/docs/configuration/consent.mdx +100 -0
- package/docs/configuration/customization.mdx +8 -6
- package/docs/configuration/export.mdx +5 -3
- package/docs/configuration/index.mdx +64 -5
- package/docs/configuration/meta.ts +3 -0
- package/docs/configuration/narration.mdx +119 -0
- package/docs/configuration/rate-limiting.mdx +90 -0
- package/docs/configuration/search.mdx +63 -12
- package/docs/configuration/theming.mdx +3 -1
- package/docs/content/components.mdx +108 -2
- package/docs/content/frontmatter.mdx +80 -2
- package/docs/content/i18n.mdx +39 -4
- package/docs/content/includes.mdx +16 -0
- package/docs/content/meta.mdx +1 -0
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +32 -10
- package/docs/content/sources/contentful.mdx +35 -0
- package/docs/content/sources/custom.mdx +43 -0
- package/docs/content/sources/github-releases.mdx +39 -0
- package/docs/content/sources/index.mdx +91 -0
- package/docs/content/sources/meta.ts +16 -0
- package/docs/content/sources/notion.mdx +32 -0
- package/docs/content/sources/obsidian.mdx +37 -0
- package/docs/content/sources/payload.mdx +31 -0
- package/docs/content/sources/remote-mdx.mdx +44 -0
- package/docs/content/sources/sanity.mdx +29 -0
- package/docs/content/sources/strapi.mdx +32 -0
- package/docs/content/syntax.mdx +69 -4
- package/docs/content/variables.mdx +41 -0
- package/docs/discoverability/agent-discovery.mdx +29 -2
- package/docs/discoverability/index.mdx +2 -2
- package/docs/discoverability/json-api.mdx +2 -0
- package/docs/discoverability/llms-txt.mdx +2 -2
- package/docs/discoverability/markdown.mdx +3 -1
- package/docs/discoverability/mcp.mdx +4 -0
- package/docs/discoverability/metadata.mdx +17 -0
- package/docs/discoverability/sitemap-and-robots.mdx +1 -1
- package/docs/references/api-pages.mdx +74 -0
- package/docs/references/asyncapi.mdx +4 -2
- package/docs/references/graphql.mdx +14 -2
- package/docs/references/meta.ts +1 -1
- package/docs/references/openapi.mdx +148 -7
- package/docs/references/scalar.mdx +3 -1
- package/package.json +43 -8
- package/skills/blume/SKILL.md +3 -0
- package/skills/blume-migrate/SKILL.md +6 -6
- package/skills/blume-migrate/references/docusaurus.md +7 -7
- package/skills/blume-migrate/references/fumadocs.md +17 -13
- package/skills/blume-migrate/references/mintlify.md +37 -19
- package/skills/blume-migrate/references/nextra.md +10 -7
- package/skills/blume-migrate/references/starlight.md +11 -8
- package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
- package/skills/blume-write-skill/SKILL.md +82 -0
- package/src/ai/agent-readability.ts +2 -1
- package/src/ai/agent-surface.ts +9 -7
- package/src/ai/ai-catalog.ts +6 -3
- package/src/ai/ask-context.ts +103 -20
- package/src/ai/ask-data.ts +6 -0
- package/src/ai/ask-limits.ts +13 -0
- package/src/ai/ask-tools.ts +142 -0
- package/src/ai/ask.ts +354 -76
- package/src/ai/changelog-markdown.ts +11 -6
- package/src/ai/component-markdown.ts +76 -1
- package/src/ai/cors.ts +14 -3
- package/src/ai/index.ts +12 -0
- package/src/ai/llms.ts +6 -2
- package/src/ai/markdown.ts +2 -1
- package/src/ai/mcp/data.ts +6 -0
- package/src/ai/mcp/query.ts +14 -6
- package/src/ai/openapi-components.ts +36 -6
- package/src/ai/relative-links.ts +4 -38
- package/src/ai/site-skill.ts +274 -0
- package/src/ai/skills.ts +35 -2
- package/src/ai/write-skill.ts +97 -0
- package/src/astro/generate.ts +210 -66
- package/src/astro/index.ts +1 -0
- package/src/astro/integration.ts +42 -4
- package/src/astro/markdown-negotiation.ts +3 -0
- package/src/astro/module-types.ts +9 -1
- package/src/astro/pages.ts +23 -0
- package/src/astro/templates.ts +406 -108
- package/src/astro/variables.ts +31 -0
- package/src/audit/catalog.ts +38 -3
- package/src/audit/checks/contrast.ts +183 -0
- package/src/audit/checks/i18n.ts +2 -3
- package/src/audit/checks/indexability.ts +2 -3
- package/src/audit/checks/links.ts +19 -13
- package/src/audit/checks/network.ts +110 -6
- package/src/audit/checks/redirects.ts +6 -4
- package/src/audit/checks/robots.ts +58 -2
- package/src/audit/checks/sitemap.ts +2 -3
- package/src/audit/redirects.ts +46 -15
- package/src/audit/run.ts +5 -0
- package/src/audit/types.ts +4 -1
- package/src/audit/url.ts +14 -5
- package/src/blume-modules.d.ts +12 -1
- package/src/captcha/client.ts +152 -0
- package/src/captcha/hcaptcha.ts +36 -0
- package/src/captcha/index.ts +28 -0
- package/src/captcha/schema.ts +32 -0
- package/src/captcha/turnstile.ts +38 -0
- package/src/captcha/verify.ts +71 -0
- package/src/cli/args.ts +51 -0
- package/src/cli/build-failure.ts +23 -0
- package/src/cli/command-meta.ts +5 -0
- package/src/cli/commands/audit.ts +10 -1
- package/src/cli/commands/dev.ts +18 -2
- package/src/cli/commands/doctor.ts +67 -28
- package/src/cli/commands/eval.ts +36 -4
- package/src/cli/commands/init.ts +6 -4
- package/src/cli/commands/skill.ts +96 -0
- package/src/cli/commands/validate.ts +10 -1
- package/src/cli/index.ts +5 -0
- package/src/cli/init/scaffold.ts +3 -3
- package/src/cli/prepare.ts +6 -3
- package/src/cli/required-secrets.ts +72 -30
- package/src/components/BlumePage.astro +2 -0
- package/src/components/content/ApiEndpoint.astro +18 -0
- package/src/components/content/ApiField.astro +79 -0
- package/src/components/content/ApiPlayground.astro +66 -0
- package/src/components/content/ApiRail.astro +19 -0
- package/src/components/content/Color.astro +1 -0
- package/src/components/content/FileTree.astro +1 -0
- package/src/components/content/GithubInfo.astro +1 -0
- package/src/components/content/Panel.astro +1 -0
- package/src/components/content/ParamField.astro +25 -0
- package/src/components/content/RequestExample.astro +17 -0
- package/src/components/content/ResponseExample.astro +17 -0
- package/src/components/content/ResponseField.astro +32 -0
- package/src/components/content/Step.astro +1 -0
- package/src/components/content/Tile.astro +1 -0
- package/src/components/content/Tooltip.astro +1 -0
- package/src/components/content/Tree.astro +1 -0
- package/src/components/content/TypeTable.astro +4 -1
- package/src/components/content/View.astro +21 -0
- package/src/components/content/ViewSwitcher.astro +168 -0
- package/src/components/content/api-field.ts +103 -0
- package/src/components/content/api-page.ts +248 -0
- package/src/components/content/mermaid-element.ts +15 -1
- package/src/components/content/view-switcher.ts +71 -0
- package/src/components/index.ts +2 -0
- package/src/components/islands/Assistant.astro +10 -1
- package/src/components/islands/assistant.tsx +104 -14
- package/src/components/islands/code-question.ts +62 -0
- package/src/components/islands/hooks.ts +136 -21
- package/src/components/islands/support-link.ts +68 -0
- package/src/components/layout/Analytics.astro +11 -2
- package/src/components/layout/Banner.astro +14 -10
- package/src/components/layout/Breadcrumbs.astro +6 -2
- package/src/components/layout/ConsentBanner.astro +62 -0
- package/src/components/layout/ConsentHead.astro +38 -0
- package/src/components/layout/Directory.astro +94 -0
- package/src/components/layout/DrawerSwitchers.astro +51 -0
- package/src/components/layout/Empty.astro +2 -2
- package/src/components/layout/Header.astro +122 -80
- package/src/components/layout/LanguageSwitcher.astro +48 -15
- package/src/components/layout/NarrationPlayer.astro +1085 -0
- package/src/components/layout/NavSelector.astro +33 -7
- package/src/components/layout/PageActions.astro +139 -24
- package/src/components/layout/PageFeedback.astro +54 -49
- package/src/components/layout/PageLayout.astro +71 -3
- package/src/components/layout/ReferenceLayout.astro +17 -6
- package/src/components/layout/RelatedPages.astro +42 -0
- package/src/components/layout/RootLayout.astro +318 -47
- package/src/components/layout/Search.astro +47 -19
- package/src/components/layout/SiteFooter.astro +124 -0
- package/src/components/layout/SiteMetatags.astro +16 -0
- package/src/components/layout/TableOfContents.astro +24 -17
- package/src/components/layout/consent/native.ts +79 -0
- package/src/components/layout/consent/types.ts +37 -0
- package/src/components/layout/footer-links.ts +53 -0
- package/src/components/layout/footer-socials.ts +87 -0
- package/src/components/layout/head-scripts.ts +6 -1
- package/src/components/layout/locale-redirect.ts +107 -0
- package/src/components/layout/nav-utils.ts +83 -0
- package/src/components/layout/page-feedback.ts +96 -0
- package/src/components/layout/search/algolia.ts +10 -1
- package/src/components/layout/search/analytics.ts +126 -0
- package/src/components/layout/search/endpoint.ts +48 -5
- package/src/components/layout/search/flexsearch.ts +17 -5
- package/src/components/layout/search/orama-cloud.ts +26 -14
- package/src/components/layout/search/pagefind.ts +114 -5
- package/src/components/layout/search/types.ts +32 -0
- package/src/components/layout/search/typesense.ts +19 -3
- package/src/components/openapi/AsyncApiOperation.astro +14 -7
- package/src/components/openapi/Authorization.astro +10 -0
- package/src/components/openapi/GraphqlOperation.astro +5 -0
- package/src/components/openapi/Operation.astro +184 -13
- package/src/components/openapi/ParametersTable.astro +8 -4
- package/src/components/openapi/Playground.astro +7 -1
- package/src/components/openapi/RequestBody.astro +24 -5
- package/src/components/openapi/RequestPanel.astro +59 -7
- package/src/components/openapi/Responses.astro +7 -4
- package/src/components/openapi/SchemaTable.astro +15 -3
- package/src/components/openapi/async-snippets.ts +65 -9
- package/src/components/openapi/async.ts +123 -29
- package/src/components/openapi/code-samples.ts +97 -0
- package/src/components/openapi/graphql-helpers.ts +35 -12
- package/src/components/openapi/helpers.ts +36 -2
- package/src/components/openapi/message-model.ts +54 -11
- package/src/components/openapi/message.ts +14 -4
- package/src/components/openapi/operation-model.ts +16 -7
- package/src/components/openapi/playground-client.ts +24 -5
- package/src/components/openapi/playground-schema.ts +1 -1
- package/src/components/openapi/schema-tree.ts +44 -14
- package/src/components/openapi/security.ts +16 -3
- package/src/components/openapi/snippets.ts +873 -10
- package/src/components/openapi/validate-json.ts +4 -3
- package/src/components/props.ts +6 -0
- package/src/consent/client.ts +95 -0
- package/src/consent/clients.ts +19 -0
- package/src/consent/ethyca.ts +71 -0
- package/src/consent/head.ts +24 -0
- package/src/consent/index.ts +37 -0
- package/src/consent/init.ts +29 -0
- package/src/consent/native.ts +36 -0
- package/src/consent/osano.ts +59 -0
- package/src/consent/schema.ts +30 -0
- package/src/core/builtin-tags.ts +5 -0
- package/src/core/changelog-index.ts +31 -1
- package/src/core/client-address.ts +19 -0
- package/src/core/component-diagnostics.ts +53 -0
- package/src/core/component-overrides.ts +32 -0
- package/src/core/config-input.ts +225 -23
- package/src/core/data.ts +46 -4
- package/src/core/diagnostics.ts +8 -2
- package/src/core/footer.ts +26 -0
- package/src/core/graph.ts +39 -36
- package/src/core/i18n-ui.ts +84 -2
- package/src/core/includes.ts +21 -4
- package/src/core/links.ts +63 -19
- package/src/core/localizable.ts +26 -0
- package/src/core/navigation.ts +43 -12
- package/src/core/page-modes.ts +56 -0
- package/src/core/probe.ts +26 -6
- package/src/core/project-graph.ts +163 -16
- package/src/core/redirect-patterns.ts +520 -0
- package/src/core/related.ts +131 -0
- package/src/core/schema.ts +339 -66
- package/src/core/sources/cache.ts +6 -0
- package/src/core/sources/contentful-rich-text.ts +29 -6
- package/src/core/sources/contentful.ts +135 -25
- package/src/core/sources/filesystem.ts +26 -4
- package/src/core/sources/github-releases.ts +12 -1
- package/src/core/sources/lexical.ts +15 -10
- package/src/core/sources/mdx-remote.ts +62 -10
- package/src/core/sources/normalize.ts +228 -41
- package/src/core/sources/notion.ts +7 -1
- package/src/core/sources/obsidian.ts +16 -3
- package/src/core/sources/payload.ts +38 -15
- package/src/core/sources/read.ts +8 -3
- package/src/core/sources/remote.ts +72 -15
- package/src/core/sources/resolve.ts +11 -1
- package/src/core/sources/sanity.ts +43 -25
- package/src/core/sources/strapi.ts +2 -2
- package/src/core/types.ts +19 -1
- package/src/core/ui-packs/ar.ts +44 -0
- package/src/core/ui-packs/bg.ts +46 -0
- package/src/core/ui-packs/bn.ts +44 -0
- package/src/core/ui-packs/ca.ts +47 -0
- package/src/core/ui-packs/cs.ts +45 -0
- package/src/core/ui-packs/da.ts +46 -0
- package/src/core/ui-packs/de.ts +47 -0
- package/src/core/ui-packs/el.ts +46 -0
- package/src/core/ui-packs/es.ts +47 -0
- package/src/core/ui-packs/fa.ts +46 -0
- package/src/core/ui-packs/fi.ts +46 -0
- package/src/core/ui-packs/fr.ts +47 -0
- package/src/core/ui-packs/he.ts +44 -0
- package/src/core/ui-packs/hi.ts +45 -0
- package/src/core/ui-packs/hr.ts +46 -0
- package/src/core/ui-packs/hu.ts +45 -0
- package/src/core/ui-packs/id.ts +46 -0
- package/src/core/ui-packs/it.ts +46 -0
- package/src/core/ui-packs/ja.ts +46 -0
- package/src/core/ui-packs/ko.ts +45 -0
- package/src/core/ui-packs/nl.ts +47 -0
- package/src/core/ui-packs/no.ts +45 -0
- package/src/core/ui-packs/pl.ts +46 -0
- package/src/core/ui-packs/pt-br.ts +47 -0
- package/src/core/ui-packs/pt.ts +46 -0
- package/src/core/ui-packs/ro.ts +46 -0
- package/src/core/ui-packs/ru.ts +46 -0
- package/src/core/ui-packs/sk.ts +45 -0
- package/src/core/ui-packs/sr.ts +46 -0
- package/src/core/ui-packs/sv.ts +45 -0
- package/src/core/ui-packs/th.ts +44 -0
- package/src/core/ui-packs/tr.ts +46 -0
- package/src/core/ui-packs/uk.ts +46 -0
- package/src/core/ui-packs/vi.ts +46 -0
- package/src/core/ui-packs/zh-tw.ts +44 -0
- package/src/core/ui-packs/zh.ts +44 -0
- package/src/core/variables.ts +103 -0
- package/src/deploy/adapter-output.ts +7 -2
- package/src/deploy/adapters/cloudflare.ts +7 -5
- package/src/deploy/adapters/node.ts +47 -9
- package/src/deploy/adapters/types.ts +7 -3
- package/src/deploy/artifacts.ts +79 -9
- package/src/deploy/cloudflare-negotiation.ts +35 -5
- package/src/deploy/headers.ts +2 -1
- package/src/deploy/node-headers.ts +63 -9
- package/src/deploy/platforms/cloudflare.ts +45 -9
- package/src/deploy/platforms/netlify.ts +35 -2
- package/src/deploy/platforms/node.ts +12 -2
- package/src/deploy/platforms/types.ts +21 -7
- package/src/deploy/platforms/vercel.ts +149 -17
- package/src/deploy/redirects.ts +151 -24
- package/src/deploy/rss.ts +3 -1
- package/src/deploy/sitemap.ts +39 -5
- package/src/deploy/vercel-negotiation.ts +326 -102
- package/src/eval/agents.ts +18 -1
- package/src/eval/prompts.ts +6 -3
- package/src/eval/report.ts +34 -13
- package/src/eval/run.ts +5 -0
- package/src/markdown/api-rail.ts +259 -0
- package/src/markdown/code-title.ts +35 -9
- package/src/markdown/features.ts +3 -2
- package/src/markdown/fence-meta.ts +2 -0
- package/src/markdown/include.ts +11 -1
- package/src/markdown/index.ts +28 -5
- package/src/markdown/math.ts +4 -4
- package/src/markdown/relative-links.ts +3 -2
- package/src/markdown/variables.ts +56 -0
- package/src/markdown/views.ts +82 -0
- package/src/narration/build.ts +412 -0
- package/src/narration/player.ts +249 -0
- package/src/narration/provider.ts +29 -0
- package/src/narration/script.ts +592 -0
- package/src/og/card.ts +7 -6
- package/src/openapi/checks.ts +273 -0
- package/src/openapi/graphql-build.ts +21 -0
- package/src/openapi/graphql.ts +11 -0
- package/src/openapi/model.ts +72 -27
- package/src/openapi/overlay.ts +256 -0
- package/src/openapi/parse.ts +182 -4
- package/src/openapi/references.ts +64 -8
- package/src/openapi/render-mdx.ts +5 -1
- package/src/openapi/scalar.ts +40 -6
- package/src/openapi/source.ts +40 -15
- package/src/ratelimit/cloudflare.ts +54 -0
- package/src/ratelimit/index.ts +30 -0
- package/src/ratelimit/memory.ts +45 -0
- package/src/ratelimit/runtime.ts +247 -0
- package/src/ratelimit/schema.ts +28 -0
- package/src/ratelimit/upstash.ts +60 -0
- package/src/ratelimit/wrangler.ts +70 -0
- package/src/reference/asyncapi.ts +2 -2
- package/src/reference/graphql.ts +20 -3
- package/src/reference/index.ts +1 -0
- package/src/reference/openapi.ts +21 -7
- package/src/reference/options.ts +80 -8
- package/src/reference/scalar.ts +33 -8
- package/src/registry/eject.ts +23 -5
- package/src/registry/registry.ts +7 -0
- package/src/search/adapters/locale-scope.ts +30 -0
- package/src/search/adapters/typesense.ts +14 -4
- package/src/search/build.ts +21 -3
- package/src/search/documents.ts +26 -2
- package/src/search/orama-index.ts +191 -34
- package/src/search/pagefind-ranking.ts +39 -0
- package/src/search/source-pages.ts +29 -0
- package/src/search/sync/algolia.ts +111 -10
- package/src/search/sync/index.ts +52 -13
- package/src/search/sync/orama-cloud.ts +3 -0
- package/src/search/sync/typesense.ts +76 -26
- package/src/seo/metatags.ts +67 -0
- package/src/sources/contentful.ts +12 -0
- package/src/sources/github-releases.ts +7 -1
- package/src/sources/shared.ts +3 -0
- package/src/theme/chrome-icons.ts +1 -0
- package/src/theme/color.ts +500 -0
- package/src/theme/entry.ts +85 -6
- package/src/theme/palette.ts +121 -45
- package/src/translate/prompts.ts +1 -0
- package/src/translate/validate.ts +31 -3
- package/src/upgrade/upgrade.ts +4 -171
- package/dist/cli/chunk-1d7ve1dm.js.map +0 -12
- package/dist/cli/chunk-2hsdwb9n.js.map +0 -10
- package/dist/cli/chunk-35d4wj9f.js.map +0 -15
- package/dist/cli/chunk-364znk6q.js +0 -75
- package/dist/cli/chunk-364znk6q.js.map +0 -11
- package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
- package/dist/cli/chunk-8ktnccpt.js.map +0 -10
- package/dist/cli/chunk-9t7a85s3.js.map +0 -10
- package/dist/cli/chunk-b07cmahc.js +0 -145
- package/dist/cli/chunk-b07cmahc.js.map +0 -11
- package/dist/cli/chunk-c8chx29p.js.map +0 -36
- package/dist/cli/chunk-e04dxsz1.js +0 -39
- package/dist/cli/chunk-e04dxsz1.js.map +0 -10
- package/dist/cli/chunk-j85vccga.js.map +0 -36
- package/dist/cli/chunk-p3v96n38.js.map +0 -10
- package/dist/cli/chunk-pehfxfta.js.map +0 -10
- package/dist/cli/chunk-pv29h0wf.js.map +0 -190
- package/dist/cli/chunk-q58y5e6a.js.map +0 -10
- package/dist/cli/chunk-vg9r4eb9.js.map +0 -14
- package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
- package/dist/cli/chunk-yfyb25rh.js.map +0 -14
- package/docs/content/sources.mdx +0 -334
- /package/dist/cli/{chunk-tkacnehg.js.map → chunk-3v3ffbrj.js.map} +0 -0
- /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-8y2kmjv8.js.map} +0 -0
- /package/dist/cli/{chunk-2eytanqx.js.map → chunk-c887fj0s.js.map} +0 -0
- /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-dzwehpy7.js.map} +0 -0
- /package/dist/cli/{chunk-2z928egk.js.map → chunk-ft9vfys6.js.map} +0 -0
- /package/dist/cli/{chunk-a58773jm.js.map → chunk-kma9f6sf.js.map} +0 -0
- /package/dist/cli/{chunk-crgn1q09.js.map → chunk-sds923fa.js.map} +0 -0
- /package/dist/cli/{chunk-acanzt5p.js.map → chunk-tdqhyxfz.js.map} +0 -0
|
@@ -2,12 +2,66 @@ import { resolveAskBackend } from "../ai/ask.ts";
|
|
|
2
2
|
import type { ResolvedConfig } from "../core/schema.ts";
|
|
3
3
|
import type { Diagnostic } from "../core/types.ts";
|
|
4
4
|
|
|
5
|
+
/** A feature, and the secrets the adapter behind it reads. */
|
|
6
|
+
interface SecretOwner {
|
|
7
|
+
feature: string;
|
|
8
|
+
note?: string;
|
|
9
|
+
secrets: string[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The adapters that name their own secrets. The built-ins mostly declare
|
|
14
|
+
* none: analytics ships public tokens in the page, consent managers load
|
|
15
|
+
* public scripts, reference adapters read public specs, and host adapters
|
|
16
|
+
* read platform-injected env.
|
|
17
|
+
*/
|
|
18
|
+
const adapterSecretOwners = (config: ResolvedConfig): SecretOwner[] => {
|
|
19
|
+
const { consent, deployment, rateLimit } = config;
|
|
20
|
+
const { provider } = config.search;
|
|
21
|
+
const owners: SecretOwner[] = [
|
|
22
|
+
// Each search adapter declares the secrets its generated runtime reads.
|
|
23
|
+
{ feature: `Search (${provider.kind})`, secrets: provider.requiredSecrets },
|
|
24
|
+
...config.analytics.map((adapter) => ({
|
|
25
|
+
feature: `Analytics (${adapter.kind})`,
|
|
26
|
+
secrets: adapter.requiredSecrets,
|
|
27
|
+
})),
|
|
28
|
+
// Each content source adapter declares the env vars its fetch reads.
|
|
29
|
+
...config.content.sources.map((source) => ({
|
|
30
|
+
feature: `Content source (${source.kind})`,
|
|
31
|
+
secrets: source.requiredSecrets,
|
|
32
|
+
})),
|
|
33
|
+
...config.reference.map((adapter) => ({
|
|
34
|
+
feature: `API reference (${adapter.kind})`,
|
|
35
|
+
secrets: adapter.requiredSecrets,
|
|
36
|
+
})),
|
|
37
|
+
{
|
|
38
|
+
feature: `Deployment (${deployment.kind})`,
|
|
39
|
+
secrets: deployment.requiredSecrets,
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
if (consent) {
|
|
43
|
+
owners.push({
|
|
44
|
+
feature: `Consent (${consent.kind})`,
|
|
45
|
+
secrets: consent.requiredSecrets,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Upstash's endpoint and token.
|
|
49
|
+
if (rateLimit) {
|
|
50
|
+
owners.push({
|
|
51
|
+
feature: `Rate limiting (${rateLimit.kind})`,
|
|
52
|
+
note: "read at request time; without it the routes count in memory",
|
|
53
|
+
secrets: rateLimit.requiredSecrets,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return owners;
|
|
57
|
+
};
|
|
58
|
+
|
|
5
59
|
/**
|
|
6
60
|
* Warn early when an enabled feature needs a secret env var that isn't set, so
|
|
7
61
|
* the failure surfaces at `blume dev`/`build` instead of at the first request in
|
|
8
62
|
* production. These are runtime secrets (the endpoint reads them on the server),
|
|
9
63
|
* so this warns rather than hard-fails — the value may live only in the deploy
|
|
10
|
-
* environment. Build-time secrets (search-index sync)
|
|
64
|
+
* environment. Build-time secrets (search-index sync) are checked by the sync.
|
|
11
65
|
*/
|
|
12
66
|
export const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {
|
|
13
67
|
const diagnostics: Diagnostic[] = [];
|
|
@@ -26,47 +80,35 @@ export const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {
|
|
|
26
80
|
|
|
27
81
|
if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {
|
|
28
82
|
// The adapter descriptor names the env vars its route reads.
|
|
29
|
-
const { provider } = config.ai.assistant;
|
|
83
|
+
const { captcha, provider } = config.ai.assistant;
|
|
30
84
|
const backend = resolveAskBackend(provider);
|
|
31
85
|
for (const env of provider.requiredSecrets) {
|
|
32
86
|
requireSecret(`Assistant (${backend.label})`, env, backend.secretNote);
|
|
33
87
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const { provider } = config.search;
|
|
38
|
-
for (const env of provider.requiredSecrets) {
|
|
39
|
-
requireSecret(`Search (${provider.kind})`, env);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Adapters name their own secrets; the built-in analytics adapters ship
|
|
43
|
-
// public tokens in the page and declare none.
|
|
44
|
-
for (const adapter of config.analytics) {
|
|
45
|
-
for (const env of adapter.requiredSecrets) {
|
|
46
|
-
requireSecret(`Analytics (${adapter.kind})`, env);
|
|
88
|
+
// The bot check's secret key, which the route verifies tokens with.
|
|
89
|
+
for (const env of captcha?.requiredSecrets ?? []) {
|
|
90
|
+
requireSecret(`Assistant bot check (${captcha?.kind})`, env);
|
|
47
91
|
}
|
|
48
92
|
}
|
|
49
93
|
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
94
|
+
// Generated narration reads its key at build, not at runtime; without it the
|
|
95
|
+
// build skips the audio and pages read with browser voices.
|
|
96
|
+
const { narration } = config;
|
|
97
|
+
if (narration.enabled && narration.provider) {
|
|
98
|
+
for (const env of narration.provider.requiredSecrets) {
|
|
99
|
+
requireSecret(
|
|
100
|
+
"Narration audio",
|
|
101
|
+
env,
|
|
102
|
+
"read at build; without it pages use browser voices"
|
|
103
|
+
);
|
|
54
104
|
}
|
|
55
105
|
}
|
|
56
106
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
for (const env of adapter.requiredSecrets) {
|
|
61
|
-
requireSecret(`API reference (${adapter.kind})`, env);
|
|
107
|
+
for (const owner of adapterSecretOwners(config)) {
|
|
108
|
+
for (const env of owner.secrets) {
|
|
109
|
+
requireSecret(owner.feature, env, owner.note);
|
|
62
110
|
}
|
|
63
111
|
}
|
|
64
112
|
|
|
65
|
-
// The deployment adapter names its own secrets; the built-in host adapters
|
|
66
|
-
// read platform-injected env and declare none.
|
|
67
|
-
for (const env of config.deployment.requiredSecrets) {
|
|
68
|
-
requireSecret(`Deployment (${config.deployment.kind})`, env);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
113
|
return diagnostics;
|
|
72
114
|
};
|
|
@@ -49,6 +49,7 @@ import TreeRoot from "./content/Tree.astro";
|
|
|
49
49
|
import TreeFile from "./content/TreeFile.astro";
|
|
50
50
|
import TreeFolder from "./content/TreeFolder.astro";
|
|
51
51
|
import TypeTable from "./content/TypeTable.astro";
|
|
52
|
+
import View from "./content/View.astro";
|
|
52
53
|
import Visibility from "./content/Visibility.astro";
|
|
53
54
|
import YouTube from "./content/YouTube.astro";
|
|
54
55
|
|
|
@@ -96,6 +97,7 @@ const components = {
|
|
|
96
97
|
Tooltip,
|
|
97
98
|
Tree,
|
|
98
99
|
TypeTable,
|
|
100
|
+
View,
|
|
99
101
|
Visibility,
|
|
100
102
|
YouTube,
|
|
101
103
|
...extra,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
// The method and path at the top of a page with `api` frontmatter, as an
|
|
3
|
+
// OpenAPI operation page shows them. `markdown/api-rail.ts` places it.
|
|
4
|
+
import MethodBadge from "../openapi/MethodBadge.astro";
|
|
5
|
+
import { readEndpointSpec } from "./api-page.ts";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
/** The endpoint, as the page's plugin wrote it. */
|
|
9
|
+
spec: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { method, target } = readEndpointSpec(Astro.props.spec);
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<div class="not-prose mb-6 flex flex-wrap items-center gap-3">
|
|
16
|
+
<MethodBadge method={method} />
|
|
17
|
+
<code class="break-all font-mono text-foreground text-sm">{target}</code>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
// The row behind `<ParamField>` and `<ResponseField>`: the name with its
|
|
3
|
+
// labels, location, type, and flags, the default, then the description from
|
|
4
|
+
// the slot, which may hold any MDX, nested fields in an `<Expandable>`
|
|
5
|
+
// included. Styled like the OpenAPI reference's rows, so a hand-written API
|
|
6
|
+
// page reads like a generated one. Narration skips it, as it does type tables.
|
|
7
|
+
import { defaultLabel, isOn } from "./api-field.ts";
|
|
8
|
+
import type { FieldValue, FlagProp } from "./api-field.ts";
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
default?: FieldValue;
|
|
12
|
+
deprecated?: FlagProp;
|
|
13
|
+
location?: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
post?: string[];
|
|
16
|
+
pre?: string[];
|
|
17
|
+
required?: FlagProp;
|
|
18
|
+
type?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const {
|
|
22
|
+
default: value,
|
|
23
|
+
deprecated,
|
|
24
|
+
location,
|
|
25
|
+
name,
|
|
26
|
+
post = [],
|
|
27
|
+
pre = [],
|
|
28
|
+
required,
|
|
29
|
+
type,
|
|
30
|
+
} = Astro.props;
|
|
31
|
+
const shownDefault = defaultLabel(value);
|
|
32
|
+
const labelClass =
|
|
33
|
+
"rounded bg-muted px-1.5 py-0.5 font-medium text-[0.625rem] text-muted-foreground uppercase tracking-wide";
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
<div
|
|
37
|
+
class="border-border border-b py-4"
|
|
38
|
+
data-blume-field
|
|
39
|
+
data-blume-narration="skip"
|
|
40
|
+
>
|
|
41
|
+
<div class="not-prose flex flex-wrap items-baseline gap-x-2 gap-y-1">
|
|
42
|
+
{pre.map((label) => <span class={labelClass}>{label}</span>)}
|
|
43
|
+
{name && <code class="font-mono text-foreground text-sm">{name}</code>}
|
|
44
|
+
{post.map((label) => <span class={labelClass}>{label}</span>)}
|
|
45
|
+
{location && <span class={labelClass}>{location}</span>}
|
|
46
|
+
{type && <span class="text-muted-foreground text-xs">{type}</span>}
|
|
47
|
+
{
|
|
48
|
+
isOn(required) && (
|
|
49
|
+
<span class="font-medium text-[0.625rem] text-red-600 uppercase tracking-wide dark:text-red-400">
|
|
50
|
+
required
|
|
51
|
+
</span>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
{
|
|
55
|
+
isOn(deprecated) && (
|
|
56
|
+
<span class="font-medium text-[0.625rem] text-muted-foreground uppercase tracking-wide line-through">
|
|
57
|
+
deprecated
|
|
58
|
+
</span>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
</div>
|
|
62
|
+
{
|
|
63
|
+
shownDefault !== null && (
|
|
64
|
+
<div class="not-prose mt-2 text-muted-foreground text-xs">
|
|
65
|
+
Default:{" "}
|
|
66
|
+
<code class="rounded bg-muted px-1 py-0.5 text-foreground">
|
|
67
|
+
{shownDefault}
|
|
68
|
+
</code>
|
|
69
|
+
</div>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
{
|
|
73
|
+
Astro.slots.has("default") && (
|
|
74
|
+
<div class="mt-2 text-muted-foreground text-sm [&>:first-child]:mt-0 [&>:last-child]:mb-0">
|
|
75
|
+
<slot />
|
|
76
|
+
</div>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
</div>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
// A hand-written endpoint's Try it panel and request samples, at the head of
|
|
3
|
+
// its rail: the page's `<ParamField>`s become the parameters and body of an
|
|
4
|
+
// operation model like a spec'd operation's (see `api-page.ts`), so the
|
|
5
|
+
// playground and the samples are the OpenAPI reference's own. A page's own
|
|
6
|
+
// `<RequestExample>` stands in for the generated samples, and its
|
|
7
|
+
// `playground` frontmatter can drop the Try it panel (`simple`).
|
|
8
|
+
import data from "blume:data";
|
|
9
|
+
|
|
10
|
+
import { operationModel } from "../openapi/operation-model.ts";
|
|
11
|
+
import Playground from "../openapi/Playground.astro";
|
|
12
|
+
import { buildRequest, defaultValues } from "../openapi/request.ts";
|
|
13
|
+
import RequestPanel from "../openapi/RequestPanel.astro";
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_SAMPLE_LANGUAGES,
|
|
16
|
+
sampleLanguages,
|
|
17
|
+
} from "../openapi/snippets.ts";
|
|
18
|
+
import {
|
|
19
|
+
endpointBody,
|
|
20
|
+
endpointParameters,
|
|
21
|
+
endpointSecurity,
|
|
22
|
+
endpointTarget,
|
|
23
|
+
readEndpointSpec,
|
|
24
|
+
} from "./api-page.ts";
|
|
25
|
+
|
|
26
|
+
interface Props {
|
|
27
|
+
/** The endpoint, as the page's plugin wrote it. */
|
|
28
|
+
spec: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const spec = readEndpointSpec(Astro.props.spec);
|
|
32
|
+
const { api } = data.config;
|
|
33
|
+
const { path, servers } = endpointTarget(spec.target, api.server);
|
|
34
|
+
const model = operationModel({
|
|
35
|
+
method: spec.method,
|
|
36
|
+
parameters: endpointParameters(spec.fields),
|
|
37
|
+
path,
|
|
38
|
+
requestBody: endpointBody(spec.fields),
|
|
39
|
+
schemas: {},
|
|
40
|
+
security: endpointSecurity(spec.authMethod, api.auth),
|
|
41
|
+
servers,
|
|
42
|
+
});
|
|
43
|
+
const tryIt = spec.playground !== "simple" && api.playground.enabled;
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
{
|
|
47
|
+
tryIt && (
|
|
48
|
+
<Playground
|
|
49
|
+
model={model}
|
|
50
|
+
operation={`${spec.method} ${spec.target}`}
|
|
51
|
+
proxy={api.playground.proxy}
|
|
52
|
+
proxyConfig="api"
|
|
53
|
+
slug="api-pages"
|
|
54
|
+
/>
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
{
|
|
58
|
+
!spec.requestExample && (
|
|
59
|
+
<RequestPanel
|
|
60
|
+
languages={sampleLanguages(DEFAULT_SAMPLE_LANGUAGES)}
|
|
61
|
+
responses={{}}
|
|
62
|
+
sample={buildRequest(model, defaultValues(model))}
|
|
63
|
+
schemas={{}}
|
|
64
|
+
/>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
// The column `<RequestExample>` and `<ResponseExample>` pin to, which
|
|
3
|
+
// `markdown/api-rail.ts` gathers at the end of the page. At `xl` it sits
|
|
4
|
+
// beside the page's content, which the layout pads to make room, and sticks
|
|
5
|
+
// under the header like an OpenAPI operation's sample panel; below `xl` it
|
|
6
|
+
// follows the content.
|
|
7
|
+
import OperationPanel from "../openapi/OperationPanel.astro";
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<div
|
|
11
|
+
class="not-prose mt-10 xl:absolute xl:inset-y-0 xl:end-0 xl:mt-0 xl:w-[28rem]"
|
|
12
|
+
data-blume-api-rail
|
|
13
|
+
>
|
|
14
|
+
<OperationPanel>
|
|
15
|
+
<div class="flex flex-col gap-4 [&>*]:my-0">
|
|
16
|
+
<slot />
|
|
17
|
+
</div>
|
|
18
|
+
</OperationPanel>
|
|
19
|
+
</div>
|
|
@@ -73,6 +73,7 @@ const { content: strings } = contentStrings(data, Astro.currentLocale);
|
|
|
73
73
|
owner && repo && (
|
|
74
74
|
<a
|
|
75
75
|
class="not-prose my-6 flex flex-col gap-2 rounded-blume border border-border p-4 no-underline! transition-colors hover:border-foreground/30 hover:bg-muted/40"
|
|
76
|
+
data-blume-narration="skip"
|
|
76
77
|
href={`${host}/${owner}/${repo}`}
|
|
77
78
|
{...NEW_TAB_ATTRS}
|
|
78
79
|
>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
// `<ParamField query="limit" type="integer" required>`: a request parameter,
|
|
3
|
+
// named by the attribute that says where it goes (`path`, `query`, `header`,
|
|
4
|
+
// or `body`), with its description in the slot. On a page with `api`
|
|
5
|
+
// frontmatter the fields also build that page's playground.
|
|
6
|
+
import ApiField from "./ApiField.astro";
|
|
7
|
+
import { paramField } from "./api-field.ts";
|
|
8
|
+
import type { ParamFieldProps } from "./api-field.ts";
|
|
9
|
+
|
|
10
|
+
type Props = ParamFieldProps;
|
|
11
|
+
|
|
12
|
+
const { location, name } = paramField(Astro.props);
|
|
13
|
+
const { default: value, deprecated, required, type } = Astro.props;
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<ApiField
|
|
17
|
+
default={value}
|
|
18
|
+
deprecated={deprecated}
|
|
19
|
+
location={location}
|
|
20
|
+
name={name}
|
|
21
|
+
required={required}
|
|
22
|
+
type={type}
|
|
23
|
+
>
|
|
24
|
+
<slot />
|
|
25
|
+
</ApiField>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
// `<RequestExample>`: code blocks showing a request, one tab per titled
|
|
3
|
+
// fence (or a language menu with `dropdown`). On a wide screen it pins to the
|
|
4
|
+
// column beside the page (see `ApiRail.astro`), above any `<ResponseExample>`.
|
|
5
|
+
import CodeGroup from "./CodeGroup.astro";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
/** A language menu in place of tabs. */
|
|
9
|
+
dropdown?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { dropdown = false } = Astro.props;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<CodeGroup dropdown={dropdown}>
|
|
16
|
+
<slot />
|
|
17
|
+
</CodeGroup>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
// `<ResponseExample>`: code blocks showing a response, one tab per titled
|
|
3
|
+
// fence (or a language menu with `dropdown`). On a wide screen it pins to the
|
|
4
|
+
// column beside the page (see `ApiRail.astro`), below any `<RequestExample>`.
|
|
5
|
+
import CodeGroup from "./CodeGroup.astro";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
/** A language menu in place of tabs. */
|
|
9
|
+
dropdown?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { dropdown = false } = Astro.props;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<CodeGroup dropdown={dropdown}>
|
|
16
|
+
<slot />
|
|
17
|
+
</CodeGroup>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
// `<ResponseField name="id" type="string" required>`: a field of the
|
|
3
|
+
// response, with optional `pre` and `post` labels around its name and its
|
|
4
|
+
// description in the slot.
|
|
5
|
+
import ApiField from "./ApiField.astro";
|
|
6
|
+
import { fieldLabels } from "./api-field.ts";
|
|
7
|
+
import type { ResponseFieldProps } from "./api-field.ts";
|
|
8
|
+
|
|
9
|
+
type Props = ResponseFieldProps;
|
|
10
|
+
|
|
11
|
+
const {
|
|
12
|
+
default: value,
|
|
13
|
+
deprecated,
|
|
14
|
+
name,
|
|
15
|
+
post,
|
|
16
|
+
pre,
|
|
17
|
+
required,
|
|
18
|
+
type,
|
|
19
|
+
} = Astro.props;
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<ApiField
|
|
23
|
+
default={value}
|
|
24
|
+
deprecated={deprecated}
|
|
25
|
+
name={name}
|
|
26
|
+
post={fieldLabels(post)}
|
|
27
|
+
pre={fieldLabels(pre)}
|
|
28
|
+
required={required}
|
|
29
|
+
type={type}
|
|
30
|
+
>
|
|
31
|
+
<slot />
|
|
32
|
+
</ApiField>
|
|
@@ -17,6 +17,7 @@ const previewPattern =
|
|
|
17
17
|
>
|
|
18
18
|
<div
|
|
19
19
|
class="flex aspect-[16/9] min-h-32 items-center justify-center bg-muted/40 p-4 text-muted-foreground [&_img]:max-h-full [&_img]:max-w-full [&_svg]:max-h-full [&_svg]:max-w-full"
|
|
20
|
+
data-blume-narration="skip"
|
|
20
21
|
data-blume-tile-preview
|
|
21
22
|
style={previewPattern}
|
|
22
23
|
>
|
|
@@ -39,6 +39,7 @@ const tooltipId = tooltipIdFor(Astro.locals, [
|
|
|
39
39
|
/>
|
|
40
40
|
<span
|
|
41
41
|
class="absolute bottom-full left-1/2 z-20 mb-2 w-max max-w-[min(20rem,calc(100vw-1rem))] -translate-x-1/2 rounded-blume border border-border bg-background p-3 text-start font-sans text-foreground text-sm shadow-lg"
|
|
42
|
+
data-blume-narration="skip"
|
|
42
43
|
data-blume-tooltip-panel
|
|
43
44
|
id={tooltipId}
|
|
44
45
|
role="tooltip"
|
|
@@ -37,7 +37,10 @@ const columns = "grid grid-cols-[1fr_2fr_auto] items-center gap-4";
|
|
|
37
37
|
|
|
38
38
|
{
|
|
39
39
|
entries.length > 0 && (
|
|
40
|
-
<div
|
|
40
|
+
<div
|
|
41
|
+
class="not-prose my-6 rounded-blume border border-border bg-muted/30 p-1.5"
|
|
42
|
+
data-blume-narration="skip"
|
|
43
|
+
>
|
|
41
44
|
<div class={`${columns} px-3 py-2 font-medium text-muted-foreground text-xs`}>
|
|
42
45
|
<span>{strings.prop}</span>
|
|
43
46
|
<span>{strings.type}</span>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* One view of a page written for several (`<View title="Python">`), as
|
|
4
|
+
* Mintlify writes them. Each distinct title is an option of the page's view
|
|
5
|
+
* picker, and blocks sharing a title show and hide together, so a page can
|
|
6
|
+
* alternate between prose everyone reads and view-specific sections. The
|
|
7
|
+
* picker and the hiding live in `ViewSwitcher.astro`; `icon` shows beside
|
|
8
|
+
* the view's name there.
|
|
9
|
+
*/
|
|
10
|
+
interface Props {
|
|
11
|
+
class?: string;
|
|
12
|
+
icon?: string;
|
|
13
|
+
title: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { class: className, title } = Astro.props;
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<div class={className} data-blume-view={title}>
|
|
20
|
+
<slot />
|
|
21
|
+
</div>
|