blume 1.6.4 → 1.6.5

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 CHANGED
@@ -1,5 +1,24 @@
1
1
  # blume
2
2
 
3
+ ## 1.6.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 9753355: Render a spec `description` as the Markdown it is. An OpenAPI description is Markdown by specification, but schema properties, parameters, request bodies, responses, authorization schemes, AsyncAPI messages and every GraphQL description — field, enum value and operation return type — printed it as plain text — so a spec generated from code docstrings showed its own `**asterisks**` and backticks, a numbered list rendered as one long line, and because HTML collapses newlines every paragraph ran together into a single wall of text. The operation description on the same page never had this problem, because it is emitted into the MDX body and goes through the full pipeline; the two rendered side by side is what made it obvious. Descriptions now render through `marked` — synchronous, already a dependency, and already how the Ask AI island renders model Markdown — since the full pipeline is async and built for whole documents while these are thousands of short strings per build.
8
+
9
+ Only a link the author clearly meant becomes an anchor: written as a link, to an absolute URL, a root-relative path, a fragment or a `mailto:`. Everything else keeps its raw source text, because a description is often prose that was never Markdown. GFM autolinks bare URLs, `www.` hosts and email addresses, and spec descriptions are full of example hosts (`https://myorg.my.salesforce.com`, `www.yourstore.myshopify.com`) that turned into links to hosts nobody should visit; worse, regex and format notation reads as link syntax — Debezium's column-list wording `schemaName[.]tableName[.](columnName1|columnName2)` is literally `[text](href)`, which both produced a broken link and deleted the notation, since the link text is only `.`. An image is held to the same policy. Raw HTML is escaped rather than passed through, for the same reason the Ask AI island runs its Markdown through DOMPurify: this is data lifted out of a file and interpolated into the page.
10
+
11
+ A GFM table in a description is wrapped in the same scroll frame the body pipeline gives every other table, because `set:html` bypasses the plugin that would have done it and a description sits in a narrower column than the body.
12
+
13
+ Styling lives in one style block on a single class rather than in per-element utilities. Written as utilities it repeated the same ~620 characters on every description, which on a large reference page is 1.5 MB of identical class attributes and enough to push pages past Googlebot's 2 MB crawl limit; `blume audit` flags that as an indexability error.
14
+ - dd32b7b: Add `analytics.cloudflare` for Cloudflare Web Analytics. Pass the site token from the dashboard's JS snippet — `analytics: { cloudflare: { token } }` — and Blume renders the beacon tag, the same way `posthog` takes a key. Until now the beacon meant hand-writing a `scripts` entry with the beacon URL and a JSON `data-cf-beacon` attribute.
15
+
16
+ This is for sites Cloudflare doesn't proxy. A proxied zone with automatic Web Analytics on already injects the beacon at the edge and should leave the option unset, or every pageview is counted twice; the analytics docs now spell out that distinction.
17
+ - 597d824: Give a reference row room for what it holds. The row was scaled for a one-line description — 4px between the property name and its description, 8px before the disclosure, 12px of row padding — but a description is a block, so at 4px it sat closer to the label above it than its own paragraphs sat to each other. That inversion is what made a dense reference page read as a wall rather than as rows, and the disclosure below it touched the next row's divider. Every component that draws a reference row now shares one scale: 8px between a row's own lines, 12px before a disclosure, 16px of row padding. Measured on one operation page, the gap between two properties goes from 25px to 33px.
18
+
19
+ Table cells gain the same treatment for the same reason. At 0.5rem of block padding against a line-height near 1.7, a cell whose content wrapped put more space between its own two lines than between itself and the next row. The inline padding is unchanged on purpose: widening it comes out of column width in a capped article, and on one corpus it pushed cells that fit on two lines onto three, spending the space it had just bought.
20
+ - b03b43f: Update dependencies: Mermaid 12, React 19.3, Zod 4.6, `ai` 7.0.99, `@pierre/diffs` 1.4.2, and the latest patch releases of the remaining runtime dependencies. Mermaid 12 makes the ELK layout and the "neo" look its defaults; Blume pins the previous dagre layout and classic look so existing diagrams render as before and the ELK engine only downloads for diagrams that opt in through their own front matter.
21
+
3
22
  ## 1.6.4
4
23
 
5
24
  ### Patch Changes
package/dist/cli/index.js CHANGED
@@ -10908,6 +10908,9 @@ var analyticsScriptSchema = z2.strictObject({
10908
10908
  message: "An analytics script must set exactly one of `src` or `content`."
10909
10909
  });
10910
10910
  var analyticsConfigSchema = z2.strictObject({
10911
+ cloudflare: z2.strictObject({
10912
+ token: z2.string().min(1)
10913
+ }).optional(),
10911
10914
  posthog: z2.strictObject({
10912
10915
  host: z2.string().optional(),
10913
10916
  key: z2.string()
@@ -20952,9 +20955,16 @@ blume-diff {
20952
20955
  /* Restore inner padding on every cell. Typography zeroes the first/last cell's
20953
20956
  inline padding so a borderless table aligns to the prose margin; inside the
20954
20957
  framed wrapper that leaves edge text touching the border. The :is() selector
20955
- outweighs Typography's :where()-scoped rules so the outer columns get it too. */
20958
+ outweighs Typography's :where()-scoped rules so the outer columns get it too.
20959
+
20960
+ The block padding is 0.75rem against a table line-height near 1.7: at 0.5rem a
20961
+ cell whose content wrapped put MORE space between its own two lines than
20962
+ between itself and the next row, so a table of wrapping cells read as one
20963
+ block rather than as rows. The inline padding stays where it was, deliberately
20964
+ — widening it comes out of column width in a capped article, and on one corpus
20965
+ that pushed cells fitting on two lines onto three. */
20956
20966
  .blume-table-scroll :is(th, td) {
20957
- padding: 0.5rem 0.75rem;
20967
+ padding: 0.75rem;
20958
20968
  }
20959
20969
  /* Keep column labels on one line so a two-word header does not wrap into a
20960
20970
  ragged stack; the table just scrolls a little wider instead. Body cells keep
@@ -21767,9 +21777,9 @@ var islandFrameworkWarnings = (frameworks, root) => {
21767
21777
  }
21768
21778
  return warnings;
21769
21779
  };
21770
- var deploymentAdapterWarnings = (deployment, root) => {
21780
+ var deploymentAdapterWarnings = (deployment, root, pkgDir = packageRoot()) => {
21771
21781
  const dep = deployment.output === "server" && deployment.adapter ? DEPLOYMENT_ADAPTER_DEPS.get(deployment.adapter) : undefined;
21772
- if (dep && !(canResolveFrom(root, dep) || canResolveFrom(packageRoot(), dep))) {
21782
+ if (dep && !(canResolveFrom(root, dep) || canResolveFrom(pkgDir, dep))) {
21773
21783
  return [
21774
21784
  `Deployment adapter "${deployment.adapter}" needs "${dep}", which isn't installed. Run \`npm install ${dep}\` (or your package manager's equivalent).`
21775
21785
  ];
@@ -27616,5 +27626,5 @@ process.on("unhandledRejection", (error) => {
27616
27626
  });
27617
27627
  runMain(main, { rawArgs: normalizeHostArgs(process.argv.slice(2)) });
27618
27628
 
27619
- //# debugId=4199DBFD57FB41A964756E2164756E21
27629
+ //# debugId=AF304483DD33488E64756E2164756E21
27620
27630
  //# sourceMappingURL=index.js.map