@freegridjs/core 0.1.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,603 @@
1
+ type Row = Record<string, any>;
2
+ type Region = 'left' | 'center' | 'right';
3
+ type ColumnType = 'text' | 'number' | 'date' | 'boolean';
4
+ type FilterType = 'text' | 'number' | 'date' | 'set';
5
+ type SortDir = 'asc' | 'desc';
6
+ type TextOp = 'contains' | 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'blank' | 'notBlank';
7
+ type NumberOp = 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'between' | 'blank' | 'notBlank';
8
+ type DateOp = 'equals' | 'before' | 'after' | 'between' | 'blank' | 'notBlank';
9
+ type FilterOp = TextOp | NumberOp | DateOp;
10
+ interface TextFilterModel {
11
+ type: 'text';
12
+ op: TextOp;
13
+ value?: string;
14
+ }
15
+ interface NumberFilterModel {
16
+ type: 'number';
17
+ op: NumberOp;
18
+ value?: number;
19
+ valueTo?: number;
20
+ }
21
+ /** Dates are compared as local `YYYY-MM-DD` keys. */
22
+ interface DateFilterModel {
23
+ type: 'date';
24
+ op: DateOp;
25
+ value?: string;
26
+ valueTo?: string;
27
+ }
28
+ /** Rows pass when their value is one of `values`. */
29
+ interface SetFilterModel {
30
+ type: 'set';
31
+ values: unknown[];
32
+ }
33
+ type FilterModel = TextFilterModel | NumberFilterModel | DateFilterModel | SetFilterModel;
34
+ interface SortItem {
35
+ colId: string;
36
+ dir: SortDir;
37
+ }
38
+ interface CellParams {
39
+ value: unknown;
40
+ formatted: string;
41
+ row: Row;
42
+ rowIndex: number;
43
+ column: ColumnDef;
44
+ }
45
+ interface ColumnDef {
46
+ /** Column id; defaults to `field`. Required when `field` is absent. */
47
+ id?: string;
48
+ field?: string;
49
+ header?: string;
50
+ width?: number;
51
+ minWidth?: number;
52
+ maxWidth?: number;
53
+ /** Share leftover width proportionally. A user resize turns it into a fixed width. */
54
+ flex?: number;
55
+ pinned?: 'left' | 'right';
56
+ hide?: boolean;
57
+ type?: ColumnType;
58
+ /** number: '#,##0.00' | 'integer' | 'percent' | 'currency:USD' | Intl options; date: 'date' | 'datetime' | 'time' | 'short' | 'medium' | 'long' | Intl options */
59
+ format?: string | Intl.NumberFormatOptions | Intl.DateTimeFormatOptions;
60
+ align?: 'left' | 'center' | 'right';
61
+ sortable?: boolean;
62
+ resizable?: boolean;
63
+ filter?: FilterType | false;
64
+ comparator?: (a: unknown, b: unknown, rowA: Row, rowB: Row) => number;
65
+ valueGetter?: (row: Row) => unknown;
66
+ /** Return a string (inserted as HTML — escape untrusted data) or an element. */
67
+ renderer?: (params: CellParams) => string | HTMLElement;
68
+ cellClass?: string | ((params: CellParams) => string | undefined);
69
+ children?: ColumnDef[];
70
+ /** Set false to keep this column out of the column chooser / side bar. */
71
+ chooser?: boolean;
72
+ /** Users cannot hide this column from the UI (API still can). */
73
+ lockVisible?: boolean;
74
+ /** Allow editing and pasting into this column (requires `field`). */
75
+ editable?: boolean;
76
+ /** Editor for editable columns; defaults by type (text, number, date, boolean toggle). */
77
+ editor?: EditorSpec;
78
+ /** Reject blank values on edit. */
79
+ required?: boolean;
80
+ /** Return true to accept, or a message to reject the edited value. */
81
+ validate?: (value: unknown, row: Row) => true | string;
82
+ /** Merge consecutive rows with the same value into one tall cell (or decide with a function). */
83
+ merge?: boolean | ((a: unknown, b: unknown, rowA: Row, rowB: Row) => boolean);
84
+ /** Let a long header label wrap onto more lines. */
85
+ wrapHeaderText?: boolean;
86
+ /** Aggregate shown in group rows: 'sum' | 'avg' | 'min' | 'max' | 'count' | (values, rows) => value. */
87
+ aggFunc?: Aggregator;
88
+ }
89
+ type SelectOption = unknown | {
90
+ value: unknown;
91
+ label?: string;
92
+ };
93
+ interface EditorParams {
94
+ value: unknown;
95
+ row: Row;
96
+ column: ColumnDef;
97
+ /** The key that started the edit, when typing replaced the value. */
98
+ initialText?: string;
99
+ }
100
+ interface CustomEditor {
101
+ el: HTMLElement;
102
+ getValue(): unknown;
103
+ focus?(): void;
104
+ destroy?(): void;
105
+ }
106
+ type EditorSpec = {
107
+ type: 'select';
108
+ options: SelectOption[] | ((row: Row) => SelectOption[]);
109
+ } | {
110
+ type: 'textarea';
111
+ } | ((params: EditorParams) => CustomEditor);
112
+ type KeyAction = 'edit' | 'clear' | 'undo' | 'redo' | 'copy' | 'paste' | 'selectAll' | 'find' | 'none';
113
+ interface ColumnState {
114
+ colId: string;
115
+ width: number;
116
+ hide: boolean;
117
+ pinned: 'left' | 'right' | null;
118
+ }
119
+ interface Messages {
120
+ noRows: string;
121
+ filter: string;
122
+ apply: string;
123
+ reset: string;
124
+ selectAll: string;
125
+ search: string;
126
+ blanks: string;
127
+ value: string;
128
+ valueTo: string;
129
+ sortAsc: string;
130
+ sortDesc: string;
131
+ clearSort: string;
132
+ pinLeft: string;
133
+ pinRight: string;
134
+ unpin: string;
135
+ columnMenu: string;
136
+ selectRow: string;
137
+ selectAllRows: string;
138
+ chooseColumns: string;
139
+ columns: string;
140
+ autosizeThis: string;
141
+ autosizeAll: string;
142
+ resetColumns: string;
143
+ hideColumn: string;
144
+ close: string;
145
+ copy: string;
146
+ copyWithHeaders: string;
147
+ paste: string;
148
+ pasteHint: string;
149
+ required: string;
150
+ invalidValue: string;
151
+ undo: string;
152
+ redo: string;
153
+ deleteRows: string;
154
+ copyRows: string;
155
+ statusRows: string;
156
+ statusFiltered: string;
157
+ statusSelected: string;
158
+ count: string;
159
+ sum: string;
160
+ avg: string;
161
+ min: string;
162
+ max: string;
163
+ findPlaceholder: string;
164
+ noMatches: string;
165
+ findNext: string;
166
+ findPrevious: string;
167
+ groupPanelHint: string;
168
+ groupByThis: string;
169
+ ungroup: string;
170
+ expandAll: string;
171
+ collapseAll: string;
172
+ pagerRange: string;
173
+ pageOf: string;
174
+ pageSize: string;
175
+ firstPage: string;
176
+ previousPage: string;
177
+ nextPage: string;
178
+ lastPage: string;
179
+ loading: string;
180
+ loadFailed: string;
181
+ filters: string;
182
+ clearFilters: string;
183
+ exportCsv: string;
184
+ exportExcel: string;
185
+ pivot: string;
186
+ pivotMode: string;
187
+ pivotRows: string;
188
+ pivotColumns: string;
189
+ pivotValues: string;
190
+ total: string;
191
+ addColumn: string;
192
+ chartBar: string;
193
+ chartStacked: string;
194
+ chartLine: string;
195
+ chartArea: string;
196
+ chartPie: string;
197
+ ops: Record<FilterOp, string>;
198
+ }
199
+ interface LocalePack extends Messages {
200
+ /** BCP 47 tag, also used for Intl formatting and collation. */
201
+ code: string;
202
+ }
203
+ type Aggregator = 'sum' | 'avg' | 'min' | 'max' | 'count' | ((values: unknown[], rows: Row[]) => unknown);
204
+ interface SummaryCell {
205
+ agg: Aggregator;
206
+ /** Text shown before the value, e.g. "Avg". */
207
+ prefix?: string;
208
+ /** Overrides the column format for this cell. */
209
+ format?: ColumnDef['format'];
210
+ }
211
+ interface SummaryRowDef {
212
+ /** Shown in the first displayed column that has no aggregator in this row. */
213
+ label?: string;
214
+ columns: Record<string, Aggregator | SummaryCell>;
215
+ }
216
+ interface SummaryOptions {
217
+ /** Default 'bottom'. */
218
+ position?: 'top' | 'bottom';
219
+ /** true (default): fixed outside the scroll area. false: scrolls with the rows. */
220
+ pinned?: boolean;
221
+ /** Rows to aggregate. Default 'filtered'. */
222
+ scope?: 'filtered' | 'all' | 'selected';
223
+ rows: SummaryRowDef[];
224
+ }
225
+ /** A rectangular cell range; rows are displayed indexes, columns are column ids. */
226
+ interface GridRange {
227
+ start: {
228
+ rowIndex: number;
229
+ colId: string;
230
+ };
231
+ end: {
232
+ rowIndex: number;
233
+ colId: string;
234
+ };
235
+ }
236
+ type ContextMenuItem = 'separator' | {
237
+ label: string;
238
+ action: () => void;
239
+ disabled?: boolean;
240
+ shortcut?: string;
241
+ };
242
+ interface ContextMenuParams {
243
+ row: Row | null;
244
+ rowIndex: number;
245
+ colId: string;
246
+ value: unknown;
247
+ /** The built-in items, so you can keep, reorder or extend them. */
248
+ defaultItems: ContextMenuItem[];
249
+ }
250
+ /** What the grid asks a server for: rows [start, end) under the current sort and filters. */
251
+ interface ServerParams {
252
+ start: number;
253
+ end: number;
254
+ sort: SortItem[];
255
+ filters: Record<string, FilterModel>;
256
+ quickFilter: string;
257
+ }
258
+ interface Datasource {
259
+ /** Return the rows of the range; `total` is the row count when known (omit it for infinite scroll). */
260
+ getRows(params: ServerParams): Promise<{
261
+ rows: Row[];
262
+ total?: number;
263
+ }>;
264
+ }
265
+ interface ExportOptions {
266
+ /** Column ids in order (hidden columns allowed); default: the displayed data columns. */
267
+ columns?: string[];
268
+ /** 'filtered' (default, current sort and filters), 'all' (source order) or 'selected' (checked rows). */
269
+ rows?: 'filtered' | 'all' | 'selected';
270
+ /** Include the header row(s). Default true. */
271
+ headers?: boolean;
272
+ /** xlsx sheet name. */
273
+ sheetName?: string;
274
+ /** CSV separator, default ','. */
275
+ separator?: string;
276
+ }
277
+ interface PivotConfig {
278
+ /** Row fields; every field but the last becomes a group level. */
279
+ rows: string[];
280
+ /** Fields whose values become column groups. */
281
+ columns?: string[];
282
+ values: {
283
+ colId: string;
284
+ aggFunc?: Aggregator;
285
+ }[];
286
+ /** Add a Total column group (default true). */
287
+ totals?: boolean;
288
+ }
289
+ interface ChartOptions {
290
+ type?: 'bar' | 'stackedBar' | 'line' | 'area' | 'pie';
291
+ /** Cells to chart; default: the current range, else every displayed row. */
292
+ range?: GridRange;
293
+ /** Draw into this element instead of a floating panel inside the grid. */
294
+ container?: HTMLElement;
295
+ title?: string;
296
+ }
297
+ interface ChartHandle {
298
+ /** Element the SVG is drawn in. */
299
+ el: HTMLElement;
300
+ setType(type: 'bar' | 'stackedBar' | 'line' | 'area' | 'pie'): void;
301
+ update(): void;
302
+ destroy(): void;
303
+ }
304
+ interface GridOptions {
305
+ columns: ColumnDef[];
306
+ data?: Row[];
307
+ rowHeight?: number;
308
+ headerHeight?: number;
309
+ rowSelection?: 'single' | 'multiple';
310
+ getRowId?: (row: Row) => string;
311
+ theme?: string;
312
+ locale?: string | Partial<LocalePack>;
313
+ /** Font size in px (default 13). Row/header heights follow it unless set explicitly. */
314
+ fontSize?: number;
315
+ /** CSS font-family list (default: the theme's system font stack). */
316
+ fontFamily?: string;
317
+ /** Dock a Columns panel on the right. `{ open: true }` starts expanded. */
318
+ sideBar?: boolean | {
319
+ open?: boolean;
320
+ panels?: ('columns' | 'filters' | 'pivot')[];
321
+ };
322
+ /** Summary rows (totals, averages, …). */
323
+ summary?: SummaryOptions;
324
+ /** Excel-style cell ranges: mouse drag, Shift+click, Shift+arrows, Ctrl+A. Default true. */
325
+ rangeSelection?: boolean;
326
+ /** false keeps the browser menu; a function customizes the right-click menu. */
327
+ contextMenu?: false | ((params: ContextMenuParams) => ContextMenuItem[]);
328
+ /** Remap or disable keys, e.g. `{ Enter: false, 'Ctrl+E': 'edit' }`. */
329
+ keymap?: Record<string, KeyAction | false>;
330
+ /** Bar under the grid with row counts and totals of the selected cells. */
331
+ statusBar?: boolean;
332
+ /** Drag the corner of the selection to fill cells (editable columns). Default true. */
333
+ fillHandle?: boolean;
334
+ /** Data rows fixed above / below the scrolling rows. */
335
+ pinnedTopRows?: Row[];
336
+ pinnedBottomRows?: Row[];
337
+ /** Ctrl+F opens a find bar inside the grid. Default true. */
338
+ findBar?: boolean;
339
+ /** Wrap long header labels for every column. */
340
+ wrapHeaderText?: boolean;
341
+ /** Group rows by these column ids, in order. */
342
+ groupBy?: string[];
343
+ /** Group and tree levels expanded at start: 0 none (default), n levels, -1 all. */
344
+ groupDefaultExpanded?: number;
345
+ /** Bar above the header where column headers can be dropped to group by them. */
346
+ groupPanel?: boolean;
347
+ /** Nest rows under their parent. Needs `getRowId`; `getParentId` returns the parent's id or null. */
348
+ treeData?: {
349
+ getParentId: (row: Row) => unknown;
350
+ };
351
+ /** Content of the expandable panel under a master row. */
352
+ detailRenderer?: (params: {
353
+ row: Row;
354
+ rowIndex: number;
355
+ }) => HTMLElement | string;
356
+ /** Height of the detail panel in px (default 240). */
357
+ detailHeight?: number;
358
+ /** Which rows can expand a detail panel (default: all rows). */
359
+ isRowMaster?: (row: Row) => boolean;
360
+ /** Add a handle column for dragging rows into a new order. */
361
+ rowDrag?: boolean;
362
+ /** Show rows one page at a time with a pager under the grid. */
363
+ pagination?: boolean | {
364
+ pageSize?: number;
365
+ pageSizes?: number[];
366
+ };
367
+ /** Load rows from a server in blocks instead of `data`; sorting and filtering happen on the server. */
368
+ datasource?: Datasource;
369
+ /** Rows per server request (default 100). */
370
+ blockSize?: number;
371
+ /** Most blocks kept in memory (default 100). */
372
+ maxBlocks?: number;
373
+ /** Show the data as a pivot table. */
374
+ pivot?: PivotConfig;
375
+ /** Add the Pivot panel to the side bar. */
376
+ pivotPanel?: boolean;
377
+ /** Company license key for this domain (free for personal use; see freegrid.app/pricing). */
378
+ licenseKey?: string;
379
+ }
380
+ interface CellEvent {
381
+ row: Row;
382
+ rowIndex: number;
383
+ colId: string;
384
+ value: unknown;
385
+ event: MouseEvent;
386
+ }
387
+ interface GridEvents {
388
+ cellClick: CellEvent;
389
+ cellDoubleClick: CellEvent;
390
+ selectionChange: {
391
+ selected: Row[];
392
+ };
393
+ sortChange: {
394
+ sort: SortItem[];
395
+ };
396
+ filterChange: {
397
+ filters: Record<string, FilterModel>;
398
+ };
399
+ columnResize: {
400
+ colId: string;
401
+ width: number;
402
+ };
403
+ columnMove: {
404
+ colId: string;
405
+ toIndex: number;
406
+ };
407
+ focusChange: {
408
+ rowIndex: number;
409
+ colId: string;
410
+ };
411
+ columnVisible: {
412
+ colId: string;
413
+ visible: boolean;
414
+ };
415
+ rangeChange: {
416
+ range: GridRange | null;
417
+ };
418
+ cellValueChanged: {
419
+ row: Row;
420
+ rowIndex: number;
421
+ colId: string;
422
+ oldValue: unknown;
423
+ newValue: unknown;
424
+ };
425
+ paste: {
426
+ changed: number;
427
+ skipped: number;
428
+ };
429
+ editStart: {
430
+ rowIndex: number;
431
+ colId: string;
432
+ };
433
+ editStop: {
434
+ rowIndex: number;
435
+ colId: string;
436
+ committed: boolean;
437
+ };
438
+ validationFailed: {
439
+ rowIndex: number;
440
+ colId: string;
441
+ value: unknown;
442
+ message: string;
443
+ };
444
+ rowsAdded: {
445
+ rows: Row[];
446
+ };
447
+ rowsRemoved: {
448
+ rows: Row[];
449
+ };
450
+ groupChange: {
451
+ groupBy: string[];
452
+ };
453
+ groupToggle: {
454
+ key: string;
455
+ expanded: boolean;
456
+ };
457
+ detailToggle: {
458
+ row: Row;
459
+ expanded: boolean;
460
+ };
461
+ rowDragEnd: {
462
+ row: Row;
463
+ fromIndex: number;
464
+ toIndex: number;
465
+ };
466
+ pageChange: {
467
+ page: number;
468
+ pageSize: number;
469
+ pageCount: number;
470
+ };
471
+ rowsLoaded: {
472
+ start: number;
473
+ end: number;
474
+ total?: number;
475
+ };
476
+ rowsLoadFailed: {
477
+ start: number;
478
+ end: number;
479
+ error: unknown;
480
+ };
481
+ pivotChange: {
482
+ pivot: PivotConfig | null;
483
+ };
484
+ }
485
+ interface GridApi {
486
+ setData(rows: Row[]): void;
487
+ getData(): Row[];
488
+ setColumns(columns: ColumnDef[]): void;
489
+ getColumnState(): ColumnState[];
490
+ applyColumnState(state: ColumnState[]): void;
491
+ setSort(sort: SortItem[]): void;
492
+ getSort(): SortItem[];
493
+ setFilter(colId: string, model: FilterModel | null): void;
494
+ getFilterModel(): Record<string, FilterModel>;
495
+ setQuickFilter(text: string): void;
496
+ getSelectedRows(): Row[];
497
+ selectAll(): void;
498
+ deselectAll(): void;
499
+ getDisplayedRowCount(): number;
500
+ scrollToRow(index: number): void;
501
+ setTheme(theme: string): void;
502
+ setLocale(locale: string | Partial<LocalePack>): void;
503
+ setFont(font: {
504
+ size?: number;
505
+ family?: string | null;
506
+ }): void;
507
+ setColumnVisible(colId: string, visible: boolean): void;
508
+ autoSizeColumns(colIds?: string[]): void;
509
+ resetColumnState(): void;
510
+ openColumnChooser(): void;
511
+ closeColumnChooser(): void;
512
+ toggleSideBar(open?: boolean, panel?: 'columns' | 'filters' | 'pivot'): void;
513
+ setSummary(summary: SummaryOptions | null): void;
514
+ /** Raw aggregate values per summary row, keyed by column id. */
515
+ getSummaryValues(): Record<string, unknown>[];
516
+ getRange(): GridRange | null;
517
+ setRange(range: GridRange | null): void;
518
+ /** Copy the range (or checked rows, or the focused cell) as Excel TSV; also writes the clipboard when allowed. */
519
+ copySelection(options?: {
520
+ headers?: boolean;
521
+ rows?: boolean;
522
+ }): string;
523
+ /** Paste Excel/TSV text at the range or focused cell into editable columns. */
524
+ pasteText(text: string): {
525
+ changed: number;
526
+ skipped: number;
527
+ };
528
+ startEdit(rowIndex: number, colId: string): boolean;
529
+ stopEdit(cancel?: boolean): void;
530
+ addRows(rows: Row[], index?: number): Row[];
531
+ removeRows(rows: Row[] | ((row: Row) => boolean)): Row[];
532
+ removeSelectedRows(): Row[];
533
+ getModifiedRows(): {
534
+ created: Row[];
535
+ updated: Row[];
536
+ deleted: Row[];
537
+ };
538
+ getChanges(): {
539
+ row: Row;
540
+ colId: string;
541
+ oldValue: unknown;
542
+ newValue: unknown;
543
+ }[];
544
+ hasChanges(): boolean;
545
+ commitChanges(): void;
546
+ revertChanges(): void;
547
+ undo(): void;
548
+ redo(): void;
549
+ canUndo(): boolean;
550
+ canRedo(): boolean;
551
+ /** Fill from the current selection into `target` (which must contain it), like dragging the fill handle. */
552
+ fillRange(target: GridRange): void;
553
+ setPinnedRows(rows: {
554
+ top?: Row[];
555
+ bottom?: Row[];
556
+ }): void;
557
+ /** Highlight cells containing `text`; returns the number of matches and focuses the first. */
558
+ find(text: string): number;
559
+ findNext(): void;
560
+ findPrevious(): void;
561
+ clearFind(): void;
562
+ setGroupBy(colIds: string[]): void;
563
+ getGroupBy(): string[];
564
+ /** Expand or collapse one group (key like "country:KR|city:Seoul") or tree row (its id). */
565
+ setGroupExpanded(key: string, expanded: boolean): void;
566
+ expandAll(): void;
567
+ collapseAll(): void;
568
+ setDetailExpanded(row: Row, expanded: boolean): void;
569
+ isDetailExpanded(row: Row): boolean;
570
+ /** Move a row to a new index in the source data. False while sorting, filtering or grouping is active. */
571
+ moveRow(row: Row, toIndex: number): boolean;
572
+ /** 0-based page; clamped to the available pages. */
573
+ setPage(page: number): void;
574
+ getPage(): number;
575
+ getPageCount(): number;
576
+ setPageSize(size: number): void;
577
+ getPageSize(): number;
578
+ /** Server data: drop cached rows and load them again. */
579
+ refreshRows(): void;
580
+ /** Show a pivot table of the data (null returns to the normal view). */
581
+ setPivot(pivot: PivotConfig | null): void;
582
+ getPivot(): PivotConfig | null;
583
+ /** Chart the range (or the whole view) as SVG; updates when cells change. */
584
+ createChart(options?: ChartOptions): ChartHandle;
585
+ getCsv(options?: ExportOptions): string;
586
+ /** Download a CSV file (UTF-8 with BOM so Excel reads non-Latin text). */
587
+ exportCsv(filename?: string, options?: ExportOptions): void;
588
+ /** An .xlsx workbook of the rows. */
589
+ getXlsx(options?: ExportOptions): Uint8Array;
590
+ exportXlsx(filename?: string, options?: ExportOptions): void;
591
+ /** Read an .xlsx or CSV file whose first row holds headers; append (default) or replace the rows. */
592
+ importFile(file: Blob | ArrayBuffer | Uint8Array, options?: {
593
+ mode?: 'append' | 'replace';
594
+ sheet?: number | string;
595
+ }): Promise<{
596
+ rows: Row[];
597
+ skipped: number;
598
+ }>;
599
+ on<K extends keyof GridEvents>(type: K, fn: (payload: GridEvents[K]) => void): () => void;
600
+ destroy(): void;
601
+ }
602
+
603
+ export type { Aggregator as A, SummaryRowDef as B, CellEvent as C, Datasource as D, EditorParams as E, FilterModel as F, GridOptions as G, TextOp as H, KeyAction as K, LocalePack as L, Messages as M, NumberFilterModel as N, PivotConfig as P, Region as R, SelectOption as S, TextFilterModel as T, GridApi as a, CellParams as b, ChartHandle as c, ChartOptions as d, ColumnDef as e, ColumnState as f, ColumnType as g, ContextMenuItem as h, ContextMenuParams as i, CustomEditor as j, DateFilterModel as k, DateOp as l, EditorSpec as m, ExportOptions as n, FilterOp as o, FilterType as p, GridEvents as q, GridRange as r, NumberOp as s, Row as t, ServerParams as u, SetFilterModel as v, SortDir as w, SortItem as x, SummaryCell as y, SummaryOptions as z };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@freegridjs/core",
3
- "version": "0.1.0",
4
- "description": "FreeGrid — a fast, free, MIT-licensed data grid for the web: virtual scrolling, pinning, filters, column customization, summary rows, 7 languages.",
5
- "license": "MIT",
3
+ "version": "0.7.0",
4
+ "description": "FreeGrid — a fast data grid for the web (free for personal use): virtual scrolling, grouping, pivot, charts, Excel export, 7 languages.",
5
+ "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
7
7
  "sideEffects": [
8
8
  "*.css"