Pin stable row IDs into top, center, and bottom collections with rowPinningFeature and keepPinnedRows. Load for filtering/pagination visibility, explicit region rendering, or renderer-owned sticky CSS.
59
70%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./packages/table-core/skills/row-pinning/SKILL.mdThis skill builds on core and table-features. Pinning creates row regions; the renderer controls order and sticky layout.
import { rowPinningFeature, tableFeatures } from '@tanstack/table-core'
type Person = { id: string; name: string }
export const features = tableFeatures({ rowPinningFeature })
export const options = {
getRowId: (row: Person) => row.id,
keepPinnedRows: true,
}const regions = [
table.getTopRows(),
table.getCenterRows(),
table.getBottomRows(),
]
for (const rows of regions) rows.forEach(renderRow)Render each region explicitly if the visual order matters.
Wrong: const options = { getRowId: (_row: Person, index: number) => String(index) }
Correct: const options = { getRowId: (row: Person) => row.id }
Indexes change under sorting, filtering, pagination, and insertion.
Source: docs/framework/react/guide/row-pinning.md
Wrong: row.pin('top')
Correct: topRowElement.style.position = 'sticky'
Pinning state does not style or place DOM elements.
Source: examples/react/row-pinning/src/main.tsx
keepPinnedRows: true is the default. Pinned rows stay visible in their
pinned region even when filtering or pagination removes them from the center
row model.keepPinnedRows: false limits pinned rows to those present in the current
filtered and paginated row model.Choose explicitly based on product behavior; neither value is inherently wrong.
Source: packages/table-core/src/features/row-pinning/rowPinningFeature.types.ts
Inspect node_modules/@tanstack/table-core/dist/features/row-pinning/ for region getters, row APIs, and keepPinnedRows semantics.
9e523bc
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.