Sortable, searchable, paginated data tables for HubSpot. Column data types, sticky headers, a sticky first column, and a stacked card layout on small screens. Sorting runs on the column data type, so numbers and dates order by value. Every colour, size and radius comes from a field.
This instance carries no overrides. It is the module exactly as it drops onto a page: Inter, hairline borders on a white card, a ten pixel corner radius, comfortable row height, numbered pages. The footer bar carries the previous arrow on the left, the page numbers in the middle and the next arrow on the right, with the rows per page dropdown beside the previous arrow. Change that dropdown and the table redraws at the new size. Sorting, search and pagination all work before a single field is edited.
Open Sans throughout, a blue accent on the sort indicator and the active page, compact row density and striped rows. Pagination runs on a load more button instead of pages, and the rows per page dropdown is switched off, so the footer bar carries the one control. Nothing here is a different module, only field values on the Style tab.
The same table on a dark section. Surface, border, text and stripe colours come from the colour fields; the accent drives the sort arrow, the check icon and the current page marker. The rows per page dropdown carries its own dark palette and its own focus ring, and it sits on the right of the next arrow rather than the left of the previous one. Small Screen Layout is set to stack, so under seven hundred pixels each row becomes a labelled card.
Table Layout set to Framed. The column headers sit straight on the tinted surface with no bar behind them, the rows sit in an inset white card with hairline dividers, and the total sits on the surface below the card. The status column renders as a pill with a coloured dot, and each dot colour is matched to its cell value in a repeater. Rows per page reads Show and offers a shorter set of options.
Data Table Pro turns rows and columns entered in the page editor into a table that sorts, searches, pages and reflows. Columns are defined once and carry their own header, alignment, width and data type. Rows reference those columns by position.
Each column sets a header, a data type, an alignment, a width and an optional prefix and suffix.
Mar 14, 2027 and 2027-03-14 both work.Width accepts narrow, auto or wide. The first column takes its width from
Table Shell › First Column Width so the pinned column stays a fixed size.
Every cell holds a value, an optional link and an emphasis setting. Emphasis switches between plain, strong, muted, badge and status pill. A cell with a link renders as an underlined anchor in the link colour.
Setting a cell's emphasis to status pill renders it as a coloured dot followed by the label.
Status Pills › Status Colours is a repeater pairing a cell value with a dot colour, matched
without regard to case, so Active, Pending and whatever else the table carries each
get their own dot. A value with no match falls back to the muted cell colour. The pill background, text
colour, border, radius, text size, padding, dot size and the space between the dot and the label are fields
under Style › Cells. The dot is hidden from assistive technology, so the pill reads as its
label alone.
Table Behaviour › Table Layout chooses the arrangement.
Framed is an arrangement, not a set of fixed values: the surface colour, radius and padding, the card
colour, radius, border colour and width, the header label colour and every part of the totals bar are fields
under Style › Framed Layout. Framed carries its totals from
Footer Row › Totals Label and Totals Value rather than from the grid cells,
and it leaves the header in place while the page scrolls, since there is no bar behind it to pin.
Sortable headers render as buttons, so they are reachable with the keyboard and operable with Enter or
Space. A first click sorts ascending, a second click reverses it. The column header carries
aria-sort and the chevron pair shows the active direction. Set
Sort On Load — Column to a column position to sort the table as it renders; zero keeps the
rows in the order they were entered. Individual columns can opt out with Sortable.
The search field filters rows against every cell value in the row, across the whole table rather than the current page. The result count sits in a polite live region so screen readers hear the new total. When nothing matches, the table and the pagination controls are replaced by the empty state, whose title and text are both editable.
Pagination › Mode chooses between showing every row, numbered pages, and a load more
button.
Under numbered pages the footer bar runs on space-between in three parts: the previous control
at the start, the page numbers in the middle, the next control at the end. Previous and next carry an arrow
and no text, so each takes its accessible name from
Previous Button Description and Next Button Description, and each disables at its
end of the range. Page buttons carry aria-current. Sorting or searching returns to the first
page. Below the mobile breakpoint the bar wraps: the arrows and the rows per page control hold the first
line, the page numbers take a line of their own beneath them.
Arrow size, arrow button padding and the space between the three groups are all fields under
Style › Pagination & Buttons.
Rows Per Page Options is a repeater, so the options are yours to define. Each carries the text
the reader sees and the row count it applies, and a count of zero makes an option that shows every row.
Rows Per Page — Selected On Load picks which one starts selected, and that option sets the
starting page size. Rows Per Page Label sets the wording beside it, and
Rows Per Page Placement puts it at either end of the bar. Switching
Show Rows Per Page Control off removes it and hands the page size back to
Rows Per Page.
Choosing a new size redraws the table straight away, returns to the first page, and leaves the search text
and the sorted column exactly as they were. The control is a native select with a real
label bound to it, so it reaches the keyboard and the screen reader the way a dropdown should.
Its background, border colour and width, radius, text colour, size, padding and focus ring are all fields
under Style › Rows Per Page Control.
With Sticky Header on, the header bar pins to the top of the window while the page scrolls
past the table and releases as the table ends. It stays aligned with the body when the table scrolls
sideways. Sticky First Column pins the first column against horizontal scrolling.
Small Screen Layout chooses between two behaviours below the mobile breakpoint.
Every colour, size, radius, border width and spacing value on the Style tab writes a CSS custom property,
so nothing in the markup carries an inline style. The body font and the heading font inherit from the host
theme, as do the accent colour and the link colour. Density switches the vertical cell padding between the
value you set and that value scaled by Compact Density Scale.
aria-sort updated on the active column as the direction changes.prefers-reduced-motion.The first instance runs on field defaults. The rest change only Style tab values, behaviour switches and content. The last one sets Table Layout to Framed, which is why it reads as a different product while running the same module.