blume 1.7.3 → 2.0.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 +19 -0
- package/CHANGELOG.md +245 -0
- package/README.md +34 -21
- package/dist/cli/{chunk-vacwm2hv.js → chunk-27g6wdth.js} +2 -2
- package/dist/cli/{chunk-ps4m1xh4.js → chunk-2hn4b8z7.js} +513 -550
- package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
- package/dist/cli/chunk-5shv93fd.js +39 -0
- package/dist/cli/chunk-5shv93fd.js.map +10 -0
- package/dist/cli/chunk-6crbhc3x.js +361 -0
- package/dist/cli/chunk-6crbhc3x.js.map +14 -0
- package/dist/cli/{chunk-8cjtbafj.js → chunk-6hsn950k.js} +109 -383
- package/dist/cli/chunk-6hsn950k.js.map +10 -0
- package/dist/cli/chunk-6vm74dry.js +148 -0
- package/dist/cli/chunk-6vm74dry.js.map +10 -0
- package/dist/cli/{chunk-yg63d42r.js → chunk-79jhk4py.js} +87 -58
- package/dist/cli/chunk-79jhk4py.js.map +35 -0
- package/dist/cli/chunk-82bbrxdn.js +51 -0
- package/dist/cli/chunk-82bbrxdn.js.map +10 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-ah61y8py.js +75 -0
- package/dist/cli/chunk-ah61y8py.js.map +11 -0
- package/dist/cli/{chunk-dwgcp5sm.js → chunk-ce574jw2.js} +1 -1
- package/dist/cli/chunk-ch6g3ar0.js +102 -0
- package/dist/cli/chunk-ch6g3ar0.js.map +10 -0
- package/dist/cli/chunk-dh8cwk36.js +279 -0
- package/dist/cli/chunk-dh8cwk36.js.map +10 -0
- package/dist/cli/{chunk-rqy0s5wh.js → chunk-epjnccmv.js} +17 -16
- package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-epjnccmv.js.map} +3 -3
- package/dist/cli/chunk-f2z5v128.js +97 -0
- package/dist/cli/chunk-f2z5v128.js.map +10 -0
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-1jefwnfs.js → chunk-fs23ddbb.js} +1076 -2592
- package/dist/cli/chunk-fs23ddbb.js.map +35 -0
- package/dist/cli/{chunk-e7f42gdj.js → chunk-fxypxtvm.js} +2 -2
- package/dist/cli/{chunk-bvwwhd84.js → chunk-fz5wtpmh.js} +15 -15
- package/dist/cli/{chunk-bvwwhd84.js.map → chunk-fz5wtpmh.js.map} +1 -1
- package/dist/cli/chunk-hdpx1tax.js +91 -0
- package/dist/cli/chunk-hdpx1tax.js.map +10 -0
- package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ahnw3kxw.js → chunk-jwyddg7y.js} +27 -22
- package/dist/cli/chunk-jwyddg7y.js.map +15 -0
- package/dist/cli/{chunk-cjtn640a.js → chunk-kdp5q7ke.js} +43 -20
- package/dist/cli/chunk-kdp5q7ke.js.map +10 -0
- package/dist/cli/{chunk-5g0w1e2c.js → chunk-kpf8rrjc.js} +28 -16
- package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-kpf8rrjc.js.map} +4 -4
- package/dist/cli/chunk-m3vmjgmq.js +133 -0
- package/dist/cli/chunk-m3vmjgmq.js.map +10 -0
- package/dist/cli/{chunk-b27xqwn9.js → chunk-mb2919y2.js} +9 -5
- package/dist/cli/chunk-mb2919y2.js.map +10 -0
- package/dist/cli/{chunk-5qk08vmp.js → chunk-q5163e60.js} +133 -54
- package/dist/cli/chunk-q5163e60.js.map +11 -0
- package/dist/cli/chunk-qkqwkpte.js +12437 -0
- package/dist/cli/chunk-qkqwkpte.js.map +182 -0
- package/dist/cli/{chunk-4x36ddpw.js → chunk-qs4q5p4e.js} +81 -87
- package/dist/cli/chunk-qs4q5p4e.js.map +10 -0
- package/dist/cli/{chunk-0xjyb285.js → chunk-qwsrynx5.js} +15 -5
- package/dist/cli/{chunk-0xjyb285.js.map → chunk-qwsrynx5.js.map} +4 -4
- package/dist/cli/chunk-s1p84fyh.js +261 -0
- package/dist/cli/chunk-s1p84fyh.js.map +10 -0
- package/dist/cli/chunk-s6jhgk0q.js +176 -0
- package/dist/cli/chunk-s6jhgk0q.js.map +11 -0
- package/dist/cli/chunk-vtk4a6dg.js +374 -0
- package/dist/cli/chunk-vtk4a6dg.js.map +10 -0
- package/dist/cli/{chunk-k79xp7av.js → chunk-wgm7m9qk.js} +230 -700
- package/dist/cli/chunk-wgm7m9qk.js.map +36 -0
- package/dist/cli/chunk-wm7js3j9.js +145 -0
- package/dist/cli/chunk-wm7js3j9.js.map +11 -0
- package/dist/cli/chunk-yt5n7ppj.js +79 -0
- package/dist/cli/chunk-yt5n7ppj.js.map +10 -0
- package/dist/cli/{chunk-3r45185y.js → chunk-yw7dm696.js} +9 -11
- package/dist/cli/{chunk-3r45185y.js.map → chunk-yw7dm696.js.map} +3 -3
- package/dist/cli/{chunk-nn13znc2.js → chunk-zxcczpyx.js} +1 -1
- package/dist/cli/chunk-zxh4d9vy.js +122 -0
- package/dist/cli/chunk-zxh4d9vy.js.map +11 -0
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask-context.d.ts +7 -7
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +197 -526
- package/dist/types/core/config.d.ts +61 -35
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +30 -15
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +12 -10
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2284 -454
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +15 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/orama-index.d.ts +1 -1
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +52 -28
- package/docs/03-upgrading.mdx +364 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +5 -5
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +22 -10
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +12 -11
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +9 -9
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/assistant.mdx +357 -0
- package/docs/configuration/customization.mdx +16 -10
- package/docs/configuration/index.mdx +50 -31
- package/docs/configuration/meta.ts +1 -1
- package/docs/configuration/search.mdx +76 -55
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +35 -1
- package/docs/content/i18n.mdx +9 -7
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +11 -6
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +9 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +16 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +12 -12
- package/docs/discoverability/index.mdx +4 -4
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +4 -4
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +23 -10
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +25 -26
- package/src/ai/ai-catalog.ts +50 -32
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api/paths.ts +1 -1
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-context.ts +7 -7
- package/src/ai/ask-data.ts +3 -3
- package/src/ai/ask.ts +637 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/cors.ts +3 -3
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +7 -6
- package/src/ai/llms.ts +20 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/openapi-components.ts +5 -2
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +3 -3
- package/src/ai/skills.ts +1 -1
- package/src/ai/visibility.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +129 -361
- package/src/astro/integration.ts +2 -6
- package/src/astro/module-types.ts +1 -1
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +575 -562
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/blume-modules.d.ts +2 -2
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +40 -21
- package/src/cli/commands/build.ts +71 -316
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +92 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +5 -5
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +5 -5
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +39 -12
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/copy-feedback.ts +1 -1
- package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
- package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
- package/src/components/islands/hooks.ts +36 -11
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +93 -30
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +58 -11
- package/src/components/layout/Pagination.astro +7 -7
- package/src/components/layout/ReferenceLayout.astro +22 -13
- package/src/components/layout/RootLayout.astro +75 -72
- package/src/components/layout/Search.astro +43 -19
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +73 -16
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/description.ts +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/code-fences.ts +1 -1
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +201 -566
- package/src/core/config.ts +131 -42
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +34 -15
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +41 -11
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +115 -16
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +528 -745
- package/src/core/server-features.ts +10 -11
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +15 -1
- package/src/core/ui-packs/ar.ts +10 -7
- package/src/core/ui-packs/bg.ts +10 -7
- package/src/core/ui-packs/bn.ts +10 -7
- package/src/core/ui-packs/ca.ts +7 -6
- package/src/core/ui-packs/cs.ts +10 -7
- package/src/core/ui-packs/da.ts +10 -7
- package/src/core/ui-packs/de.ts +10 -7
- package/src/core/ui-packs/el.ts +7 -6
- package/src/core/ui-packs/es.ts +7 -6
- package/src/core/ui-packs/fa.ts +10 -7
- package/src/core/ui-packs/fi.ts +10 -7
- package/src/core/ui-packs/fr.ts +7 -6
- package/src/core/ui-packs/he.ts +10 -7
- package/src/core/ui-packs/hi.ts +10 -7
- package/src/core/ui-packs/hr.ts +10 -7
- package/src/core/ui-packs/hu.ts +10 -7
- package/src/core/ui-packs/id.ts +10 -7
- package/src/core/ui-packs/it.ts +7 -6
- package/src/core/ui-packs/ja.ts +7 -6
- package/src/core/ui-packs/ko.ts +7 -6
- package/src/core/ui-packs/nl.ts +10 -7
- package/src/core/ui-packs/no.ts +10 -7
- package/src/core/ui-packs/pl.ts +10 -7
- package/src/core/ui-packs/pt-br.ts +7 -6
- package/src/core/ui-packs/pt.ts +7 -6
- package/src/core/ui-packs/ro.ts +10 -7
- package/src/core/ui-packs/ru.ts +10 -7
- package/src/core/ui-packs/sk.ts +10 -7
- package/src/core/ui-packs/sr.ts +10 -7
- package/src/core/ui-packs/sv.ts +10 -7
- package/src/core/ui-packs/th.ts +7 -6
- package/src/core/ui-packs/tr.ts +10 -7
- package/src/core/ui-packs/uk.ts +10 -7
- package/src/core/ui-packs/vi.ts +7 -6
- package/src/core/ui-packs/zh-tw.ts +7 -6
- package/src/core/ui-packs/zh.ts +7 -6
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +55 -27
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +124 -23
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +2 -2
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +109 -53
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +8 -4
- package/src/search/documents.ts +8 -2
- package/src/search/orama-index.ts +1 -1
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +24 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-0qymqwzz.js +0 -164
- package/dist/cli/chunk-0qymqwzz.js.map +0 -15
- package/dist/cli/chunk-1jefwnfs.js.map +0 -48
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-4x36ddpw.js.map +0 -11
- package/dist/cli/chunk-5093q3n7.js +0 -68
- package/dist/cli/chunk-5093q3n7.js.map +0 -10
- package/dist/cli/chunk-5qk08vmp.js.map +0 -11
- package/dist/cli/chunk-7s8hm3b6.js +0 -5347
- package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
- package/dist/cli/chunk-8cjtbafj.js.map +0 -13
- package/dist/cli/chunk-97r59kpr.js +0 -381
- package/dist/cli/chunk-97r59kpr.js.map +0 -12
- package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
- package/dist/cli/chunk-b27xqwn9.js.map +0 -10
- package/dist/cli/chunk-bf6bt1xt.js +0 -185
- package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
- package/dist/cli/chunk-cjtn640a.js.map +0 -10
- package/dist/cli/chunk-ct47dqpx.js.map +0 -11
- package/dist/cli/chunk-esphfr8p.js +0 -107
- package/dist/cli/chunk-esphfr8p.js.map +0 -11
- package/dist/cli/chunk-ex56aa81.js +0 -1016
- package/dist/cli/chunk-ex56aa81.js.map +0 -13
- package/dist/cli/chunk-garjf5z9.js +0 -30
- package/dist/cli/chunk-garjf5z9.js.map +0 -10
- package/dist/cli/chunk-js7saxwm.js +0 -1045
- package/dist/cli/chunk-js7saxwm.js.map +0 -22
- package/dist/cli/chunk-k79xp7av.js.map +0 -39
- package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-rz9jmfhz.js +0 -108
- package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-yg63d42r.js.map +0 -34
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/configuration/ask-ai.mdx +0 -256
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-27g6wdth.js.map} +0 -0
- /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-ce574jw2.js.map} +0 -0
- /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-fxypxtvm.js.map} +0 -0
- /package/dist/cli/{chunk-nn13znc2.js.map → chunk-zxcczpyx.js.map} +0 -0
|
@@ -26,19 +26,19 @@ const s = { ...EN_UI.page, ...strings };
|
|
|
26
26
|
(prev || next) && (
|
|
27
27
|
<nav
|
|
28
28
|
aria-label={s.pagination}
|
|
29
|
-
class="mx-auto mt-12 flex max-w-content justify-between gap-4 border-border border-t pt-6
|
|
29
|
+
class="mx-auto mt-12 flex max-w-content justify-between gap-4 border-border border-t pt-6"
|
|
30
30
|
>
|
|
31
31
|
{prev ? (
|
|
32
32
|
<a
|
|
33
|
-
class="flex max-w-[48%] flex-1 items-center gap-2 rounded-blume border border-border px-4 py-3 text-foreground transition-colors hover:border-foreground
|
|
33
|
+
class="flex max-w-[48%] flex-1 items-center gap-2 rounded-blume border border-border px-4 py-3 text-foreground transition-colors hover:border-foreground"
|
|
34
34
|
href={withBase(prev.route)}
|
|
35
35
|
>
|
|
36
36
|
<Icon class="rtl:-scale-x-100" name="arrow-left" size={16} />
|
|
37
37
|
<span class="min-w-0">
|
|
38
|
-
<span class="block text-muted-foreground text-xs
|
|
38
|
+
<span class="block text-muted-foreground text-xs">
|
|
39
39
|
{s.previous}
|
|
40
40
|
</span>
|
|
41
|
-
<span class="block
|
|
41
|
+
<span class="block font-medium max-md:line-clamp-2 max-md:wrap-break-word md:truncate">{prev.label}</span>
|
|
42
42
|
</span>
|
|
43
43
|
</a>
|
|
44
44
|
) : (
|
|
@@ -46,14 +46,14 @@ const s = { ...EN_UI.page, ...strings };
|
|
|
46
46
|
)}
|
|
47
47
|
{next && (
|
|
48
48
|
<a
|
|
49
|
-
class="ms-auto flex max-w-[48%] flex-1 items-center justify-end gap-2 rounded-blume border border-border px-4 py-3 text-end text-foreground transition-colors hover:border-foreground
|
|
49
|
+
class="ms-auto flex max-w-[48%] flex-1 items-center justify-end gap-2 rounded-blume border border-border px-4 py-3 text-end text-foreground transition-colors hover:border-foreground"
|
|
50
50
|
href={withBase(next.route)}
|
|
51
51
|
>
|
|
52
52
|
<span class="min-w-0">
|
|
53
|
-
<span class="block text-muted-foreground text-xs
|
|
53
|
+
<span class="block text-muted-foreground text-xs">
|
|
54
54
|
{s.next}
|
|
55
55
|
</span>
|
|
56
|
-
<span class="block
|
|
56
|
+
<span class="block font-medium max-md:line-clamp-2 max-md:wrap-break-word md:truncate">{next.label}</span>
|
|
57
57
|
</span>
|
|
58
58
|
<Icon class="rtl:-scale-x-100" name="arrow-right" size={16} />
|
|
59
59
|
</a>
|
|
@@ -3,14 +3,20 @@ import IconSprite from "./IconSprite.astro";
|
|
|
3
3
|
import { createIconSprite } from "../icon-sprite.ts";
|
|
4
4
|
import "blume:theme";
|
|
5
5
|
import data from "blume:data";
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
BlumeDataConfig,
|
|
8
|
+
BlumeFavicon,
|
|
9
|
+
DiscoveryHeadLinks,
|
|
10
|
+
} from "../../core/data.ts";
|
|
7
11
|
import { EN_UI } from "../../core/i18n-ui.ts";
|
|
8
12
|
import type { UIStrings } from "../../core/i18n-ui.ts";
|
|
13
|
+
import { NEW_TAB_HINT_ID } from "../../core/new-tab.ts";
|
|
9
14
|
import type { FontHead } from "../../theme/fonts.ts";
|
|
10
15
|
import type { Navigation } from "../../core/types.ts";
|
|
11
16
|
import Analytics from "./Analytics.astro";
|
|
12
17
|
import WebMcp from "./WebMcp.astro";
|
|
13
18
|
import Banner from "./Banner.astro";
|
|
19
|
+
import DiscoveryLinks from "./DiscoveryLinks.astro";
|
|
14
20
|
import Favicon from "./Favicon.astro";
|
|
15
21
|
import Fonts from "./Fonts.astro";
|
|
16
22
|
import {
|
|
@@ -50,17 +56,7 @@ interface Props {
|
|
|
50
56
|
dismissible: boolean;
|
|
51
57
|
key: string;
|
|
52
58
|
} | null;
|
|
53
|
-
analytics?:
|
|
54
|
-
cloudflare?: { token: string };
|
|
55
|
-
posthog?: { host?: string; key: string };
|
|
56
|
-
scripts?: {
|
|
57
|
-
attributes?: Record<string, string>;
|
|
58
|
-
content?: string;
|
|
59
|
-
src?: string;
|
|
60
|
-
strategy?: "async" | "defer";
|
|
61
|
-
}[];
|
|
62
|
-
vercel?: boolean;
|
|
63
|
-
} | null;
|
|
59
|
+
analytics?: BlumeDataConfig["analytics"] | null;
|
|
64
60
|
navigation: Navigation;
|
|
65
61
|
route: string;
|
|
66
62
|
themeMode: "system" | "light" | "dark";
|
|
@@ -69,6 +65,13 @@ interface Props {
|
|
|
69
65
|
pageTitle: string;
|
|
70
66
|
/** Keep the reference route out of crawler indexes. */
|
|
71
67
|
noindex?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Which agent-discovery resources exist, advertised in the head by the same
|
|
70
|
+
* `DiscoveryLinks` partial the docs shells render; defaults to the
|
|
71
|
+
* `blume:data` snapshot, `null` drops the links. A reference route has no
|
|
72
|
+
* raw-Markdown mirror, so no `alternate` is emitted here.
|
|
73
|
+
*/
|
|
74
|
+
discovery?: DiscoveryHeadLinks | null;
|
|
72
75
|
/**
|
|
73
76
|
* Active locale code for `<html lang>`. Defaults to the locale Astro
|
|
74
77
|
* resolved from the URL (`Astro.currentLocale`), then the site default.
|
|
@@ -94,6 +97,7 @@ const {
|
|
|
94
97
|
searchEnabled,
|
|
95
98
|
pageTitle,
|
|
96
99
|
noindex = false,
|
|
100
|
+
discovery = data.config.discovery,
|
|
97
101
|
locale: localeProp,
|
|
98
102
|
dir: dirProp,
|
|
99
103
|
ui,
|
|
@@ -106,6 +110,7 @@ const locale = pageLocale(data.config.i18n, localeProp, Astro.currentLocale);
|
|
|
106
110
|
const dir = dirProp ?? pageDirection(data.config.i18n, locale);
|
|
107
111
|
|
|
108
112
|
const strings = ui ?? EN_UI;
|
|
113
|
+
const navStrings = { ...EN_UI.nav, ...strings.nav };
|
|
109
114
|
// Scope search to the reference page's language on a multi-locale site.
|
|
110
115
|
const searchLocale = searchLocaleFor(data.config.i18n, locale);
|
|
111
116
|
|
|
@@ -125,6 +130,7 @@ createIconSprite(Astro.locals);
|
|
|
125
130
|
<title>{pageTitle}</title>
|
|
126
131
|
<Favicon favicon={favicon} appleIcon={appleIcon} />
|
|
127
132
|
<Fonts cssVars={fontCssVars ?? []} />
|
|
133
|
+
<DiscoveryLinks discovery={discovery} />
|
|
128
134
|
{
|
|
129
135
|
bannerKey && (
|
|
130
136
|
<script data-key={bannerKey} is:inline set:html={BANNER_INIT_SCRIPT} />
|
|
@@ -138,11 +144,14 @@ createIconSprite(Astro.locals);
|
|
|
138
144
|
class="absolute start-[-999px] top-0 z-[100] bg-accent px-4 py-2 text-accent-foreground focus:start-0"
|
|
139
145
|
href="#blume-content">{strings.page.skipToContent}</a
|
|
140
146
|
>
|
|
147
|
+
{/* Every new-tab link's aria-describedby target (see core/new-tab.ts). */}
|
|
148
|
+
<span hidden id={NEW_TAB_HINT_ID}>{navStrings.opensInNewTab}</span>
|
|
141
149
|
<Banner banner={banner} strings={strings.banner} />
|
|
142
150
|
<Header
|
|
143
|
-
|
|
151
|
+
assistantStrings={strings.assistant}
|
|
144
152
|
hasDrawer={false}
|
|
145
153
|
hasSidebar={false}
|
|
154
|
+
locale={locale}
|
|
146
155
|
logo={logo}
|
|
147
156
|
navigation={navigation}
|
|
148
157
|
route={route}
|
|
@@ -7,7 +7,12 @@ import type { UIStrings } from "../../core/i18n-ui.ts";
|
|
|
7
7
|
import { resolveDateFormatOptions } from "../../core/date-format.ts";
|
|
8
8
|
import type { ResolvedDateFormat } from "../../core/schema.ts";
|
|
9
9
|
import type { OpenInChatProvider } from "../../core/open-in-chat.ts";
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
BlumeClientData,
|
|
12
|
+
BlumeDataConfig,
|
|
13
|
+
BlumeFavicon,
|
|
14
|
+
DiscoveryHeadLinks,
|
|
15
|
+
} from "../../core/data.ts";
|
|
11
16
|
import type {
|
|
12
17
|
Heading,
|
|
13
18
|
LocaleSwitchOption,
|
|
@@ -36,11 +41,13 @@ import { buildStructuredData, toIso } from "../../seo/jsonld.ts";
|
|
|
36
41
|
import { normalizeXHandle } from "../../seo/x-handle.ts";
|
|
37
42
|
import { withBase } from "../islands/base-path.ts";
|
|
38
43
|
import { isExternalUrl } from "../../core/base-path.ts";
|
|
44
|
+
import { NEW_TAB_HINT_ID, newTabAttrs } from "../../core/new-tab.ts";
|
|
39
45
|
import Analytics from "./Analytics.astro";
|
|
40
46
|
import WebMcp from "./WebMcp.astro";
|
|
41
47
|
import Banner from "./Banner.astro";
|
|
42
48
|
import Breadcrumbs from "./Breadcrumbs.astro";
|
|
43
49
|
import Empty from "./Empty.astro";
|
|
50
|
+
import DiscoveryLinks from "./DiscoveryLinks.astro";
|
|
44
51
|
import Favicon from "./Favicon.astro";
|
|
45
52
|
import Fonts from "./Fonts.astro";
|
|
46
53
|
import {
|
|
@@ -87,17 +94,7 @@ interface Props {
|
|
|
87
94
|
dismissible: boolean;
|
|
88
95
|
key: string;
|
|
89
96
|
} | null;
|
|
90
|
-
analytics?:
|
|
91
|
-
cloudflare?: { token: string };
|
|
92
|
-
posthog?: { host?: string; key: string };
|
|
93
|
-
scripts?: {
|
|
94
|
-
attributes?: Record<string, string>;
|
|
95
|
-
content?: string;
|
|
96
|
-
src?: string;
|
|
97
|
-
strategy?: "async" | "defer";
|
|
98
|
-
}[];
|
|
99
|
-
vercel?: boolean;
|
|
100
|
-
} | null;
|
|
97
|
+
analytics?: BlumeDataConfig["analytics"] | null;
|
|
101
98
|
navigation: Navigation;
|
|
102
99
|
mcp?: { name: string; route: string } | null;
|
|
103
100
|
page: { title: string; description?: string; route: string };
|
|
@@ -125,10 +122,10 @@ interface Props {
|
|
|
125
122
|
canonical?: string | null;
|
|
126
123
|
editUrl?: string | null;
|
|
127
124
|
/**
|
|
128
|
-
* Opt this page out of the header's
|
|
129
|
-
*
|
|
125
|
+
* Opt this page out of the header's assistant trigger. Defaults to whether the
|
|
126
|
+
* assistant is configured, so pages never wire the trigger up themselves.
|
|
130
127
|
*/
|
|
131
|
-
|
|
128
|
+
assistantEnabled?: boolean;
|
|
132
129
|
/** Show the "Was this page helpful?" rating below the content. */
|
|
133
130
|
feedback?: boolean;
|
|
134
131
|
exportPdf?: boolean;
|
|
@@ -144,13 +141,11 @@ interface Props {
|
|
|
144
141
|
* links on every page — so an agent entering on a deep page (a search
|
|
145
142
|
* result, a shared link) finds the machine-readable surface without probing
|
|
146
143
|
* the site root. The HTML counterpart of the homepage-only HTTP `Link`
|
|
147
|
-
* header (see `ai/link-headers.ts`).
|
|
144
|
+
* header (see `ai/link-headers.ts`). Defaults to the `blume:data` snapshot,
|
|
145
|
+
* so a custom page on this layout gets the links without passing a prop;
|
|
146
|
+
* `null` drops them for one page.
|
|
148
147
|
*/
|
|
149
|
-
discovery?:
|
|
150
|
-
agentReadability: boolean;
|
|
151
|
-
aiCatalog: boolean;
|
|
152
|
-
llmsTxt: boolean;
|
|
153
|
-
} | null;
|
|
148
|
+
discovery?: DiscoveryHeadLinks | null;
|
|
154
149
|
siteUrl?: string | null;
|
|
155
150
|
pageType?: string;
|
|
156
151
|
published?: string | Date | null;
|
|
@@ -170,6 +165,13 @@ interface Props {
|
|
|
170
165
|
* article so prose punctuation reads correctly; the chrome still mirrors.
|
|
171
166
|
*/
|
|
172
167
|
contentDir?: "ltr" | "rtl";
|
|
168
|
+
/**
|
|
169
|
+
* Language of the page content itself — the fallback locale on a fallback
|
|
170
|
+
* page (English content at `/ar/…`). Set as the article's `lang` when it
|
|
171
|
+
* differs from the page locale, so assistive tech reads the text in its own
|
|
172
|
+
* language rather than the chrome's.
|
|
173
|
+
*/
|
|
174
|
+
contentLocale?: string;
|
|
173
175
|
/** Resolved UI dictionary; English baseline when omitted. */
|
|
174
176
|
ui?: UIStrings;
|
|
175
177
|
/** `hreflang` alternates (absolute URLs) for this page's translations. */
|
|
@@ -246,13 +248,13 @@ const {
|
|
|
246
248
|
x,
|
|
247
249
|
canonical,
|
|
248
250
|
editUrl,
|
|
249
|
-
|
|
251
|
+
assistantEnabled,
|
|
250
252
|
feedback = false,
|
|
251
253
|
exportPdf,
|
|
252
254
|
exportEpub,
|
|
253
255
|
openInChat,
|
|
254
256
|
feeds,
|
|
255
|
-
discovery,
|
|
257
|
+
discovery = data.config.discovery,
|
|
256
258
|
siteUrl,
|
|
257
259
|
pageType,
|
|
258
260
|
published,
|
|
@@ -262,6 +264,7 @@ const {
|
|
|
262
264
|
locale: localeProp,
|
|
263
265
|
dir: dirProp,
|
|
264
266
|
contentDir,
|
|
267
|
+
contentLocale,
|
|
265
268
|
ui,
|
|
266
269
|
localeAlternates,
|
|
267
270
|
xDefault,
|
|
@@ -349,7 +352,16 @@ if (isBare) {
|
|
|
349
352
|
} else if (isApiOperation) {
|
|
350
353
|
articleClass = "prose max-w-none";
|
|
351
354
|
}
|
|
352
|
-
|
|
355
|
+
// A page titled like the site (a home page often is) takes the bare site title
|
|
356
|
+
// rather than repeating it ("Acme Docs - Acme Docs").
|
|
357
|
+
const pageTitle =
|
|
358
|
+
page.title && page.title !== site.title
|
|
359
|
+
? `${page.title} - ${site.title}`
|
|
360
|
+
: site.title;
|
|
361
|
+
// The article's own language, when a fallback page renders another locale's
|
|
362
|
+
// content under this one.
|
|
363
|
+
const articleLang =
|
|
364
|
+
contentLocale && contentLocale !== locale ? contentLocale : undefined;
|
|
353
365
|
const description = page.description ?? site.description;
|
|
354
366
|
// Blog posts and changelog entries are dated writing, so they take `og:type:
|
|
355
367
|
// article` — the same split JSON-LD makes when it picks an article @type. Docs
|
|
@@ -534,48 +546,7 @@ createIconSprite(Astro.locals);
|
|
|
534
546
|
/>
|
|
535
547
|
))
|
|
536
548
|
}
|
|
537
|
-
|
|
538
|
-
on a deep page (a search result, a shared link) never sees the homepage
|
|
539
|
-
HTTP Link header, so the head carries the same describedby links plus
|
|
540
|
-
this page's own raw-Markdown mirror. Both rels are IANA-registered. */}
|
|
541
|
-
{
|
|
542
|
-
discovery?.agentReadability && (
|
|
543
|
-
<link
|
|
544
|
-
href={withBase("/agent-readability.json")}
|
|
545
|
-
rel="describedby"
|
|
546
|
-
type="application/json"
|
|
547
|
-
/>
|
|
548
|
-
)
|
|
549
|
-
}
|
|
550
|
-
{
|
|
551
|
-
discovery?.llmsTxt && (
|
|
552
|
-
<link href={withBase("/llms.txt")} rel="describedby" type="text/plain" />
|
|
553
|
-
)
|
|
554
|
-
}
|
|
555
|
-
{/* The AI Catalog / ARD manifest under both relations its two specs
|
|
556
|
-
define: `ai-catalog` (ai-catalog spec) and `ard` (ARD v0.91), each
|
|
557
|
-
pointing at that spec's own well-known path. */}
|
|
558
|
-
{
|
|
559
|
-
discovery?.aiCatalog && (
|
|
560
|
-
<>
|
|
561
|
-
<link
|
|
562
|
-
href={withBase("/.well-known/ai-catalog.json")}
|
|
563
|
-
rel="ai-catalog"
|
|
564
|
-
type="application/ai-catalog+json"
|
|
565
|
-
/>
|
|
566
|
-
<link
|
|
567
|
-
href={withBase("/.well-known/ard.json")}
|
|
568
|
-
rel="ard"
|
|
569
|
-
type="application/json"
|
|
570
|
-
/>
|
|
571
|
-
</>
|
|
572
|
-
)
|
|
573
|
-
}
|
|
574
|
-
{
|
|
575
|
-
markdownMirror && (
|
|
576
|
-
<link href={markdownMirror} rel="alternate" type="text/markdown" />
|
|
577
|
-
)
|
|
578
|
-
}
|
|
549
|
+
<DiscoveryLinks discovery={discovery} markdownMirror={markdownMirror} />
|
|
579
550
|
{
|
|
580
551
|
structuredDataJson && (
|
|
581
552
|
<script
|
|
@@ -606,12 +577,15 @@ createIconSprite(Astro.locals);
|
|
|
606
577
|
class="absolute start-[-999px] top-0 z-[100] bg-accent px-4 py-2 text-accent-foreground focus:start-0"
|
|
607
578
|
href="#blume-content">{strings.page.skipToContent}</a
|
|
608
579
|
>
|
|
580
|
+
{/* Every new-tab link's aria-describedby target (see core/new-tab.ts). */}
|
|
581
|
+
<span hidden id={NEW_TAB_HINT_ID}>{navStrings.opensInNewTab}</span>
|
|
609
582
|
<Banner banner={banner} strings={strings.banner} />
|
|
610
583
|
<VersionBanner notice={versionNotice ?? null} />
|
|
611
584
|
<HeaderSlot
|
|
612
|
-
|
|
613
|
-
|
|
585
|
+
assistantEnabled={assistantEnabled}
|
|
586
|
+
assistantStrings={strings.assistant}
|
|
614
587
|
layout={layout}
|
|
588
|
+
locale={locale}
|
|
615
589
|
localeSwitch={localeSwitch}
|
|
616
590
|
versionSelector={versionSelector}
|
|
617
591
|
logo={logo}
|
|
@@ -632,6 +606,7 @@ createIconSprite(Astro.locals);
|
|
|
632
606
|
<aside
|
|
633
607
|
aria-label={navStrings.primary}
|
|
634
608
|
data-blume-nav-drawer
|
|
609
|
+
id="blume-nav-drawer"
|
|
635
610
|
class:list={[
|
|
636
611
|
"fixed top-[var(--blume-drawer-top,4rem)] start-0 z-[35] h-[calc(100dvh-var(--blume-drawer-top,4rem))] w-64 max-w-[80vw] -translate-x-[105%] overflow-y-auto border-border border-e bg-background px-5 pt-4 pb-6 transition-transform rtl:translate-x-[105%] [:where([data-blume-nav-open])_&]:translate-x-0! lg:sticky lg:top-16 lg:z-auto lg:h-[calc(100dvh-4rem)] lg:w-auto lg:max-w-none lg:translate-x-0! lg:scrollbar-thin lg:scrollbar-thumb-border lg:scrollbar-track-transparent lg:border-e-0 lg:bg-transparent lg:px-4",
|
|
637
612
|
// A "bare" landing (the changelog index) has no sidebar column on
|
|
@@ -657,8 +632,7 @@ createIconSprite(Astro.locals);
|
|
|
657
632
|
<a
|
|
658
633
|
class="block rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground"
|
|
659
634
|
href={withBase(link.href)}
|
|
660
|
-
|
|
661
|
-
target={external ? "_blank" : undefined}
|
|
635
|
+
{...newTabAttrs(link.href)}
|
|
662
636
|
>
|
|
663
637
|
<span class="flex items-center gap-2">
|
|
664
638
|
{link.icon && (
|
|
@@ -768,7 +742,18 @@ createIconSprite(Astro.locals);
|
|
|
768
742
|
)
|
|
769
743
|
}
|
|
770
744
|
<PageHeaderSlot headings={tocHeadings} page={page} route={page.route} />
|
|
771
|
-
|
|
745
|
+
{/* `data-pagefind-body` scopes Pagefind to the page's own text: without
|
|
746
|
+
it Pagefind indexes the whole <body>, so the header, sidebar, and
|
|
747
|
+
skip link lead every excerpt and match every query. Once any page
|
|
748
|
+
carries it, pages without it (landing pages, the 404, the
|
|
749
|
+
changelog index — none are content routes, which is what site
|
|
750
|
+
search indexes) drop out of the index entirely. */}
|
|
751
|
+
<article
|
|
752
|
+
class:list={[articleClass]}
|
|
753
|
+
data-pagefind-body={indexable && !isBare ? "" : undefined}
|
|
754
|
+
dir={contentDir}
|
|
755
|
+
lang={articleLang}
|
|
756
|
+
>
|
|
772
757
|
<slot />
|
|
773
758
|
</article>
|
|
774
759
|
{
|
|
@@ -837,6 +822,7 @@ createIconSprite(Astro.locals);
|
|
|
837
822
|
type="button"
|
|
838
823
|
></button>
|
|
839
824
|
<script>
|
|
825
|
+
import type { Zoom } from "medium-zoom";
|
|
840
826
|
import { copyText, createCopyFlash } from "../copy-feedback.ts";
|
|
841
827
|
import { syncDrawerInert } from "./drawer-inert.ts";
|
|
842
828
|
import { chromeIcons as icons } from "../../theme/chrome-icons.ts";
|
|
@@ -938,6 +924,13 @@ createIconSprite(Astro.locals);
|
|
|
938
924
|
// client-router swap (which replaces the body with server-rendered
|
|
939
925
|
// markup that has none of this applied). Everything in here binds to
|
|
940
926
|
// elements the swap just created, so nothing double-attaches.
|
|
927
|
+
// One medium-zoom instance per real page load, re-pointed at each page's
|
|
928
|
+
// images: every instance adds document keyup/scroll and window resize
|
|
929
|
+
// listeners it never removes and holds on to the images it was given, so
|
|
930
|
+
// a fresh instance per client-router swap stacked listeners and kept
|
|
931
|
+
// every earlier page's images alive.
|
|
932
|
+
let zoom: Zoom | undefined;
|
|
933
|
+
|
|
941
934
|
const initPage = async () => {
|
|
942
935
|
// Localized copy-button labels, stamped on <body> by the layout markup
|
|
943
936
|
// (the Search.astro data-attribute channel) since this bundled script
|
|
@@ -1056,6 +1049,15 @@ createIconSprite(Astro.locals);
|
|
|
1056
1049
|
// via medium-zoom: ESC/scroll/click dismissal, natural-size capping,
|
|
1057
1050
|
// and the open/close transition races are its problem, not ours.
|
|
1058
1051
|
// Opt out per-image with `data-no-zoom`.
|
|
1052
|
+
// The previous page's images are gone after a swap; let go of them
|
|
1053
|
+
// before looking at this page. A swap that lands while an image is
|
|
1054
|
+
// zoomed (Back mid-zoom) leaves the instance mid-animation, its overlay
|
|
1055
|
+
// gone with the old body and its close never finishing, so start over
|
|
1056
|
+
// then instead.
|
|
1057
|
+
if (zoom?.getZoomedImage()) {
|
|
1058
|
+
zoom = undefined;
|
|
1059
|
+
}
|
|
1060
|
+
zoom?.detach();
|
|
1059
1061
|
if (document.body.hasAttribute("data-blume-image-zoom")) {
|
|
1060
1062
|
const zoomTargets = Array.from(
|
|
1061
1063
|
document.querySelectorAll<HTMLImageElement>(
|
|
@@ -1071,11 +1073,12 @@ createIconSprite(Astro.locals);
|
|
|
1071
1073
|
const { default: mediumZoom } = await import(
|
|
1072
1074
|
"medium-zoom/dist/pure"
|
|
1073
1075
|
);
|
|
1074
|
-
mediumZoom(
|
|
1076
|
+
zoom ??= mediumZoom({
|
|
1075
1077
|
background:
|
|
1076
1078
|
"color-mix(in oklab, var(--color-background) 80%, transparent)",
|
|
1077
1079
|
margin: 24,
|
|
1078
1080
|
});
|
|
1081
|
+
zoom.attach(...zoomTargets);
|
|
1079
1082
|
}
|
|
1080
1083
|
}
|
|
1081
1084
|
};
|
|
@@ -12,7 +12,7 @@ import { flattenPages } from "./nav-utils.ts";
|
|
|
12
12
|
// `SearchFn` it returns. Only the configured provider's SDK is bundled.
|
|
13
13
|
|
|
14
14
|
interface Props {
|
|
15
|
-
|
|
15
|
+
assistantEnabled?: boolean;
|
|
16
16
|
navigation?: Navigation;
|
|
17
17
|
/** Curated empty-state pages; falls back to the first sidebar pages when empty or omitted. */
|
|
18
18
|
popularPages?: { icon?: string; label: string; route: string }[];
|
|
@@ -27,7 +27,7 @@ interface Props {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const {
|
|
30
|
-
|
|
30
|
+
assistantEnabled = false,
|
|
31
31
|
navigation,
|
|
32
32
|
popularPages,
|
|
33
33
|
strings,
|
|
@@ -60,10 +60,10 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
60
60
|
|
|
61
61
|
<blume-search
|
|
62
62
|
class="contents"
|
|
63
|
-
data-ask={
|
|
63
|
+
data-ask={assistantEnabled ? "" : undefined}
|
|
64
64
|
data-i18n-all={s.all}
|
|
65
|
-
data-i18n-ask={s.
|
|
66
|
-
data-i18n-ask-hint={s.
|
|
65
|
+
data-i18n-ask={s.assistant}
|
|
66
|
+
data-i18n-ask-hint={s.assistantHint}
|
|
67
67
|
data-i18n-dev={s.devOnly}
|
|
68
68
|
data-i18n-empty={s.noResults}
|
|
69
69
|
data-i18n-error={s.error}
|
|
@@ -84,8 +84,11 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
84
84
|
>
|
|
85
85
|
<Icon name="search" size={16} />
|
|
86
86
|
<span class="flex-1 text-start max-lg:hidden">{s.button}</span>
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
{/* A key chord reads left to right in every locale ("⌘K", never "K⌘"). */}
|
|
88
|
+
<kbd
|
|
89
|
+
class="font-mono text-[0.7rem] max-lg:hidden"
|
|
90
|
+
data-blume-search-kbd
|
|
91
|
+
dir="ltr">⌘K</kbd
|
|
89
92
|
>
|
|
90
93
|
</button>
|
|
91
94
|
|
|
@@ -195,8 +198,10 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
195
198
|
{s.open}
|
|
196
199
|
</span>
|
|
197
200
|
<span class="flex items-center gap-1 max-md:hidden">
|
|
198
|
-
<kbd
|
|
199
|
-
|
|
201
|
+
<kbd
|
|
202
|
+
class={`${kbd} text-[0.65rem]`}
|
|
203
|
+
data-blume-search-preview-kbd
|
|
204
|
+
dir="ltr">⌘J</kbd
|
|
200
205
|
>
|
|
201
206
|
{s.preview}
|
|
202
207
|
</span>
|
|
@@ -271,6 +276,26 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
271
276
|
}
|
|
272
277
|
};
|
|
273
278
|
|
|
279
|
+
// The generated client and the index it fetches are the same on every
|
|
280
|
+
// page (locale and version filters apply per query), but each client-router
|
|
281
|
+
// swap rebuilds the header, and this element with it. Loading once in
|
|
282
|
+
// module scope — bundled modules survive swaps — keeps the first search
|
|
283
|
+
// after a navigation from refetching the index and rebuilding it. A failed
|
|
284
|
+
// load clears the cache, so the next open retries.
|
|
285
|
+
let searchClient: Promise<SearchFn> | undefined;
|
|
286
|
+
const loadSearchClient = (): Promise<SearchFn> => {
|
|
287
|
+
searchClient ??= (async () => {
|
|
288
|
+
try {
|
|
289
|
+
const { createSearch } = await import("blume:search-client");
|
|
290
|
+
return await createSearch();
|
|
291
|
+
} catch (error) {
|
|
292
|
+
searchClient = undefined;
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
})();
|
|
296
|
+
return searchClient;
|
|
297
|
+
};
|
|
298
|
+
|
|
274
299
|
class BlumeSearch extends HTMLElement {
|
|
275
300
|
dialog!: HTMLDialogElement;
|
|
276
301
|
input!: HTMLInputElement;
|
|
@@ -284,7 +309,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
284
309
|
loadFailed = false;
|
|
285
310
|
/** First-open client/index load still in flight. */
|
|
286
311
|
loading = false;
|
|
287
|
-
|
|
312
|
+
assistantEnabled = false;
|
|
288
313
|
popular: PopularPage[] = [];
|
|
289
314
|
selectables: Selectable[] = [];
|
|
290
315
|
selectedIndex = -1;
|
|
@@ -298,7 +323,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
298
323
|
devOnlyMsg = "Search is available in the production build.";
|
|
299
324
|
noResultsMsg = "No results found.";
|
|
300
325
|
errorMsg = "Something went wrong. Please try again.";
|
|
301
|
-
askMsg = "
|
|
326
|
+
askMsg = "Assistant";
|
|
302
327
|
askHintMsg = "Get an instant answer from AI";
|
|
303
328
|
allMsg = "All";
|
|
304
329
|
popularMsg = "Popular";
|
|
@@ -326,7 +351,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
326
351
|
!event.shiftKey &&
|
|
327
352
|
!event.altKey
|
|
328
353
|
) {
|
|
329
|
-
// ⌘K toggles, mirroring the
|
|
354
|
+
// ⌘K toggles, mirroring the assistant panel's ⌘I: pressing it with
|
|
330
355
|
// the dialog open must close it, not re-showModal an open dialog
|
|
331
356
|
// (an InvalidStateError on older engines).
|
|
332
357
|
event.preventDefault();
|
|
@@ -369,7 +394,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
369
394
|
this.results = this.querySelector("[data-blume-search-results]")!;
|
|
370
395
|
this.message = this.querySelector("[data-blume-search-message]")!;
|
|
371
396
|
this.preview = this.querySelector("[data-blume-search-preview]")!;
|
|
372
|
-
this.
|
|
397
|
+
this.assistantEnabled = this.hasAttribute("data-ask");
|
|
373
398
|
|
|
374
399
|
const popularScript = this.querySelector(
|
|
375
400
|
"[data-blume-search-popular]"
|
|
@@ -481,8 +506,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
481
506
|
if (!this.loaded) {
|
|
482
507
|
this.loading = true;
|
|
483
508
|
try {
|
|
484
|
-
|
|
485
|
-
this.searchFn = await createSearch();
|
|
509
|
+
this.searchFn = await loadSearchClient();
|
|
486
510
|
// Only latch on success — a transient failure (flaky network
|
|
487
511
|
// fetching the index) must retry on the next open, not disable
|
|
488
512
|
// search until a full page reload.
|
|
@@ -612,7 +636,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
612
636
|
|
|
613
637
|
this.renderFilters(result.sections);
|
|
614
638
|
|
|
615
|
-
if (this.
|
|
639
|
+
if (this.assistantEnabled) {
|
|
616
640
|
const group = this.addGroup(this.askMsg);
|
|
617
641
|
const ask = this.createAskRow(query);
|
|
618
642
|
group.appendChild(ask.el);
|
|
@@ -626,7 +650,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
626
650
|
group.appendChild(item.el);
|
|
627
651
|
this.selectables.push(item);
|
|
628
652
|
}
|
|
629
|
-
} else if (!this.
|
|
653
|
+
} else if (!this.assistantEnabled) {
|
|
630
654
|
this.setMessage(this.noResultsMsg);
|
|
631
655
|
}
|
|
632
656
|
|
|
@@ -634,7 +658,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
634
658
|
}
|
|
635
659
|
|
|
636
660
|
renderEmpty() {
|
|
637
|
-
if (this.
|
|
661
|
+
if (this.assistantEnabled) {
|
|
638
662
|
const group = this.addGroup(this.askMsg);
|
|
639
663
|
const ask = this.createAskRow("");
|
|
640
664
|
group.appendChild(ask.el);
|
|
@@ -850,7 +874,7 @@ const kbd = "rounded border border-border bg-muted px-1 py-0.5 font-mono";
|
|
|
850
874
|
const query = this.input.value.trim();
|
|
851
875
|
this.dialog.close();
|
|
852
876
|
window.dispatchEvent(
|
|
853
|
-
new CustomEvent("blume:open-
|
|
877
|
+
new CustomEvent("blume:open-assistant", { detail: { query } })
|
|
854
878
|
);
|
|
855
879
|
} else if (item.url) {
|
|
856
880
|
// Close first so the dialog isn't left open over the transition;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// WebMCP: expose the docs' read-only tools (search, page Markdown, the docs
|
|
3
3
|
// index) to agentic browsers via the page's model context. Rendered by
|
|
4
4
|
// PageLayout on every page; the marker element below both gates the script
|
|
5
|
-
// (absent when `
|
|
5
|
+
// (absent when `agents.webmcp` is off, so it returns immediately) and carries the
|
|
6
6
|
// two config flags the client needs — importing `blume:data` from the client
|
|
7
7
|
// script would drag the whole navigation snapshot into the bundle.
|
|
8
8
|
import data from "blume:data";
|