CtrlK
BlogDocsLog inGet started
Tessl Logo

expanding

Expand hierarchical subrows or custom detail panels with rowExpandingFeature, expandedRowModel, getSubRows, getRowCanExpand, manualExpanding, and paginateExpandedRows. Load when expansion state changes but no UI appears.

64

Quality

76%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./packages/table-core/skills/expanding/SKILL.md
SKILL.md
Quality
Evals
Security

This skill builds on core, table-features, and client-vs-server. Expansion controls row-tree inclusion; the renderer owns disclosure controls and detail panels.

Setup

import {
  createExpandedRowModel,
  rowExpandingFeature,
  tableFeatures,
} from '@tanstack/table-core'

type Node = { id: string; children?: Node[] }
export const features = tableFeatures({
  rowExpandingFeature,
  expandedRowModel: createExpandedRowModel(),
})
export const options = { getSubRows: (row: Node) => row.children }

Core Patterns

const detailOptions = { getRowCanExpand: () => true }
const isDetailOpen = row.getIsExpanded()

For custom detail UI, render an additional row/panel when isDetailOpen is true.

Common Mistakes

[HIGH] Omitting the subrow accessor

Wrong: const options = { data: nestedRows }

Correct: const options = { data: nestedRows, getSubRows: (row: Node) => row.children }

Nested object structure is not inferred automatically.

Source: docs/framework/react/guide/expanding.md#table-rows-as-expanded-data

[HIGH] Expecting detail markup from state

Wrong: row.toggleExpanded(true)

Correct: if (row.getIsExpanded()) renderDetail(row.original)

Table is headless and cannot render a custom detail panel.

Source: docs/framework/react/guide/expanding.md#custom-expanding-ui

[HIGH] Misreading pagination placement

Wrong: const options = { paginateExpandedRows: false }; const leafOnlyPages = true

Correct: const options = { paginateExpandedRows: false }; const descendantsStayWithParent = true

This option controls whether expansion happens before or after pagination; it does not make page size count only leaf rows.

Source: packages/table-core/src/features/row-expanding/rowExpandingFeature.types.ts

API Discovery

Inspect node_modules/@tanstack/table-core/dist/features/row-expanding/ for expansion state, row APIs, and model placement.

Repository
TanStack/table
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.