layerchart-upset

UpSet gallery

Show setup script
<script lang="ts">
	import { UpSet } from '../../../lib/index.js';
	import { genres, makeData } from '../../demo-data.js';

	const data = makeData();

	let fMin = $state<number | undefined>(10);
	let fLimit = $state<number | undefined>(undefined);
	let fHidden = $state<string[]>([]);
	let filterCalls = $state<string[]>([]);
	let hiddenLimit = $state(8);
	let lastReport = $state('');
</script>

Hidden count (limit + footer)

limit drops intersections; onresult and the footer snippet say how many.

Show code
<UpSet
	{data}
	sets={genres}
	limit={hiddenLimit}
	onresult={(r) => (lastReport = JSON.stringify(r))}
>
	{#snippet footer({ shown, total })}
		<p class="desc" data-testid="hidden-footer">
			the largest {shown} of {total} combinations are drawn
		</p>
	{/snippet}
</UpSet>

Filter controls (bound)

filterControls renders a bar for min size, degree, limit and which sets to show; the filter props are bindable.

Show code
<UpSet
	{data}
	sets={genres}
	filterControls
	bind:minSize={fMin}
	bind:limit={fLimit}
	bind:hiddenSets={fHidden}
/>

Filter controls (controlled)

With controlled the controls only call onfilterchange.

Show code
<UpSet
	{data}
	sets={genres}
	filterControls
	controlled
	minSize={10}
	onfilterchange={(next, prev) => (filterCalls = [...filterCalls, `${prev.minSize ?? ''}->${next.minSize ?? ''}`])}
/>