Skip to content
🌏 Translated with the assistance of DeepSeek and ChatGPT

Table

This is a table used to display content with rows and columns.

WARNING

To ensure the row expansion and row selection functions work properly, when these functions are needed, you must ensure that each data item in the data array contains a field with the same name as the rowKey parameter (default is 'key'), and the value of this field is unique across all data.

If backend pagination is needed, please refer to Server-side Pagination.

If cross-page selection is needed, please refer to Cross-page Select all.

Basic Usage

The data prop is the current data of the table, and the columns prop sets the table columns.

Please configure the key property for elements in columns as the unique identifier for rows.

Please configure the key property for elements in data as the unique identifier for rows; this unique identifier field can be controlled by rowKey.

Name
Age
Email
Alice
25
alice@example.com
Bob
30
bob@example.com
Charlie
35
charlie@example.com
1
Hide source code

Alignment

columns[].align configures the text alignment of cells; the default is 'left'.

Name
Age
Email
Olivia
28
olivia@example.com
James
32
james@example.com
Sophia
24
sophia@example.com
William
29
william@example.com
Emma
31
emma@example.com
1
Hide source code

Custom Cells

You can customize cells in the following ways:

  • Use columns[].slotName to configure a cell content slot.
  • Use columns[].labelSlotName to configure a header cell content slot.
  • Use columns[].render to configure a cell content render function.
  • Use columns[].labelRender to configure a header cell render function.
  • Use columns[].cellProps to configure cell properties.
  • Use columns[].labelCellProps to configure header cell properties.
  • Use columns[].contentProps to configure cell content properties.
  • Use columns[].labelContentProps to configure header content properties.
Name
Age
Email
Status Active / Inactive
Actions
Emma Johnson
32
emma.johnson@example.com
active
James Miller
45
jmiller@test.net
inactive
Sophia Chen
28
schen@demo.org
active
William Brown
61
wbrown55@sample.co
inactive
Olivia Davis
39
odavis@mail.io
active
1
Hide source code

Column Width

columns[].width and columns[].minWidth configure cell width.

When setting columns[].width, please leave at least one column unset so the table can adapt to its actual width.

Name
Role
Email
Address
Olivia Martinez
Admin
olivia.martinez@company.com
123 Maple Street, New York, NY 10001
James Wilson
Developer
james.wilson@company.com
456 Oak Avenue, San Francisco, CA 94102
Sophia Chen
Designer
sophia.chen@company.com
789 Pine Road, Chicago, IL 60601
William Taylor
Manager
william.taylor@company.com
321 Elm Boulevard, Austin, TX 73301
Emma Johnson
Analyst
emma.johnson@company.com
654 Cedar Lane, Seattle, WA 98101
1
Hide source code

Borders and Background

bordered enables table borders; by default all borders are shown. variant sets the table background style variant; the default is a solid background ('normal').

Bordered:
Variant:
Name
Age
Email
Alice
25
alice@example.com
Bob
30
bob@example.com
Charlie
35
charlie@example.com
1
Hide source code

Table Height

Due to the features of display: table, unexpected results may occur when setting a small height or max-height on the outermost element of the Table component. The <table> height will still be expanded by its child elements.

We recommend using the tableAreaProps property to set a fixed or dynamic table height, for example: :table-area-props="{ style: 'max-height: 400px' }".

Name
Role
Level
Salary
Address
Aric Ironfist
Blacksmith
42
2800
Iron Forge Street 12
Lyra Swiftarrow
Hunter
36
2200
Forest Edge Cottage
Borin Stonebeard
Miner
28
1800
Mountain Hall 7
Elara Moonshadow
Alchemist
51
3200
Apothecary Lane 3
Garrick Stormblade
Knight
65
4500
Castle Barracks
Mira Whisperwind
Bard
24
1500
Tavern Square 5
Thrain Forgeheart
Engineer
47
2900
Workshop District 9
Sylas Greenleaf
Druid
58
3800
Ancient Grove
Kaelen Firehand
Pyromancer
61
4200
Mage Tower East
Freya Shieldmaiden
Guard Captain
54
3600
Guard Post Central
Jorin Goldfinder
Merchant
33
2500
Market Square 8
Nyssa Lightfoot
Rogue
39
2700
Shadow Alley 2
Torin Boulderbreaker
Stone Mason
31
2100
Quarry Road 4
Liana Starweaver
Astrologer
45
3100
Observatory Hill
Finn Riverstride
Fisherman
22
1400
Dockside Hut
Rowan Oakenshield
Carpenter
27
1700
Timber Yard 6
Vera Nightshade
Herbalist
34
2300
Herb Garden Cottage
Draven Bloodedge
Mercenary
49
3300
Fighter's Guild
Mara Swiftcurrent
Sailor
26
1600
Harbor Watch 3
Orin Deepdelver
Archaeologist
43
3000
Explorer's Lodge
Hide source code

