import CwCheckbox from '../checkbox/checkbox.component.js'; import CwElement from '../../internal/cw-element.js'; import CwIcon from '../icon/icon.component.js'; import CwSpinner from '../spinner/spinner.component.js'; import type { CSSResultGroup } from 'lit'; /** * @summary Data tables display structured tabular data with support for sorting, row selection, and custom cell rendering. * @documentation https://cordwainer.dev/components/data-table * @status experimental * @since 1.2 * * @dependency cw-checkbox * @dependency cw-icon * @dependency cw-spinner * * @event {SortChangeEvent} cw-sort-change - Emitted when the user clicks a sortable column header. `detail: { column: string, direction: 'asc' | 'desc' }`. * @event {CwRowSelectionChangeEvent} cw-row-selection-change - Emitted when row selection changes. `detail: { selectedRows: object[] }`. * @event {RowClickEvent} cw-row-click - Emitted when a body row is clicked. `detail: { row: object, index: number }`. * * @slot - Place `` elements here to define columns. * @slot empty - Content shown when `data` is empty and not loading. * * @csspart base - The outer scrollable wrapper. * @csspart table - The `` element. * @csspart header-row - The `` in ``. * @csspart header-cell - Each `` in ``. * @csspart body-row--selected - Added to body rows that are selected. * @csspart body-cell - Each `
` element. * @csspart sort-button - The clickable button inside a sortable ``. * @csspart sort-icon - The sort direction icon inside a sortable ``. * @csspart body-row - Each `
` element. * @csspart checkbox-cell - The `` or `` that holds the selection checkbox. * @csspart loading - The loading overlay shown when `loading` is true. * @csspart empty - The empty-state container shown when `data` is empty. * * @cssproperty --cw-data-table-border-color - Border color used when `bordered` is set. Default: `var(--cw-color-neutral-200)`. * @cssproperty --cw-data-table-stripe-color - Alternate row background color when `striped` is set. Default: `var(--cw-color-neutral-50)`. * @cssproperty --cw-data-table-row-hover-color - Row background on hover. Default: `var(--cw-color-neutral-100)`. * @cssproperty --cw-data-table-selected-row-color - Selected row background. Default: `var(--cw-color-primary-50)`. * @cssproperty --cw-data-table-header-background - Header row background. Default: `var(--cw-color-neutral-50)`. */ export default class CwDataTable extends CwElement { #private; static styles: CSSResultGroup; static dependencies: { 'cw-checkbox': typeof CwCheckbox; 'cw-icon': typeof CwIcon; 'cw-spinner': typeof CwSpinner; }; connectedCallback(): void; disconnectedCallback(): void; private columns; private selectedIds; /** * The array of row data objects to display. This is a property only and cannot be set as an attribute. * Each object's keys correspond to column `name` values. */ data: Record[]; /** The key in each row object used as a stable row identity for selection. Falls back to row index when not set. */ rowId: string; /** Controls row selection behavior. */ selection: 'none' | 'single' | 'multiple'; /** The column currently used for sorting, identified by its `name`. */ sortColumn: string; /** The direction of the current sort. */ sortDirection: 'asc' | 'desc'; /** * Disables client-side sorting. When set, the component emits `cw-sort-change` but does not * reorder `data` itself — the consumer is responsible for fetching/providing sorted data. */ serverSort: boolean; /** Shows a loading spinner overlay over the table body. */ loading: boolean; /** Applies alternating row background colors. */ striped: boolean; /** Adds borders between cells. */ bordered: boolean; /** An accessible caption for the table, rendered as a visually hidden `
`. */ caption: string; /** Text shown in the empty state when `data` is empty and `loading` is false. */ emptyText: string; /** Returns the currently selected row objects. Set this property to programmatically control selection. */ get selectedRows(): Record[]; set selectedRows(rows: Record[]); private getRowId; private getSortedData; private getVisibleColumns; /** @internal Called by child `` elements when their properties change. */ handleColumnChange(): void; private getColumns; private handleSlotChange; private handleSortClick; private handleRowClick; private handleRowCheckboxChange; private handleSelectAllChange; handleDataChange(): void; private renderSortIcon; private renderHeaderCell; private renderBodyCell; render(): import("lit-html").TemplateResult<1>; }