blume 2.2.1 → 2.2.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cli/{chunk-080mfch6.js → chunk-0wt5amrk.js} +15 -15
  3. package/dist/cli/{chunk-k45sq16q.js → chunk-0xyedh7k.js} +39 -23
  4. package/dist/cli/{chunk-k45sq16q.js.map → chunk-0xyedh7k.js.map} +3 -3
  5. package/dist/cli/{chunk-f260jdrn.js → chunk-0ynr0fr7.js} +5 -5
  6. package/dist/cli/{chunk-e1n41w9m.js → chunk-1ay3hzn0.js} +3 -3
  7. package/dist/cli/{chunk-b680sv30.js → chunk-2f6btenb.js} +10 -8
  8. package/dist/cli/chunk-2f6btenb.js.map +13 -0
  9. package/dist/cli/{chunk-gwy55cx3.js → chunk-426rytg6.js} +2 -2
  10. package/dist/cli/{chunk-9h8mh2tk.js → chunk-5f96yq2c.js} +1 -1
  11. package/dist/cli/{chunk-x60e15st.js → chunk-5xq12jz7.js} +17 -17
  12. package/dist/cli/{chunk-x7bh6d9j.js → chunk-6xag1c83.js} +4 -4
  13. package/dist/cli/{chunk-487b95qy.js → chunk-88q28zav.js} +41 -25
  14. package/dist/cli/{chunk-487b95qy.js.map → chunk-88q28zav.js.map} +3 -3
  15. package/dist/cli/{chunk-yg8ckc3g.js → chunk-88zkpg89.js} +2 -2
  16. package/dist/cli/{chunk-ppa6mg4d.js → chunk-8fm3b4vm.js} +6 -6
  17. package/dist/cli/{chunk-rtvgmg2j.js → chunk-8h2t2vyj.js} +2 -2
  18. package/dist/cli/{chunk-2ssh60qh.js → chunk-982qfeny.js} +6 -6
  19. package/dist/cli/{chunk-t2h8pwy1.js → chunk-9emfspcp.js} +4 -4
  20. package/dist/cli/{chunk-9jqmq5hv.js → chunk-akj2p7k1.js} +6 -6
  21. package/dist/cli/{chunk-beb0z983.js → chunk-b664x65a.js} +16 -16
  22. package/dist/cli/{chunk-kmswjxj9.js → chunk-b7n58hgj.js} +3 -3
  23. package/dist/cli/{chunk-fnxgtjeq.js → chunk-c0qddrxr.js} +1 -1
  24. package/dist/cli/{chunk-p834rkcn.js → chunk-g62vnvaw.js} +5 -5
  25. package/dist/cli/{chunk-zxd5jrgx.js → chunk-gc7knd2s.js} +76 -34
  26. package/dist/cli/{chunk-zxd5jrgx.js.map → chunk-gc7knd2s.js.map} +4 -4
  27. package/dist/cli/{chunk-r5nm9w0c.js → chunk-hwjspffr.js} +105 -36
  28. package/dist/cli/{chunk-r5nm9w0c.js.map → chunk-hwjspffr.js.map} +11 -10
  29. package/dist/cli/{chunk-40vk8kgf.js → chunk-p4fe7tax.js} +7 -7
  30. package/dist/cli/{chunk-34wap3ed.js → chunk-psg2za5z.js} +3 -3
  31. package/dist/cli/{chunk-hktq4j5r.js → chunk-pxp1y6yz.js} +16 -10
  32. package/dist/cli/{chunk-hktq4j5r.js.map → chunk-pxp1y6yz.js.map} +4 -4
  33. package/dist/cli/{chunk-qcyxkj44.js → chunk-qax1aekz.js} +43 -17
  34. package/dist/cli/chunk-qax1aekz.js.map +15 -0
  35. package/dist/cli/{chunk-h0qwdbem.js → chunk-r5ajrw1g.js} +2 -2
  36. package/dist/cli/{chunk-q1wwrxzw.js → chunk-rc2qk3qx.js} +3 -3
  37. package/dist/cli/chunk-rc2qk3qx.js.map +10 -0
  38. package/dist/cli/{chunk-69rjf786.js → chunk-ry2ymbxf.js} +5 -5
  39. package/dist/cli/{chunk-gxhcf2hs.js → chunk-t43g7v22.js} +2 -2
  40. package/dist/cli/{chunk-ydqzkhjn.js → chunk-x0jqyq1g.js} +6 -6
  41. package/dist/cli/{chunk-aafhwx74.js → chunk-x25s4gph.js} +1 -1
  42. package/dist/cli/{chunk-nqna8dzp.js → chunk-xkx216rd.js} +17 -17
  43. package/dist/cli/{chunk-etckvbrh.js → chunk-xv8nkt56.js} +14 -14
  44. package/dist/cli/{chunk-hn3g2b89.js → chunk-yrmw5n2b.js} +9 -9
  45. package/dist/cli/{chunk-4zxh25hc.js → chunk-zgca0vxs.js} +2 -2
  46. package/dist/cli/{chunk-c5bjxq8v.js → chunk-zj6bcx0n.js} +2 -2
  47. package/dist/cli/{chunk-1ch3ct3r.js → chunk-zjfwzrvd.js} +14 -14
  48. package/dist/cli/{chunk-j4nfgn2j.js → chunk-znwhf37a.js} +1 -1
  49. package/dist/cli/index.js +18 -18
  50. package/dist/types/ai/ask-context.d.ts +8 -0
  51. package/dist/types/ai/link-text.d.ts +5 -0
  52. package/dist/types/ai/relative-links.d.ts +26 -6
  53. package/dist/types/core/config-input.d.ts +35 -1
  54. package/dist/types/core/data.d.ts +14 -0
  55. package/dist/types/core/last-modified.d.ts +33 -18
  56. package/dist/types/core/links.d.ts +16 -0
  57. package/dist/types/core/schema.d.ts +16 -1
  58. package/dist/types/core/types.d.ts +10 -0
  59. package/dist/types/deploy/sitemap.d.ts +9 -0
  60. package/dist/types/search/documents.d.ts +3 -1
  61. package/dist/types/search/fold.d.ts +33 -0
  62. package/dist/types/search/orama-index.d.ts +4 -4
  63. package/dist/types/seo/jsonld.d.ts +33 -0
  64. package/docs/configuration/search.mdx +2 -2
  65. package/docs/content/frontmatter.mdx +1 -1
  66. package/docs/content/i18n.mdx +1 -1
  67. package/docs/content/sources/remote-mdx.mdx +1 -1
  68. package/docs/discoverability/open-graph.mdx +16 -1
  69. package/docs/discoverability/sitemap-and-robots.mdx +12 -0
  70. package/docs/discoverability/structured-data.mdx +44 -0
  71. package/package.json +1 -1
  72. package/src/ai/ask-context.ts +52 -14
  73. package/src/ai/ask-data.ts +4 -1
  74. package/src/ai/ask-tools.ts +17 -5
  75. package/src/ai/link-text.ts +6 -0
  76. package/src/ai/llms.ts +1 -7
  77. package/src/ai/markdown.ts +8 -4
  78. package/src/ai/relative-links.ts +155 -48
  79. package/src/ai/site-skill.ts +1 -4
  80. package/src/astro/generate.ts +7 -0
  81. package/src/astro/templates.ts +36 -20
  82. package/src/components/layout/PageActions.astro +45 -18
  83. package/src/components/layout/PageLayout.astro +25 -12
  84. package/src/components/layout/RootLayout.astro +8 -1
  85. package/src/components/layout/locale-redirect.ts +38 -19
  86. package/src/components/layout/search/types.ts +12 -4
  87. package/src/core/config-input.ts +34 -1
  88. package/src/core/config.ts +5 -2
  89. package/src/core/data.ts +14 -0
  90. package/src/core/last-modified.ts +80 -34
  91. package/src/core/links.ts +43 -2
  92. package/src/core/manifest.ts +2 -0
  93. package/src/core/project-graph.ts +83 -43
  94. package/src/core/schema.ts +47 -9
  95. package/src/core/types.ts +10 -0
  96. package/src/deploy/sitemap.ts +127 -49
  97. package/src/openapi/proxy.ts +5 -1
  98. package/src/search/documents.ts +34 -11
  99. package/src/search/fold.ts +175 -0
  100. package/src/search/orama-index.ts +40 -49
  101. package/src/seo/jsonld.ts +100 -23
  102. package/dist/cli/chunk-b680sv30.js.map +0 -13
  103. package/dist/cli/chunk-q1wwrxzw.js.map +0 -10
  104. package/dist/cli/chunk-qcyxkj44.js.map +0 -14
  105. /package/dist/cli/{chunk-080mfch6.js.map → chunk-0wt5amrk.js.map} +0 -0
  106. /package/dist/cli/{chunk-f260jdrn.js.map → chunk-0ynr0fr7.js.map} +0 -0
  107. /package/dist/cli/{chunk-e1n41w9m.js.map → chunk-1ay3hzn0.js.map} +0 -0
  108. /package/dist/cli/{chunk-gwy55cx3.js.map → chunk-426rytg6.js.map} +0 -0
  109. /package/dist/cli/{chunk-9h8mh2tk.js.map → chunk-5f96yq2c.js.map} +0 -0
  110. /package/dist/cli/{chunk-x60e15st.js.map → chunk-5xq12jz7.js.map} +0 -0
  111. /package/dist/cli/{chunk-x7bh6d9j.js.map → chunk-6xag1c83.js.map} +0 -0
  112. /package/dist/cli/{chunk-yg8ckc3g.js.map → chunk-88zkpg89.js.map} +0 -0
  113. /package/dist/cli/{chunk-ppa6mg4d.js.map → chunk-8fm3b4vm.js.map} +0 -0
  114. /package/dist/cli/{chunk-rtvgmg2j.js.map → chunk-8h2t2vyj.js.map} +0 -0
  115. /package/dist/cli/{chunk-2ssh60qh.js.map → chunk-982qfeny.js.map} +0 -0
  116. /package/dist/cli/{chunk-t2h8pwy1.js.map → chunk-9emfspcp.js.map} +0 -0
  117. /package/dist/cli/{chunk-9jqmq5hv.js.map → chunk-akj2p7k1.js.map} +0 -0
  118. /package/dist/cli/{chunk-beb0z983.js.map → chunk-b664x65a.js.map} +0 -0
  119. /package/dist/cli/{chunk-kmswjxj9.js.map → chunk-b7n58hgj.js.map} +0 -0
  120. /package/dist/cli/{chunk-fnxgtjeq.js.map → chunk-c0qddrxr.js.map} +0 -0
  121. /package/dist/cli/{chunk-p834rkcn.js.map → chunk-g62vnvaw.js.map} +0 -0
  122. /package/dist/cli/{chunk-40vk8kgf.js.map → chunk-p4fe7tax.js.map} +0 -0
  123. /package/dist/cli/{chunk-34wap3ed.js.map → chunk-psg2za5z.js.map} +0 -0
  124. /package/dist/cli/{chunk-h0qwdbem.js.map → chunk-r5ajrw1g.js.map} +0 -0
  125. /package/dist/cli/{chunk-69rjf786.js.map → chunk-ry2ymbxf.js.map} +0 -0
  126. /package/dist/cli/{chunk-gxhcf2hs.js.map → chunk-t43g7v22.js.map} +0 -0
  127. /package/dist/cli/{chunk-ydqzkhjn.js.map → chunk-x0jqyq1g.js.map} +0 -0
  128. /package/dist/cli/{chunk-aafhwx74.js.map → chunk-x25s4gph.js.map} +0 -0
  129. /package/dist/cli/{chunk-nqna8dzp.js.map → chunk-xkx216rd.js.map} +0 -0
  130. /package/dist/cli/{chunk-etckvbrh.js.map → chunk-xv8nkt56.js.map} +0 -0
  131. /package/dist/cli/{chunk-hn3g2b89.js.map → chunk-yrmw5n2b.js.map} +0 -0
  132. /package/dist/cli/{chunk-4zxh25hc.js.map → chunk-zgca0vxs.js.map} +0 -0
  133. /package/dist/cli/{chunk-c5bjxq8v.js.map → chunk-zj6bcx0n.js.map} +0 -0
  134. /package/dist/cli/{chunk-1ch3ct3r.js.map → chunk-zjfwzrvd.js.map} +0 -0
  135. /package/dist/cli/{chunk-j4nfgn2j.js.map → chunk-znwhf37a.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # blume
2
2
 
3
+ ## 2.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 528f95e: The assistant now reads a page's links to other pages (`[Install](./install)`, `[Setup](../setup.md)`, `[Setup](/guides/setup.md)`) as the routes they mean, as the `.md` mirrors, `llms-full.txt`, and MCP `get_page` already did, so the links it cites in an answer land on the page they mean. A link on a translated page to a page that isn't translated yet points at the page the assistant can read. Pages from a remote or CMS source, such as `mdxRemote()`, now get that rewrite on every agent surface too. Before, the assistant read such links as written and could cite `../setup.md`, a link that led nowhere from the answer, and a remote page's links stayed as written on the agent surfaces, though the rendered page and `blume validate` resolved them. A relative link in a raw HTML `<a href>` now points on the agent surfaces where it goes on the rendered page, resolved against the page's URL as the browser resolves it, rather than the way a Markdown link resolves.
8
+ - 87cb8c4: The assistant cites pages as links more reliably on smaller models. Each documentation excerpt it reads, and each `search_docs` and `read_page` result, is now headed by the Markdown link to cite (`## [Page Title](/route)`), and the model is asked to copy that link. A page whose route has a space, a parenthesis, or a percent sign is cited with those characters percent-encoded (`%20`, `%28`, `%29`, `%25`), so its link works too. Before, the heading was `## Page Title (/route)`, and a model that copied it wrote `[Page Title (/route)]`, `[[Page Title (/route)]]`, or `[/route]`, which showed in the answer as raw text instead of a link.
9
+ - e41c71f: Search now keeps words whole whatever Latin letters they hold. Orama's default tokenizer split words at any letter beyond ASCII and a few accented vowels, so Swedish "när" was indexed as "n" and "r" and matched unrelated pages, and German "Prüfung" as "pr" and "fung". Blume now keeps every Latin letter, folding accents the way Orama already folded "café" and spelling ø, ł and ß as o, l and ss, in the default Orama search dialog, the MCP server's `search_docs`, and the assistant. A soft hyphen (`&shy;`) no longer splits the word it sits in, and a result found by folding is highlighted and excerpted at the accented word. ASCII text is tokenized exactly as before.
10
+ - 2a0628c: The language switcher keeps the reader's place: the chosen link carries the current URL fragment.
11
+ - 34b3e0f: Add SEO options for docs that live inside another site: shared JSON-LD entity ids and attribution (`seo.jsonLd`), a default social image in place of generated cards (`seo.og.image`), publication dates from git for pages without a front matter `date` (`seo.datePublished: "git"`), and hreflang alternates in the sitemap (`seo.sitemap: { alternates: true }`). Page JSON-LD now also carries the page's social image and credits its front matter `authors`, and hreflang links leave out `noindex`, hidden, and canonical-elsewhere translations.
12
+
13
+ ## 2.2.2
14
+
15
+ ### Patch Changes
16
+
17
+ - 6143000: A page actions menu (Export, Open in chat, Connect to MCP) now wraps a label too long for the right rail, as in many of the built-in translations (French, Portuguese, Russian, Swedish, and others) or with a long custom MCP client label. Before, the menu could reach past the rail's edge, and the rail, which scrolls, cut it off. A wrapped label keeps its icons beside its first line, and in a short window a menu opens upward only when it fits below the header, where the rail can show it, instead of tucking its top rows under the header.
18
+ - ffbb7c0: The API reference playground's proxy (`playground: { proxy: true }`) now works on Cloudflare Workers. Before, every Try it request it forwarded to one of the spec's servers failed with a 502 "Illegal invocation" error, because the proxy called the runtime's `fetch` in a way Workers rejects and Node allows.
19
+
3
20
  ## 2.2.1
4
21
 
5
22
  ### Patch Changes
@@ -3,7 +3,7 @@ import {
3
3
  resolveRuntimeDir,
4
4
  resolveProjectContext,
5
5
  loadConfig
6
- } from "./chunk-r5nm9w0c.js";
6
+ } from "./chunk-hwjspffr.js";
7
7
  import"./chunk-zccbjcj0.js";
