@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
57 lines (56 loc) • 2.66 kB
TypeScript
import type { LayoutCell, LayoutFullWidthRow, LayoutHeaderCell, LayoutHeaderFloating, LayoutHeaderGroup, LayoutRowWithCells, RowNode } from "@1771technologies/lytenyte-shared";
import type { Column } from "./column.js";
import type { GridSpec } from "./grid.js";
import type { JSX } from "react";
import type { API } from "./api.js";
export type Events = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${string}` ? key : never]: JSX.IntrinsicElements["div"][key];
};
type CellEvents<Spec extends GridSpec = GridSpec> = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${infer X}` ? Uncapitalize<X> : never]: (params: {
event: Parameters<JSX.IntrinsicElements["div"][key]>[0];
column: Column<Spec>;
row: RowNode<Spec["data"]>;
layout: LayoutCell;
api: API<Spec>;
}) => void;
};
type RowEvents<Spec extends GridSpec = GridSpec> = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${infer X}` ? Uncapitalize<X> : never]: (params: {
event: Parameters<JSX.IntrinsicElements["div"][key]>[0];
row: RowNode<Spec["data"]>;
layout: LayoutRowWithCells | LayoutFullWidthRow;
api: API<Spec>;
}) => void;
};
type HeaderEvents<Spec extends GridSpec = GridSpec> = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${infer X}` ? Uncapitalize<X> : never]: (params: {
event: Parameters<JSX.IntrinsicElements["div"][key]>[0];
layout: LayoutHeaderCell | LayoutHeaderFloating;
column: Column<Spec>;
api: API<Spec>;
}) => void;
};
type HeaderGroupEvents<Spec extends GridSpec = GridSpec> = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${infer X}` ? Uncapitalize<X> : never]: (params: {
event: Parameters<JSX.IntrinsicElements["div"][key]>[0];
layout: LayoutHeaderGroup;
columns: Column<Spec>[];
api: API<Spec>;
}) => void;
};
type ViewportEvents<Spec extends GridSpec = GridSpec> = {
[key in keyof Required<JSX.IntrinsicElements["div"]> as key extends `on${infer X}` ? Uncapitalize<X> : never]: (params: {
event: Parameters<JSX.IntrinsicElements["div"][key]>[0];
viewport: HTMLElement;
api: API<Spec>;
}) => void;
};
export type GridEvents<Spec extends GridSpec = GridSpec> = {
readonly cell?: Partial<CellEvents<Spec>>;
readonly row?: Partial<RowEvents<Spec>>;
readonly headerCell?: Partial<HeaderEvents<Spec>>;
readonly headerGroup?: Partial<HeaderGroupEvents<Spec>>;
readonly viewport?: Partial<ViewportEvents<Spec>>;
};
export {};