生态产品多个设计器现已发布候选版本

查看生态总览
Skip to content

Table ​

Data display component. This page is the API reference, generated from the source code. Usage guidance and live examples are on the Chinese page.

Anatomy ​

Parts in bold are required.

data-scope="table": root · header · body · footer · row · column-header · column-label · cell · caption · toolbar · column-list · column-visibility-trigger · select-all-trigger · row-select-trigger · sort-trigger · column-resize-trigger · column-drag-trigger · row-drag-trigger · expand-trigger · expanded-row · empty · loading · load-more-trigger · live-region

API reference ​

Descriptions of individual props, events and slots are written in Chinese and appear on the Chinese page.

Artifacts ​

LayerValue
Custom element<xh-table>
Vue componentsXhTableBody XhTableCaption XhTableCell XhTableColumnDragTrigger XhTableColumnHeader XhTableColumnLabel XhTableColumnList XhTableColumnResizeTrigger XhTableColumnVisibilityTrigger XhTableEmpty XhTableExpandTrigger XhTableExpandedRow XhTableFooter XhTableHeader XhTableLoadMoreTrigger XhTableLoading XhTableRoot XhTableRow XhTableRowDragTrigger XhTableRowSelectTrigger XhTableSelectAllTrigger XhTableSortTrigger XhTableToolbar
ComposableuseTable
State machinetableMachine
Skin@xihan-ui/styles/table.css

Props ​

PropTypeRequired
captionedboolean
columnsTableColumnDef<TRow>[]
rowsTableRowDef[]
datareadonly TRow[]
rowKeyTableField<TRow> | ((record: TableRecordOf<TRow>) => string)
filterValueTableFilterValue
defaultFilterValueTableFilterValue
paginationboolean
defaultPagenumber
sortTableSortDescriptor[]
defaultSortTableSortDescriptor[]
selectionTableSelection
defaultSelectionTableSelection
expandedValuestring[]
defaultExpandedValuestring[]
selectionModeTableSelectionMode
virtualizerCollectionVirtualizer
cellSpan(details: TableCellSpanDetails) => TableCellSpan | null | undefined
footerCellSpan(details: TableFooterCellSpanDetails) => TableCellSpan | null | undefined
cascadeboolean
treeboolean
checkedStrategyCascadeStrategy
prefixColumnsTableColumnKind[]
columnPreferenceTableColumnPreference
defaultColumnPreferenceTableColumnPreference
pagenumber
pageSizenumber
loadingboolean
emptyboolean
stickyHeaderboolean
stripedboolean
variantControlVariant
ruledboolean
footerRowsnumber
stickyFooterboolean
loopboolean
navigationTableNavigation
dirDirection
sizeSize
translationsPartial<TableTranslations>
rowReorderableboolean
onRowMove(details: TableRowMoveDetails) => void
allowRowDrop(move: TableRowMoveDetails) => boolean
onColumnPreferenceChange(details: TableColumnPreferenceChangeDetails) => void
onSortChange(details: TableSortChangeDetails) => void
onFilterValueChange(details: TableFilterValueChangeDetails) => void
onPageChange(details: TablePageChangeDetails) => void
onSelectionChange(details: TableSelectionChangeDetails) => void
onExpandedValueChange(details: TableExpandedValueChangeDetails) => void
onAction(details: TableActionDetails) => void

TableColumnDef ​

Elements of columns.

FieldTypeRequired
idstringYes
fieldTableField<TRow> | null
labelstring
sortableboolean
stickyboolean | 'start' | 'end'
widthstring | number
minWidthnumber
maxWidthnumber
resizableboolean
childrenTableColumnDef<TRow>[]
reorderableboolean
align'start' | 'center' | 'end'
rowHeaderboolean | ((row: TableRowDef, rowIndex: number) => boolean)
compare(a: TableRecordOf<TRow>, b: TableRecordOf<TRow>) => number
filterOptionsTableFilterOption[]
filter(record: TableRecordOf<TRow>, values: readonly string[]) => boolean
format(value: TValue, record: TableRecordOf<TRow>) => string

TableRowDef ​

Elements of rows.

FieldTypeRequired
idstringYes
disabledboolean
expandableboolean
parentIdstring

TableSortDescriptor ​

Elements of sort.

FieldTypeRequired
idstringYes
directionTableSortDirectionYes

Events ​

Custom elements put the payload in detail; Vue emits an event of the same name.

EventPayload
sort-changeTableSortChangeDetails
filter-value-changeTableFilterValueChangeDetails
page-changeTablePageChangeDetails
column-preference-changeTableFooterCellSpanDetails
selection-changeTableSelectionChangeDetails
expanded-value-changeTableExpandedValueChangeDetails
actionTableActionDetails
row-moveTableRowMoveDetails