Scroll Area

scroll.x configures the scroll area's width. The Table component internally computes a minimum scroll width based on column configuration; when the table's actual width is less than the greater of that computed minimum and scroll.x, a horizontal scrollbar will appear.

Name
Age
Email
Alice
25
alice@example.com
Bob
30
bob@example.com
Charlie
35
charlie@example.com
1
Hide source code

Cell Merging

Configure merged cells using the spanMethod property.

BuildingType
Coord
Level
Income
Maintain
Blacksmith
(23, 18)
3
1800
450
(25, 20)
4
2400
600
Tavern
(34, 27)
2
1600
400
(36, 25)
5
3200
800
Market
(41, 33)
3
2100
525
(43, 35)
6
4000
1000
Farm
(15, 12)
2
900
225
(18, 14)
4
2000
500
Barracks
(9, 39)
3
1500
375
(11, 37)
5
2800
700
1
2
Hide source code

Fixed Header and Fixed Columns

The table header is fixed by default; it can be configured with the fixedHead prop.

Set fixed: 'left' or fixed: 'right' on child elements of the columns prop to fix columns.

WARNING

Fixed columns, when rendered, will move to the corresponding fixed side if they are in the middle of the table.

Fixed column configuration only applies to root nodes in the case of multi-level headers.

Id
Name
Age
Phone
Email
Address
1
John Smith
28
+1-555-101-2001
john.smith@example.com
123 Main St, Springfield, IL 62704
2
Jane Johnson
34
+1-555-102-2002
jane.johnson@example.com
456 Oak Ave, Shelbyville, IL 62706
3
Bob Williams
22
+1-555-103-2003
bob.williams@example.com
789 Pine Rd, Capital City, IL 62708
4
Alice Brown
45
+1-555-104-2004
alice.brown@example.com
101 Maple Dr, Metropolis, IL 62710
5
Charlie Jones
31
+1-555-105-2005
charlie.jones@example.com
202 Cedar Ln, Smallville, IL 62712
6
Diana Garcia
29
+1-555-106-2006
diana.garcia@example.com
303 Birch St, Gotham, NY 10001
7
Eve Miller
38
+1-555-107-2007
eve.miller@example.com
404 Elm Pl, Star City, NY 10003
8
Frank Davis
26
+1-555-108-2008
frank.davis@example.com
505 Walnut Way, Central City, NY 10005
9
Grace Rodriguez
41
+1-555-109-2009
grace.rodriguez@example.com
606 Spruce Ct, Coast City, CA 90210
10
Henry Martinez
33
+1-555-110-2010
henry.martinez@example.com
707 Ash Blvd, Emerald City, CA 90212
11
Ivy Hernandez
27
+1-555-111-2011
ivy.hernandez@example.com
808 Poplar Ave, Keystone City, CA 90214
12
Jack Lopez
36
+1-555-112-2012
jack.lopez@example.com
909 Fir St, National City, TX 75001
13
Kate Gonzalez
24
+1-555-113-2013
kate.gonzalez@example.com
111 Redwood Dr, Opal City, TX 75003
14
Leo Wilson
39
+1-555-114-2014
leo.wilson@example.com
222 Sequoia Ln, Ivy Town, TX 75005
15
Mia Anderson
30
+1-555-115-2015
mia.anderson@example.com
333 Magnolia Rd, Hub City, FL 32003
16
Nick Thomas
42
+1-555-116-2016
nick.thomas@example.com
444 Willow Cir, Blue Valley, FL 32005
17
Olivia Taylor
35
+1-555-117-2017
olivia.taylor@example.com
555 Cypress St, Starling City, FL 32007
18
Paul Moore
23
+1-555-118-2018
paul.moore@example.com
666 Juniper Way, Fawcett City, WA 98001
19
Quinn Jackson
37
+1-555-119-2019
quinn.jackson@example.com
777 Sycamore Pl, Gateway City, WA 98003
20
Ryan Martin
32
+1-555-120-2020
ryan.martin@example.com
888 Laurel Ave, Coral City, WA 98005
Hide source code

