RevoGrid is a high-performance virtual data grid spreadsheet component built with StencilJS that can handle millions of cells and thousands of columns efficiently. It provides a comprehensive spreadsheet-like experience with Excel-like keyboard navigation, copy/paste functionality, and supports multiple frontend frameworks including Vue, React, Angular, and Svelte through framework-specific output targets. The component features advanced capabilities such as virtual scrolling for performance, column grouping and filtering, cell editing with custom editors, accessibility support following WAI-ARIA guidelines, RTL language support, and theming options.
npm install @revolist/revogridimport { ColumnRegular, DataType } from '@revolist/revogrid';For framework-specific bindings:
// Vue 3
import { RevoGrid } from '@revolist/vue3-datagrid';
// React
import RevoGrid from '@revolist/react-datagrid';
// Angular
import { RevoGridModule } from '@revolist/angular-datagrid';
// Svelte
import RevoGrid from '@revolist/svelte-datagrid';import { ColumnRegular, DataType } from '@revolist/revogrid';
// Define columns
const columns: ColumnRegular[] = [
{ prop: 'name', name: 'Name' },
{ prop: 'age', name: 'Age', columnType: 'numeric' },
{ prop: 'email', name: 'Email' }
];
// Define data source
const source: DataType[] = [
{ name: 'John Doe', age: 30, email: 'john@example.com' },
{ name: 'Jane Smith', age: 25, email: 'jane@example.com' }
];
// Use in HTML
const grid = document.querySelector('revo-grid');
grid.columns = columns;
grid.source = source;<!-- Direct HTML usage -->
<revo-grid
theme="material"
range="true"
resize="true"
filter="true">
</revo-grid>RevoGrid is built around several key architectural components:
The grid consists of multiple interconnected StencilJS components:
<revo-grid> - Main orchestration component<revogr-data> - Data cell rendering with virtualization<revogr-header> - Column header rendering<revogr-focus> - Focus and selection management<revogr-overlay-selection> - Range selection overlay<revogr-scroll-virtual> - Virtual scrolling implementationCore grid component with comprehensive configuration options and methods for data manipulation, navigation, and interaction.
// Main grid element
interface HTMLRevoGridElement extends StencilComponent {
// Essential properties
columns: (ColumnRegular | ColumnGrouping)[];
source: DataType[];
readonly: boolean;
// Core methods
refresh(type?: DimensionRows): Promise<void>;
updateColumns(cols: ColumnRegular[]): Promise<void>;
setDataAt(params: SetDataAtDetails): Promise<void>;
getSource(type?: DimensionRows): Promise<DataType[]>;
}Comprehensive data source management with reactive stores for handling grid data, including main source, pinned rows, and data operations.
type DataType<D = any> = {
[T in ColumnProp]: DataFormat<D>;
};
interface DataSourceState<T, ST> {
items: number[];
proxyItems: number[];
source: T[];
groupingDepth: number;
groups: Record<any, any>;
type: ST;
trimmed: Record<any, any>;
}Extensible plugin architecture allowing custom functionality through base plugin classes and built-in plugins for common operations.
class BasePlugin {
constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders);
addEventListener<K>(eventName: K, callback: Function): void;
watch<T>(prop: string, callback: Function, config?: WatchOptions): void;
emit<T>(eventName: string, detail?: T): void;
}Comprehensive type system covering all grid functionality including columns, data types, dimensions, editors, and configuration options.
interface ColumnRegular extends ColumnType {
prop: ColumnProp;
pin?: DimensionColPin;
name?: any;
autoSize?: boolean;
filter?: boolean | string | string[];
sortable?: boolean;
}Rich event system covering all grid interactions including data changes, user interactions, lifecycle events, and plugin events.
// Data events
type BeforeSaveDataDetails = {
val: any;
oldVal: any;
row: DataType;
col: ColumnRegular;
models: DataType[];
};
// Event listener methods
addEventListener(type: 'afteredit', listener: (e: CustomEvent<AfterEditEvent>) => void): void;Utility functions and service classes for common operations including data manipulation, column management, dimension calculations, and viewport handling.
// Utility functions
function getColumns(columns: ColumnDefinition[], level?: number): ColumnCollection;
function range(size: number, startAt?: number): number[];
// Service classes
class DataProvider {
setData(source: DataType[], type: DimensionRows): void;
setCellData(details: SetCellData, refresh?: boolean): void;
}