Slots ​

Only slots with a payload are listed.

Vue componentSlotPayload
XhTableRootdefaultTableRootSlotProps
XhTableRoottoolbarTableToolbarSlotProps
XhTableRootcellTableCellSlotData
XhTableRootempty—

React adapter props ​

Only the props each component declares itself: DOM attributes inherited from ComponentPropsWithRef are left out, and root props already listed in the Props table are not repeated. The Vue counterpart is the slot table above.

React componentPropTypeRequired
XhTableCellvaluestringYes
XhTableCellcolspannumber | string
XhTableColumnHeadervaluestringYes
XhTableColumnHeaderlevelnumber | string
XhTableColumnVisibilityTriggervaluestring
XhTableExpandedRowvaluestringYes
XhTableRootvirtualboolean
XhTableRootestimateSizenumber
XhTableRootrenderCell(cell: TableCellSlotData<TRow>) => ReactNode
XhTableRootrenderEmpty() => ReactNode
XhTableRoottoolbarSlotChildren<TableToolbarSlotProps>
XhTableRootchildrenSlotChildren<TableRootSlotProps>
XhTableRowvaluestring
XhTableRowlevelnumber | string

State ​

Public state is written to data-state.

PartValues
row'open' | 'closed' | undefined
column-visibility-trigger'unchecked' | 'checked'
select-all-triggertableSelectionState([...cascaded.checked], tableCasca… | tableSelectionState(selection, selectableIds)
row-select-trigger'open' | 'closed' | undefined
expand-trigger'open' | 'closed' | undefined
expanded-row'open' | 'closed'

The following names are internal to the state machine.

States: idle · resizing · columnDragging · rowDragging

Events: SORT.SET · SORT.TOGGLE · FILTER.SET · PAGE.SET · COLUMN_PREF.SET · COLUMN_RESIZE.START · COLUMN_RESIZE.MOVE · COLUMN_RESIZE.END · COLUMN_RESIZE.CANCEL · COLUMN_RESIZE.STEP · COLUMN_DRAG.START · COLUMN_DRAG.MOVE · COLUMN_DRAG.END · COLUMN_DRAG.CANCEL · COLUMN.MOVE_BY · ROW_DRAG.START · ROW_DRAG.MOVE · ROW_DRAG.END · ROW_DRAG.CANCEL · ROW.MOVE_BY · ROW.REORDER_BLOCKED · COLUMN_PREF.PATCH · SELECTION.SET · ROW.SELECT · SELECTION.ALL_TOGGLE · EXPANDED.SET · ROW.EXPAND · ROW.COLLAPSE · ROW.EXPAND_TOGGLE · ROW.FOCUS · CELL.FOCUS · TABLE.BLUR · PRESS.START · PRESS.END

Guards: canPress

connect API ​

getXxxProps() returns the host attributes of the matching part.

MemberType
columnsreadonly TableColumn[]
draggableColumnsreadonly string[]
rowReorderDisabledReasonTableRowReorderReason | null
dropTargetTableDropTarget | null
announcementstring
rowsreadonly TableRowDef[]
visibleRowsreadonly TableVisibleRow[]
sortTableSortDescriptor[]
dataDrivenboolean
recordsreadonly TableRecord[]
recordCountnumber
recordOf(rowId: string) => TableRecord | undefined
cellText(rowId: string, columnId: string) => string
filterValueTableFilterValue
setFilter(columnId: string, values: string[]) => void
paginatedboolean
pagenumber
pageSizenumber
pageCountnumber
setPage(page: number) => void
translationsTableTranslations
selectionTableSelection
selectionStateTableSelectionState
selectionModeTableSelectionMode
expandedValuestring[]
focusedRowstring | null
focusedColumnstring | null
navigationTableNavigation
loadingboolean
emptyboolean
rowCountnumber
footerRowCountnumber
columnCountnumber
headerRowsreadonly (readonly TableHeaderCell[])[]
headerRowCountnumber
cellSpanOf(rowId: string, columnId: string) => { rowSpan: number, colSpan: number, covered: boolean }
isSelected(value: string) => boolean
isExpanded(value: string) => boolean
sortDirection(value: string) => TableSortDirection | null
sortPriority(value: string) => number
setSort(next: TableSortDescriptor[]) => void
toggleSort(value: string, options?: { append?: boolean }) => void
setSelection(next: TableSelection) => void
selectRow(value: string, options?: { extend?: boolean }) => void
toggleSelectAll() => void
setExpandedValue(next: string[]) => void
expandRow(value: string) => void
collapseRow(value: string) => void
toggleExpandRow(value: string) => void
getRootProps() => T['element']
getCaptionProps() => T['element']
getToolbarProps() => T['element']
getColumnListProps() => T['element']
getColumnVisibilityTriggerProps(props: TableColumnProps) => T['element']
getHeaderProps() => T['element']
getBodyProps() => T['element']
getFooterProps() => T['element']
getHeaderRowProps(props?: TableHeaderRowProps) => T['element']
getFooterRowProps(props?: TableFooterRowProps) => T['element']
rowNumber(rowId: string) => string
columnPreferenceTableColumnPreference
columnSettingsreadonly TableColumnSetting[]
setColumnHidden(columnId: string, hidden: boolean) => void
setColumnSticky(columnId: string, sticky: boolean | 'start' | 'end') => void
moveColumn(columnId: string, toIndex: number) => void
setColumnWidth(columnId: string, width: number | string) => void
setColumnPreference(next?: TableColumnPreference) => void
getRowProps(props: TableRowProps) => T['element']
getColumnHeaderProps(props: TableColumnProps) => T['element']
getColumnLabelProps() => T['element']
getCellProps(props: TableCellProps) => T['element']
getSelectAllTriggerProps() => T['element']
getRowSelectTriggerProps(props: TableRowProps) => T['element']
getSortTriggerProps(props: TableColumnProps) => T['element']
getColumnResizeTriggerProps(props: TableColumnProps) => T['element']
getColumnDragTriggerProps(props: TableColumnProps) => T['element']
getRowDragTriggerProps(props: TableRowProps) => T['element']
getExpandTriggerProps(props: TableRowProps) => T['element']
getExpandedRowProps(props: TableRowProps) => T['element']
getEmptyProps() => T['element']
getLoadingProps() => T['element']
getLoadMoreTriggerProps() => T['element']
getLiveRegionProps() => T['element']

Accessibility ​

Keyboard ​

Specification: W3C APG. Each row is a stable behavior id that the conformance tests cover; the conditions and effects are described on the Chinese page.

KeysBehavior
Enter / Spacetable.kbd.press
Tab / Shift+Tabtable.kbd.tab
ArrowDowntable.kbd.next
ArrowUptable.kbd.prev
Hometable.kbd.first
Endtable.kbd.last
Entertable.kbd.action
Spacetable.kbd.select
ArrowRighttable.kbd.expand
ArrowLefttable.kbd.collapse
Enter / Spacetable.kbd.sort
Enter / Spacetable.kbd.select-all
Enter / Spacetable.kbd.column-visibility
Ctrl+A / Cmd+Atable.kbd.select-all-body
ArrowLeft / ArrowRighttable.kbd.column-resize
Shift+ArrowLeft / Shift+ArrowRighttable.kbd.column-resize-large
ArrowLeft / ArrowRighttable.kbd.column-move
Home / Endtable.kbd.column-move-edge
ArrowRighttable.kbd.cell-enter
ArrowLefttable.kbd.cell-parent
ArrowRight / ArrowLefttable.kbd.cell-move
ArrowDown / ArrowUptable.kbd.cell-column
Home / Endtable.kbd.cell-row-edge
Ctrl+Home / Ctrl+Endtable.kbd.cell-column-edge
Enter / F2table.kbd.cell-edit
Tab / Shift+Tabtable.kbd.cell-edit-tab
Escape / F2table.kbd.cell-edit-exit
Alt+ArrowUp / Alt+ArrowDowntable.kbd.row-move
Alt+ArrowLeft / Alt+ArrowRighttable.kbd.row-indent

ARIA ​

These attributes are produced by connect.

PartAttributeValue
rootaria-busy'true' | undefined
rootaria-colcountcolumns.length || undefined
rootaria-labelledbyid of the caption part | undefined
rootaria-multiselectable'true' | 'false'
rootaria-rowcountheaderRowCount + visibleRows.length + footerRowCount
rootrole'treegrid' | 'grid'
headerrole'rowgroup'
bodyrole'rowgroup'
footerrole'rowgroup'
rowaria-controlsid of the detail part | undefined
rowaria-disabled'true' | 'false'
rowaria-expanded'true' | 'false' | undefined
rowaria-levelmetaIndex.get(row.value)?.level | undefined
rowaria-posinsetmetaIndex.get(row.value)?.posInSet | undefined
rowaria-rowindexdataRowIndex.get(row.value)
rowaria-selected'true' | 'false' | undefined
rowaria-setsizemetaIndex.get(row.value)?.setSize | undefined
rowrole'row'
column-headeraria-colindexcell.colIndex
column-headeraria-colspancell.colSpan | undefined
column-headeraria-hidden'true'
column-headeraria-rowspancell.rowSpan | undefined
column-headeraria-sort'ascending' | 'descending' | 'none' | undefined
column-headerrole'columnheader'
cellaria-colindexcolumnIndex.get(cell.value)
cellaria-colspanMath.max(cell.colSpan ?? 1, origin?.colSpan ?? 1) | undefined
cellaria-hidden'true'
cellaria-rowspanorigin.rowSpan | undefined
cellrole'rowheader' | 'gridcell'
toolbararia-labellabel.toolbar
column-listaria-labellabel.columnList
column-listrole'group'
column-visibility-triggeraria-checked'false' | 'true'
column-visibility-triggeraria-disabled'false' | 'true'
column-visibility-triggeraria-labellabel.columnVisibility(def?.label ?? column.value)
column-visibility-triggerrole'checkbox'
select-all-triggeraria-checked'true' | 'mixed' | 'false'
select-all-triggeraria-disabled'false' | 'true'
select-all-triggeraria-labellabel.selectAll
select-all-triggerrole'checkbox'
row-select-triggeraria-hidden'true'
sort-triggeraria-disabled'false' | 'true'
sort-triggeraria-labellabel.sort(def?.label ?? column.value)
sort-triggerrole'button'
column-resize-triggeraria-disabled'false' | 'true'
column-resize-triggeraria-labellabel.columnResize(def?.label ?? column.value)
column-resize-triggeraria-orientation'vertical'
column-resize-triggeraria-valuemaxdef?.maxWidth | undefined
column-resize-triggeraria-valuemindef?.minWidth | undefined
column-resize-triggeraria-valuenowcolumnNumericWidth(context.get('columnPreference').wi…
column-resize-triggerrole'separator'
column-drag-triggeraria-disabled'false' | 'true'
column-drag-triggeraria-labellabel.columnDrag(def?.label ?? column.value)
column-drag-triggeraria-roledescriptionlabel.columnDragRoleDescription
column-drag-triggerrole'button'
row-drag-triggeraria-hidden'true'
expand-triggeraria-hidden'true'
expanded-rowaria-level(metaIndex.get(row.value)?.level ?? 1) + 1 | undefined
expanded-rowaria-posinset1 | undefined
expanded-rowaria-rowindexdetailRowIndex.get(row.value)
expanded-rowaria-setsize1 | undefined
expanded-rowrole'row'
live-regionaria-atomic'true'
live-regionaria-live'polite'
live-regionrole'status'
header-rowaria-rowindexMath.max(1, Math.min(Math.trunc(header?.level ?? 1) |…
footer-rowaria-rowindexheaderRowCount + visibleRows.length + level | undefined
header-rowrole'row'
footer-rowrole'row'

Style reference ​

Skin ​

@xihan-ui/styles/table.css is written against [data-scope="table"][data-part="root"] part selectors; the published build uses the mount class .xh-scope-table in place of data-scope (same specificity) and sits in the xihan.components layer. Put overrides in xihan.overrides; the part selectors work as usual.

Data attributes ​

Produced by connect; valueless attributes are omitted while their condition does not hold.

PartAttributeValue
rootdata-at-max-horizontal'' (present only while the condition holds)
rootdata-at-min-horizontal'' (present only while the condition holds)
rootdata-empty'' (present only while the condition holds)
rootdata-fixed'' (present only while the condition holds)
rootdata-loading'' (present only while the condition holds)
rootdata-sizeprops.size
rootdata-split'' (present only while the condition holds)
rootdata-striped'' (present only while the condition holds)
rootdata-variantprops.variant
headerdata-fixed'' (present only while the condition holds)
bodydata-empty'' (present only while the condition holds)
footerdata-fixed'' (present only while the condition holds)
rowdata-disabled'' (present only while the condition holds)
rowdata-draggable'' (present only while the condition holds)
rowdata-dragging'' (present only while the condition holds)
rowdata-drop'before' | 'after' | 'inside'
rowdata-highlighted'' (present only while the condition holds)
rowdata-pressed'' (present only while the condition holds)
rowdata-section'body'
rowdata-selected'' (present only while the condition holds)
rowdata-state'open' | 'closed' | undefined
rowdata-xh-collection-context'page'
rowdata-xh-collection-item''
rowdata-xh-collection-sizeprops.size
column-headerdata-aligndef?.align
column-headerdata-covered'' (present only while the condition holds)
column-headerdata-dragging'' (present only while the condition holds)
column-headerdata-drop'before' | 'after'
column-headerdata-filtered'' (present only while the condition holds)
column-headerdata-frozenundefined
column-headerdata-frozen-edge'' (present only while the condition holds)
column-headerdata-group'' (present only while the condition holds)
column-headerdata-row-span'' (present only while the condition holds)
column-headerdata-sort'asc' | 'desc'
column-headerdata-sort-indextableSortIndexOf(sort, value) | undefined
column-headerdata-sortable'' (present only while the condition holds)
celldata-aligndef?.align
celldata-covered'' (present only while the condition holds)
celldata-disabled'' (present only while the condition holds) | undefined
celldata-dragging'' (present only while the condition holds)
celldata-drop'before' | 'after'
celldata-frozenundefined
celldata-frozen-edge'' (present only while the condition holds)
celldata-row-span'' (present only while the condition holds)
celldata-selected'' (present only while the condition holds) | undefined
toolbardata-sizeprops.size
column-listdata-sizeprops.size
column-visibility-triggerdata-disabled'' (present only while the condition holds)
column-visibility-triggerdata-pressed'' (present only while the condition holds)
column-visibility-triggerdata-state'unchecked' | 'checked'
column-visibility-triggerdata-xh-action-control''
column-visibility-triggerdata-xh-action-display'always'
column-visibility-triggerdata-xh-action-profile'icon'
column-visibility-triggerdata-xh-action-sizeprops.size
column-visibility-triggerdata-xh-action-variant'outline'
column-visibility-triggerdata-xh-check-mark'unchecked' | 'checked'
column-visibility-triggerdata-xh-check-mark-profile'box'
select-all-triggerdata-disabled'' (present only while the condition holds)
select-all-triggerdata-pressed'' (present only while the condition holds)
select-all-triggerdata-statetableSelectionState([...cascaded.checked], tableCasca… | tableSelectionState(selection, selectableIds)
select-all-triggerdata-xh-action-control''
select-all-triggerdata-xh-action-display'always'
select-all-triggerdata-xh-action-profile'icon'
select-all-triggerdata-xh-action-sizeprops.size
select-all-triggerdata-xh-action-variant'outline'
select-all-triggerdata-xh-check-marktableSelectionState([...cascaded.checked], tableCasca… | tableSelectionState(selection, selectableIds)
select-all-triggerdata-xh-check-mark-profile'box'
row-select-triggerdata-disabled'' (present only while the condition holds)
row-select-triggerdata-highlighted'' (present only while the condition holds)
row-select-triggerdata-indeterminate'' (present only while the condition holds)
row-select-triggerdata-pressed'' (present only while the condition holds)
row-select-triggerdata-selected'' (present only while the condition holds)
row-select-triggerdata-state'open' | 'closed' | undefined
row-select-triggerdata-xh-action-control''
row-select-triggerdata-xh-action-display'always'
row-select-triggerdata-xh-action-profile'icon'
row-select-triggerdata-xh-action-sizeprops.size
row-select-triggerdata-xh-action-variant'outline'
row-select-triggerdata-xh-check-mark'checked' | 'indeterminate' | 'unchecked'
row-select-triggerdata-xh-check-mark-profile'box'
sort-triggerdata-disabled'' (present only while the condition holds)
sort-triggerdata-pressed'' (present only while the condition holds)
sort-triggerdata-sort'asc' | 'desc'
sort-triggerdata-sort-indextableSortIndexOf(sort, value) | undefined
sort-triggerdata-xh-action-control''
sort-triggerdata-xh-action-display'always'
sort-triggerdata-xh-action-profile'icon'
sort-triggerdata-xh-action-sizeprops.size
sort-triggerdata-xh-action-variant'ghost'
column-resize-triggerdata-disabled'' (present only while the condition holds)
column-resize-triggerdata-resizing'' (present only while the condition holds)
column-drag-triggerdata-disabled'' (present only while the condition holds)
column-drag-triggerdata-dragging'' (present only while the condition holds)
row-drag-triggerdata-disabled'' (present only while the condition holds)
row-drag-triggerdata-dragging'' (present only while the condition holds)
expand-triggerdata-disabled'' (present only while the condition holds)
expand-triggerdata-highlighted'' (present only while the condition holds)
expand-triggerdata-pressed'' (present only while the condition holds)
expand-triggerdata-selected'' (present only while the condition holds)
expand-triggerdata-state'open' | 'closed' | undefined
expand-triggerdata-xh-action-control''
expand-triggerdata-xh-action-display'always'
expand-triggerdata-xh-action-profile'icon'
expand-triggerdata-xh-action-sizeprops.size
expand-triggerdata-xh-action-variant'ghost'
expanded-rowdata-dragging'' (present only while the condition holds)
expanded-rowdata-state'open' | 'closed'
loadingdata-loading'' (present only while the condition holds)
loadingdata-xh-loading-ring''
load-more-triggerdata-loading'' (present only while the condition holds)
load-more-triggerdata-pressed'' (present only while the condition holds)
load-more-triggerdata-xh-action-control''
load-more-triggerdata-xh-action-display'always'
load-more-triggerdata-xh-action-profile'row'
load-more-triggerdata-xh-action-sizeprops.size
load-more-triggerdata-xh-action-variant'ghost'
header-rowdata-section'header'
footer-rowdata-section'footer'

CSS variables ​

The public override slots, generated from what the standalone skin actually consumes.

VariablePartCSS propertyStateDefault from
--xh-table-bgrootbackgrounddefault
variant=outline
variant=subtle
--xh-bg-subtle
--xh-bg-surface
--xh-table-borderrootbordervariant=outline--xh-border-default
--xh-table-caption-fgcaptioncolordefault--xh-fg-muted
--xh-table-caption-font-sizecaptionfont-sizedefault--xh-text-label-size
--xh-table-caption-font-weightcaptionfont-weightdefault--xh-text-label-weight
--xh-table-caption-pxcaptionpadding-inlinedefault--xh-space-3
--xh-table-caption-pycaptionpadding-blockdefault--xh-space-2
--xh-table-cell-gapcell
column-header
gapdefault--xh-control-gap-md
--xh-table-cell-min-wcell
column-header
min-inline-sizedefault3rem
--xh-table-cell-pxcell
column-header
root
padding-inline
padding-inline-end
default
not(:last-child)
split
--xh-_table-cell-px
--xh-table-cell-pycell
column-header
padding-blockdefault--xh-_table-cell-py
--xh-table-column-fgcolumn-headercolordefault--xh-fg-default
--xh-table-column-font-weightcolumn-headerfont-weightdefault--xh-font-weight-medium
--xh-table-column-list-fgcolumn-listcolordefault--xh-fg-default
--xh-table-column-list-font-sizecolumn-listfont-sizedefault--xh-text-secondary-size
--xh-table-column-list-gapcolumn-listgapdefault--xh-_table-column-list-gap
--xh-table-detail-bgexpanded-rowbackgrounddefault--xh-bg-subtle
--xh-table-detail-pxcell
expanded-row
padding-inlinedefault--xh-_table-cell-px
--xh-table-detail-pycell
expanded-row
padding-blockdefault--xh-space-3
--xh-table-drag-fgcolumn-drag-triggercolordefault--xh-fg-subtle
--xh-table-drag-fg-activecolumn-drag-triggercolordisabled
dragging
hover
not([data-disabled])
--xh-fg-default
--xh-table-drag-fg-disabledcolumn-drag-triggercolordisabled--xh-fg-disabled
--xh-table-drag-grip-hcolumn-drag-triggerblock-sizeempty--xh-space-2
--xh-table-drag-grip-wcolumn-drag-triggerinline-sizeempty--xh-space-1
--xh-table-drag-sizecolumn-drag-triggerblock-size
inline-size
default--xh-control-indicator-size
--xh-table-dragging-opacitycell
column-header
expanded-row
row
opacitydragging--xh-state-dragging-opacity
--xh-table-drop-fgcell
column-header
row
background
box-shadow
drop
drop=after
drop=before
drop=inside
frozen
is([data-drop='before'], [data-drop='after'])
not([data-frozen])
--xh-bg-brand
--xh-table-drop-inside-bgbody
root
row
backgrounddisabled
drop=inside
not([data-disabled])
--xh-bg-subtle-hover-opaque
--xh-table-drop-linecell
column-header
row
block-size
box-shadow
inline-size
drop
drop=after
drop=before
drop=inside
frozen
is([data-drop='before'], [data-drop='after'])
not([data-frozen])
--xh-stroke-thick
--xh-table-expand-fgexpand-triggercolordefault
disabled
focus-visible
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-fg-subtle
--xh-table-fgrootcolordefault--xh-fg-default
--xh-table-filter-fgcolumn-header
trigger
colordefault--xh-fg-subtle
--xh-table-filter-fg-activecolumn-header
trigger
colorfiltered--xh-fg-brand
--xh-table-filter-sizecolumn-header
trigger
--xh-icon-sizedefault--xh-_table-trigger-size
--xh-table-font-sizeroot
row
font-sizedefault--xh-_table-font-size
--xh-table-footer-bgcell
footer
row
backgrounddefault
fixed
frozen
--xh-bg-subtle
--xh-bg-subtle-opaque
--xh-table-footer-borderfooterborder-block-startdefault--xh-border-subtle
--xh-table-footer-font-weightfooterfont-weightdefault--xh-font-weight-medium
--xh-table-frozen-edgecell
column-header
backgroundfrozen-edge
is([data-part='column-header'], [data-part='cell'])
--xh-border-default
--xh-table-header-bgcolumn-header
header
backgrounddefault
frozen
--xh-_table-header-bg
--xh-table-header-borderheaderborder-block-enddefault--xh-border-subtle
--xh-table-icon-sizeroot--xh-icon-sizedefault
size=lg
size=sm
--xh-glyph-size-lg
--xh-glyph-size-md
--xh-glyph-size-sm
--xh-table-load-more-trigger-bg-hoverload-more-triggerbackground-colordisabled
hover
loading
not([data-disabled])
not([data-loading])
--xh-_action-variant-bg-hover
--xh-table-load-more-trigger-fgload-more-triggercolordefault
disabled
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-fg-brand-strong
--xh-table-load-more-trigger-font-sizeload-more-triggerfont-sizedefault--xh-_table-font-size
--xh-table-load-more-trigger-gapload-more-triggergapdefault--xh-space-2
--xh-table-load-more-trigger-pxload-more-triggerpadding-inlinedefault--xh-space-4
--xh-table-load-more-trigger-pyload-more-triggerpadding-blockxh-action-profile=row--xh-space-3
--xh-table-load-more-trigger-radiusload-more-triggerborder-radiusdefault--xh-shape-control
--xh-table-loading-durationloadinganimation-durationdefault--xh-motion-loop-spin
--xh-table-max-hrootmax-block-sizedefault--xh-viewport-h-lg
--xh-table-pagination-gaprootmargin-block-startdefault--xh-space-3
--xh-table-radiusrootborder-radiusvariant=outline
variant=subtle
--xh-shape-surface
--xh-table-resize-fgcolumn-resize-triggerbackgrounddefault--xh-border-default
--xh-table-resize-fg-activecolumn-resize-triggerbackgroundhover
resizing
--xh-bg-brand
--xh-table-resize-linecolumn-resize-triggerinline-sizedefault--xh-stroke-thin
--xh-table-resize-line-lengthcolumn-resize-triggerblock-sizedefault60%
--xh-table-resize-radiuscolumn-resize-triggerborder-radiusdefault--xh-shape-pill
--xh-table-resize-widthcolumn-resize-triggerinline-sizedefault--xh-space-2
--xh-table-row-bgrowbackground-colordefault--xh-bg-surface
--xh-table-row-bg-hoverrowbackground-colordisabled
error
highlighted
hover
is(:focus-visible, [data-highlighted])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
--xh-bg-subtle-opaque
--xh-table-row-bg-pressedrowbackground-colordisabled
error
is(:active, [data-pressed])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
pressed
--xh-bg-subtle-hover-opaque
--xh-table-row-bg-selectedrowbackground-colordisabled
error
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
selected
xh-collection-context=page
--xh-bg-brand-subtle
--xh-table-row-bg-stripedbody
root
row
background-colorstriped
where(:nth-of-type(even)
where([data-scope='table'][data-part='root'][data-striped] [data-scope='table'][data-part='body'])
--xh-bg-subtle-opaque
--xh-table-row-borderbody
cell
column-header
expanded-row
footer
header
item
root
row
border-block-start
border-inline-end
index=0
is([data-part='header'], [data-part='body'], [data-part='footer'])
is([data-part='row'], [data-part='expanded-row'])
not(:last-child)
not([data-index='0'])
not([hidden])
split
--xh-border-subtle
--xh-table-row-cursorrowcursordefault
disabled
error
highlighted
hover
is(:active, [data-pressed])
is(:focus-visible, [data-highlighted])
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
pressed
selected
xh-collection-context=page
default
--xh-table-row-drag-fgrow-drag-triggercolordefault--xh-fg-subtle
--xh-table-row-drag-fg-activerow-drag-triggercolordisabled
dragging
hover
not([data-disabled])
--xh-fg-default
--xh-table-row-drag-fg-disabledrow-drag-triggercolordisabled--xh-fg-disabled
--xh-table-row-drag-grip-longrow-drag-triggerinline-sizeempty--xh-space-2
--xh-table-row-drag-grip-shortrow-drag-triggerblock-sizeempty--xh-space-1
--xh-table-row-drag-sizerow-drag-triggerblock-size
inline-size
default--xh-control-indicator-size
--xh-table-row-fg-selectedrowcolordisabled
error
highlighted
hover
is(:active, [data-pressed])
is(:focus-visible, [data-highlighted])
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
pressed
selected
xh-collection-context=page
--xh-fg-on-brand-subtle
--xh-table-sort-bg-hovercolumn-header
sort-trigger
trigger
background
background-color
disabled
hover
loading
not([data-disabled])
not([data-loading])
--xh-_action-variant-bg-hover
--xh-bg-subtle-hover
--xh-table-sort-bg-pressedsort-triggerbackground-colordisabled
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-_action-variant-bg-pressed
--xh-table-sort-fgsort-triggercolordefault
disabled
focus-visible
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-fg-subtle
--xh-table-sort-fg-activesort-triggercolordisabled
focus-visible
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
sort
sort-index
--xh-fg-default
--xh-table-sort-sizesort-trigger--xh-icon-sizedefault--xh-_table-trigger-size
--xh-table-span-layercell
column-header
z-indexis([data-part='cell'], [data-part='column-header'])
row-span
1
--xh-table-state-fgempty
loading
colordefault--xh-fg-muted
--xh-table-state-gapempty
loading
gapdefault--xh-control-gap-md
--xh-table-state-min-hempty
loading
min-block-sizedefault0
--xh-table-state-pxempty
loading
padding-inlinedefault--xh-control-px-sm
--xh-table-state-pyempty
loading
padding-blockdefault--xh-space-3
--xh-table-sticky-column-layercell
column-header
row
z-indexdrop
drop=after
drop=before
drop=inside
focus-visible
frozen
is([data-drop='before'], [data-drop='after'])
not([data-drop])
1
--xh-table-sticky-footer-layerfooterz-indexfixed--xh-layer-sticky
--xh-table-sticky-header-layerheaderz-indexfixed--xh-layer-sticky
--xh-table-sticky-insetcell
column-header
inset-inline-end
inset-inline-start
frozen=end
frozen=start
0
--xh-table-toolbar-fgtoolbarcolordefault--xh-fg-default
--xh-table-toolbar-gaptoolbargapdefault--xh-_table-toolbar-gap
--xh-table-toolbar-pytoolbarpadding-blockdefault--xh-space-2
--xh-table-trigger-bg-checkedcolumn-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
--xh-ink-surface
background-color
border
border-color
disabled
focus-visible
hover
indeterminate
is(:active, [data-pressed])
is([data-selected], [data-indeterminate])
is([data-state='checked'], [data-state='indeterminate'])
loading
not([data-disabled])
not([data-loading])
pressed
selected
state=checked
state=indeterminate
xh-ink-surface
--xh-bg-brand
--xh-table-trigger-bg-checked-pressedcolumn-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
background-colordisabled
indeterminate
is(:active, [data-pressed])
is([data-selected], [data-indeterminate])
is([data-state='checked'], [data-state='indeterminate'])
loading
not([data-disabled])
not([data-loading])
pressed
selected
state=checked
state=indeterminate
--xh-bg-brand-active
--xh-table-trigger-bg-pressedcolumn-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
background-colordisabled
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-bg-subtle-hover
--xh-table-trigger-bordercolumn-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
border
border-color
default
disabled
focus-visible
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-border-strong
--xh-table-trigger-border-checkedcolumn-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
border
border-color
disabled
focus-visible
hover
indeterminate
is(:active, [data-pressed])
is([data-selected], [data-indeterminate])
is([data-state='checked'], [data-state='indeterminate'])
loading
not([data-disabled])
not([data-loading])
pressed
selected
state=checked
state=indeterminate
--xh-table-trigger-bg-checked
--xh-table-trigger-fgcolumn-visibility-trigger
row-select-trigger
select-all-trigger
colordefault
disabled
focus-visible
hover
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-fg-on-brand
--xh-table-trigger-radiuscolumn-drag-trigger
column-header
column-visibility-trigger
expand-trigger
row-drag-trigger
row-select-trigger
select-all-trigger
sort-trigger
trigger
border-radiusdefault--xh-shape-control
--xh-shape-inset
--xh-table-trigger-sizecolumn-header
column-visibility-trigger
expand-trigger
row-select-trigger
select-all-trigger
sort-trigger
trigger
--xh-icon-size
block-size
inline-size
min-block-size
min-inline-size
default
xh-action-profile=icon
xh-action-profile=row
--xh-control-indicator-size

Released under The MIT License