Sortable, filterable, paginated table with row selection and CSV export — reactive computed pipeline
const raw = signal(data);
const searched = computed(() => raw.value.filter(r => matchesSearch(r, query.value)));
const filtered = computed(() => searched.value.filter(r => matchesFilters(r, filters.value)));
const sorted = computed(() => [...filtered.value].sort(compareFn(sortCol.value, sortDir.value)));
const paged = computed(() => sorted.value.slice(offset.value, offset.value + perPage.value));