Multi-level Headers

Set children on child elements of the columns prop to enable multi-level headers.

In multi-level header cases, the header area shows cell borders.

Basic Information
Contact Information
Work Information
Status
ID
Name
Contact Details
Address
Department
Salary Information
Phone
Email
Base Salary
Bonus
Total
1
John Smith
+1 (212) 555-0198
john.smith@example.com
123 Main St, New York, NY
Sales
5000
1000
6000
Active
2
Emily Johnson
+44 20 7946 0958
emily.j@example.com
456 Park Ave, Los Angeles, CA
Marketing
4500
800
5300
Active
3
Michael Brown
+61 2 9876 5432
m.brown@example.com
789 Broadway, Chicago, IL
Engineering
7000
1500
8500
Active
4
Sarah Davis
+49 30 12345678
sarah.davis@example.com
101 Oak St, Houston, TX
HR
4800
600
5400
On Leave
5
David Wilson
+33 1 2345 6789
d.wilson@example.com
202 Pine Rd, Phoenix, AZ
Finance
6500
1200
7700
Active
6
Jennifer Taylor
+81 3 1234 5678
jennifer.t@example.com
303 Elm St, Philadelphia, PA
Sales
5200
900
6100
Active
7
Robert Miller
+1 (415) 555-0134
robert.m@example.com
404 Cedar Ave, San Antonio, TX
Engineering
7200
1600
8800
Active
8
Lisa Anderson
+44 131 496 0600
lisa.a@example.com
505 Maple Dr, San Diego, CA
Marketing
4700
700
5400
Inactive
9
William Thomas
+61 8 8123 4567
william.t@example.com
606 Birch Ln, Dallas, TX
Finance
6800
1300
8100
Active
10
Maria Jackson
+49 89 98765432
maria.j@example.com
707 Walnut St, San Jose, CA
HR
4900
650
5550
Active
1
Hide source code

Row Selection

Configure row selection via the selection prop. selectedKey controls selected items (controlled mode). If omitted or undefined, the component is uncontrolled; use defaultSelectedKey to provide a default.

Set columns[].disabled to disable the selector for a row.

When there are left-fixed columns, the row selection column is also fixed to the left.

ID
Name
Email
City
Address
1001
Emma Johnson
emma.johnson@example.com
New York
123 Main Street, Apt 4B
1002
James Wilson
j.wilson@example.com
Los Angeles
456 Oak Avenue
1003
Sophia Chen
sophia.chen@example.com
Chicago
789 Pine Road, Suite 12
1004
Michael Brown
m.brown@example.com
Miami
321 Beach Boulevard
1005
Olivia Davis
olivia.davis@example.com
Seattle
654 Lakeview Drive
1
selectedKeys: []
Hide source code

Expandable Rows

Configure expandable rows via the expandable prop. expandedKey controls expanded rows (controlled mode). If omitted or undefined, the component is uncontrolled; use defaultExpandedKey to set a default.

Row expansion content is provided via columns[].expand or the expand slot. If empty (or when the expand slot is set, it is considered false), no expand button is shown.

When there are left-fixed columns, the expand button column is also fixed to the left.

ID
Name
1001
Emma Johnson
1002
James Wilson
1003
Sophia Chen
1004
Michael Brown
1005
Olivia Davis
1
ID
Name
1001
Emma Johnson
1002
James Wilson
1003
Sophia Chen
1004
Michael Brown
1005
Olivia Davis
1
expandedKeys: []
Hide source code

Sorting

Configure sorting using columns[].sortable. sortOrder controls the sorting state of each column (controlled mode). If omitted or undefined, the component is uncontrolled; use defaultSortOrder to provide a default.

The defaultSortOrder property inside columns[].sortable can also set the default for that column.

When sortMethod is set to 'custom', there is no sorting behavior. Backend sorting can be implemented by listening to the sortOrderChange event.

If sortMethod is not provided, the default comparator is used, based on JavaScript's native greater-than/less-than logic.

Name
Age
Email
Emma
31
emma@example.com
James
32
james@example.com
Olivia
28
olivia@example.com
Sophia
24
sophia@example.com
William
29
william@example.com
1
sortOrder: { "name": "asc" }
Hide source code

Multi-column Sorting

Enable multi-column sorting by setting multiple: true in columns[].sortable's sortMethod. Use the priority property to set a column's priority; higher values take precedence.

WARNING