8
8
  import {
9
9
  commandMeta,
@@ -11,24 +11,24 @@ import {
11
11
  } from "./index.js";
12
12
  import {
13
13
  readDevLock
14
- } from "./chunk-h0qwdbem.js";
15
- import"./chunk-k45sq16q.js";
14
+ } from "./chunk-r5ajrw1g.js";
15
+ import"./chunk-0xyedh7k.js";
16
16
  import {
17
17
  refuseIfEjected
18
- } from "./chunk-e1n41w9m.js";
19
- import"./chunk-hktq4j5r.js";
20
- import"./chunk-zxd5jrgx.js";
21
- import"./chunk-b680sv30.js";
22
- import"./chunk-rtvgmg2j.js";
23
- import"./chunk-j4nfgn2j.js";
18
+ } from "./chunk-1ay3hzn0.js";
19
+ import"./chunk-pxp1y6yz.js";
20
+ import"./chunk-gc7knd2s.js";
21
+ import"./chunk-2f6btenb.js";
22
+ import"./chunk-8h2t2vyj.js";
23
+ import"./chunk-znwhf37a.js";
24
24
  import"./chunk-jq5n4avg.js";
25
- import"./chunk-487b95qy.js";
26
- import"./chunk-9h8mh2tk.js";
25
+ import"./chunk-88q28zav.js";
26
+ import"./chunk-5f96yq2c.js";
27
27
  import {
28
28
  prepareProject
29
- } from "./chunk-t2h8pwy1.js";
30
- import"./chunk-gwy55cx3.js";
31
- import"./chunk-q1wwrxzw.js";
29
+ } from "./chunk-9emfspcp.js";
30
+ import"./chunk-426rytg6.js";
31
+ import"./chunk-rc2qk3qx.js";
32
32
 
