Skip to content

fix(docs): restore chart component pages in the appkit-ui reference - #713

Open
fjakobs wants to merge 1 commit into
mainfrom
fjakobs/la-2229-docs-chart-components
Open

fjakobs wants to merge 1 commit into
mainfrom
fjakobs/la-2229-docs-chart-components

Conversation

@fjakobs

@fjakobs fjakobs commented Nov 6, 2026

Copy link
Copy Markdown
Collaborator

Problem

The chart components (AreaChart, BarChart, DonutChart, HeatmapChart, LineChart, PieChart, RadarChart, ScatterChart) are missing from the appkit-ui API reference, both on the docs site and in the appkit docs CLI index that coding agents rely on. On the current release:

$ npx @databricks/appkit docs --full | grep -i chart
- [GenieQueryVisualization](./docs/api/appkit-ui/genie/GenieQueryVisualization.md): Renders a chart + data table for a Genie query result.

$ npx @databricks/appkit docs ./docs/api/appkit-ui/data/BarChart.md
Error: Documentation file not found: ./docs/api/appkit-ui/data/BarChart.md

docs/docs/api/appkit-ui/data/ contains only DataTable.mdx, so agents end up reading node_modules/@databricks/appkit-ui/dist/**/*.d.ts to find chart props such as xKey, yKey, orientation, valueFormatter and colorPalette, and to learn about data vs queryKey.

Root cause