Multi-column sorting and single-column sorting are mutually exclusive. Triggering one will clear the selection of the other.

Name
Age
Email
Emma
31
emma@example.com
James
32
james@example.com
Olivia
28
olivia@example.com
Sophia
24
sophia@example.com
William
29
william@example.com
1
sortOrder: { "name": "asc" }
Hide source code

Filtering

Configure filtering with columns[].filterable. filterValue controls the filter state of each column (controlled mode). If omitted or undefined, the component is uncontrolled; use defaultFilterValue to provide a default.

The defaultFilterValue inside columns[].filterable can also set the default for that column.

If filterMethod is not provided, the default comparator is used, based on JavaScript's native === equality.

Name
Base Salary
Bonus
Total
Status
James Wilson
8500
420
8920
active
Michael Brown
11200
150
11350
active
Robert Taylor
9800
920
10820
active
Jennifer Miller
6300
310
6610
active
Lisa Martinez
4500
230
4730
active
Amanda Clark
2900
0
2900
active
1
filterValue: { "status": [ "active" ] }
Hide source code

Summary Row

Configure summary rows with the summary prop.

  • summary.data sets the content of the summary row.
  • summary.summaryText sets the text for the first column of the summary row.
  • summary.placement adjusts the placement of the summary row; choose 'start' or 'end' (default) to place the summary at the top or bottom of the data area.
  • summary.fixed configures whether the summary row is fixed; the summary row is fixed by default.
  • summary.spanMethod configures cell merging within the summary row area.

WARNING

When the summary row is placed at the start of the data area, a fixed summary row requires a fixed header to take effect.

Placement:
Name
Base Salary
Bonus
Total
Status
Emma Johnson
8500
420
8920
active
David Smith
6500
780
7280
inactive
Sophia Williams
11200
150
11350
active
Michael Brown
4200
0
4200
inactive
Olivia Davis
9800
920
10720
active
James Wilson
7300
310
7610
active
Sarah Miller
10500
850
11350
inactive
Robert Taylor
4200
190
4390
active
Jennifer Anderson
8900
0
8900
inactive
Thomas Clark
11500
970
12470
active
Sum
82600
4590
87190
Average
8260
459
8719
1
Hide source code

Loading State

Configure the loading state of the table by setting the loading property.

Name
Age
Email
Alice
25
alice@example.com
Bob
30
bob@example.com
Charlie
35
charlie@example.com
1
Hide source code

Client-side Pagination

The table component supports automatic pagination of the passed data by default. The pagination configuration can be set via the pagination property.

ID
User
Email
Register
1
Michael Davis
michael.davis@example.com
2025-12-09
2
James Harris
james.harris@example.com
2026-02-12
3
Joshua Thomas
joshua.thomas@example.com
2026-04-09
4
Amanda Miller
amanda.miller@example.com
2026-06-19
5
William Martinez
william.martinez@example.com
2026-01-01
6
John Moore
john.moore@example.com
2025-10-21
7
Jennifer Anderson
jennifer.anderson@example.com
2026-05-29
8
Joshua Rodriguez
joshua.rodriguez@example.com
2025-12-26
9
Sarah White
sarah.white@example.com
2026-07-25
10
John Thompson
john.thompson@example.com
2025-09-28
Total 50
1
2
3
4
5
10 / Page
Go to
page: 1; pageSize: 10
Hide source code

Server-side Pagination

When the pagination.paginateMethod is set to 'custom', the table will not perform automatic sorting. This is often used for server-side pagination. The total number of data items can be set via pagination.total.

ID
User
Email
Register
1
Sarah Garcia
sarah.garcia@example.com
2025-12-12
2
Daniel Davis
daniel.davis@example.com
2026-02-13
3
Daniel Anderson
daniel.anderson@example.com
2025-12-19
4
Jessica Thompson
jessica.thompson@example.com
2026-07-10
5
Jennifer Martinez
jennifer.martinez@example.com
2025-10-26
6
Amanda Martin
amanda.martin@example.com
2026-07-30
7
Melissa Moore
melissa.moore@example.com
2025-11-02
8
James Rodriguez
james.rodriguez@example.com
2026-08-27
9
Lisa Johnson
lisa.johnson@example.com
2026-08-23
10
Stephanie Thomas
stephanie.thomas@example.com
2025-12-06
Total 1000
1
2
3
4
5
6
7
...
100
10 / Page
Go to
page: 1; pageSize: 10
Hide source code

Hide Pagination on Single Page