33
33
  // src/cli/commands/sync.ts
34
34
  import { rm } from "node:fs/promises";
@@ -74,4 +74,4 @@ export {
74
74
  };
75
75
 
76
76
  //# debugId=67B7B6A961A6206764756E2164756E21
77
- //# sourceMappingURL=chunk-080mfch6.js.map
77
+ //# sourceMappingURL=chunk-0wt5amrk.js.map
@@ -18,7 +18,7 @@ import {
18
18
  distDir,
19
19
  adapterRoot,
20
20
  deployPlatform
21
- } from "./chunk-r5nm9w0c.js";
21
+ } from "./chunk-hwjspffr.js";
22
22
  import {
23
23
  trimChar,
24
24
  normalizeBasePath
@@ -1704,6 +1704,7 @@ import RootLayout from "blume/components/layout/RootLayout.astro";
1704
1704
  import { withBase, withMountedBase } from "blume/components/islands/base-path.ts";
1705
1705
  import { mountBasePath, stripBasePath } from "blume/core/base-path.ts";
1706
1706
  import { routeSetFor, servesRoute } from "blume/core/locale-links.ts";
1707
+ import { resolveLocalizable } from "blume/core/localizable.ts";
1707
1708
  import { resolveSlot } from "blume/components/layout/overrides.ts";
1708
1709
  ${componentImports}
1709
1710
  import data from "blume:data";
@@ -1728,8 +1729,10 @@ export function getStaticPaths() {
1728
1729
  editUrl: route.editUrl,
1729
1730
  entryId: route.entryId,
1730
1731
  fallback: route.fallback,
1732
+ hreflang: route.hreflang,
1731
1733
  indexable: route.indexable,
1732
1734
  lastModified: route.lastModified,
1735
+ published: route.published,
1733
1736
  locale: route.locale,
1734
1737
  monolingual: route.monolingual,
1735
1738
  route: route.path,
@@ -1740,7 +1743,7 @@ export function getStaticPaths() {
1740
1743
  }));
