@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
188 lines (187 loc) • 7.29 kB
TypeScript
import type { RowHeight, RowNode } from "@1771technologies/lytenyte-shared";
import type { ReactNode, Ref } from "react";
import type { Column, EditParams, HeaderGroupParams, HeaderParams, RowFullWidthRendererParams, RowParams } from "./column.js";
import type { GridSpec, GridStyle } from "./grid.js";
import type { API, DataRect } from "./api.js";
import type { ViewportShadowsProps } from "@1771technologies/lytenyte-core/components";
import type { GridEvents } from "./events.js";
export type Props<Spec extends GridSpec = GridSpec> = {
readonly cellSelectionMode?: "range" | "multi-range" | "none";
readonly cellSelections?: DataRect[];
readonly cellSelectionExcludeMarker?: boolean;
readonly cellSelectionMaintainOnNonCellPosition?: boolean;
readonly onCellSelectionChange?: (rects: DataRect[]) => void;
readonly columns?: Column<Spec>[] | null;
readonly columnBase?: Omit<Partial<Column<Spec>>, "id" | "pin" | "field" | "editSetter">;
readonly columnMarker?: Omit<Partial<Column<Spec>>, "id" | "field" | "pin"> & {
on?: boolean;
};
readonly columnGroupDefaultExpansion?: boolean;
readonly columnGroupExpansions?: Record<string, boolean>;
readonly columnGroupJoinDelimiter?: string;
readonly columnSizeToFit?: boolean;
readonly columnDoubleClickToAutosize?: boolean;
readonly columnMoveDragPlaceholder?: {
query: string;
offset?: [number, number];
} | string | ((props: HeaderParams<Spec> & {
readonly x: number;
readonly y: number;
readonly outside: boolean;
}) => ReactNode);
readonly columnGroupMoveDragPlaceholder?: {
query: string;
offset?: [number, number];
} | string | ((props: HeaderGroupParams<Spec> & {
readonly x: number;
readonly y: number;
readonly outside: boolean;
}) => ReactNode);
readonly columnGroupRenderer?: (props: HeaderGroupParams<Spec>) => ReactNode;
readonly gridId?: string;
readonly events?: GridEvents<Spec>;
readonly styles?: GridStyle;
readonly rtl?: boolean;
readonly headerHeight?: number;
readonly headerGroupHeight?: number;
readonly floatingRowHeight?: number;
readonly floatingRowEnabled?: boolean;
readonly rowOverscanTop?: number;
readonly rowOverscanBottom?: number;
readonly colOverscanStart?: number;
readonly colOverscanEnd?: number;
readonly virtualizeCols?: boolean;
readonly virtualizeRows?: boolean;
readonly rowAlternateAttr?: boolean;
readonly rowScanDistance?: number;
readonly rowSource?: Spec["source"];
readonly rowHeight?: RowHeight;
readonly rowGroupColumn?: false | Omit<Partial<Column<Spec>>, "field" | "id">;
readonly rowFullWidthPredicate?: null | ((params: RowParams<Spec>) => boolean);
readonly rowFullWidthRenderer?: (props: RowFullWidthRendererParams<Spec>) => ReactNode | null;
readonly rowSelectionMode?: "single" | "multiple" | "none";
readonly rowSelectionActivator?: "single-click" | "double-click" | "none";
readonly rowDetailExpansions?: Set<string>;
readonly rowDetailHeight?: number | "auto";
readonly rowDetailAutoHeightGuess?: number;
readonly rowDetailRenderer?: (props: RowParams<Spec>) => ReactNode | null;
readonly rowDropAccept?: string[];
readonly ref?: Ref<API<Spec>>;
readonly slotShadows?: (props: ViewportShadowsProps) => ReactNode;
readonly slotViewportOverlay?: ((props: {
api: API<Spec>;
}) => ReactNode) | ReactNode;
readonly slotRowsOverlay?: ((props: {
api: API<Spec>;
}) => ReactNode) | ReactNode;
readonly editRowValidatorFn?: (params: Pick<EditParams<Spec>, "api" | "editData" | "row">) => boolean | Record<string, unknown>;
readonly editClickActivator?: "single-click" | "double-click" | "none";
readonly editMode?: "cell" | "row" | "readonly";
readonly onColumnGroupExpansionChange?: (change: Record<string, boolean>) => void;
readonly onRowDetailExpansionsChange?: (change: Set<string>) => void;
readonly onColumnsChange?: (columns: Column<Spec>[]) => void;
readonly onRowGroupColumnChange?: (column: Omit<Column<Spec>, "field" | "id">) => void;
readonly onColumnMoveOutside?: (params: {
readonly api: API<Spec>;
readonly columns: Column<Spec>[];
}) => void;
readonly onEditBegin?: (params: {
readonly api: API<Spec>;
readonly preventDefault: () => void;
readonly row: RowNode<Spec["data"]>;
readonly column: Column<Spec>;
readonly editData: unknown;
}) => void;
readonly onEditEnd?: (params: {
readonly api: API<Spec>;
readonly preventDefault: () => void;
readonly row: RowNode<Spec["data"]>;
readonly column: Column<Spec>;
readonly editData: unknown;
}) => void;
readonly onEditCancel?: (params: {
readonly api: API<Spec>;
readonly row: RowNode<Spec["data"]>;
readonly column: Column<Spec>;
readonly editData: unknown;
}) => void;
readonly onEditFail?: (params: {
readonly api: API<Spec>;
readonly row: RowNode<Spec["data"]>;
readonly column: Column<Spec>;
readonly editData: unknown;
readonly validation: null | Record<string, unknown> | boolean;
}) => void;
readonly onRowSelect?: (params: {
readonly preventDefault: () => void;
readonly api: API<Spec>;
readonly rows: string[] | "all";
readonly deselect: boolean;
}) => void;
readonly onRowDrop?: (params: {
readonly source: {
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number;
data?: any;
};
readonly over: {
kind: "viewport";
id: string;
element: HTMLElement;
api: API<GridSpec>;
} | {
kind: "row";
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number;
element: HTMLElement;
};
}) => void;
readonly onRowDragEnter?: (params: {
readonly source: {
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number;
data?: any;
};
readonly over: {
kind: "viewport";
id: string;
element: HTMLElement;
api: API<GridSpec>;
} | {
kind: "row";
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number;
element: HTMLElement;
};
}) => void;
readonly onRowDragLeave?: (params: {
readonly source: {
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number | null;
data?: any;
};
readonly over: {
kind: "viewport";
id: string;
element: HTMLElement;
api: API<GridSpec>;
} | {
kind: "row";
id: string;
api: API<GridSpec>;
row: RowNode<any>;
rowIndex: number | null;
element: HTMLElement;
};
}) => void;
};