Set pagination.hideWhenSinglePage to hide pagination when there is only a single page.

Name
Age
Email
Alice
25
alice@example.com
Bob
30
bob@example.com
Charlie
35
charlie@example.com
Hide source code

Instance Methods

It is important to note that, for the purpose of state synchronization in controlled mode, instance methods such as selection, expansion, filtering, and sorting are designed asynchronously. Each invocation may require waiting for a microtask delay to take effect.

expandedKeys: []
selectedKeys: []
sortOrder: {}
filterValue: {}
ID
Name
1001
Emma Thompson
1002
Evelyn Martin
1003
Noah Garcia
1004
Evelyn Thomas
1005
Alexander Brown
1006
Alexander Walker
1007
Liam Clark
1008
Benjamin White
1009
Harper Chen
1010
Sophia Taylor
1
2
3
4
5
Hide source code

Cross-Page Select All

selection.selectAllMethod can asynchronously customize the selectedKeys value updated during a select-all operation.

selection.supersetSelectAllRef configures the superset referenced for the select-all checkbox's checked status: 'current' (data on the current page, default) or 'all' (data across all pages).

Superset for Select All State Reference
ID
User
Email
Register
1
Laura Brown
laura.brown@example.com
2026-06-20
2
Laura Harris
laura.harris@example.com
2026-03-17
3
Matthew Thomas
matthew.thomas@example.com
2026-07-16
4
John Smith
john.smith@example.com
2025-11-26
5
William Miller
william.miller@example.com
2026-06-04
6
Daniel Jones
daniel.jones@example.com
2026-03-14
7
Robert Johnson
robert.johnson@example.com
2025-12-09
8
Stephanie White
stephanie.white@example.com
2026-03-15
9
Jennifer Davis
jennifer.davis@example.com
2026-06-28
10
James Thomas
james.thomas@example.com
2025-10-06
Total 50
1
2
3
4
5
10 / Page
Hide source code

API

TableProps

AttributeTypeOptionalDefaultDescriptionVersion
dataTableData[]True[]The table's data source.0.1.0
columnsTableColumn[]True[]The table's column configuration collection.0.1.0
borderedboolean | TableBorderedTruetrueWhether to display table borders and related styles.0.1.0
variant'normal' | 'striped' | 'checkered'True'normal'The table's display variant/style.0.1.0
fixedHeadbooleanTruetrueWhether the header is fixed.0.1.0
spanMethod(options: TableOptionsArg) => void | { colspan?: number, rowspan?: number}TrueThe method used to merge rows or columns.0.1.0
rowKeystringTrue'key'The key name used to uniquely identify row data.0.1.0
scroll{ x?: number | string }TrueTable scroll configuration (e.g., horizontal scroll settings).0.1.0
selectionboolean | TableSelectionTruefalseWhether row selection is enabled and its configuration.0.1.0
selectedKeysany[] | nullTrueCurrently selected row keys (controlled).0.1.0
defaultSelectedKeysany[] | nullTrueDefault selected row keys (uncontrolled).0.1.0
expandableboolean | TableExpandableTruefalseWhether expandable rows are enabled and its configuration.0.1.0
expandedKeysany[] | nullTrueCurrently expanded row keys (controlled).0.1.0
defaultExpandedKeysany[] | nullTrueDefault expanded row keys (uncontrolled).0.1.0
summaryTableSummaryTrueConfiguration for the table's summary row.0.1.0
filterValueFilterValue | nullTrueCurrent filter values (controlled).0.1.0
defaultFilterValueFilterValue | nullTrueDefault filter values (uncontrolled).0.1.0
sortOrderSortOrder | nullTrueCurrent sorting information (controlled).0.1.0
defaultSortOrderSortOrder | nullTrueDefault sorting information (uncontrolled).0.1.0
loadingbooleanTruefalseWhether table is loading.0.1.0
paginationTablePaginationTruetrueConfiguration for table pagination.0.1.0
pagenumber | nullTrueCurrent page number (controlled mode).0.1.0
defaultPagenumber | nullTrue1Default value of current page number (uncontrolled mode).0.1.0
pageSizenumber | nullTrueCurrent page size (controlled mode).0.1.0
defaultPageSizenumber | nullTrue10Default value of current page size (uncontrolled mode).0.1.0
tableAreaPropsRestAttrsTrueA table area property object. The element it acts on can be found via .px-table-area.0.1.0
borderRadiusnumberTrueTable border-radius settings.0.1.0
pollSizeChangebooleanTrueEnable polling for component size changes. This may affect performance. This prop also applies to internal Radio, Checkbox and Pagination child components.0.1.0