The chart pages came from doc-only wrappers (export function BarChartDoc(props: BarChartProps), and so on), and tools/generate-component-mdx.ts only documented chart components whose name ends in Doc. When knip was introduced (#170), it flagged those wrappers as unused exports. They were made private (function _BarChartDoc), react-docgen-typescript stopped seeing them, and regenerating the docs deleted the 8 chart pages in that same commit.

Fix

  • Generator: react-docgen-typescript already extracts the real exported components (export const BarChart = createChart<BarChartProps>(...)), including their JSDoc and full typed props. So the generator now documents those directly, one page per chart (pie/index.tsx exports both PieChart and DonutChart), and the *Doc suffix handling is removed. These components are public API re-exported from charts/index.ts, so knip can't remove them.
  • Chart sources: removed the 8 dead private _XChartDoc wrappers and their duplicated JSDoc. No runtime or public API change.
  • Prop types: union props were rendered as a bare enum (88 rows across the appkit-ui reference). They now show their literal values, e.g. orientation → "horizontal" | "vertical" and colorPalette → "categorical" | "sequential" | "diverging". Unions with more than 8 members fall back to the declared type name (e.g. keyof HTMLElementTagNameMap) so tables stay readable.
  • Regenerated docs/docs/api/appkit-ui: adds the 8 chart pages under data/ and updates the Type column of the previously-enum rows. No other generated content changes.

Tests

  • New tools/generate-component-mdx.test.ts: every component created with createChart in charts/*/index.tsx must have a generated data/<Name>.mdx page with a props table (including queryKey and data). I checked that it fails when a chart page is removed, which is what happened in chore: add knip #170.
  • pnpm test: 310 files and 5936 tests pass.

Verification

This change only affects the generated documentation and the appkit docs CLI output. It doesn't change runtime behavior, so it needs no workspace. I verified it end to end through the real distribution path: pnpm build && pnpm docs:build, then packing @databricks/appkit with pnpm tarball, installing that tarball into a clean project and running the CLI:

$ npx appkit docs --full | grep -i chart
- [AreaChart](./docs/api/appkit-ui/data/AreaChart.md): Area Chart component for trend visualization with filled areas.
- [BarChart](./docs/api/appkit-ui/data/BarChart.md): Bar Chart component for categorical comparisons.
- [DonutChart](./docs/api/appkit-ui/data/DonutChart.md): Donut Chart component (Pie chart with inner radius).
- [HeatmapChart](./docs/api/appkit-ui/data/HeatmapChart.md): Heatmap Chart component for matrix-style data visualization.
- [LineChart](./docs/api/appkit-ui/data/LineChart.md): Line Chart component for time-series and trend visualization.
- [PieChart](./docs/api/appkit-ui/data/PieChart.md): Pie Chart component for proportional data visualization.
- [RadarChart](./docs/api/appkit-ui/data/RadarChart.md): Radar Chart component for multi-dimensional data comparison.
- [ScatterChart](./docs/api/appkit-ui/data/ScatterChart.md): Scatter Chart component for correlation and distribution visualization.
- [GenieQueryVisualization](./docs/api/appkit-ui/genie/GenieQueryVisualization.md): Renders a chart + data table for a Genie query result.

$ npx appkit docs ./docs/api/appkit-ui/data/BarChart.md
# BarChart
...
| `queryKey`       | `string`                                      | ...
| `data`           | `ChartData`                                   | ...
| `colorPalette`   | `"categorical" \| "sequential" \| "diverging"` | ...
| `xKey`           | `string`                                      | ...
| `yKey`           | `string \| string[]`                          | ...
| `valueFormatter` | `ChartValueFormatter`                         | ...
| `orientation`    | `"horizontal" \| "vertical"`                  | ... | `"vertical"`

appkit docs now reports 73 pages in the appkit-ui API reference section (65 before). pnpm check:fix, pnpm -r typecheck and pnpm knip pass.

Follow-up (not in this PR)

The generated "Usage" snippet on every appkit-ui page imports from @databricks/appkit-ui, but the package has no root export. The working path is @databricks/appkit-ui/react, which the Example sections already use. That fix is a one-line generator change that regenerates every page, so it's left for a separate PR.

This pull request and its description were written by Isaac.

The chart pages (BarChart, LineChart, AreaChart, PieChart, DonutChart,
HeatmapChart, RadarChart, ScatterChart) vanished from the docs and from
`appkit docs --full` in #170: knip flagged the doc-only `*ChartDoc`
wrapper exports as unused, they were made private, and the generator only
documented charts named `*Doc`.

react-docgen-typescript already reads the exported `createChart` consts
with their JSDoc and full props, so document those directly and delete
the dead wrappers. They are public API, so knip can't drop them again.

Also render union ("enum") prop types as their literal values, e.g.
`"horizontal" | "vertical"` instead of `enum`, falling back to the type
name for unions of more than 8 values.

Adds a test that every chart component has a generated page with a
props table.

Co-authored-by: Isaac <no-reply@databricks.com>
Signed-off-by: Fabian Jakobs <fabian.jakobs@databricks.com>
@fjakobs
fjakobs requested a review from a team as a code owner November 6, 2026 15:25
@fjakobs
fjakobs requested a review from calvarjorge November 6, 2026 15:25
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

📦 Bundle size report

Compared against bundle-size-baseline.json (main).

@databricks/appkit

npm tarball (packed): 1.2 MB (+7 B) — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 1.3 MB 459 KB
Type declarations 465 KB 169 KB (+1 B)
Source maps 2.5 MB 859 KB
Other 11 KB 3.7 KB
Total 4.2 MB 1.5 MB (+1 B)
Per-entry composition (own code — deps external (as shipped))
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
. 106 KB 2.5 KB 109 KB external 344 KB
./beta 103 KB 482 B 104 KB external 310 KB
./testing 45 KB 32 KB 77 KB external 223 KB
./tsdown 520 B 0 B 520 B external 813 B
./type-generator 26 KB 0 B 26 KB external 74 KB

Chunks:

Entry Chunk Load Size (gz)
. index.js initial 102 KB
. utils.js initial 4.6 KB
. remote-tunnel-manager.js lazy 2.5 KB
./beta beta.js initial 83 KB
./beta modular.js initial 6.0 KB
./beta stream-manager.js initial 5.9 KB
./beta service-context.js initial 4.2 KB
./beta databricks.js initial 3.3 KB
./beta client.js initial 647 B
./beta index.js initial 20 B
./beta supervisor-api.js lazy 192 B
./beta databricks.js lazy 176 B
./beta index.js lazy 114 B
./testing manifest.js initial 32 KB
./testing index.js initial 10 KB
./testing wide-event-emitter.js initial 2.9 KB
./testing index.js lazy 28 KB
./testing remote-tunnel-manager.js lazy 2.5 KB
./testing utils.js lazy 1.8 KB
./tsdown index.js initial 520 B
./type-generator index.js initial 26 KB

@databricks/appkit-ui

npm tarball (packed): 397 KB (-278 B) — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 429 KB 147 KB
Type declarations 267 KB 98 KB
Source maps 848 KB (-5.2 KB) 285 KB (-757 B)
CSS 16 KB 3.2 KB
Total 1.5 MB (-5.2 KB) 533 KB (-757 B)
Per-entry composition (consumer bundle — deps bundled, peerDeps external)
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
./js 5.3 KB 49 KB 55 KB 208 KB 14 KB
./js/beta 2.1 KB 0 B 2.1 KB 0 B 5.0 KB
./react 433 KB 49 KB 481 KB 1.3 MB 177 KB
./react/beta 4.9 KB 0 B 4.9 KB 0 B 12 KB

Chunks:

Entry Chunk Load Size (gz)
./js index.js initial 5.2 KB
./js chunk initial 120 B
./js apache-arrow lazy 49 KB
./js/beta beta.js initial 2.1 KB
./react index.js initial 431 KB
./react tslib initial 2.1 KB
./react apache-arrow lazy 49 KB
./react/beta beta.js initial 4.9 KB

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

🤖 AppKit PR bot

🔬 Run evals

Start an eval for this PR from the evals-monitor app: Go to Evals Monitor →

📦 Try this PR's app template

Scaffolds a new app from this PR's SDK build. Run it in any folder (requires the GitHub CLI — gh auth login — and the Databricks CLI):

gh run download 42242950011 -R databricks/appkit -n appkit-template-0.90.0-pr.e4cdd7a-fjakobs-la-2229-docs-chart-components-713 -D appkit-pr-713 \
  && unzip -o "appkit-pr-713/appkit-template-0.90.0-pr.e4cdd7a-fjakobs-la-2229-docs-chart-components-713.zip" -d "appkit-pr-713" \
  && databricks apps init --template "appkit-pr-713"

The template pins @databricks/appkit and @databricks/appkit-ui to tarballs built from this branch, so the scaffolded app runs against this PR's code.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants