Skip to content

User-driven column pinning

Auto-generated from the source archive. Do not edit by hand — rerun catalyst-changelog-sync instead.

  • <au-column-toggle> lock button calls column.pin('left') / column.pin(false), replacing the dead local signal. The toggle item’s sticky state is derived from column.getIsPinned().
  • Columns declared with sticky: 'left' | 'right' in DataTableColumnDef are hard locks: the lock button renders with a badge and is not clickable. The dev’s intent is preserved.
  • The toggle splits into two cdkDropList zones (sticky-left and scroll), separated by an <hr> with a label. Drag-and-drop is restricted to the same zone.
  • <au-data-table> switches from a manual stickyOffsets computed to TanStack’s native column.getStart('left') / column.getAfter('right') — the contiguous-sticky invariant is now framework-enforced.
  • Pinning + visibility + order persist via localStorage keyed by route + tableId. Reset clears the entry. A soft warning fires when pinned-column widths exceed 50% of the visible viewport.

The lock button used to be a stub. Users can now pin columns from the UI, drag-reorder within each zone, and have the layout survive a refresh. The migration to TanStack pinning also makes the “sticky columns are contiguous” invariant a framework guarantee instead of a manual offset computation, removing a class of layout drift bugs that could surface as the table state grew.


View original proposal