TableEvents

EventParameterDescriptionVersion
update:selectedKeyvalue: any[]Callback when selectedKeys is updated.0.1.0
selectvalue: boolean, key: any, record: TableData, event: InputEventCallback when a row is selected.0.1.0
selectAllvalue: boolean, event: InputEventCallback when select-all is triggered.0.1.0
selectedChangevalue: any[]0.1.0
update:expandedKeysvalue: any[]Callback when expandedKeys is updated.0.1.0
expandvalue: boolean, key: any, record: TableData, event: MouseEventCallback when a row is expanded.0.1.0
expandedChangevalue: any[]Callback when the expanded rows change.0.1.0
update:filterValuevalue: FilterValueCallback when filterValue is updated.0.1.0
filterSelectvalue: any[], key: string | number | symbol, option: TableFilterOption | string, column: TableColumn, event: InputEventCallback when an option in the filter is selected.0.1.0
filterConfirmkey: string | number | symbol, event: MouseEventCallback when filter selection is confirmed.0.1.0
filterResetkey: string | number | symbol, event: MouseEventCallback when filter selection is reset.0.1.0
filterChangevalue: FilterValueCallback when the filter selection changes.0.1.0
update:sortOrdervalue: SortOrderCallback when sortOrder is updated.0.1.0
sortSelectvalue: 'asc' | 'desc' | 'none', key: string | number | symbol, column: TableColumn, event: MouseEventCallback when a sort direction is selected.0.1.0
sortOrderChangevalue: SortOrderCallback when the sort order changes.0.1.0
cellMouseentercolumn: TableColumn, record: TableData, colIndex: number, rowIndex: number, event: MouseEventCallback when the mouse enters a cell.0.1.0
cellMouseleavecolumn: TableColumn, record: TableData, colIndex: number, rowIndex: number, event: MouseEventCallback when the mouse leaves a cell.0.1.0
cellClickcolumn: TableColumn, record: TableData, colIndex: number, rowIndex: number, event: MouseEventCallback when a cell in the data area is clicked.0.1.0
cellDblclickcolumn: TableColumn, record: TableData, colIndex: number, rowIndex: number, event: MouseEventCallback when a cell in the data area is double-clicked.0.1.0
cellContextmenucolumn: TableColumn, record: TableData, colIndex: number, rowIndex: number, event: MouseEventCallback when a cell in the data area is right-clicked (context menu).0.1.0
headCellClickcolumn: TableColumn, indexPath: number[], event: MouseEventCallback when a header cell is clicked.0.1.0
headCellDblclickcolumn: TableColumn, indexPath: number[], event: MouseEventCallback when a header cell is double-clicked.0.1.0
headCellContextmenucolumn: TableColumn, indexPath: number[], event: MouseEventCallback when a header cell is right-clicked (context menu).0.1.0
rowClickrecord: TableData, rowIndex: number, event: MouseEventCallback when a row in the data area is clicked.0.1.0
rowDblclickrecord: TableData, rowIndex: number, event: MouseEventCallback when a row in the data area is double-clicked.0.1.0
rowContextmenurecord: TableData, rowIndex: number, event: MouseEventCallback when a row in the data area is right-clicked (context menu).0.1.0
update:pagevalue: numberCallback for updating page.0.1.0
update:pageSizevalue: numberCallback for updating pageSize.0.1.0

TableSlots

SlotParameterDescriptionVersion
[columns[].labelSlotName]rowIndex: number, colIndex: number, column: TableColumnSlot for custom content in header cells.0.1.0
[columns[].slotName]colIndex: number, rowIndex: number, column: TableColumn, record: TableDataSlot for custom content in table cells.0.1.0
expandrowIndex: number, record: TableDataSlot for expanded row content.0.1.0

TableExpose

