diff --git a/.changeset/bright-penguins-preview.md b/.changeset/bright-penguins-preview.md new file mode 100644 index 00000000..8a916697 --- /dev/null +++ b/.changeset/bright-penguins-preview.md @@ -0,0 +1,5 @@ +--- +'@tanstack/react-charts-catalog': patch +--- + +Keep the scatterplot with marginal histograms visible in compact catalog previews by omitting its color legend only in preview mode. diff --git a/benchmarks/conformance/cases/57-scatter-marginal-histograms/tanstack.ts b/benchmarks/conformance/cases/57-scatter-marginal-histograms/tanstack.ts index 0f9886cd..001a7f7d 100644 --- a/benchmarks/conformance/cases/57-scatter-marginal-histograms/tanstack.ts +++ b/benchmarks/conformance/cases/57-scatter-marginal-histograms/tanstack.ts @@ -37,6 +37,7 @@ function scatterRows(input: ConformanceInput) { function scatterMarginalChart( rows: readonly CompletePenguin[], scatter: readonly CompletePenguin[], + showLegend: boolean, ) { const xBins = binX(rows, { value: 'flipper_length_mm', @@ -106,7 +107,9 @@ function scatterMarginalChart( }, color: { range: colors, - legend: colorLegend({ label: 'Species' }), + ...(showLegend + ? { legend: colorLegend({ label: 'Species' }) } + : {}), }, }), }, @@ -166,7 +169,7 @@ function scatterMarginalChart( export const scatterMarginalDefinition = (input: ConformanceInput) => { const rows = scatterRows(input) - return scatterMarginalChart(rows, rows) + return scatterMarginalChart(rows, rows, true) } const catalogScatterMarginalDefinition = (input: ConformanceInput) => { @@ -177,6 +180,7 @@ const catalogScatterMarginalDefinition = (input: ConformanceInput) => { (row) => row.flipper_length_mm, (row) => row.body_mass_g, ]), + input.preview !== true, ) } diff --git a/packages/react-charts-catalog/src/preview.test.tsx b/packages/react-charts-catalog/src/preview.test.tsx index d994da14..99a3a625 100644 --- a/packages/react-charts-catalog/src/preview.test.tsx +++ b/packages/react-charts-catalog/src/preview.test.tsx @@ -122,6 +122,59 @@ describe('catalog previews', () => { expect(quantileHtml).toContain('ts-chart__area') }) + it('keeps the compact scatter-marginal preview visible without changing its full legend', () => { + const ScatterMarginals = component('57-scatter-marginal-histograms') + const previewHtml = renderToStaticMarkup( + , + ) + const previewContainer = document.createElement('div') + previewContainer.innerHTML = previewHtml + const main = previewContainer.querySelector( + 'g[data-ts-key="penguin-marginals:main:view"]', + ) + const right = previewContainer.querySelector( + 'g[data-ts-key="penguin-marginals:right:view"]', + ) + const yAxis = main?.querySelector( + 'line[data-ts-key="y-axis"]', + ) + const rightBars = [ + ...(right?.querySelectorAll('g.ts-chart__rect rect') ?? + []), + ] + const mainPlotHeight = Math.abs( + Number(yAxis?.getAttribute('y2')) - Number(yAxis?.getAttribute('y1')), + ) + const rightMarginalBarHeight = Math.max( + ...rightBars.map((bar) => Number(bar.getAttribute('height'))), + ) + + expect(previewHtml).toContain('viewBox="0 0 288 192"') + expect(previewContainer.querySelector('.ts-chart__legend')).toBeNull() + expect(mainPlotHeight).toBeGreaterThan(24) + expect(rightMarginalBarHeight).toBeGreaterThan(2) + + const fullHtml = renderToStaticMarkup( + , + ) + const fullContainer = document.createElement('div') + fullContainer.innerHTML = fullHtml + expect( + fullContainer.querySelector('.ts-chart__legend')?.textContent, + ).toContain('Species') + }) + it('preserves every server-rendered case while reducing the landing payload', () => { const full = renderCatalog(false) const preview = renderCatalog(true)