UNPKG

@3mo/data-grid

Version:
234 lines 14 kB
import { Component, type PropertyValues, type HTMLTemplateResult } from '@a11d/lit'; import { LocalStorage } from '@a11d/local-storage'; import { InstanceofAttributeController } from '@3mo/instanceof-attribute-controller'; import { SlotController } from '@3mo/slot-controller'; import { ThemeController } from '@3mo/theme'; import { MediaQueryController } from '@3mo/media-query-observer'; import { DataGridColumnsController } from './DataGridColumnsController.js'; import { DataGridSelectionBehaviorOnDataChange, DataGridSelectionController, type DataGridSelectability } from './DataGridSelectionController.js'; import { DataGridSortingController, type DataGridRankedSortDefinition, type DataGridSorting } from './DataGridSortingController.js'; import { DataGridDetailsController } from './DataGridDetailsController.js'; import { DataGridCsvController, DataGridSidePanelTab, type DataGridColumn, type DataGridCell, type DataGridRow, DataGridContextMenuController } from './index.js'; import { DataRecord } from './DataRecord.js'; export type DataGridPagination = 'auto' | number; export declare enum DataGridEditability { Never = "never", Cell = "cell", Always = "always" } /** * @element mo-data-grid * * @attr data - The data to be displayed in the DataGrid. It is an array of objects, where each object represents a row. * @attr columns - The columns to be displayed in the DataGrid. It is an array of objects, where each object represents a column. * @attr headerHidden - Whether the header should be hidden. * @attr preventVerticalContentScroll - Whether the content should be prevented from scrolling vertically. * @attr page - The current page. * @attr pagination - The pagination mode. It can be either `auto` or a number. * @attr sorting - The sorting mode. It is an object with `selector` and `strategy` properties. * @attr selectability - The selection mode. Default to 'single' if context menus available, 'undefined' otherwise. * @attr isDataSelectable - Whether data of a given row is selectable. * @attr selectedData - The selected data. * @attr selectOnClick - Whether the row should be selected on click. * @attr selectionBehaviorOnDataChange - The behavior of the selection when the data changes. * @attr multipleDetails - Whether multiple details can be opened at the same time. * @attr subDataGridDataSelector - The key path of the sub data grid data. * @attr hasDataDetail - Whether the data has a detail. * @attr detailsOnClick - Whether the details should be opened on click. * @attr primaryContextMenuItemOnDoubleClick - The primary context menu item on double click. * @attr editability - The editability mode. * @attr getRowDetailsTemplate - A function which returns a template for the details of a given row. * @attr getRowContextMenuTemplate - A function which returns a template for the context menu of a given row. * @attr sidePanelTab - The side panel tab. * @attr sidePanelHidden - Whether the side panel should be hidden. * @attr hasAlternatingBackground - Whether the rows should have alternating background. * @attr preventFabCollapse - Whether the FAB should be prevented from collapsing. * @attr cellFontSize - The font size of the cells relative to the default font size. Defaults @see DataGrid.cellFontSize 's value which defaults to 0.8. * @attr rowHeight - The height of the rows in pixels. Defaults to @see DataGrid.rowHeight 's value which defaults to 35. * @attr exportable - Whether the DataGrid is exportable. This will show an export button in the footer. * * @slot - Use this slot only for declarative DataGrid APIs e.g. setting ColumnDefinitions via `mo-data-grid-columns` tag. * @slot toolbar - The horizontal bar above DataGrid's contents. * @slot toolbar-action - A slot for action icon-buttons in the toolbar which are displayed on the end. * @slot filter - A vertical bar for elements which filter DataGrid's data. It is opened through an icon-button in the toolbar. * @slot sum - A horizontal bar in the DataGrid's footer for showing sums. Calculated sums are also placed here by default. * @slot settings - A vertical bar for elements which change DataGrid's settings. It is pre-filled with columns' settings and can be opened through an icon-button in the toolbar. * @slot fab - A wrapper at the bottom right edge, floating right above the footer, expecting Floating Action Button to be placed in. * @slot error-no-content - A slot for displaying an error message when no data is available. * * @cssprop --mo-data-grid-min-visible-rows - The minimum number of visible rows. Default to 2.5. * @cssprop --mo-data-grid-footer-background - The background of the footer. * @cssprop --mo-data-grid-cell-padding - The inline padding of the cells. Default to 10px. * @cssprop --mo-data-grid-column-sub-row-indentation - The indentation of the first column in the sub row. Default to 20px. * * @fires dataChange * @fires selectionChange * @fires pageChange * @fires paginationChange * @fires columnsChange * @fires sidePanelOpen * @fires sidePanelClose * @fires sortingChange * @fires rowDetailsOpen * @fires rowDetailsClose * @fires rowClick * @fires rowDoubleClick * @fires rowMiddleClick * @fires cellEdit */ export declare class DataGrid<TData, TDetailsElement extends Element | undefined = undefined> extends Component { static readonly rowHeight: LocalStorage<number>; static readonly cellRelativeFontSize: LocalStorage<number>; static readonly pageSize: LocalStorage<number>; static readonly hasAlternatingBackground: LocalStorage<boolean>; protected static readonly defaultRowElementTag: import("lit-html/static.js").StaticValue; readonly dataChange: EventDispatcher<Array<TData>>; readonly selectionChange: EventDispatcher<Array<TData>>; readonly pageChange: EventDispatcher<number>; readonly paginationChange: EventDispatcher<DataGridPagination | undefined>; readonly columnsChange: EventDispatcher<Array<DataGridColumn<TData>>>; readonly sidePanelOpen: EventDispatcher<DataGridSidePanelTab>; readonly sidePanelClose: EventDispatcher; readonly sortingChange: EventDispatcher<Array<DataGridRankedSortDefinition<TData>>>; readonly rowDetailsOpen: EventDispatcher<DataGridRow<TData, TDetailsElement>>; readonly rowDetailsClose: EventDispatcher<DataGridRow<TData, TDetailsElement>>; readonly rowClick: EventDispatcher<DataGridRow<TData, TDetailsElement>>; readonly rowDoubleClick: EventDispatcher<DataGridRow<TData, TDetailsElement>>; readonly rowMiddleClick: EventDispatcher<DataGridRow<TData, TDetailsElement>>; readonly cellEdit: EventDispatcher<DataGridCell<any, TData, TDetailsElement>>; data: TData[]; columns: DataGridColumn<TData, unknown>[]; headerHidden: boolean; preventVerticalContentScroll: boolean; page: number; pagination?: DataGridPagination; sorting?: DataGridSorting<TData>; selectability?: DataGridSelectability; isDataSelectable?: (data: TData) => boolean; selectedData: TData[]; selectOnClick: boolean; selectionBehaviorOnDataChange: DataGridSelectionBehaviorOnDataChange; getRowDetailsTemplate?: (data: TData) => HTMLTemplateResult; multipleDetails: boolean; subDataGridDataSelector?: KeyPath.Of<TData>; hasDataDetail?: (data: TData) => boolean; detailsOnClick: boolean; getRowContextMenuTemplate?: (data: Array<TData>) => HTMLTemplateResult; primaryContextMenuItemOnDoubleClick: boolean; editability: DataGridEditability; sidePanelTab: DataGridSidePanelTab | undefined; sidePanelHidden: boolean; hasAlternatingBackground: boolean; preventFabCollapse: boolean; protected fabSlotCollapsed: boolean; exportable: boolean; cellFontSize: number; rowHeight: number; private readonly header?; private readonly scroller?; readonly rows: Array<DataGridRow<TData, TDetailsElement>>; private readonly footer?; private readonly sidePanel?; setPage(page: number): void; setPagination(pagination?: DataGridPagination): void; setData(data: Array<TData>, selectionBehavior?: DataGridSelectionBehaviorOnDataChange): void; get hasSelection(): boolean; selectAll(...parameters: Parameters<typeof this.selectionController.selectAll>): void; deselectAll(...parameters: Parameters<typeof this.selectionController.deselectAll>): void; select(...parameters: Parameters<typeof this.selectionController.select>): void; isSelectable(...parameters: Parameters<typeof this.selectionController.isSelectable>): boolean; get hasDetails(): boolean; get allRowDetailsOpen(): boolean; openRowDetails(...parameters: Parameters<typeof this.detailsController.openAll>): void; closeRowDetails(...parameters: Parameters<typeof this.detailsController.closeAll>): void; toggleRowDetails(...parameters: Parameters<typeof this.detailsController.toggleAll>): void; getSorting(...parameters: Parameters<typeof DataGridSortingController.prototype.get>): DataGridRankedSortDefinition<TData>[]; sort(...parameters: Parameters<typeof this.sortingController.set>): void; unsort(...parameters: Parameters<typeof this.sortingController.reset>): void; generateCsv(...parameters: Parameters<typeof this.csvController.generateCsv>): Promise<void>; setColumns(...parameters: Parameters<typeof this.columnsController.setColumns>): void; extractColumns(...parameters: Parameters<typeof this.columnsController.extractColumns>): void; protected handleColumnChange(e: CustomEvent): void; get extractedColumns(): DataGridColumn<TData, unknown>[]; extractedColumnsUpdated(extractedColumns: Array<DataGridColumn<TData, TDetailsElement>>): void; get visibleColumns(): DataGridColumn<TData, unknown>[]; getRow(data: TData): DataGridRow<TData, TDetailsElement> | undefined; getCell(data: TData, column: DataGridColumn<TData, unknown>): DataGridCell<any, TData, TDetailsElement> | undefined; handleEdit(data: TData, column: DataGridColumn<TData, unknown>, value: KeyPath.ValueOf<TData, KeyPath.Of<TData>> | undefined): void; navigateToSidePanelTab(tab?: DataGridSidePanelTab): void; get hasContextMenu(): boolean; get toolbarElements(): Element[]; get hasToolbar(): boolean; get filterElements(): Element[]; get hasFilters(): boolean; get hasSums(): boolean; get hasFabs(): boolean; get hasPagination(): boolean; get supportsDynamicPageSize(): boolean; get pageSize(): number; get hasFooter(): boolean; get dataLength(): number | undefined; get maxPage(): number | undefined; get hasNextPage(): boolean; protected readonly slotController: SlotController; protected readonly instanceofAttributeController: InstanceofAttributeController; protected readonly smallScreenObserverController: MediaQueryController; protected readonly themeController: ThemeController; readonly columnsController: DataGridColumnsController<TData>; readonly selectionController: DataGridSelectionController<TData>; readonly sortingController: DataGridSortingController<TData>; readonly contextMenuController: DataGridContextMenuController<TData>; readonly detailsController: DataGridDetailsController<TData>; readonly csvController: DataGridCsvController<TData>; readonly rowIntersectionObserver?: IntersectionObserver; protected updated(...parameters: Parameters<Component['updated']>): void; private navigateToLastValidPageIfNeeded; protected firstUpdated(props: PropertyValues): void; static get styles(): import("@a11d/lit").CSSResult; protected get template(): HTMLTemplateResult; private readonly splitterResizerTemplate; private get splitterModeTemplate(); private get overlayModeTemplate(); private get sidePanelTemplate(); protected get settingsDefaultTemplate(): HTMLTemplateResult; protected get filtersDefaultTemplate(): HTMLTemplateResult; protected get columnsTemplate(): HTMLTemplateResult; protected get rowElementTag(): import("lit-html/static.js").StaticValue; get hasDefaultRowElements(): boolean; protected get fabTemplate(): HTMLTemplateResult; protected get contentTemplate(): HTMLTemplateResult; protected get noContentTemplate(): HTMLTemplateResult; protected get dataGridTemplate(): HTMLTemplateResult; protected get headerTemplate(): HTMLTemplateResult; private get rowsTemplate(); /** * The hidden size anchor row renders the longest content of each column in a hidden row. * This is used to mitigate the issue of using values with fluctuating lengths * with a automatic column width e.g. "max-content" or "fit-content" in combination with * row virtualization, which could lead to a lot of column resizing during scrolling. */ private get hiddenSizeAnchorRowTemplate(); getRowTemplate(dataRecord: DataRecord<TData>, index?: number): import("lit-html").TemplateResult; protected get footerTemplate(): HTMLTemplateResult; get sumsTemplate(): HTMLTemplateResult; protected get toolbarTemplate(): HTMLTemplateResult; protected get toolbarDefaultTemplate(): HTMLTemplateResult; protected get toolbarActionDefaultTemplate(): HTMLTemplateResult; protected get sumDefaultTemplate(): HTMLTemplateResult; protected get toolbarActionsTemplate(): HTMLTemplateResult; private lastScrollElementTop; private handleScroll; protected handlePointerDown(event: PointerEvent): void; protected getFlattenedData(values?: TData[]): Generator<DataRecord<TData>, void, undefined>; get dataRecords(): Array<DataRecord<TData>>; get renderDataRecords(): DataRecord<TData>[]; protected get dataSkip(): number; protected get dataTake(): number; getCsvData(): AsyncGenerator<number, DataRecord<TData>[], unknown>; } declare global { interface HTMLElementTagNameMap { 'mo-data-grid': DataGrid<unknown, undefined>; } } //# sourceMappingURL=DataGrid.d.ts.map