UNPKG

@hashicorp/design-system-components

Version:
155 lines (154 loc) 6.89 kB
/** * Copyright IBM Corp. 2021, 2025 * SPDX-License-Identifier: MPL-2.0 */ import Component from '@glimmer/component'; import { TrackedSet } from 'tracked-built-ins'; import { HdsAdvancedTableDensityValues, HdsAdvancedTableVerticalAlignmentValues } from './types.ts'; import HdsAdvancedTableTh from './th'; import HdsAdvancedTableTd from './td'; import type Owner from '@ember/owner'; import type { ComponentLike, WithBoundArgs } from '@glint/template'; import type { HdsAdvancedTableColumn, HdsAdvancedTableDensities, HdsAdvancedTableHorizontalAlignment, HdsAdvancedTableOnSelectionChangeSignature, HdsAdvancedTableSortingFunction, HdsAdvancedTableThSortOrder, HdsAdvancedTableVerticalAlignment, HdsAdvancedTableExpandState, HdsAdvancedTableColumnReorderCallback, HdsAdvancedTableModel } from './types.ts'; import type { HdsAdvancedTableThSelectableSignature } from './th-selectable'; import type { HdsAdvancedTableTrSignature } from './tr'; import type { HdsFilterBarSignature } from '../filter-bar/index'; import type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base'; import type HdsIntlService from '../../../services/hds-intl.ts'; export interface YieldedHdsAdvancedTableTr<T> { Args: { isSelected?: boolean; selectionKey?: string; selectionAriaLabelSuffix?: string; selectableColumnKey?: string; sortBySelectedOrder?: HdsAdvancedTableThSortOrder; onClickSortBySelected?: HdsAdvancedTableThSelectableSignature['Args']['onClickSortBySelected']; }; Blocks: HdsAdvancedTableTrSignature<T>['Blocks']; Element: HdsAdvancedTableTrSignature<T>['Element']; } export declare const DENSITIES: HdsAdvancedTableDensities[]; export declare const DEFAULT_DENSITY = HdsAdvancedTableDensityValues.Medium; export declare const VALIGNMENTS: HdsAdvancedTableVerticalAlignment[]; export declare const DEFAULT_VALIGN = HdsAdvancedTableVerticalAlignmentValues.Top; export declare const BORDER_WIDTH = 1; export interface HdsAdvancedTableSignature<T = HdsAdvancedTableModel> { Args: { align?: HdsAdvancedTableHorizontalAlignment; caption?: string; columns: HdsAdvancedTableColumn[]; columnOrder?: string[]; density?: HdsAdvancedTableDensities; identityKey?: string; isSelectable?: boolean; isStriped?: boolean; model: T[]; reorderedMessageText?: string; selectionAriaLabelSuffix?: string; sortBy?: string; selectableColumnKey?: string; sortedMessageText?: string; sortOrder?: HdsAdvancedTableThSortOrder; valign?: HdsAdvancedTableVerticalAlignment; hasReorderableColumns?: boolean; hasResizableColumns?: boolean; hasStickyHeader?: boolean; hasStickyFirstColumn?: boolean; childrenKey?: string; maxHeight?: string; onColumnReorder?: HdsAdvancedTableColumnReorderCallback; onColumnResize?: (columnKey: string, newWidth?: string) => void; onSelectionChange?: (selection: HdsAdvancedTableOnSelectionChangeSignature) => void; onSort?: (sortBy: string, sortOrder: HdsAdvancedTableThSortOrder) => void; }; Blocks: { actions?: [ { FilterBar?: ComponentLike<HdsFilterBarSignature>; } ]; body?: [ { Td?: WithBoundArgs<typeof HdsAdvancedTableTd, 'align' | 'compositeItem' | 'isCompositeItemDisabled'>; Tr?: ComponentLike<YieldedHdsAdvancedTableTr<T>>; Th?: WithBoundArgs<typeof HdsAdvancedTableTh, 'compositeItem' | 'isCompositeItemDisabled' | 'depth' | 'isExpandable' | 'isExpanded' | 'isStickyColumnPinned' | 'newLabel' | 'onClickToggle' | 'parentId' | 'scope'>; data: T; rowIndex?: number | string; isOpen?: HdsAdvancedTableExpandState; } ]; emptyState?: []; }; Element: HTMLDivElement; } export default class HdsAdvancedTable<T = HdsAdvancedTableModel> extends Component<HdsAdvancedTableSignature<T>> { readonly hdsIntl: HdsIntlService; private _selectAllCheckbox?; private _isSelectAllCheckboxSelected?; private _tableHeight; private _selectableRows; private _captionId; private _scrollHandler; private _dragOverHandler; private _resizeObserver; private _theadElement; private _scrollWrapperElement; scrollIndicatorDimensions: { bottom: string; height: string; left: string; right: string; width: string; }; isStickyColumnPinned: boolean; isStickyHeaderPinned: boolean; hasPinnedFirstColumn: boolean | undefined; reorderedMessageText: string; showScrollIndicatorLeft: boolean; showScrollIndicatorRight: boolean; showScrollIndicatorTop: boolean; showScrollIndicatorBottom: boolean; stickyColumnOffset: string; currentSortBy?: string; currentSortOrder: HdsAdvancedTableThSortOrder; expandedRowIds: TrackedSet<string>; private _setUpScrollWrapper; private _setUpThead; private _syncSortArgs; constructor(owner: Owner, args: HdsAdvancedTableSignature<T>['Args']); get childrenKey(): string; get hasRowsWithChildren(): boolean; get expandableRowIds(): string[]; get isAllExpanded(): boolean; get sortCriteria(): string | HdsAdvancedTableSortingFunction<unknown>; get isEmpty(): boolean; get identityKey(): string | undefined; get hasStickyFirstColumn(): boolean | undefined; get sortedMessageText(): string; get isSelectable(): boolean; get isStriped(): boolean; get density(): HdsAdvancedTableDensities; get hasStickyHeader(): boolean; get valign(): HdsAdvancedTableVerticalAlignment; get classNames(): string; get theadClassNames(): string; asRowData: (source: Record<string, unknown>) => T; asScope: (scope: string) => "col" | "row"; asTr: (comp: unknown) => ComponentLike<YieldedHdsAdvancedTableTr<T>>; private _initializeExpandedRows; private _runAssertions; private _onColumnReorder; onSelectionChangeCallback(checkbox?: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void; toggleExpandAll(): void; toggleRow(rowId: string): void; onSelectionAllChange(): void; onSelectionRowChange(checkbox?: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void; didInsertSelectAllCheckbox(checkbox: HdsFormCheckboxBaseSignature['Element']): void; willDestroySelectAllCheckbox(): void; didInsertRowCheckbox(checkbox: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void; willDestroyRowCheckbox(selectionKey?: string): void; setSelectAllState(): void; setSortBy(columnKey: HdsAdvancedTableColumn['key']): void; private _updateScrollIndicators; private _onPinFirstColumn; }