blume 2.1.1 → 2.1.3
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/CHANGELOG.md +23 -0
- package/dist/cli/{chunk-ncj7w596.js → chunk-0pmb4tr4.js} +22 -18
- package/dist/cli/{chunk-ncj7w596.js.map → chunk-0pmb4tr4.js.map} +3 -3
- package/dist/cli/{chunk-nq1d20w2.js → chunk-0w6hs479.js} +15 -15
- package/dist/cli/{chunk-ehweg4fr.js → chunk-124fvmzq.js} +1031 -903
- package/dist/cli/{chunk-ehweg4fr.js.map → chunk-124fvmzq.js.map} +20 -18
- package/dist/cli/{chunk-kma9f6sf.js → chunk-1f882900.js} +2 -2
- package/dist/cli/{chunk-e8xw9qkh.js → chunk-297ajdcv.js} +4 -4
- package/dist/cli/{chunk-e6atmn4h.js → chunk-32khwcb6.js} +7 -7
- package/dist/cli/{chunk-073rdvgb.js → chunk-36bxs9c7.js} +16 -16
- package/dist/cli/{chunk-mrcccgnh.js → chunk-53jqw8z0.js} +3 -3
- package/dist/cli/{chunk-ft9vfys6.js → chunk-58bt3hag.js} +4 -4
- package/dist/cli/{chunk-sds923fa.js → chunk-5cmts6dv.js} +3 -3
- package/dist/cli/{chunk-cfyg47zg.js → chunk-60hz265r.js} +4 -4
- package/dist/cli/{chunk-j134vrp2.js → chunk-74wfhv79.js} +1 -1
- package/dist/cli/{chunk-nrns10mj.js → chunk-9qzgg6mj.js} +3 -3
- package/dist/cli/{chunk-tphac74f.js → chunk-a57yh0h9.js} +5 -5
- package/dist/cli/{chunk-hebn0tpx.js → chunk-ave1wcbr.js} +1 -1
- package/dist/cli/{chunk-htrwgabr.js → chunk-bqxaqn5p.js} +6 -6
- package/dist/cli/{chunk-5vjtgs6e.js → chunk-bxwhtvw8.js} +5 -5
- package/dist/cli/{chunk-66w9j7p6.js → chunk-ckrcm08h.js} +5 -3
- package/dist/cli/{chunk-66w9j7p6.js.map → chunk-ckrcm08h.js.map} +3 -3
- package/dist/cli/{chunk-n0v7m8ry.js → chunk-desvm72z.js} +3 -3
- package/dist/cli/{chunk-3v3ffbrj.js → chunk-dhwtqnnd.js} +2 -2
- package/dist/cli/{chunk-gb420vvz.js → chunk-dpy8qdjf.js} +7 -4
- package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
- package/dist/cli/{chunk-c1y538kd.js → chunk-dqhg54mr.js} +1 -1
- package/dist/cli/{chunk-42t4jxdx.js → chunk-dv2z0rzf.js} +1 -1
- package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
- package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
- package/dist/cli/{chunk-hx3xqnk9.js → chunk-gfc5fqvf.js} +14 -14
- package/dist/cli/{chunk-7ppf1rva.js → chunk-gxtg6ed2.js} +16 -16
- package/dist/cli/{chunk-8y2kmjv8.js → chunk-hvcxng5f.js} +6 -6
- package/dist/cli/{chunk-54ztw1nj.js → chunk-j1x92mx9.js} +1 -1
- package/dist/cli/{chunk-313vnn40.js → chunk-k3gr1nm9.js} +11 -9
- package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
- package/dist/cli/{chunk-c887fj0s.js → chunk-kdpzw38a.js} +2 -2
- package/dist/cli/{chunk-t2m5j4pr.js → chunk-ms9z66nz.js} +2 -2
- package/dist/cli/{chunk-t2m5j4pr.js.map → chunk-ms9z66nz.js.map} +2 -2
- package/dist/cli/{chunk-ep6nd0rn.js → chunk-nbyvgnnm.js} +26 -14
- package/dist/cli/{chunk-ep6nd0rn.js.map → chunk-nbyvgnnm.js.map} +7 -7
- package/dist/cli/{chunk-w1r4vase.js → chunk-s0bdnc7v.js} +2 -2
- package/dist/cli/{chunk-fdrkhpjy.js → chunk-sc93apfs.js} +14 -14
- package/dist/cli/{chunk-dzwehpy7.js → chunk-tfycddbt.js} +2 -2
- package/dist/cli/{chunk-3x6x3pph.js → chunk-twy7psdz.js} +7 -7
- package/dist/cli/{chunk-e9q7a2ak.js → chunk-y4msrwm9.js} +15 -15
- package/dist/cli/{chunk-tdqhyxfz.js → chunk-ydp3065p.js} +5 -5
- package/dist/cli/index.js +18 -18
- package/dist/types/ai/ask.d.ts +24 -5
- package/dist/types/analytics/clics.d.ts +37 -0
- package/dist/types/analytics/index.d.ts +2 -0
- package/dist/types/analytics/schema.d.ts +18 -0
- package/dist/types/astro/integration.d.ts +6 -0
- package/dist/types/core/config-input.d.ts +7 -3
- package/dist/types/core/powered-by.d.ts +12 -0
- package/dist/types/core/schema.d.ts +109 -3
- package/dist/types/core/sources/lower.d.ts +10 -2
- package/dist/types/core/sources/notion.d.ts +8 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
- package/dist/types/deploy/node-headers.d.ts +12 -4
- package/dist/types/deploy/platforms/vercel.d.ts +2 -2
- package/dist/types/deploy/vercel-negotiation.d.ts +4 -2
- package/dist/types/narration/build.d.ts +34 -12
- package/dist/types/narration/provider.d.ts +96 -8
- package/dist/types/openapi/sentence.d.ts +11 -1
- package/dist/types/seo/jsonld.d.ts +11 -6
- package/dist/types/sources/notion.d.ts +8 -0
- package/dist/types/sources/registry.d.ts +9 -0
- package/docs/02-deployment.mdx +29 -1
- package/docs/03-upgrading.mdx +2 -1
- package/docs/04-migrating.mdx +9 -9
- package/docs/08-faq.mdx +12 -12
- package/docs/advanced/changelog.mdx +19 -2
- package/docs/advanced/custom-pages.mdx +1 -1
- package/docs/cli/doctor.mdx +1 -1
- package/docs/configuration/analytics.mdx +19 -1
- package/docs/configuration/index.mdx +1 -0
- package/docs/configuration/narration.mdx +43 -6
- package/docs/content/navigation.mdx +4 -2
- package/docs/content/sources/contentful.mdx +2 -0
- package/docs/content/sources/github-releases.mdx +2 -0
- package/docs/content/sources/notion.mdx +16 -1
- package/docs/content/sources/obsidian.mdx +2 -0
- package/docs/content/sources/payload.mdx +2 -0
- package/docs/content/sources/remote-mdx.mdx +2 -0
- package/docs/content/sources/sanity.mdx +2 -0
- package/docs/content/sources/strapi.mdx +2 -0
- package/docs/discoverability/mcp.mdx +2 -0
- package/docs/discoverability/structured-data.mdx +8 -6
- package/docs/references/asyncapi.mdx +2 -0
- package/docs/references/graphql.mdx +2 -0
- package/docs/references/openapi.mdx +14 -0
- package/package.json +7 -6
- package/skills/blume/SKILL.md +1 -1
- package/skills/blume-migrate/SKILL.md +1 -1
- package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
- package/skills/blume-migrate/references/monorepo.md +5 -5
- package/src/ai/ask.ts +24 -6
- package/src/analytics/clics.ts +58 -0
- package/src/analytics/head.ts +5 -0
- package/src/analytics/index.ts +2 -0
- package/src/analytics/schema.ts +2 -0
- package/src/astro/generate.ts +13 -8
- package/src/astro/integration.ts +56 -9
- package/src/astro/render-deps.ts +10 -5
- package/src/astro/runtime-deps.ts +23 -2
- package/src/astro/templates.ts +4 -1
- package/src/cli/init/scaffold.ts +6 -3
- package/src/cli/required-secrets.ts +2 -1
- package/src/components/content/view-switcher.ts +7 -4
- package/src/components/layout/NavTree.astro +49 -5
- package/src/components/layout/NavTreeScript.astro +18 -0
- package/src/components/layout/PageLayout.astro +13 -3
- package/src/components/layout/RootLayout.astro +17 -12
- package/src/components/layout/analytics-client.ts +8 -8
- package/src/components/openapi/playground-client.ts +53 -53
- package/src/components/powered-by-middleware.ts +33 -0
- package/src/core/config-input.ts +11 -3
- package/src/core/powered-by.ts +12 -0
- package/src/core/schema.ts +5 -4
- package/src/core/sources/lower.ts +19 -3
- package/src/core/sources/notion.ts +27 -9
- package/src/deploy/cloudflare-negotiation.ts +36 -7
- package/src/deploy/headers.ts +15 -1
- package/src/deploy/node-headers.ts +32 -20
- package/src/deploy/platforms/cloudflare.ts +1 -0
- package/src/deploy/platforms/vercel.ts +4 -3
- package/src/deploy/vercel-negotiation.ts +38 -4
- package/src/markdown/base-links.ts +15 -14
- package/src/markdown/package-commands.ts +9 -8
- package/src/narration/build.ts +218 -40
- package/src/narration/provider.ts +89 -9
- package/src/openapi/render-mdx.ts +68 -8
- package/src/openapi/sentence.ts +29 -2
- package/src/registry/eject.ts +5 -1
- package/src/seo/jsonld.ts +38 -20
- package/src/sources/notion.ts +7 -0
- package/src/theme/color.ts +9 -10
- package/src/theme/entry.ts +14 -3
- package/dist/cli/chunk-313vnn40.js.map +0 -10
- package/dist/cli/chunk-gb420vvz.js.map +0 -17
- /package/dist/cli/{chunk-nq1d20w2.js.map → chunk-0w6hs479.js.map} +0 -0
- /package/dist/cli/{chunk-kma9f6sf.js.map → chunk-1f882900.js.map} +0 -0
- /package/dist/cli/{chunk-e8xw9qkh.js.map → chunk-297ajdcv.js.map} +0 -0
- /package/dist/cli/{chunk-e6atmn4h.js.map → chunk-32khwcb6.js.map} +0 -0
- /package/dist/cli/{chunk-073rdvgb.js.map → chunk-36bxs9c7.js.map} +0 -0
- /package/dist/cli/{chunk-mrcccgnh.js.map → chunk-53jqw8z0.js.map} +0 -0
- /package/dist/cli/{chunk-ft9vfys6.js.map → chunk-58bt3hag.js.map} +0 -0
- /package/dist/cli/{chunk-sds923fa.js.map → chunk-5cmts6dv.js.map} +0 -0
- /package/dist/cli/{chunk-cfyg47zg.js.map → chunk-60hz265r.js.map} +0 -0
- /package/dist/cli/{chunk-j134vrp2.js.map → chunk-74wfhv79.js.map} +0 -0
- /package/dist/cli/{chunk-nrns10mj.js.map → chunk-9qzgg6mj.js.map} +0 -0
- /package/dist/cli/{chunk-tphac74f.js.map → chunk-a57yh0h9.js.map} +0 -0
- /package/dist/cli/{chunk-hebn0tpx.js.map → chunk-ave1wcbr.js.map} +0 -0
- /package/dist/cli/{chunk-htrwgabr.js.map → chunk-bqxaqn5p.js.map} +0 -0
- /package/dist/cli/{chunk-5vjtgs6e.js.map → chunk-bxwhtvw8.js.map} +0 -0
- /package/dist/cli/{chunk-n0v7m8ry.js.map → chunk-desvm72z.js.map} +0 -0
- /package/dist/cli/{chunk-3v3ffbrj.js.map → chunk-dhwtqnnd.js.map} +0 -0
- /package/dist/cli/{chunk-c1y538kd.js.map → chunk-dqhg54mr.js.map} +0 -0
- /package/dist/cli/{chunk-42t4jxdx.js.map → chunk-dv2z0rzf.js.map} +0 -0
- /package/dist/cli/{chunk-hx3xqnk9.js.map → chunk-gfc5fqvf.js.map} +0 -0
- /package/dist/cli/{chunk-7ppf1rva.js.map → chunk-gxtg6ed2.js.map} +0 -0
- /package/dist/cli/{chunk-8y2kmjv8.js.map → chunk-hvcxng5f.js.map} +0 -0
- /package/dist/cli/{chunk-54ztw1nj.js.map → chunk-j1x92mx9.js.map} +0 -0
- /package/dist/cli/{chunk-c887fj0s.js.map → chunk-kdpzw38a.js.map} +0 -0
- /package/dist/cli/{chunk-w1r4vase.js.map → chunk-s0bdnc7v.js.map} +0 -0
- /package/dist/cli/{chunk-fdrkhpjy.js.map → chunk-sc93apfs.js.map} +0 -0
- /package/dist/cli/{chunk-dzwehpy7.js.map → chunk-tfycddbt.js.map} +0 -0
- /package/dist/cli/{chunk-3x6x3pph.js.map → chunk-twy7psdz.js.map} +0 -0
- /package/dist/cli/{chunk-e9q7a2ak.js.map → chunk-y4msrwm9.js.map} +0 -0
- /package/dist/cli/{chunk-tdqhyxfz.js.map → chunk-ydp3065p.js.map} +0 -0
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/core/server-features.ts", "../src/cli/required-secrets.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { needsPlaygroundProxy } from \"../openapi/references.ts\";\nimport type { ResolvedConfig } from \"./schema.ts\";\n\n/**\n * List the enabled features that require Astro server output. Static builds\n * fail clearly when any of these are enabled.\n */\nexport const serverFeatures = (config: ResolvedConfig): string[] => {\n const features: string[] = [];\n if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {\n features.push(\"Assistant\");\n }\n // The hosted MCP server is a live JSON-RPC endpoint, so it needs a runtime.\n if (config.agents.mcp.enabled) {\n features.push(\"MCP server\");\n }\n // The built-in playground proxy (`playground.proxy: true` on an `openapi()`\n // or `graphql()` adapter) is a live fetch endpoint at `/_api-proxy`; an\n // external proxy URL (string) or a proxy-less playground stays fully static.\n if (needsPlaygroundProxy(config)) {\n features.push(\"API playground proxy\");\n }\n // A `server` adapter (Mixedbread) proxies queries through a secret server\n // endpoint, so it can't run on a static build.\n if (config.search.provider.mode === \"server\") {\n features.push(`Search (${config.search.provider.kind})`);\n }\n return features;\n};\n",
|
|
6
|
-
"import { resolveAskBackend } from \"../ai/ask.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/** A feature, and the secrets the adapter behind it reads. */\ninterface SecretOwner {\n feature: string;\n note?: string;\n secrets: string[];\n}\n\n/**\n * The adapters that name their own secrets. The built-ins mostly declare\n * none: analytics ships public tokens in the page, consent managers load\n * public scripts, reference adapters read public specs, and host adapters\n * read platform-injected env.\n */\nconst adapterSecretOwners = (config: ResolvedConfig): SecretOwner[] => {\n const { consent, deployment, rateLimit } = config;\n const { provider } = config.search;\n const owners: SecretOwner[] = [\n // Each search adapter declares the secrets its generated runtime reads.\n { feature: `Search (${provider.kind})`, secrets: provider.requiredSecrets },\n ...config.analytics.map((adapter) => ({\n feature: `Analytics (${adapter.kind})`,\n secrets: adapter.requiredSecrets,\n })),\n // Each content source adapter declares the env vars its fetch reads.\n ...config.content.sources.map((source) => ({\n feature: `Content source (${source.kind})`,\n secrets: source.requiredSecrets,\n })),\n ...config.reference.map((adapter) => ({\n feature: `API reference (${adapter.kind})`,\n secrets: adapter.requiredSecrets,\n })),\n {\n feature: `Deployment (${deployment.kind})`,\n secrets: deployment.requiredSecrets,\n },\n ];\n if (consent) {\n owners.push({\n feature: `Consent (${consent.kind})`,\n secrets: consent.requiredSecrets,\n });\n }\n // Upstash's endpoint and token.\n if (rateLimit) {\n owners.push({\n feature: `Rate limiting (${rateLimit.kind})`,\n note: \"read at request time; without it the routes count in memory\",\n secrets: rateLimit.requiredSecrets,\n });\n }\n return owners;\n};\n\n/**\n * Warn early when an enabled feature needs a secret env var that isn't set, so\n * the failure surfaces at `blume dev`/`build` instead of at the first request in\n * production. These are runtime secrets (the endpoint reads them on the server),\n * so this warns rather than hard-fails — the value may live only in the deploy\n * environment. Build-time secrets (search-index sync) are checked by the sync.\n */\nexport const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const requireSecret = (feature: string, env: string, note?: string): void => {\n if (process.env[env]) {\n return;\n }\n const noteSuffix = note ? ` (${note})` : \"\";\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${noteSuffix}.`,\n severity: \"warning\",\n suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`,\n });\n };\n\n if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {\n // The adapter descriptor names the env vars its route reads.\n const { captcha, provider } = config.ai.assistant;\n const backend = resolveAskBackend(provider);\n for (const env of provider.requiredSecrets) {\n requireSecret(`Assistant (${backend.label})`, env, backend.secretNote);\n }\n // The bot check's secret key, which the route verifies tokens with.\n for (const env of captcha?.requiredSecrets ?? []) {\n requireSecret(`Assistant bot check (${captcha?.kind})`, env);\n }\n }\n\n // Generated narration reads its key at build, not at runtime; without it the\n // build skips the audio and pages read with browser voices.\n const { narration } = config;\n if (narration.enabled && narration.provider) {\n for (const env of narration.provider.requiredSecrets) {\n requireSecret(\n \"Narration audio\",\n env,\n \"read at build; without it pages use browser voices\"\n );\n }\n }\n\n for (const owner of adapterSecretOwners(config)) {\n for (const env of owner.secrets) {\n requireSecret(owner.feature, env, owner.note);\n }\n }\n\n return diagnostics;\n};\n"
|
|
6
|
+
"import { resolveAskBackend } from \"../ai/ask.ts\";\nimport type { ResolvedConfig } from \"../core/schema.ts\";\nimport type { Diagnostic } from \"../core/types.ts\";\n\n/** A feature, and the secrets the adapter behind it reads. */\ninterface SecretOwner {\n feature: string;\n note?: string;\n secrets: string[];\n}\n\n/**\n * The adapters that name their own secrets. The built-ins mostly declare\n * none: analytics ships public tokens in the page, consent managers load\n * public scripts, reference adapters read public specs, and host adapters\n * read platform-injected env.\n */\nconst adapterSecretOwners = (config: ResolvedConfig): SecretOwner[] => {\n const { consent, deployment, rateLimit } = config;\n const { provider } = config.search;\n const owners: SecretOwner[] = [\n // Each search adapter declares the secrets its generated runtime reads.\n { feature: `Search (${provider.kind})`, secrets: provider.requiredSecrets },\n ...config.analytics.map((adapter) => ({\n feature: `Analytics (${adapter.kind})`,\n secrets: adapter.requiredSecrets,\n })),\n // Each content source adapter declares the env vars its fetch reads.\n ...config.content.sources.map((source) => ({\n feature: `Content source (${source.kind})`,\n secrets: source.requiredSecrets,\n })),\n ...config.reference.map((adapter) => ({\n feature: `API reference (${adapter.kind})`,\n secrets: adapter.requiredSecrets,\n })),\n {\n feature: `Deployment (${deployment.kind})`,\n secrets: deployment.requiredSecrets,\n },\n ];\n if (consent) {\n owners.push({\n feature: `Consent (${consent.kind})`,\n secrets: consent.requiredSecrets,\n });\n }\n // Upstash's endpoint and token.\n if (rateLimit) {\n owners.push({\n feature: `Rate limiting (${rateLimit.kind})`,\n note: \"read at request time; without it the routes count in memory\",\n secrets: rateLimit.requiredSecrets,\n });\n }\n return owners;\n};\n\n/**\n * Warn early when an enabled feature needs a secret env var that isn't set, so\n * the failure surfaces at `blume dev`/`build` instead of at the first request in\n * production. These are runtime secrets (the endpoint reads them on the server),\n * so this warns rather than hard-fails — the value may live only in the deploy\n * environment. Build-time secrets (search-index sync) are checked by the sync.\n */\nexport const checkRequiredSecrets = (config: ResolvedConfig): Diagnostic[] => {\n const diagnostics: Diagnostic[] = [];\n const requireSecret = (feature: string, env: string, note?: string): void => {\n if (process.env[env]) {\n return;\n }\n const noteSuffix = note ? ` (${note})` : \"\";\n diagnostics.push({\n code: \"BLUME_MISSING_SECRET\",\n message: `${feature} is enabled but ${env} is not set${noteSuffix}.`,\n severity: \"warning\",\n suggestion: `Set ${env} in .env.local for local dev, or in your host's environment for production.`,\n });\n };\n\n if (config.ai.assistant?.enabled && !config.ai.assistant.endpoint) {\n // The adapter descriptor names the env vars its route reads.\n const { captcha, provider } = config.ai.assistant;\n const backend = resolveAskBackend(provider);\n for (const env of provider.requiredSecrets) {\n requireSecret(`Assistant (${backend.label})`, env, backend.secretNote);\n }\n // The bot check's secret key, which the route verifies tokens with.\n for (const env of captcha?.requiredSecrets ?? []) {\n requireSecret(`Assistant bot check (${captcha?.kind})`, env);\n }\n }\n\n // Generated narration reads its key at build, not at runtime; without it the\n // build skips the audio and pages read with browser voices. `openai()` with\n // a `baseUrl` requires only a key it names (see `narrationProviderSchema`).\n const { narration } = config;\n if (narration.enabled && narration.provider) {\n for (const env of narration.provider.requiredSecrets) {\n requireSecret(\n \"Narration audio\",\n env,\n \"read at build; without it pages use browser voices\"\n );\n }\n }\n\n for (const owner of adapterSecretOwners(config)) {\n for (const env of owner.secrets) {\n requireSecret(owner.feature, env, owner.note);\n }\n }\n\n return diagnostics;\n};\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;AAOO,IAAM,iBAAiB,CAAC,WAAqC;AAAA,EAClE,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjE,SAAS,KAAK,WAAW;AAAA,EAC3B;AAAA,EAEA,IAAI,OAAO,OAAO,IAAI,SAAS;AAAA,IAC7B,SAAS,KAAK,YAAY;AAAA,EAC5B;AAAA,EAIA,IAAI,qBAAqB,MAAM,GAAG;AAAA,IAChC,SAAS,KAAK,sBAAsB;AAAA,EACtC;AAAA,EAGA,IAAI,OAAO,OAAO,SAAS,SAAS,UAAU;AAAA,IAC5C,SAAS,KAAK,WAAW,OAAO,OAAO,SAAS,OAAO;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;;;ACVT,IAAM,sBAAsB,CAAC,WAA0C;AAAA,EACrE,QAAQ,SAAS,YAAY,cAAc;AAAA,EAC3C,QAAQ,aAAa,OAAO;AAAA,EAC5B,MAAM,SAAwB;AAAA,IAE5B,EAAE,SAAS,WAAW,SAAS,SAAS,SAAS,SAAS,gBAAgB;AAAA,IAC1E,GAAG,OAAO,UAAU,IAAI,CAAC,aAAa;AAAA,MACpC,SAAS,cAAc,QAAQ;AAAA,MAC/B,SAAS,QAAQ;AAAA,IACnB,EAAE;AAAA,IAEF,GAAG,OAAO,QAAQ,QAAQ,IAAI,CAAC,YAAY;AAAA,MACzC,SAAS,mBAAmB,OAAO;AAAA,MACnC,SAAS,OAAO;AAAA,IAClB,EAAE;AAAA,IACF,GAAG,OAAO,UAAU,IAAI,CAAC,aAAa;AAAA,MACpC,SAAS,kBAAkB,QAAQ;AAAA,MACnC,SAAS,QAAQ;AAAA,IACnB,EAAE;AAAA,IACF;AAAA,MACE,SAAS,eAAe,WAAW;AAAA,MACnC,SAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAAA,EACA,IAAI,SAAS;AAAA,IACX,OAAO,KAAK;AAAA,MACV,SAAS,YAAY,QAAQ;AAAA,MAC7B,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,WAAW;AAAA,IACb,OAAO,KAAK;AAAA,MACV,SAAS,kBAAkB,UAAU;AAAA,MACrC,MAAM;AAAA,MACN,SAAS,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;AAUF,IAAM,uBAAuB,CAAC,WAAyC;AAAA,EAC5E,MAAM,cAA4B,CAAC;AAAA,EACnC,MAAM,gBAAgB,CAAC,SAAiB,KAAa,SAAwB;AAAA,IAC3E,IAAI,QAAQ,IAAI,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,aAAa,OAAO,KAAK,UAAU;AAAA,IACzC,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,SAAS,GAAG,0BAA0B,iBAAiB;AAAA,MACvD,UAAU;AAAA,MACV,YAAY,OAAO;AAAA,IACrB,CAAC;AAAA;AAAA,EAGH,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IAEjE,QAAQ,SAAS,aAAa,OAAO,GAAG;AAAA,IACxC,MAAM,UAAU,kBAAkB,QAAQ;AAAA,IAC1C,WAAW,OAAO,SAAS,iBAAiB;AAAA,MAC1C,cAAc,cAAc,QAAQ,UAAU,KAAK,QAAQ,UAAU;AAAA,IACvE;AAAA,IAEA,WAAW,OAAO,SAAS,mBAAmB,CAAC,GAAG;AAAA,MAChD,cAAc,wBAAwB,SAAS,SAAS,GAAG;AAAA,IAC7D;AAAA,EACF;AAAA,
|
|
8
|
+
"mappings": ";;;;;;;AAOO,IAAM,iBAAiB,CAAC,WAAqC;AAAA,EAClE,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IACjE,SAAS,KAAK,WAAW;AAAA,EAC3B;AAAA,EAEA,IAAI,OAAO,OAAO,IAAI,SAAS;AAAA,IAC7B,SAAS,KAAK,YAAY;AAAA,EAC5B;AAAA,EAIA,IAAI,qBAAqB,MAAM,GAAG;AAAA,IAChC,SAAS,KAAK,sBAAsB;AAAA,EACtC;AAAA,EAGA,IAAI,OAAO,OAAO,SAAS,SAAS,UAAU;AAAA,IAC5C,SAAS,KAAK,WAAW,OAAO,OAAO,SAAS,OAAO;AAAA,EACzD;AAAA,EACA,OAAO;AAAA;;;ACVT,IAAM,sBAAsB,CAAC,WAA0C;AAAA,EACrE,QAAQ,SAAS,YAAY,cAAc;AAAA,EAC3C,QAAQ,aAAa,OAAO;AAAA,EAC5B,MAAM,SAAwB;AAAA,IAE5B,EAAE,SAAS,WAAW,SAAS,SAAS,SAAS,SAAS,gBAAgB;AAAA,IAC1E,GAAG,OAAO,UAAU,IAAI,CAAC,aAAa;AAAA,MACpC,SAAS,cAAc,QAAQ;AAAA,MAC/B,SAAS,QAAQ;AAAA,IACnB,EAAE;AAAA,IAEF,GAAG,OAAO,QAAQ,QAAQ,IAAI,CAAC,YAAY;AAAA,MACzC,SAAS,mBAAmB,OAAO;AAAA,MACnC,SAAS,OAAO;AAAA,IAClB,EAAE;AAAA,IACF,GAAG,OAAO,UAAU,IAAI,CAAC,aAAa;AAAA,MACpC,SAAS,kBAAkB,QAAQ;AAAA,MACnC,SAAS,QAAQ;AAAA,IACnB,EAAE;AAAA,IACF;AAAA,MACE,SAAS,eAAe,WAAW;AAAA,MACnC,SAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAAA,EACA,IAAI,SAAS;AAAA,IACX,OAAO,KAAK;AAAA,MACV,SAAS,YAAY,QAAQ;AAAA,MAC7B,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,WAAW;AAAA,IACb,OAAO,KAAK;AAAA,MACV,SAAS,kBAAkB,UAAU;AAAA,MACrC,MAAM;AAAA,MACN,SAAS,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;AAUF,IAAM,uBAAuB,CAAC,WAAyC;AAAA,EAC5E,MAAM,cAA4B,CAAC;AAAA,EACnC,MAAM,gBAAgB,CAAC,SAAiB,KAAa,SAAwB;AAAA,IAC3E,IAAI,QAAQ,IAAI,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,aAAa,OAAO,KAAK,UAAU;AAAA,IACzC,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,SAAS,GAAG,0BAA0B,iBAAiB;AAAA,MACvD,UAAU;AAAA,MACV,YAAY,OAAO;AAAA,IACrB,CAAC;AAAA;AAAA,EAGH,IAAI,OAAO,GAAG,WAAW,WAAW,CAAC,OAAO,GAAG,UAAU,UAAU;AAAA,IAEjE,QAAQ,SAAS,aAAa,OAAO,GAAG;AAAA,IACxC,MAAM,UAAU,kBAAkB,QAAQ;AAAA,IAC1C,WAAW,OAAO,SAAS,iBAAiB;AAAA,MAC1C,cAAc,cAAc,QAAQ,UAAU,KAAK,QAAQ,UAAU;AAAA,IACvE;AAAA,IAEA,WAAW,OAAO,SAAS,mBAAmB,CAAC,GAAG;AAAA,MAChD,cAAc,wBAAwB,SAAS,SAAS,GAAG;AAAA,IAC7D;AAAA,EACF;AAAA,EAKA,QAAQ,cAAc;AAAA,EACtB,IAAI,UAAU,WAAW,UAAU,UAAU;AAAA,IAC3C,WAAW,OAAO,UAAU,SAAS,iBAAiB;AAAA,MACpD,cACE,mBACA,KACA,oDACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,SAAS,oBAAoB,MAAM,GAAG;AAAA,IAC/C,WAAW,OAAO,MAAM,SAAS;AAAA,MAC/B,cAAc,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;",
|
|
9
9
|
"debugId": "D62D6223654FF46464756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
isOpenApiSource,
|
|
56
56
|
buildRawMarkdown,
|
|
57
57
|
markdownRoutePaths
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-124fvmzq.js";
|
|
59
59
|
import {
|
|
60
60
|
trimChar,
|
|
61
61
|
normalizeBasePath,
|
|
@@ -67,12 +67,12 @@ import {
|
|
|
67
67
|
import {
|
|
68
68
|
validateSearchPopularIcons,
|
|
69
69
|
validateNavTargets
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-0pmb4tr4.js";
|
|
71
71
|
import {
|
|
72
72
|
EXPANDABLE_VISIBLE_LINES,
|
|
73
73
|
buildSearchDocuments,
|
|
74
74
|
buildMcpData
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-desvm72z.js";
|
|
76
76
|
import {
|
|
77
77
|
planComponentSlots,
|
|
78
78
|
publishRuntimeModules,
|
|
@@ -113,7 +113,7 @@ import {
|
|
|
113
113
|
examplesPageTemplate,
|
|
114
114
|
runtimePackageTemplate,
|
|
115
115
|
runtimeTsconfigTemplate
|
|
116
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-dpy8qdjf.js";
|
|
117
117
|
import {
|
|
118
118
|
validateUsedComponents,
|
|
119
119
|
missingExampleDiagnostics,
|
|
@@ -123,11 +123,11 @@ import {
|
|
|
123
123
|
discoverExamples,
|
|
124
124
|
exampleMarkdownLookup,
|
|
125
125
|
missingDependencyDiagnostic
|
|
126
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-ckrcm08h.js";
|
|
127
127
|
import {
|
|
128
128
|
emptyComponentOverrides,
|
|
129
129
|
analyzeComponentOverrides
|
|
130
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-j1x92mx9.js";
|
|
131
131
|
import {
|
|
132
132
|
writeTextAtomic
|
|
133
133
|
} from "./chunk-jq5n4avg.js";
|
|
@@ -135,10 +135,10 @@ import {
|
|
|
135
135
|
resolveAccent,
|
|
136
136
|
resolveRadius,
|
|
137
137
|
buildThemeCss
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-es8h0v3j.js";
|
|
139
139
|
import {
|
|
140
140
|
registry
|
|
141
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-dqhg54mr.js";
|
|
142
142
|
|
|
143
143
|
// src/astro/integration.ts
|
|
144
144
|
import { join as join4, relative, resolve as resolve2 } from "pathe";
|
|
@@ -1747,13 +1747,24 @@ ${THEME_MAPPING}
|
|
|
1747
1747
|
so a large site's HTML is mostly this markup — one utility per row kind
|
|
1748
1748
|
instead of the dozen classes each expands to keeps every page (and the
|
|
1749
1749
|
build's HTML output) small. Kept in sync with NavTree.astro: a page row,
|
|
1750
|
-
a page-mode group's drill-in
|
|
1751
|
-
|
|
1750
|
+
a page-mode group's drill-in row (or, when the group has a page, the
|
|
1751
|
+
link and chevron button it splits into), a collapsible group's summary
|
|
1752
|
+
and the link inside it, and a flat group's heading and the link inside
|
|
1753
|
+
it. */
|
|
1752
1754
|
@utility blume-nav-link {
|
|
1753
1755
|
@apply block rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:font-medium aria-[current=page]:text-foreground;
|
|
1754
1756
|
}
|
|
1755
1757
|
@utility blume-nav-drill {
|
|
1756
|
-
@apply flex w-full items-center gap-2 rounded-[0.65rem] px-2.5 py-1.5 text-start font-medium text-foreground text-sm transition-colors hover:bg-muted;
|
|
1758
|
+
@apply flex w-full items-center gap-2 rounded-[0.65rem] px-2.5 py-1.5 text-start font-medium text-foreground text-sm transition-colors hover:bg-muted aria-[current]:bg-muted;
|
|
1759
|
+
}
|
|
1760
|
+
/* A routed drill row's label and chevron are separate pills, like a panel's
|
|
1761
|
+
back button and title, so each shows which one the pointer is on. The
|
|
1762
|
+
chevron's padding matches the drill row's, so chevrons line up. */
|
|
1763
|
+
@utility blume-nav-drill-link {
|
|
1764
|
+
@apply flex min-w-0 flex-1 items-center gap-2 rounded-[0.65rem] px-2.5 py-1.5 font-medium text-foreground text-sm transition-colors hover:bg-muted aria-[current]:bg-muted;
|
|
1765
|
+
}
|
|
1766
|
+
@utility blume-nav-drill-toggle {
|
|
1767
|
+
@apply flex shrink-0 items-center justify-center self-stretch rounded-[0.65rem] px-2.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground;
|
|
1757
1768
|
}
|
|
1758
1769
|
@utility blume-nav-summary {
|
|
1759
1770
|
@apply flex cursor-pointer list-none items-center gap-1.5 rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground [&::-webkit-details-marker]:hidden;
|
|
@@ -3470,7 +3481,8 @@ var writeNotFoundPage = async (write, srcDir, pages, contentPages) => {
|
|
|
3470
3481
|
var diagnosticWarning = (diagnostic) => diagnostic.suggestion ? `${diagnostic.message} ${diagnostic.suggestion}` : diagnostic.message;
|
|
3471
3482
|
var dependencyPreflight = async (project, frameworks) => {
|
|
3472
3483
|
const build = project.mode === "build";
|
|
3473
|
-
const
|
|
3484
|
+
const { config } = project;
|
|
3485
|
+
const diagnostic = await missingDependencyDiagnostic(build ? config : { ...config, narration: { ...config.narration, provider: null } }, project.context.root, build ? "error" : "warning", frameworks);
|
|
3474
3486
|
if (!diagnostic) {
|
|
3475
3487
|
return [];
|
|
3476
3488
|
}
|
|
@@ -3760,5 +3772,5 @@ var generateRuntime = async (project) => {
|
|
|
3760
3772
|
|
|
3761
3773
|
export { publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildApiSpec, buildAskData, resolveOgFonts, buildReferenceFiles, sourcePages, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, packageDirFrom, detectNeedsReact, detectUsesMath, collectStaged, playgroundProxyPattern, buildRuntimeData, PLAYGROUND_PROXY_ENTRY, specOrigins, proxyAllowlistWarnings, analyzeComponentsFile, languageIconCssFor, clientFeaturesFor, generateRuntime };
|
|
3762
3774
|
|
|
3763
|
-
//# debugId=
|
|
3764
|
-
//# sourceMappingURL=chunk-
|
|
3775
|
+
//# debugId=02FADD64003B143964756E2164756E21
|
|
3776
|
+
//# sourceMappingURL=chunk-nbyvgnnm.js.map
|