Live demo — this example is server-driven; run the showcase locally for the interactive version.

Table

Use Table straight from a Qute template — parameters and slots instead of Java builders. This reference is generated from the runtime template sources: each template documents its parameters and slots in the header comment shown beneath its include line.

Templates

table

{#include components/data-display/table /}
Table — PatternFly v6 
 Two modes.
   Model-driven: pass table=<org.sitenetsoft.quarkus.pha.model.Table> (built via Table.builder()) —
     caption, header (incl. sort buttons / selection / toggles), bodies, action cells and footer all
     render from the model.
   Slot shell: omit table and supply thead/tbody markup yourself through the content slot,
     composing table-sort-th / table-check-th / table-check-td / table-toggle-td /
     table-tbody-expandable / table-expandable-tr / table-tree-tr includes for the interactive anatomy.
     Shell params (all optional): id; compact; gridMd; striped; borderless; expandable; ariaLabel;
     stickyHeader / stickyFooter — pf-m-sticky-{header|footer}; scrollable — wraps the table in the
     scroll-outer/inner wrappers (keyboard-scrollable region labelled by ariaLabel), with optional
     scrollStyle on the inner wrapper (e.g. "max-height: 20rem"); treeView — pf-m-tree-view;
     treeGridLg — pf-m-tree-view-grid-lg; treeGrid — role="treegrid" (parent-bearing trees; pass with
     treeView); modifiers — extra pf-m-* classes appended verbatim (e.g. "pf-m-plain", "pf-m-animate-expand").

table-check-td

{#include components/data-display/table-check-td /}
Row-selection cell (pure Qute) for the table component's slot mode. 
 Required: one of ariaLabel / ariaLabelledby — accessible name for the checkbox. 
 Optional: name — input name (e.g. "checkrow-1"; radios in one table share a name);
             radio — render a radio instead of a checkbox (single-select tables);
             checked — initially selected;
             modelExpr — x-model an Alpine boolean instead of plain checked state.

table-check-th

{#include components/data-display/table-check-th /}
Select-all header cell (pure Qute) for the table component's slot mode: checking it drives every tbody row checkbox
(and fires their change events), exactly like the model-driven header. 
 Optional: ariaLabel (default "Select all
rows").

table-expandable-tr

{#include components/data-display/table-expandable-tr /}
Expandable detail row (pure Qute) for the table component's slot mode. Rendered inside a
   table-tbody-expandable, after the data row whose table-toggle-td flips the shared expr. 
 Required: colspan — data columns the detail cell spans. 
 Optional: pad — leading empty cells before the detail cell (default 1 for the toggle column;
             use 2 when a selection column follows the toggle); expr — the Alpine boolean
             (default 'open'); noPadding — pf-m-no-padding on the detail cell; noBackground —
             pf-m-no-background on the detail content. 
 Slot: {#detail} — the expanded content.

table-sort-th

{#include components/data-display/table-sort-th /}
Sortable column header (pure Qute) for the table component's slot mode. 
 Required: label. 
 Optional: sort — 'asc' | 'desc' (omit for an unsorted column: aria-sort="none", double-arrow icon);
             attrs — verbatim attributes on the button wiring the actual sort action, e.g.
             attrs='hx-get="/api/htmx/table-sort?col=name&dir=desc" hx-target="#my-table" hx-swap="outerHTML"'
             or an Alpine @click. The header renders the state; sorting stays server-driven (HTMX)
             or consumer-wired (Alpine).

table-tbody-expandable

{#include components/data-display/table-tbody-expandable /}
Expandable row group (pure Qute) for the table component's slot mode: one tbody per expandable row, owning the Alpine
open state. Put the data row (with a table-toggle-td) and its table-expandable-tr inside the {#rows} slot; all three
default to the same 'open' expr. 
 Optional: expr — the Alpine boolean name (default 'open'); expanded — initially
open (default false).

table-toggle-td

{#include components/data-display/table-toggle-td /}
Expand-toggle cell (pure Qute) for the table component's slot mode: the chevron button flipping an Alpine boolean.
Pair with table-tbody-expandable + table-expandable-tr sharing the same expr. 
 Required: ariaLabel. 
 Optional:
expr — the Alpine boolean to toggle (default 'open').

table-tree-tr

{#include components/data-display/table-tree-tr /}
Tree-table row (pure Qute) for the table component's slot mode (treeView=true shell, treeGrid=true
   for parent-bearing trees). The consumer owns the Alpine expansion state — put it on the tbody
   (x-data="{ g1: false, ... }") and reference the booleans from toggleVar / showExpr. 
 Required: name — the title-cell text. 
 Optional: level, setSize, posInSet — aria treegrid bookkeeping (pass all three on treeGrid trees;
             omit on flat trees, matching the model); toggleVar — Alpine boolean for this parent's
             expansion (its presence marks the row as a parent and renders the toggle);
             showExpr — Alpine visibility expression for child rows (e.g. 'g1' or 'g1 && g2');
             toggleAriaLabel (default "Expand row {name}"); icon — fa-* glyph classes for the row icon
             (e.g. 'fa-folder'); iconExpanded — swap glyph while expanded (parents only). 
 Slot: {#dataCells} — the remaining plain <td> data cells.