wx-svelte-grid
Version:
A fast, feature-rich Svelte DataGrid component
179 lines (155 loc) • 3.97 kB
TypeScript
import type { Component, ComponentProps } from "svelte";
import { ContextMenu as BaseContextMenu } from "@svar-ui/svelte-menu";
import { Toolbar as BaseToolbar } from "@svar-ui/svelte-toolbar";
import { Tooltip as BaseTooltip } from "@svar-ui/svelte-core";
import type {
IColumn,
IRow,
IApi,
ISizeConfig,
TMethodsConfig,
IConfig,
TEditorType,
TEditorConfig,
IColumnEditor,
IHeaderCell,
} from "@svar-ui/grid-store";
export * from "@svar-ui/grid-store";
export interface IColumnEditorConfig extends IColumnEditor {
config?: IColumnEditor["config"] & {
cell?: Component<{
data: any;
onaction: (ev: {
action?: any;
data?: { [key: string]: any };
}) => void;
}>;
};
}
export type TEditorHandlerConfig = (
row?: IRow,
column?: IColumn
) => TEditorType | IColumnEditorConfig | null;
export type IInnerApi = Pick<
IApi,
"exec" | "getState" | "getReactiveState" | "getRow"
>;
export interface ICellProps {
api: IInnerApi;
row: IRow;
column: IColumn;
onaction: (ev: { action?: any; data?: { [key: string]: any } }) => void;
}
export interface IHeaderCellProps {
api: IInnerApi;
row: number;
column: IColumn;
cell: Omit<IHeaderCell, "cell">;
onaction: (ev: { action?: any; data?: { [key: string]: any } }) => void;
}
export interface IHeaderCellConfig extends IHeaderCell {
cell?: Component<IHeaderCellProps>;
}
export type TColumnHeaderConfig =
| string
| IHeaderCellConfig
| (string | IHeaderCellConfig)[];
export interface IColumnConfig
extends Omit<
IColumn,
"left" | "right" | "fixed" | "optionsMap" | "header" | "footer"
> {
cell?: Component<ICellProps>;
editor?: TEditorType | IColumnEditorConfig | TEditorHandlerConfig;
header?: TColumnHeaderConfig;
footer?: TColumnHeaderConfig;
}
export declare const Grid: Component<
{
rowStyle?: (row: any) => string;
columnStyle?: (column: IColumn) => string;
cellStyle?: (row: any, column: IColumn) => string;
multiselect?: boolean;
autoConfig?: boolean | IColumnConfig;
header?: boolean;
footer?: boolean;
reorder?: boolean;
autoRowHeight?: boolean;
responsive?: {
[key: string]: {
sizes?: ISizeConfig;
columns?: IColumnConfig[];
};
};
init?: (api: IApi) => void;
overlay?: string | Component;
columns: IColumnConfig[];
hotkeys?:
| false
| { [key: string]: ((e?: KeyboardEvent) => void) | boolean };
} & IConfig &
GridActions<TMethodsConfig>
>;
export declare const HeaderMenu: Component<{
columns?: { [key: string]: boolean };
api?: IApi;
children?: () => any;
}>;
export declare const ContextMenu: Component<
ComponentProps<typeof BaseContextMenu> & {
api?: IApi;
}
>;
export declare const Toolbar: Component<
ComponentProps<typeof BaseToolbar> & {
api?: IApi;
}
>;
export declare const Tooltip: Component<
Omit<ComponentProps<typeof BaseTooltip>, "content"> & {
content?: Component<{
data: {
row: IRow;
column: IColumn;
};
}>;
api?: IApi;
}
>;
export declare const Material: Component<{
fonts?: boolean;
children?: () => any;
}>;
export declare const Willow: Component<{
fonts?: boolean;
children?: () => any;
}>;
export declare const WillowDark: Component<{
fonts?: boolean;
children?: () => any;
}>;
export declare function registerInlineEditor(
type: string,
component: Component<{
editor: TEditorConfig;
onsave?: (ignoreFocus: boolean) => void;
oncancel?: () => void;
onapply?: (value: any) => void;
onaction?: (ev: {
action: string;
data?: { [key: string]: any };
}) => void;
}>
): void;
/* get component events from store actions*/
type RemoveHyphen<S extends string> = S extends `${infer Head}-${infer Tail}`
? `${Head}${RemoveHyphen<Tail>}`
: S;
type EventName<K extends string> = `on${RemoveHyphen<K>}`;
export type GridActions<TMethodsConfig extends Record<string, any>> = {
[K in keyof TMethodsConfig as EventName<K & string>]?: (
ev: TMethodsConfig[K]
) => void;
} & {
[key: `on${string}`]: (ev?: any) => void;
};