cheetah-grid
Version:
Cheetah Grid is a high performance grid engine that works on canvas
1,156 lines (1,136 loc) • 180 kB
TypeScript
// Generated by dts-bundle v0.7.3
declare module 'cheetah-grid' {
import type * as TYPES from "cheetah-grid/ts-types";
import * as columns from "cheetah-grid/columns";
import * as core from "cheetah-grid/core";
import * as data from "cheetah-grid/data";
import * as headers from "cheetah-grid/headers";
import * as register from "cheetah-grid/register";
import * as themes from "cheetah-grid/themes";
import * as tools from "cheetah-grid/tools";
import { ColumnDefine, GroupHeaderDefine, HeaderDefine, HeadersDefine, ListGrid, ListGridConstructorOptions } from "cheetah-grid/ListGrid";
import { GridCanvasHelper } from "cheetah-grid/GridCanvasHelper";
export { getInternal as _getInternal } from "cheetah-grid/get-internal";
/**
* Cheetah Grid
* @namespace cheetahGrid
*/
export { core, tools, ListGrid, ListGridConstructorOptions, HeadersDefine, ColumnDefine, HeaderDefine, GroupHeaderDefine, columns, headers, themes, data, GridCanvasHelper, getIcons, register, };
export type {
/**
* Types
* @namespace cheetahGrid.TYPES
*/
TYPES, };
/** @private */
function getIcons(): {
[key: string]: TYPES.IconDefine;
};
const _default: {
core: typeof core;
tools: typeof tools;
ListGrid: typeof ListGrid;
columns: typeof columns;
headers: typeof headers;
themes: typeof themes;
data: typeof data;
GridCanvasHelper: typeof GridCanvasHelper;
register: typeof register;
readonly icons: {
[key: string]: TYPES.IconDefine;
};
};
export default _default;
}
declare module 'cheetah-grid/ts-types' {
export * from "cheetah-grid/ts-types/base";
export * from "cheetah-grid/ts-types/grid";
export * from "cheetah-grid/ts-types/column";
export * from "cheetah-grid/ts-types/events";
export * from "cheetah-grid/ts-types/plugin";
export * from "cheetah-grid/ts-types/define";
export * from "cheetah-grid/ts-types/data";
export * from "cheetah-grid/ts-types/grid-engine";
export type { ColumnDefine, HeadersDefine } from "cheetah-grid/list-grid/layout-map/api";
}
declare module 'cheetah-grid/columns' {
import * as action from "cheetah-grid/columns/action";
import * as style from "cheetah-grid/columns/style";
import * as type from "cheetah-grid/columns/type";
/**
* columns
* @namespace cheetahGrid.columns
* @memberof cheetahGrid
*/
export { action, type, style };
}
declare module 'cheetah-grid/core' {
import { DrawGrid } from "cheetah-grid/core/DrawGrid";
import { DG_EVENT_TYPE as EVENT_TYPE } from "cheetah-grid/core/DG_EVENT_TYPE";
export { DrawGrid, EVENT_TYPE };
}
declare module 'cheetah-grid/data' {
import { DataSource, DataSourceParam } from "cheetah-grid/data/DataSource";
import { CachedDataSource } from "cheetah-grid/data/CachedDataSource";
import { FilterDataSource } from "cheetah-grid/data/FilterDataSource";
/**
* data modules
* @namespace cheetahGrid.data
* @memberof cheetahGrid
*/
export { DataSource, CachedDataSource, FilterDataSource, DataSourceParam, };
}
declare module 'cheetah-grid/headers' {
import * as action from "cheetah-grid/header/action";
import * as style from "cheetah-grid/header/style";
import * as type from "cheetah-grid/header/type";
/**
* header classes
* @namespace cheetahGrid.headers
* @memberof cheetahGrid
*/
export { action, type, style };
}
declare module 'cheetah-grid/register' {
import type { IconDefine } from "cheetah-grid/ts-types";
import type { Theme } from "cheetah-grid/themes/theme";
export function theme(name: string, theme?: Theme): Theme;
export function icon(name: string, icon?: IconDefine): IconDefine;
export function icons(icons: {
[key: string]: IconDefine;
}): void;
}
declare module 'cheetah-grid/themes' {
import { Theme } from "cheetah-grid/themes/theme";
import type { ThemeDefine } from "cheetah-grid/ts-types";
export const BASIC: Theme;
export const MATERIAL_DESIGN: Theme;
export type { Theme };
export const theme: {
Theme: typeof Theme;
};
export function of(value: ThemeDefine | string | undefined | null): Theme | null;
export function getDefault(): Theme;
export function setDefault(defaultTheme: Theme): void;
export function getChoices(): {
[key: string]: Theme;
};
}
declare module 'cheetah-grid/tools' {
import * as canvashelper from "cheetah-grid/tools/canvashelper";
/**
* tools
* @namespace cheetahGrid.tools
* @memberof cheetahGrid
*/
export { canvashelper };
}
declare module 'cheetah-grid/ListGrid' {
import { DataSource } from "cheetah-grid/data";
import type { CellAddress, CellContext, CellRange, ColumnActionAPI, ColumnTypeAPI, EventListenerId, FieldDef, HeaderValues, LayoutObjectId, ListGridAPI, ListGridEventHandlersEventMap, ListGridEventHandlersReturnMap, MaybePromise, MaybePromiseOrUndef, SetPasteValueTestData, SortState, ThemeDefine } from "cheetah-grid/ts-types";
import { ColumnDefine, GroupHeaderDefine, HeaderDefine, HeadersDefine } from "cheetah-grid/list-grid/layout-map";
import type { DrawGridConstructorOptions, DrawGridProtected } from "cheetah-grid/core/DrawGrid";
import type { LayoutDefine, LayoutMapAPI } from "cheetah-grid/list-grid/layout-map";
import { MessageHandler } from "cheetah-grid/columns/message/MessageHandler";
import { DrawGrid } from "cheetah-grid/core/DrawGrid";
import { GridCanvasHelper } from "cheetah-grid/GridCanvasHelper";
import { LG_EVENT_TYPE } from "cheetah-grid/list-grid/LG_EVENT_TYPE";
import type { Theme } from "cheetah-grid/themes/theme";
import { TooltipHandler } from "cheetah-grid/tooltip/TooltipHandler";
/** @private */
const _: "$$$$protected symbol$$$$";
/** @protected */
interface ListGridProtected<T> extends DrawGridProtected {
dataSourceEventIds?: EventListenerId[];
headerEvents?: EventListenerId[];
layoutMap: LayoutMapAPI<T>;
headerValues?: HeaderValues;
tooltipHandler: TooltipHandler<T>;
messageHandler: MessageHandler<T>;
theme: Theme | null;
headerRowHeight: number[] | number;
header: HeadersDefine<T>;
layout: LayoutDefine<T>;
gridCanvasHelper: GridCanvasHelper<T>;
sortState: SortState;
dataSource: DataSource<T>;
records?: T[] | null;
allowRangePaste: boolean;
}
export { ListGridProtected };
export interface ListGridConstructorOptions<T> extends DrawGridConstructorOptions {
/**
* Simple header property
*/
header?: HeadersDefine<T>;
/**
* Layout property
*/
layout?: LayoutDefine<T>;
/**
* Header row height(s)
*/
headerRowHeight?: number[] | number;
/**
* Records data source
*/
dataSource?: DataSource<T>;
/**
* Simple records data
*/
records?: T[];
/**
* Theme
*/
theme?: ThemeDefine | string;
/**
* If set to true to allow pasting of ranges. default false
*/
allowRangePaste?: boolean;
/**
* @deprecated Cannot be used with ListGrid.
* @override
*/
rowCount?: undefined;
/**
* @deprecated Cannot be used with ListGrid.
* @override
*/
colCount?: undefined;
/**
* @deprecated Cannot be used with ListGrid.
* @override
*/
frozenRowCount?: undefined;
}
export { HeadersDefine, ColumnDefine, HeaderDefine, GroupHeaderDefine };
/**
* ListGrid
* @classdesc cheetahGrid.ListGrid
* @memberof cheetahGrid
*/
export class ListGrid<T> extends DrawGrid implements ListGridAPI<T> {
protected [_]: ListGridProtected<T>;
disabled: boolean;
readOnly: boolean;
static get EVENT_TYPE(): typeof LG_EVENT_TYPE;
/**
* constructor
*
* @constructor
* @param options Constructor options
*/
constructor(options?: ListGridConstructorOptions<T>);
/**
* Dispose the grid instance.
* @returns {void}
*/
dispose(): void;
/**
* Gets the define of the header.
*/
get header(): HeadersDefine<T>;
/**
* Sets the define of the header with the given data.
* <pre>
* column options
* -----
* caption: header caption
* field: field name
* width: column width
* minWidth: column min width
* maxWidth: column max width
* icon: icon definition
* message: message key name
* columnType: column type
* action: column action
* style: column style
* headerType: header type
* headerStyle: header style
* headerAction: header action
* headerField: header field name
* headerIcon: header icon definition
* sort: define sort setting
* -----
*
* multiline header
* -----
* caption: header caption
* columns: columns define
* -----
* </pre>
*/
set header(header: HeadersDefine<T>);
/**
* Gets the define of the layout.
*/
get layout(): LayoutDefine<T>;
/**
* Sets the define of the layout with the given data.
*/
set layout(layout: LayoutDefine<T>);
/**
* Gets the define of the headerRowHeight.
*/
get headerRowHeight(): number | number[];
/**
* Sets the define of the headerRowHeight with the given data.
*/
set headerRowHeight(headerRowHeight: number | number[]);
/**
* Get the row count per record
*/
get recordRowCount(): number;
/**
* Get the records.
*/
get records(): T[] | null;
/**
* Set the records from given
*/
set records(records: T[] | null);
/**
* Get the data source.
*/
get dataSource(): DataSource<T>;
/**
* Set the data source from given
*/
set dataSource(dataSource: DataSource<T>);
/**
* Get the theme.
*/
get theme(): Theme | null;
/**
* Set the theme from given
*/
set theme(theme: Theme | null);
/**
* If set to true to allow pasting of ranges.
*/
get allowRangePaste(): boolean;
set allowRangePaste(allowRangePaste: boolean);
/**
* Get the font definition as a string.
* @override
*/
get font(): string;
/**
* Set the font definition with the given string.
* @override
*/
set font(font: string);
/**
* Get the background color of the underlay.
* @override
*/
get underlayBackgroundColor(): string;
/**
* Set the background color of the underlay.
* @override
*/
set underlayBackgroundColor(underlayBackgroundColor: string);
/**
* Get the sort state.
*/
get sortState(): SortState;
/**
* Sets the sort state.
* If `null` to set, the sort state is initialized.
*/
set sortState(sortState: SortState | null);
/**
* Get the header values.
*/
get headerValues(): HeaderValues;
/**
* Sets the header values.
*/
set headerValues(headerValues: HeaderValues);
/**
* Get the field of the given column index.
* @param {number} col The column index.
* @param {number} row The row index.
* @return {*} The field object.
*/
getField(col: number, row: number): FieldDef<T> | undefined;
/**
* Get the column define of the given column index.
* @param {number} col The column index.
* @param {number} row The row index.
* @return {*} The column define object.
*/
getColumnDefine(col: number, row: number): ColumnDefine<T>;
getColumnType(col: number, row: number): ColumnTypeAPI;
getColumnAction(col: number, row: number): ColumnActionAPI | undefined;
/**
* Get the header field of the given header cell.
* @param {number} col The column index.
* @param {number} row The header row index.
* @return {*} The field object.
*/
getHeaderField(col: number, row: number): any | undefined;
/**
* Get the header define of the given header cell.
* @param {number} col The column index.
* @param {number} row The header row index.
* @return {*} The header define object.
*/
getHeaderDefine(col: number, row: number): HeaderDefine<T>;
/**
* Get the record of the given row index.
* @param {number} row The row index.
* @return {object} The record.
*/
getRowRecord(row: number): MaybePromiseOrUndef<T>;
/**
* Get the record index of the given row index.
* @param {number} row The row index.
*/
getRecordIndexByRow(row: number): number;
/**
* Gets the row index starting at the given record index.
* @param {number} index The record index.
*/
getRecordStartRowByRecordIndex(index: number): number;
/**
* Get the column index of the given field.
* @param {*} field The field.
* @return {number} The column index.
* @deprecated use `getCellRangeByField` instead
*/
getColumnIndexByField(field: FieldDef<T>): number | null;
/**
* Get the column index of the given field.
* @param {*} field The field.
* @param {number} index The record index
* @return {number} The column index.
*/
getCellRangeByField(field: FieldDef<T>, index: number): CellRange | null;
/**
* Focus the cell.
* @param {*} field The field.
* @param {number} index The record index
* @return {void}
*/
focusGridCell(field: FieldDef<T>, index: number): void;
/**
* Scroll to where cell is visible.
* @param {*} field The field.
* @param {number} index The record index
* @return {void}
*/
makeVisibleGridCell(field: FieldDef<T>, index: number): void;
getGridCanvasHelper(): GridCanvasHelper<T>;
/**
* Get cell range information for a given cell.
* @param {number} col column index of the cell
* @param {number} row row index of the cell
* @returns {object} cell range info
*/
getCellRange(col: number, row: number): CellRange;
/**
* Get header range information for a given cell.
* @param {number} col column index of the cell
* @param {number} row row index of the cell
* @returns {object} cell range info
* @deprecated use `getCellRange` instead
*/
getHeaderCellRange(col: number, row: number): CellRange;
protected getCopyCellValue(col: number, row: number, range?: CellRange): unknown;
protected onDrawCell(col: number, row: number, context: CellContext): MaybePromise<void>;
doGetCellValue(col: number, row: number, valueCallback: (value: any) => void): boolean;
doChangeValue(col: number, row: number, changeValueCallback: (before: any) => any): MaybePromise<boolean>;
doSetPasteValue(text: string, test?: (data: SetPasteValueTestData<T>) => boolean): void;
getHeaderValue(col: number, row: number): any | undefined;
setHeaderValue(col: number, row: number, newValue: any): void;
getLayoutCellId(col: number, row: number): LayoutObjectId;
protected bindEventsInternal(): void;
protected getMoveLeftColByKeyDownInternal({ col, row }: CellAddress): number;
protected getMoveRightColByKeyDownInternal({ col, row, }: CellAddress): number;
protected getMoveUpRowByKeyDownInternal({ col, row }: CellAddress): number;
protected getMoveDownRowByKeyDownInternal({ col, row }: CellAddress): number;
protected getOffsetInvalidateCells(): number;
protected getCopyRangeInternal(range: CellRange): CellRange;
fireListeners<TYPE extends keyof ListGridEventHandlersEventMap<T>>(type: TYPE, ...event: ListGridEventHandlersEventMap<T>[TYPE]): ListGridEventHandlersReturnMap[TYPE][];
}
}
declare module 'cheetah-grid/GridCanvasHelper' {
import type { CellContext, ColorDef, ColorPropertyDefine, ColorsPropertyDefine, FontPropertyDefine, GridCanvasHelperAPI, LineClamp, ListGridAPI, RectProps, RequiredThemeDefine, StylePropertyFunctionArg, TextOverflow } from "cheetah-grid/ts-types";
import type { Inline } from "cheetah-grid/element/Inline";
import { InlineDrawer } from "cheetah-grid/element/InlineDrawer";
import type { SimpleColumnIconOption } from "cheetah-grid/ts-types-internal";
type ColorsDef = ColorDef | (ColorDef | null)[];
export class GridCanvasHelper<T> implements GridCanvasHelperAPI {
constructor(grid: ListGridAPI<T>);
createCalculator(context: CellContext, font: string | undefined): {
calcWidth(width: number | string): number;
calcHeight(height: number | string): number;
};
getColor(color: ColorPropertyDefine, col: number, row: number, ctx: CanvasRenderingContext2D): ColorDef;
getColor(color: ColorsPropertyDefine, col: number, row: number, ctx: CanvasRenderingContext2D): ColorsDef;
getStyleProperty<T>(style: T | ((args: StylePropertyFunctionArg) => T), col: number, row: number, ctx: CanvasRenderingContext2D): T;
toBoxArray(obj: ColorsDef): [ColorDef | null, ColorDef | null, ColorDef | null, ColorDef | null];
toBoxPixelArray(value: number | string | (number | string)[], context: CellContext, font: string | undefined): [number, number, number, number];
get theme(): RequiredThemeDefine;
drawWithClip(context: CellContext, draw: (ctx: CanvasRenderingContext2D) => void): void;
drawBorderWithClip(context: CellContext, draw: (ctx: CanvasRenderingContext2D) => void): void;
text(text: string | (Inline | string)[], context: CellContext, { padding, offset, color, textAlign, textBaseline, font, textOverflow, icons, trailingIcon, }?: {
padding?: number | string | (number | string)[];
offset?: number;
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
font?: FontPropertyDefine;
textOverflow?: TextOverflow;
icons?: SimpleColumnIconOption[];
trailingIcon?: SimpleColumnIconOption;
}): void;
multilineText(lines: string[], context: CellContext, { padding, offset, color, textAlign, textBaseline, font, lineHeight, autoWrapText, lineClamp, textOverflow, icons, trailingIcon, }?: {
padding?: number | string | (number | string)[];
offset?: number;
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
font?: FontPropertyDefine;
lineHeight?: string | number;
autoWrapText?: boolean;
lineClamp?: LineClamp;
textOverflow?: TextOverflow;
icons?: SimpleColumnIconOption[];
trailingIcon?: SimpleColumnIconOption;
}): void;
fillText(text: string, x: number, y: number, context: CellContext, { color, textAlign, textBaseline, font, }?: {
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
font?: FontPropertyDefine;
}): void;
fillCell(context: CellContext, { fillColor, }?: {
fillColor?: ColorPropertyDefine;
}): void;
fillCellWithState(context: CellContext, option?: {
fillColor?: ColorPropertyDefine;
}): void;
fillRect(rect: RectProps, context: CellContext, { fillColor, }?: {
fillColor?: ColorPropertyDefine;
}): void;
fillRectWithState(rect: RectProps, context: CellContext, option?: {
fillColor?: ColorPropertyDefine;
}): void;
getFillColorState(context: CellContext, option?: {
fillColor?: ColorPropertyDefine;
}): ColorPropertyDefine;
border(context: CellContext, { borderColor, lineWidth, }?: {
borderColor?: ColorsPropertyDefine;
lineWidth?: number;
}): void;
borderWithState(context: CellContext, option?: {
borderColor?: ColorsPropertyDefine;
lineWidth?: number;
}): void;
buildCheckBoxInline(check: boolean, context: CellContext, option?: Parameters<GridCanvasHelperAPI["buildCheckBoxInline"]>[2]): InlineDrawer;
checkbox(check: boolean, context: CellContext, { padding, animElapsedTime, offset, uncheckBgColor, checkBgColor, borderColor, textAlign, textBaseline, }?: Parameters<GridCanvasHelperAPI["checkbox"]>[2]): void;
radioButton(check: boolean, context: CellContext, { padding, animElapsedTime, offset, checkColor, uncheckBorderColor, checkBorderColor, uncheckBgColor, checkBgColor, textAlign, textBaseline, }?: Parameters<GridCanvasHelperAPI["radioButton"]>[2]): void;
button(caption: string, context: CellContext, { bgColor, padding, offset, color, textAlign, textBaseline, shadow, font, textOverflow, icons, }?: Parameters<GridCanvasHelperAPI["button"]>[2]): void;
testFontLoad(font: string | undefined, value: string, context: CellContext): boolean;
}
export {};
}
declare module 'cheetah-grid/get-internal' {
export function getInternal(): unknown;
}
declare module 'cheetah-grid/ts-types/base' {
export type MaybeUndef<T> = T | undefined;
export type PromiseOrUndef<T> = undefined | Promise<T | undefined>;
export type PromiseMaybeUndef<T> = Promise<T | undefined>;
export type MaybePromise<T> = T | Promise<T>;
export type MaybeCall<T, A extends any[]> = T | ((...args: A) => T);
export type MaybePromiseOrCall<T, A extends any[]> = T | Promise<T> | ((...args: A) => T);
export type MaybePromiseOrUndef<T> = T | undefined | Promise<T | undefined>;
export type MaybeCallOrUndef<T, A extends any[]> = undefined | T | ((...args: A) => T);
export type MaybePromiseOrCallOrUndef<T, A extends any[]> = T | undefined | Promise<T | undefined> | ((...args: A) => T);
export type PromiseMaybeUndefOrCall<T, A extends any[]> = Promise<T | undefined> | ((...args: A) => T);
export type PromiseMaybeCallOrUndef<T, A extends any[]> = Promise<MaybeCallOrUndef<T, A>>;
export type AnyFunction = (...args: any[]) => any;
export interface RectProps {
left: number;
right: number;
top: number;
bottom: number;
width: number;
height: number;
}
export type ColorDef = CanvasRenderingContext2D["fillStyle"];
}
declare module 'cheetah-grid/ts-types/grid' {
import type { MaybePromiseOrUndef } from "cheetah-grid/ts-types/base";
export interface CellAddress {
col: number;
row: number;
}
export interface CellRange {
start: CellAddress;
end: CellAddress;
}
export type FieldGetter<T> = (record: T) => any;
export type FieldSetter<T> = (record: T, value: any) => boolean;
export interface FieldAssessor<T> {
get: FieldGetter<T>;
set: FieldSetter<T>;
}
export type FieldDef<T> = keyof T | FieldGetter<T> | FieldAssessor<T>;
export type FieldData = MaybePromiseOrUndef<any>;
}
declare module 'cheetah-grid/ts-types/column' {
export * from "cheetah-grid/ts-types/column/type";
export * from "cheetah-grid/ts-types/column/style";
export * from "cheetah-grid/ts-types/column/action";
}
declare module 'cheetah-grid/ts-types/events' {
import type { CellAddress, CellRange, FieldDef } from "cheetah-grid/ts-types/grid";
import type { AnyFunction } from "cheetah-grid/ts-types/base";
import type { ColumnDefine } from "cheetah-grid/ListGrid";
export type KeyboardEventListener = (e: KeyboardEvent) => void;
export type AnyListener = AnyFunction;
export type EventListenerId = number;
export type BeforeSelectedCellEvent = CellAddress & {
selected: false;
after: CellAddress;
};
export type AfterSelectedCellEvent = CellAddress & {
selected: true;
before: CellAddress;
};
export type SelectedCellEvent = BeforeSelectedCellEvent | AfterSelectedCellEvent;
export type MouseCellEvent = CellAddress & {
event: MouseEvent;
};
export type TouchCellEvent = CellAddress & {
event: TouchEvent;
};
export type KeydownEvent = {
keyCode: number;
event: KeyboardEvent;
stopCellMoving(): void;
};
export interface PasteRangeBoxValues {
readonly colCount: number;
readonly rowCount: number;
getCellValue(offsetCol: number, offsetRow: number): string;
}
export type PasteCellEvent = CellAddress & {
value: string;
normalizeValue: string;
multi: boolean;
rangeBoxValues: PasteRangeBoxValues;
event: ClipboardEvent;
};
export type InputCellEvent = CellAddress & {
value: string;
};
export type DeleteCellEvent = CellAddress & {
event: KeyboardEvent;
};
export type ScrollEvent = {
event: Event;
};
export type ModifyStatusEditableinputCellEvent = CellAddress & {
input: HTMLInputElement;
};
export type MousePointerCellEvent = CellAddress & {
related?: CellAddress;
event: Pick<MouseEvent, "clientX" | "clientY" | "pageX" | "pageY">;
};
export interface DrawGridEventHandlersEventMap {
selected_cell: [SelectedCellEvent, boolean];
click_cell: [MouseCellEvent];
dblclick_cell: [MouseCellEvent];
mouseenter_cell: [MousePointerCellEvent];
mouseleave_cell: [MousePointerCellEvent];
mouseover_cell: [MousePointerCellEvent];
mouseout_cell: [MousePointerCellEvent];
mousemove_cell: [MouseCellEvent];
mousedown_cell: [MouseCellEvent];
mouseup_cell: [MouseCellEvent];
contextmenu_cell: [MouseCellEvent];
touchstart_cell: [TouchCellEvent];
dbltap_cell: [TouchCellEvent];
keydown: [KeydownEvent];
paste_cell: [PasteCellEvent];
input_cell: [InputCellEvent];
delete_cell: [DeleteCellEvent];
scroll: [ScrollEvent];
editableinput_cell: [CellAddress];
modify_status_editableinput_cell: [ModifyStatusEditableinputCellEvent];
focus_grid: [FocusEvent];
blur_grid: [FocusEvent];
resize_column: [{
col: number;
}];
copydata: [CellRange];
}
export interface DrawGridEventHandlersReturnMap {
selected_cell: void;
click_cell: void;
dblclick_cell: void;
mouseenter_cell: void;
mouseleave_cell: void;
mouseover_cell: void;
mouseout_cell: void;
mousemove_cell: void;
mousedown_cell: boolean;
mouseup_cell: void;
contextmenu_cell: void;
touchstart_cell: void;
dbltap_cell: void;
keydown: void;
paste_cell: void;
input_cell: void;
delete_cell: void;
scroll: void;
editableinput_cell: boolean | void;
modify_status_editableinput_cell: void;
focus_grid: void;
blur_grid: void;
resize_column: void;
copydata: string;
}
export type ChangedValueCellEvent<T> = CellAddress & {
record: T;
field: FieldDef<T>;
value: any;
oldValue: any;
};
export type ChangedHeaderValueCellEvent = CellAddress & {
field: string;
value: any;
oldValue: any;
};
export type PasteRejectedValuesEvent<T> = {
detail: (CellAddress & {
record: T | undefined;
define: ColumnDefine<T>;
pasteValue: string;
})[];
};
export interface ListGridEventHandlersEventMap<T> extends DrawGridEventHandlersEventMap {
before_change_value: [ChangedValueCellEvent<T>];
changed_value: [ChangedValueCellEvent<T>];
changed_header_value: [ChangedHeaderValueCellEvent];
rejected_paste_values: [PasteRejectedValuesEvent<T>];
}
export interface ListGridEventHandlersReturnMap extends DrawGridEventHandlersReturnMap {
before_change_value: void;
changed_value: void;
changed_header_value: void;
rejected_paste_values: void;
}
}
declare module 'cheetah-grid/ts-types/plugin' {
import type { ColorPropertyDefine, ColorsPropertyDefine, TreeBranchIconStyleDefine, TreeLineStyle } from "cheetah-grid/ts-types/define";
export interface IconDefine {
d: string;
width: number;
height: number;
}
export type PartialThemeDefine = Partial<ThemeDefine>;
export interface ThemeDefine {
font?: string;
underlayBackgroundColor: string;
color: ColorPropertyDefine;
frozenRowsColor?: ColorPropertyDefine;
defaultBgColor?: ColorPropertyDefine;
frozenRowsBgColor?: ColorPropertyDefine;
selectionBgColor: ColorPropertyDefine;
highlightBgColor?: ColorPropertyDefine;
borderColor: ColorsPropertyDefine;
frozenRowsBorderColor: ColorsPropertyDefine;
highlightBorderColor: ColorsPropertyDefine;
checkbox: {
uncheckBgColor?: ColorPropertyDefine;
checkBgColor?: ColorPropertyDefine;
borderColor?: ColorPropertyDefine;
};
radioButton: {
checkColor?: ColorPropertyDefine;
uncheckBorderColor?: ColorPropertyDefine;
checkBorderColor?: ColorPropertyDefine;
uncheckBgColor?: ColorPropertyDefine;
checkBgColor?: ColorPropertyDefine;
};
button: {
color?: ColorPropertyDefine;
bgColor?: ColorPropertyDefine;
};
tree: {
lineStyle?: TreeLineStyle;
lineColor?: ColorPropertyDefine;
lineWidth?: number;
treeIcon?: TreeBranchIconStyleDefine;
};
header: {
sortArrowColor?: ColorPropertyDefine;
};
messages: {
infoBgColor?: ColorPropertyDefine;
errorBgColor?: ColorPropertyDefine;
warnBgColor?: ColorPropertyDefine;
boxWidth?: number;
markHeight?: number;
};
indicators: {
topLeftColor?: ColorPropertyDefine;
topLeftSize?: number;
topRightColor?: ColorPropertyDefine;
topRightSize?: number;
bottomRightColor?: ColorPropertyDefine;
bottomRightSize?: number;
bottomLeftColor?: ColorPropertyDefine;
bottomLeftSize?: number;
};
}
export type RequiredThemeDefine = Required<ThemeDefine> & {
checkbox: Required<ThemeDefine["checkbox"]>;
radioButton: Required<ThemeDefine["radioButton"]>;
button: Required<ThemeDefine["button"]>;
tree: Required<ThemeDefine["tree"]>;
header: Required<ThemeDefine["header"]>;
messages: Required<ThemeDefine["messages"]>;
indicators: Required<ThemeDefine["indicators"]>;
};
}
declare module 'cheetah-grid/ts-types/define' {
import type { ColorDef } from "cheetah-grid/ts-types/base";
import type { ListGridAPI } from "cheetah-grid/ts-types/grid-engine";
export interface FontIcon<T> {
font?: string;
content?: T extends object ? keyof T & string : string;
className?: string;
tagName?: string;
isLiga?: boolean;
width?: number;
height?: number;
color?: string;
offsetTop?: number;
offsetLeft?: number;
}
export interface ImageIcon<T> {
src: T extends object ? keyof T & string : string;
width?: number;
height?: number;
}
export interface PathIcon<T> {
path: T extends object ? keyof T & string : string;
width: number;
height: number;
color?: string;
}
export interface SvgIcon<T> {
svg: T extends object ? keyof T & string : string;
width?: number;
height?: number;
}
export interface NamedIcon<T> {
name: T extends object ? keyof T & string : string;
width?: number;
height?: number;
}
export type ColumnIconOption<T> = FontIcon<T> | ImageIcon<T> | PathIcon<T> | SvgIcon<T> | NamedIcon<T>;
export type ColumnMenuItemOptions = ColumnMenuItemOption[] | SimpleColumnMenuItemOption[] | OldSimpleColumnMenuItemOption[] | string | ColumnMenuItemObjectOptions;
export interface ColumnMenuItemOption {
value: any;
label: string;
classList?: string[];
html?: string;
}
export interface SimpleColumnMenuItemOption {
value: any;
label: string;
}
/** @internal */
export interface OldSimpleColumnMenuItemOption {
value: any;
caption: string;
}
export interface ColumnMenuItemObjectOptions {
[value: string]: string;
}
export type Visibility = "visible" | "hidden";
export type TextOverflow = "clip" | "ellipsis" | string;
export type LineClamp = number | "auto";
export interface StylePropertyFunctionArg {
row: number;
col: number;
grid: ListGridAPI<any>;
context: CanvasRenderingContext2D;
}
export type ColorPropertyDefine = ColorDef | ((args: StylePropertyFunctionArg) => string) | ((args: StylePropertyFunctionArg) => CanvasGradient) | ((args: StylePropertyFunctionArg) => CanvasPattern) | ((args: StylePropertyFunctionArg) => string | CanvasGradient | CanvasPattern | undefined);
export type ColorsPropertyDefine = ColorPropertyDefine | (ColorDef | null)[] | ((args: StylePropertyFunctionArg) => (ColorDef | null)[]);
export type FontPropertyDefine = string | ((args: StylePropertyFunctionArg) => string);
export type IndicatorStyle = "triangle" | "none";
export type IndicatorObject = {
style?: IndicatorStyle;
color?: ColorDef;
size?: number | string;
};
export type IndicatorDefine = IndicatorObject | IndicatorStyle;
export type TreeLineStyle = "none" | "solid";
export type TreeBranchIconStyle = "chevron_right" | "expand_more" | "none";
export type TreeBranchIconStyleColumnIcon = ColumnIconOption<any>;
export type TreeBranchIconStyleDefine = TreeBranchIconStyle | TreeBranchIconStyleColumnIcon | ((args: StylePropertyFunctionArg) => TreeBranchIconStyle) | ((args: StylePropertyFunctionArg) => TreeBranchIconStyleColumnIcon);
}
declare module 'cheetah-grid/ts-types/data' {
export interface MessageObject {
type: "error" | "info" | "warning";
message: string | null;
original?: Message;
}
export type Message = MessageObject | string;
}
declare module 'cheetah-grid/ts-types/grid-engine' {
import type { AnyFunction, ColorDef, MaybePromise, MaybePromiseOrUndef, RectProps } from "cheetah-grid/ts-types/base";
import type { AnyListener, DrawGridEventHandlersEventMap, DrawGridEventHandlersReturnMap, EventListenerId, ListGridEventHandlersEventMap, ListGridEventHandlersReturnMap } from "cheetah-grid/ts-types/events";
import type { CellAddress, CellRange, FieldData, FieldDef } from "cheetah-grid/ts-types/grid";
import type { ColorPropertyDefine, ColorsPropertyDefine, FontPropertyDefine, LineClamp, StylePropertyFunctionArg, TextOverflow } from "cheetah-grid/ts-types/define";
import type { ColumnDefine, HeadersDefine } from "cheetah-grid/list-grid/layout-map/api";
import type { RecordBoolean } from "cheetah-grid/ts-types/column";
import type { RequiredThemeDefine } from "cheetah-grid/ts-types/plugin";
import type { SimpleColumnIconOption } from "cheetah-grid/ts-types-internal/data";
export type LayoutObjectId = number | string | symbol;
export type DrawGridKeyboardMoveCellFunction = (context: {
event: KeyboardEvent;
cell: CellAddress;
grid: DrawGridAPI;
}) => CellAddress | null;
export interface DrawGridKeyboardOptions {
moveCellOnTab?: boolean | DrawGridKeyboardMoveCellFunction;
moveCellOnEnter?: boolean | DrawGridKeyboardMoveCellFunction;
deleteCellValueOnDel?: boolean;
selectAllOnCtrlA?: boolean;
}
export interface DrawGridAPI {
font?: string;
rowCount: number;
colCount: number;
frozenRowCount: number;
frozenColCount: number;
defaultRowHeight: number;
defaultColWidth: string | number;
underlayBackgroundColor?: string;
trimOnPaste: boolean;
keyboardOptions: DrawGridKeyboardOptions | null;
readonly selection: Selection;
readonly canvas: HTMLCanvasElement;
readonly visibleRowCount: number;
readonly visibleColCount: number;
readonly topRow: number;
readonly leftCol: number;
scrollLeft: number;
scrollTop: number;
getElement(): HTMLElement;
focus(): void;
hasFocusGrid(): boolean;
listen<TYPE extends keyof DrawGridEventHandlersEventMap>(type: TYPE, listener: (...event: DrawGridEventHandlersEventMap[TYPE]) => DrawGridEventHandlersReturnMap[TYPE]): EventListenerId;
listen(type: string, listener: AnyListener): EventListenerId;
configure(name: "fadeinWhenCallbackInPromise", value?: boolean): boolean;
updateSize(): void;
updateScroll(): boolean;
invalidate(): void;
invalidateCell(col: number, row: number): void;
invalidateGridRect(startCol: number, startRow: number, endCol?: number, endRow?: number): void;
invalidateCellRange(cellRange: CellRange): void;
getRowHeight(row: number): number;
setRowHeight(row: number, height: number): void;
getColWidth(col: number): number;
setColWidth(col: number, width: string | number | null): void;
getMaxColWidth(col: number): string | number | undefined;
setMaxColWidth(col: number, maxwidth: string | number): void;
getMinColWidth(col: number): string | number | undefined;
setMinColWidth(col: number, minwidth: string | number): void;
getCellRect(col: number, row: number): RectProps;
getCellRelativeRect(col: number, row: number): RectProps;
getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): RectProps;
getCellRangeRect(cellRange: CellRange): RectProps;
isFrozenCell(col: number, row: number): {
row: boolean;
col: boolean;
} | null;
getRowAt(absoluteY: number): number;
getColAt(absoluteX: number): number;
getCellAt(absoluteX: number, absoluteY: number): CellAddress;
makeVisibleCell(col: number, row: number): void;
setFocusCursor(col: number, row: number): void;
focusCell(col: number, row: number): void;
getCellOverflowText(col: number, row: number): string | null;
setCellOverflowText(col: number, row: number, overflowText: false | string): void;
getAttachCellsArea(range: CellRange): {
element: HTMLElement;
rect: RectProps;
};
onKeyDownMove(evt: KeyboardEvent): void;
dispose(): void;
addDisposable(disposable: {
dispose(): void;
}): void;
}
export interface DataSourceAPI<T> {
length: number;
get(index: number): MaybePromiseOrUndef<T>;
getField<F extends FieldDef<T>>(index: number, field: F): FieldData;
hasField(index: number, field: FieldDef<T>): boolean;
setField<F extends FieldDef<T>>(index: number, field: F, value: any): MaybePromise<boolean>;
sort(field: FieldDef<T>, order: "desc" | "asc"): MaybePromise<void>;
dataSource: DataSourceAPI<T>;
}
export interface SortState {
col: number;
row: number;
order: "asc" | "desc" | undefined;
}
export type HeaderValues = Map<any, any>;
export interface ListGridAPI<T> extends DrawGridAPI {
records: T[] | null;
dataSource: DataSourceAPI<T>;
theme: RequiredThemeDefine | null;
allowRangePaste: boolean;
header: HeadersDefine<T>;
headerRowHeight: number[] | number;
sortState: SortState | null;
headerValues: HeaderValues;
recordRowCount: number;
disabled: boolean;
readOnly: boolean;
listen<TYPE extends keyof ListGridEventHandlersEventMap<T>>(type: TYPE, listener: (...event: ListGridEventHandlersEventMap<T>[TYPE]) => ListGridEventHandlersReturnMap[TYPE]): EventListenerId;
getField(col: number, row: number): FieldDef<T> | undefined;
getRowRecord(row: number): MaybePromiseOrUndef<T>;
getRecordIndexByRow(row: number): number;
getRecordStartRowByRecordIndex(index: number): number;
getHeaderField(col: number, row: number): any | undefined;
getHeaderValue(col: number, row: number): any | undefined;
setHeaderValue(col: number, row: number, newValue: any): void;
getCellRange(col: number, row: number): CellRange;
getCellRangeByField(field: FieldDef<T>, index: number): CellRange | null;
focusGridCell(field: FieldDef<T>, index: number): void;
makeVisibleGridCell(field: FieldDef<T>, index: number): void;
getGridCanvasHelper(): GridCanvasHelperAPI;
doChangeValue(col: number, row: number, changeValueCallback: (before: any) => any): MaybePromise<boolean>;
doGetCellValue(col: number, row: number, valueCallback: (value: any) => void): boolean;
doSetPasteValue(text: string): void;
doSetPasteValue(text: string, test: (data: SetPasteValueTestData<T>) => boolean): void;
getLayoutCellId(col: number, row: number): LayoutObjectId;
getColumnType(col: number, row: number): ColumnTypeAPI;
getColumnDefine(col: number, row: number): ColumnDefine<T>;
getColumnAction(col: number, row: number): ColumnActionAPI | undefined;
fireListeners<TYPE extends keyof ListGridEventHandlersEventMap<T>>(type: TYPE, ...event: ListGridEventHandlersEventMap<T>[TYPE]): ListGridEventHandlersReturnMap[TYPE][];
}
export interface ColumnTypeAPI {
}
export interface ColumnActionAPI {
readonly editable: boolean;
disabled: RecordBoolean;
}
export type SetPasteValueTestData<T> = CellAddress & {
grid: ListGridAPI<T>;
record: T;
value: string;
oldValue: any;
};
export interface InlineAPI {
width(arg: {
ctx: CanvasRenderingContext2D;
}): number;
font(): string | null;
color(): ColorDef | null;
canDraw(): boolean;
onReady(callback: AnyFunction): void;
draw(opt: any): void;
canBreak(): boolean;
}
type ColorsDef = ColorDef | (ColorDef | null)[];
export interface GridCanvasHelperAPI {
theme: RequiredThemeDefine;
text(text: string | (InlineAPI | string)[], context: CellContext, option: {
padding?: number | string | (number | string)[];
offset?: number;
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
font?: FontPropertyDefine;
textOverflow?: TextOverflow;
icons?: SimpleColumnIconOption[];
}): void;
button(caption: string, context: CellContext, option: {
bgColor?: ColorPropertyDefine;
padding?: number | string | (number | string)[];
offset?: number;
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
shadow?: {
color?: string;
blur?: number;
offsetX?: number;
offsetY?: number;
offset?: {
x?: number;
y?: number;
};
};
font?: FontPropertyDefine;
textOverflow?: TextOverflow;
icons?: SimpleColumnIconOption[];
}): void;
checkbox(check: boolean, context: CellContext, option: {
padding?: number | string | (number | string)[];
animElapsedTime?: number;
offset?: number;
uncheckBgColor?: ColorPropertyDefine;
checkBgColor?: ColorPropertyDefine;
borderColor?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
}): void;
radioButton(check: boolean, context: CellContext, option: {
padding?: number | string | (number | string)[];
animElapsedTime?: number;
offset?: number;
checkColor?: ColorPropertyDefine;
uncheckBorderColor?: ColorPropertyDefine;
checkBorderColor?: ColorPropertyDefine;
uncheckBgColor?: ColorPropertyDefine;
checkBgColor?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
}): void;
multilineText(lines: string[], context: CellContext, option: {
padding?: number | string | (number | string)[];
offset?: number;
color?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
font?: FontPropertyDefine;
lineHeight?: string | number;
autoWrapText?: boolean;
lineClamp?: LineClamp;
textOverflow?: TextOverflow;
icons?: SimpleColumnIconOption[];
}): void;
getColor(color: ColorPropertyDefine, col: number, row: number, ctx: CanvasRenderingContext2D): ColorDef;
getColor(color: ColorsPropertyDefine, col: number, row: number, ctx: CanvasRenderingContext2D): ColorsDef;
getStyleProperty<T>(style: T | ((args: StylePropertyFunctionArg) => T), col: number, row: number, ctx: CanvasRenderingContext2D): T;
toBoxPixelArray(value: number | string | (number | string)[], context: CellContext, font: string | undefined): [number, number, number, number];
fillRectWithState(rect: RectProps, context: CellContext, option: {
fillColor?: ColorPropertyDefine;
}): void;
drawBorderWithClip(context: CellContext, draw: (ctx: CanvasRenderingContext2D) => void): void;
drawWithClip(context: CellContext, draw: (ctx: CanvasRenderingContext2D) => void): void;
testFontLoad(font: string | undefined, value: string, context: CellContext): boolean;
buildCheckBoxInline(check: boolean, context: CellContext, option: {
animElapsedTime?: number;
uncheckBgColor?: ColorPropertyDefine;
checkBgColor?: ColorPropertyDefine;
borderColor?: ColorPropertyDefine;
textAlign?: CanvasTextAlign;
textBaseline?: CanvasTextBaseline;
}): InlineAPI