AttributeTypeOptionalDefaultDescriptionVersion
getCurrentData() => TableData[]FalseGet the currently displayed data of the table after sorting and filtering.0.1.0
getPaginatedData() => TableData[]FalseGet the currently displayed data of the table after pagination.0.1.0
select(key: any | any[], value: boolean) => Promise<void>FalseHandle the selection state of table rows.0.1.0
selectAll(value: boolean, crossPage?: boolean, ignoreDisabled?: boolean) => Promise<void>FalseSelect all/deselect all table rows. crossPage indicates cross-page selection, default is false. ignoreDisabled controls whether to ignore rows with a disabled state, default is true.0.1.0
clearSelect() => Promise<void>FalseClear the selection state of all rows.0.1.0
expand(key: any | any[], value: boolean) => Promise<void>FalseHandle the expand/collapse state of table rows.0.1.0
clearExpand() => Promise<void>FalseClear the expanded/collapsed state of all rows.0.1.0
filter(key: number | string | symbol, value: any[]) => Promise<void>FalseHandle the filter state of table columns.0.1.0
clearFilter() => Promise<void>FalseClear the filter state of all columns.0.1.0
sort(key: number | string | symbol, value: 'none' | 'asc' | 'desc') => Promise<void>FalseHandle the sort state of table columns.0.1.0
clearSort() => Promise<void>FalseClear the sort state of all columns.0.1.0

TableData

AttributeTypeOptionalDefaultDescriptionVersion
expandboolean | string | (( arg: Pick<TableOptionsArg, 'record' | 'rowIndex'>) => VNode | string | JSX.Element | null | void)TrueConfiguration for expanded row content.0.1.0
disabledbooleanTruefalseWhether row selection is disabled.0.1.0
[x: string | number | symbol]anyTrueOther properties.0.1.0

TableColumn

AttributeTypeOptionalDefaultDescriptionVersion
keynumber | string | symbolFalseUnique identifier for the column.0.1.0
labelstringTrueText displayed in the column header.0.1.0
fieldstringTrueThe data field name corresponding to the cell.0.1.0
widthnumberTrue80Column width setting.0.1.0
minWidthnumberTrue0Minimum width setting for the column.0.1.0
align'left' | 'center' | 'right'True'left'Cell text alignment.0.1.0
fixed'left' | 'right' | 'none'True'none'Column fixed position setting.0.1.0
slotNamestringTrueSlot name for cell content.0.1.0
renderstring | ((arg: TableOptionsArg) => VNode | string | JSX.Element | null | void)TrueCell content render function or name.0.1.0
labelSlotNamestringTrueSlot name for header cell content.0.1.0
labelRenderstring | ((arg: Omit<TableOptionsArg, 'record'>) => VNode | string | JSX.Element | null | void)TrueHeader cell content render function or name.0.1.0
childrenTableColumn[]TrueCollection of child columns, used for multi-level headers.0.1.0
filterableTableFilterableTrueFilter configuration for the column.0.1.0
sortableTableSortableTrueSort configuration for the column.0.1.0
cellPropsRestAttrsTrueCell attributes object.0.1.0
labelCellPropsRestAttrsTrueHeader cell attributes object.0.1.0
contentPropsRestAttrsTrueCell content attributes object.0.1.0
labelContentPropsRestAttrsTrueHeader content attributes object.0.1.0

TableBordered

AttributeTypeOptionalDefaultDescriptionVersion
tablebooleanTruetrueTable outer border.0.1.0
rowbooleanTruetrueTable row horizontal border.0.1.0
colbooleanTruetrueTable column vertical border.0.1.0
headbooleanTruetrueBorder between the header area and the content area.0.1.0
sidebooleanTruetrueBorders on the left and right sides of the table; only takes effect when bordered.table or bordered is true.0.1.0

TableSelection

AttributeTypeOptionalDefaultDescriptionVersion
multiplebooleanTruefalseWhether multiple selection is enabled.0.1.0
showSelectAllbooleanTruetrueWhether to show the select-all button; only effective when selection.multiple is true.0.1.0
selectAllMethod(value: boolean, preState: { value: boolean, indeterminate: boolean }, arg: { originData: TableData[], currentData: TableData[], paginatedData: TableData[], page: number, pageSize: number }) => any[] | Promise<any[]>TrueCustomizes the selectedKeys value updated during a select‑all operation.0.1.0
supersetSelectAllRef'current' | 'all'True'current'Configures the superset referenced for the select‑all checkbox's checked status.0.1.0
labelstringTrueHeader text for the row selection column.0.1.0
widthnumberTrue48Width of the row selection column.0.1.0
minWidthnumberTrue0Minimum width of the row selection column.0.1.0
fixedbooleanTruefalseWhether the row selection column is fixed; forced to the left when there are left-fixed columns.0.1.0
onlyCurrentbooleanTruefalseWhether selected rows should only include rows in the current data prop.0.1.0
cellPropsRestAttrsTrueColumn cell properties object.0.1.0
labelCellPropsRestAttrsTrueColumn header cell properties object.0.1.0
contentPropsRestAttrsTrueColumn cell content properties object.0.1.0
labelContentPropsRestAttrsTrueColumn header content properties object.0.1.0