1741
1744
  }
1742
1745
 
1743
- const { entryId, collection, route, title, indexable, editUrl, lastModified, locale, alternates, fallback, monolingual, version, versionAlternates } = Astro.props;
1746
+ const { entryId, collection, route, title, indexable, editUrl, lastModified, published, locale, alternates, hreflang, fallback, monolingual, version, versionAlternates } = Astro.props;
1744
1747
  const entry = await getEntry(collection as CollectionKey, entryId);
1745
1748
  if (!entry) {
1746
1749
  return new Response(null, { status: 404 });
@@ -1790,19 +1793,23 @@ const base = data.config.site ? data.config.site.replace(/\\/$/, "") : null;
1790
1793
  const ogPath = data.config.og.enabled
1791
1794
  ? encodeURI(\`/og/\${route === "/" ? "index" : route.slice(1)}.png\`)
1792
1795
  : null;
1793
- // Absolute URLs also carry the deployment base (the page is served under it):
1794
- // \`site + base + path\`. Only absolutize root-relative paths: \`seo.image\` may be
1796
+ // Root-relative paths carry the deployment base (the page is served under it),
1797
+ // and the site too once it's known: \`site + base + path\`. \`seo.image\` may be
1795
1798
  // an external URL, which passes through verbatim (mirrors PageLayout). An
1796
- // authored \`seo.image\` keeps a base written by hand; the generated card is
1797
- // always mounted under it.
1799
+ // authored image keeps a base written by hand; the generated card is always
1800
+ // mounted under it.
1798
1801
  const absoluteOg = (path: string, based: (path: string) => string) =>
1799
- base && path.startsWith("/") ? \`\${base}\${based(path)}\` : path;
1800
- const ogImage = seo.image
1801
- ? absoluteOg(seo.image, withBase)
1802
+ path.startsWith("/") ? \`\${base ?? ""}\${based(path)}\` : path;
1803
+ // The page's own image, else the site's default for its locale.
1804
+ const selectedOgImage =
1805
+ seo.image ??
1806
+ (data.config.og.image && resolveLocalizable(data.config.og.image, locale, data.config.i18n?.defaultLocale));
1807
+ const ogImage = selectedOgImage
1808
+ ? absoluteOg(selectedOgImage, withBase)
1802
1809
  : ogPath && absoluteOg(ogPath, withMountedBase);
1803
- // Blume's generated card has known dimensions the layout can declare; a user's
1804
- // \`seo.image\` could be any size or format, so it gets none.
1805
- const ogGenerated = !seo.image && Boolean(ogPath);
1810
+ // Blume's generated card has known dimensions the layout can declare; an
1811
+ // authored image could be any size or format, so it gets none.
1812
+ const ogGenerated = !selectedOgImage && Boolean(ogPath);
1806
1813
 
1807
1814
  // X attribution: the site's account, plus a creator the page can claim for
1808
1815
  // itself (a guest post crediting its own author) over the configured default.
@@ -1898,11 +1905,12 @@ const canonical =
1898
1905
  : null);
1899
1906
  const effectiveNoindex = Boolean(seo.noindex) || (archived?.noindex ?? false);
1900
1907
 
1908
+ // hreflang names only indexable translations (see \`hreflangAlternates\`).
1901
1909
  const localeAlternates =
1902
1910
  i18n && base
1903
- ? (alternates ?? []).map((alt) => ({ hreflang: alt.locale, href: absolute(alt.path) }))
1911
+ ? (hreflang ?? []).map((alt) => ({ hreflang: alt.locale, href: absolute(alt.path) }))
1904
1912
  : [];
1905
- const defaultAlt = i18n ? (alternates ?? []).find((alt) => alt.locale === i18n.defaultLocale) : null;
1913
+ const defaultAlt = i18n ? (hreflang ?? []).find((alt) => alt.locale === i18n.defaultLocale) : null;
1906
1914
  const xDefault = defaultAlt && base ? absolute(defaultAlt.path) : null;
1907
1915
 
1908
1916
  // \`route\` arrives with \`basePath\` already applied, so the locale segment it
@@ -2062,7 +2070,8 @@ const LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);
2062
2070
  pageType={frontmatter.type}
2063
2071
  apiRail={remarkPluginFrontmatter?.${API_RAIL_KEY} === true}
2064
2072
  pageMode={frontmatter.mode}
2065
- published={frontmatter.date ?? frontmatter.changelog?.date ?? null}
2073
+ published={frontmatter.date ?? frontmatter.changelog?.date ?? published}
2074
+ authors={frontmatter.authors}
2066
2075
  lastModified={lastModified}
2067
2076
  noindex={effectiveNoindex}
2068
2077
  structuredDataEnabled={data.config.structuredData}
@@ -2092,8 +2101,9 @@ var changelogIndexTemplate = (options) => {
2092
2101
  // Generated by Blume. Do not edit.
2093
2102
  import RootLayout from "blume/components/layout/RootLayout.astro";
2094
2103
  import Changelog from "blume/components/content/Changelog.astro";
2095
- import { withMountedBase } from "blume/components/islands/base-path.ts";
2104
+ import { withBase, withMountedBase } from "blume/components/islands/base-path.ts";
2096
2105
  import { resolveSlot } from "blume/components/layout/overrides.ts";
2106
+ import { resolveLocalizable } from "blume/core/localizable.ts";
2097
2107
  import { layoutOverrides } from "../generated/components.ts";
2098
2108
  import data from "blume:data";
2099
2109
 
@@ -2115,11 +2125,17 @@ const base = data.config.site ? data.config.site.replace(/\\/$/, "") : null;
2115
2125
  const basedRoute = withMountedBase("/changelog");
2116
2126
  const canonical = base ? base + basedRoute : null;
2117
2127
 
2118
- // The generated OG card for this route (the /og endpoint emits it alongside
2119
- // the content-route cards), absolutized like the catch-all's so crawlers get
2120
- // a full URL when the site is known.
2128
+ // The site's default image, else the generated OG card for this route (the /og
2129
+ // endpoint emits it alongside the content-route cards), absolutized like the
2130
+ // catch-all's so crawlers get a full URL when the site is known.
2131
+ const defaultOgImage =
2132
+ data.config.og.image && resolveLocalizable(data.config.og.image, htmlLang, i18n?.defaultLocale);
2121
2133
  const ogPath = data.config.og.enabled ? withMountedBase("/og/changelog.png") : null;
2122
- const ogImage = ogPath && base ? base + ogPath : ogPath;
2134
+ const ogImage = defaultOgImage
2135
+ ? defaultOgImage.startsWith("/")
2136
+ ? (base ?? "") + withBase(defaultOgImage)
2137
+ : defaultOgImage
2138
+ : ogPath && base ? base + ogPath : ogPath;
2123
2139
 
2124
2140
  // The page chrome (h1, title, description) comes from the translatable
2125
2141
  // \`changelog\` group, which carries the \`changelog\` config's title and
@@ -2167,7 +2183,7 @@ const LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);
2167
2183
  searchEnabled={data.config.search.enabled}
2168
2184
  indexable={true}
2169
2185
  ogImage={ogImage}
2170
- ogGenerated={Boolean(ogImage)}
2186
+ ogGenerated={!defaultOgImage && Boolean(ogImage)}
2171
2187
  x={data.config.x}
2172
2188
  canonical={canonical}
2173
2189
  exportPdf={${options.exportPdf}}
@@ -2692,5 +2708,5 @@ var runtimeTsconfigTemplate = () => `${JSON.stringify({
2692
2708
 
2693
2709
  export { deployOutputDir, deployStaticDir, surfaceAdapterOutput, planComponentSlots, publishRuntimeModules, runtimeDependencies, EJECTED_CONFIG_HEADER, astroConfigTemplate, stagedContentDir, contentConfigTemplate, askEndpointTemplate, askComponentTemplate, searchEndpointTemplate, featuresTemplate, consentClientTemplate, searchClientTemplate, mixedbreadSearchEndpointTemplate, rawMarkdownEndpointTemplate, contentAssetsEndpointTemplate, mcpPageFile, mcpEndpointTemplate, playgroundProxyTemplate, staticJsonEndpointTemplate, rssEndpointTemplate, navFragmentTemplate, ogEndpointTemplate, scalarReferenceTemplate, catchAllPageTemplate, changelogIndexTemplate, notFoundPageTemplate, notFoundMarkdownTemplate, notFoundJsonTemplate, apiPagesIndexTemplate, apiPageTemplate, apiNavigationTemplate, apiSearchTemplate, apiNotFoundTemplate, exampleSlug, exampleWrapperTemplate, examplesRouteBase, exampleMapTemplate, examplesPageTemplate, runtimePackageTemplate, runtimeTsconfigTemplate };
2694
2710
 
2695
- //# debugId=89A234A45FD2077E64756E2164756E21
2696
- //# sourceMappingURL=chunk-k45sq16q.js.map
2711
+ //# debugId=56680ACE26D883A964756E2164756E21
2712
+ //# sourceMappingURL=chunk-0xyedh7k.js.map