TableExpandable

AttributeTypeOptionalDefaultDescriptionVersion
defaultExpandAllRowsbooleanTruefalseWhether all rows are expanded by default.0.1.0
labelstringTrueHeader text for the expand-button column.0.1.0
widthnumberTrue48Width of the expand-button column.0.1.0
minWidthnumberTrue0Minimum width of the expand-button column.0.1.0
fixedbooleanTruefalseWhether the expand-button column is fixed; forced to the left when there are left-fixed columns.0.1.0
cellPropsRestAttrsTrueColumn cell properties object.0.1.0
labelCellPropsRestAttrsTrueColumn header cell properties object.0.1.0
contentPropsRestAttrsTrueColumn cell content properties object.0.1.0
labelContentPropsRestAttrsTrueColumn header content properties object.0.1.0

TableSummary

AttributeTypeOptionalDefaultDescriptionVersion
dataTableData | TableData[]TrueSummary row data.0.1.0
placement'end' | 'start'True'end'Placement of the summary row.0.1.0
summaryTextstring | string[]TrueText for the first column of the summary row; if an array, applies to the corresponding indexed summary row; if a string, applies to all summary rows.0.1.0
fixedbooleanTruetrueWhether the summary row is fixed; when the summary row is placed at the start of the data area, fixing the summary row requires fixedHead to be true.0.1.0
spanMethod(options: TableOptionsArg) => void | { colspan?: number, rowspan?: number }TrueMethod for merging cells in the summary row.0.1.0

TableFilterable

AttributeTypeOptionalDefaultDescriptionVersion
filterOptions(string | TableFilterOption)[]TrueFilter options for the column.0.1.0
filterMethod(filteredValue: any[], record: TableData, field?: string) => booleanTrueFunction to determine whether a record matches the selected filters.0.1.0
defaultFilterValueany[] | nullTrueDefault filter values.0.1.0
multiplebooleanTruefalseWhether multiple filter options can be selected.0.1.0
popoverPropsOmit<PopoverProps, 'visible' | 'content'> & EmitEvent<PopoverEvents>TrueAdditional popover properties for the filter.0.1.0

TableSortable

AttributeTypeOptionalDefaultDescriptionVersion
orders('asc' | 'desc')[] | Readonly<('asc' | 'desc')[]>TrueSort directions available for the column.0.1.0
sortMethod'custom' | ((a: TableData, b: TableData, order: 'asc' | 'desc', field?: string) => number)TrueSort method for the column.0.1.0
defaultSortOrder'asc' | 'desc' | 'none' | nullTrueDefault sort direction for the column.0.1.0
multiplebooleanTruefalseWhether multi-column sorting is enabled.0.1.0
prioritynumberTrue0Priority for multi-column sorting; higher values take precedence.0.1.0

TablePagination

The paginateMethod field controls the pagination method inside the table component. When set to 'auto', the table will paginate the data based on the page capacity. When set to 'custom', no such behavior will occur; this configuration is often used for backend pagination.

ts
export type TablePagination = {
	paginateMethod?: 'custom' | 'auto'
} & PaginationProps &
	EmitEvent<PaginationEvents> &
	RestAttrs

TableOptionsArg

ts
export type TableOptionsArg = {
	rowIndex: number
	colIndex: number
	record: TableData
	column: TableColumn
}

Option

ts
export interface Option<T = any> {
	value: T
	label: string
}

TableFilterOption

ts
export interface TableFilterOption<T = any> extends Option<T> {
	disabled?: boolean
	key?: string | number | symbol
}

SortOrder, FilterValue

ts
export type SortOrder = {
	[key: string | number | symbol]: 'asc' | 'desc' | 'none' | null | undefined
}

export type FilterValue = {
	[key: string | number | symbol]: any[] | null | undefined
}

RestAttrs

ts
import type { StyleValue } from 'vue'

export type VueClassValue = string | Record<string, any> | VueClassValue[]
export type VueStyleValue = StyleValue

export type RestAttrs = {
	style?: VueStyleValue | null
	class?: VueClassValue | null
	[x: string]: any
}

EmitEvent

ts
export type EmitEvent<T extends Record<string, any>> = {
	[K in keyof T as `on${Capitalize<K & string>}`]?: (...args: T[K]) => void
}