@nlabtech/nlabs-grid 1.1.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,444 @@
1
+ import { Observable } from 'rxjs';
2
+ import * as _angular_core from '@angular/core';
3
+ import { InjectionToken, TemplateRef, OnInit, OnChanges, AfterContentInit, AfterViewInit, ElementRef, EventEmitter, QueryList, SimpleChanges } from '@angular/core';
4
+ import { HttpClient } from '@angular/common/http';
5
+
6
+ /**
7
+ * Grid Configuration Models
8
+ */
9
+ interface GridColumn<T = any> {
10
+ field: keyof T | string;
11
+ header: string;
12
+ sortable?: boolean;
13
+ filterable?: boolean;
14
+ filterType?: 'text' | 'number' | 'date' | 'boolean';
15
+ width?: string;
16
+ minWidth?: string;
17
+ maxWidth?: string;
18
+ type?: 'text' | 'number' | 'date' | 'boolean' | 'custom';
19
+ format?: (value: any) => string;
20
+ cellTemplate?: any;
21
+ visible?: boolean;
22
+ frozen?: boolean;
23
+ resizable?: boolean;
24
+ }
25
+ interface GridConfig {
26
+ columns: GridColumn[];
27
+ pageSize?: number;
28
+ pageSizeOptions?: number[];
29
+ sortable?: boolean;
30
+ filterable?: boolean;
31
+ selectable?: boolean;
32
+ multiSelect?: boolean;
33
+ resizable?: boolean;
34
+ reorderable?: boolean;
35
+ showHeader?: boolean;
36
+ showFooter?: boolean;
37
+ loading?: boolean;
38
+ emptyMessage?: string;
39
+ rowHeight?: string;
40
+ showActions?: boolean;
41
+ actionsHeader?: string;
42
+ actionsWidth?: string;
43
+ showCheckboxColumn?: boolean;
44
+ checkboxColumnWidth?: string;
45
+ }
46
+ interface GridState {
47
+ page: number;
48
+ pageSize: number;
49
+ sortField?: string;
50
+ sortOrder?: 'asc' | 'desc';
51
+ filters?: Map<string, any>;
52
+ selectedRows?: any[];
53
+ }
54
+ interface GridDataResult<T = any> {
55
+ data: T[];
56
+ total: number;
57
+ }
58
+ interface GridRequest {
59
+ skip: number;
60
+ top: number;
61
+ orderBy?: string;
62
+ filter?: string;
63
+ select?: string[];
64
+ expand?: string[];
65
+ globalSearch?: string;
66
+ }
67
+ interface FilterMetadata {
68
+ field: string;
69
+ operator: FilterOperator;
70
+ value: any;
71
+ matchMode?: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'equals' | 'notEquals' | 'lt' | 'lte' | 'gt' | 'gte' | 'isEmpty' | 'isNotEmpty';
72
+ }
73
+ type FilterOperator = 'and' | 'or';
74
+ interface SortMetadata {
75
+ field: string;
76
+ order: 'asc' | 'desc';
77
+ }
78
+ interface PaginationMetadata {
79
+ page: number;
80
+ pageSize: number;
81
+ totalRecords: number;
82
+ totalPages: number;
83
+ }
84
+
85
+ /**
86
+ * Interface for data adapters
87
+ * Allows flexibility to work with different backend types (OData, REST, etc.)
88
+ */
89
+ interface IDataAdapter<T = any> {
90
+ /**
91
+ * Fetch data from the data source
92
+ * @param request Grid request parameters
93
+ * @returns Observable with data and total count
94
+ */
95
+ getData(request: GridRequest): Observable<GridDataResult<T>>;
96
+ /**
97
+ * Build query string based on the request
98
+ * @param request Grid request parameters
99
+ * @returns Query string
100
+ */
101
+ buildQuery(request: GridRequest): string;
102
+ }
103
+
104
+ declare const ODATA_BASE_URL: InjectionToken<string>;
105
+ /**
106
+ * OData v4 Adapter
107
+ * Implements IDataAdapter for OData protocol
108
+ */
109
+ declare class ODataAdapter<T = any> implements IDataAdapter<T> {
110
+ private http;
111
+ private baseUrl;
112
+ constructor(http: HttpClient, baseUrl: string);
113
+ getData(request: GridRequest): Observable<GridDataResult<T>>;
114
+ buildQuery(request: GridRequest): string;
115
+ }
116
+
117
+ /**
118
+ * REST API Adapter
119
+ * Implements IDataAdapter for standard REST endpoints
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const adapter = new RestAdapter(http, 'https://api.example.com/users', {
124
+ * dataKey: 'items',
125
+ * totalKey: 'totalCount',
126
+ * usePagination: 'page'
127
+ * });
128
+ * ```
129
+ */
130
+ declare class RestAdapter<T = any> implements IDataAdapter<T> {
131
+ private http;
132
+ private baseUrl;
133
+ private config?;
134
+ constructor(http: HttpClient, baseUrl: string, config?: RestAdapterConfig | undefined);
135
+ getData(request: GridRequest): Observable<GridDataResult<T>>;
136
+ buildQuery(request: GridRequest): string;
137
+ private mapResponse;
138
+ private getNestedValue;
139
+ }
140
+ interface RestAdapterConfig {
141
+ /** Pagination style: 'page' (page/pageSize) or 'skip' (skip/take). Default: 'skip' */
142
+ usePagination?: 'page' | 'skip';
143
+ /** Query param name for page number. Default: 'page' */
144
+ pageParam?: string;
145
+ /** Query param name for page size. Default: 'pageSize' */
146
+ pageSizeParam?: string;
147
+ /** Query param name for skip count. Default: 'skip' */
148
+ skipParam?: string;
149
+ /** Query param name for sorting. Default: 'sort' */
150
+ sortParam?: string;
151
+ /** Query param name for filtering. Default: 'filter' */
152
+ filterParam?: string;
153
+ /** Query param name for field selection. Default: 'fields' */
154
+ selectParam?: string;
155
+ /** Response property containing data array. Supports nested paths like 'result.items'. Default: 'data' */
156
+ dataKey?: string;
157
+ /** Response property containing total count. Supports nested paths. Default: 'total' */
158
+ totalKey?: string;
159
+ /** Custom response mapper function for complex response structures */
160
+ responseMapper?: <T>(response: any) => {
161
+ data: T[];
162
+ total: number;
163
+ };
164
+ /** Additional custom query parameters to append to every request */
165
+ extraParams?: Record<string, string | number | boolean | undefined>;
166
+ /** Query param name for global search. Default: 'search' */
167
+ searchParam?: string;
168
+ }
169
+
170
+ /**
171
+ * Grid Data Service
172
+ * Central service for managing grid data operations
173
+ */
174
+ declare class GridDataService<T = any> {
175
+ private adapter?;
176
+ setAdapter(adapter: IDataAdapter<T>): void;
177
+ getData(request: GridRequest): Observable<GridDataResult<T>>;
178
+ buildFilterString(filters: FilterMetadata[]): string;
179
+ buildSortString(sorts: SortMetadata[]): string;
180
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridDataService<any>, never>;
181
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridDataService<any>>;
182
+ }
183
+
184
+ type Theme = 'light' | 'dark' | 'auto';
185
+ declare class ThemeService {
186
+ private readonly THEME_KEY;
187
+ theme: _angular_core.WritableSignal<Theme>;
188
+ effectiveTheme: _angular_core.WritableSignal<"light" | "dark">;
189
+ constructor();
190
+ private getInitialTheme;
191
+ private resolveTheme;
192
+ private applyTheme;
193
+ private saveTheme;
194
+ setTheme(theme: Theme): void;
195
+ toggleTheme(): void;
196
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
197
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
198
+ }
199
+
200
+ declare class GridColumnCommandTemplateDirective {
201
+ templateRef: TemplateRef<any>;
202
+ name: string;
203
+ constructor(templateRef: TemplateRef<any>);
204
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridColumnCommandTemplateDirective, never>;
205
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridColumnCommandTemplateDirective, "[nlabsGridColumnCommandTemplate]", never, { "name": { "alias": "nlabsGridColumnCommandTemplate"; "required": false; }; }, {}, never, never, true, never>;
206
+ }
207
+
208
+ type TextAlignType = 'left' | 'center' | 'right';
209
+ type FilterType = 'text' | 'date' | 'number' | 'boolean' | 'select';
210
+ type CurrencyFormatType = 'c' | 'n';
211
+ declare class GridColumnComponent {
212
+ readonly field: _angular_core.InputSignal<string>;
213
+ readonly title: _angular_core.InputSignal<string>;
214
+ readonly header: _angular_core.InputSignal<string>;
215
+ readonly sortable: _angular_core.InputSignal<boolean>;
216
+ readonly filterable: _angular_core.InputSignal<boolean>;
217
+ readonly visible: _angular_core.InputSignal<boolean>;
218
+ readonly resizable: _angular_core.InputSignal<boolean>;
219
+ readonly frozen: _angular_core.InputSignal<boolean>;
220
+ readonly locked: _angular_core.InputSignal<boolean>;
221
+ readonly width: _angular_core.InputSignal<string>;
222
+ readonly minWidth: _angular_core.InputSignal<string>;
223
+ readonly maxWidth: _angular_core.InputSignal<string>;
224
+ readonly textAlign: _angular_core.InputSignal<TextAlignType>;
225
+ readonly className: _angular_core.InputSignal<string>;
226
+ readonly hideOverflow: _angular_core.InputSignal<boolean>;
227
+ readonly filterType: _angular_core.InputSignal<FilterType>;
228
+ readonly filterData: _angular_core.InputSignal<any[]>;
229
+ readonly filterValue: _angular_core.InputSignal<any>;
230
+ readonly filterOperator: _angular_core.WritableSignal<string>;
231
+ readonly format: _angular_core.InputSignal<string | null>;
232
+ readonly symbol: _angular_core.InputSignal<string>;
233
+ readonly fraction: _angular_core.InputSignal<number>;
234
+ readonly showSymbolInFront: _angular_core.InputSignal<boolean>;
235
+ readonly showCheckbox: _angular_core.InputSignal<boolean>;
236
+ readonly booleanData: _angular_core.InputSignal<string[]>;
237
+ readonly visibleSignal: _angular_core.WritableSignal<boolean>;
238
+ readonly widthSignal: _angular_core.WritableSignal<string>;
239
+ readonly filterValueSignal: _angular_core.WritableSignal<any>;
240
+ cellTemplate?: TemplateRef<any>;
241
+ headerTemplate?: TemplateRef<any>;
242
+ footerTemplate?: TemplateRef<any>;
243
+ readonly timestamp: _angular_core.WritableSignal<string>;
244
+ getDisplayTitle(): string;
245
+ private capitalizeFirstLetter;
246
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridColumnComponent, never>;
247
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridColumnComponent, "nlabs-grid-column", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "frozen": { "alias": "frozen"; "required": false; "isSignal": true; }; "locked": { "alias": "locked"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "textAlign": { "alias": "textAlign"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "hideOverflow": { "alias": "hideOverflow"; "required": false; "isSignal": true; }; "filterType": { "alias": "filterType"; "required": false; "isSignal": true; }; "filterData": { "alias": "filterData"; "required": false; "isSignal": true; }; "filterValue": { "alias": "filterValue"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "symbol": { "alias": "symbol"; "required": false; "isSignal": true; }; "fraction": { "alias": "fraction"; "required": false; "isSignal": true; }; "showSymbolInFront": { "alias": "showSymbolInFront"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "booleanData": { "alias": "booleanData"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
248
+ }
249
+
250
+ declare class DataGridComponent<T = any> implements OnInit, OnChanges, AfterContentInit, AfterViewInit {
251
+ private gridDataService;
252
+ themeService: ThemeService;
253
+ config?: GridConfig;
254
+ adapter: IDataAdapter<T>;
255
+ autoLoad: boolean;
256
+ lazy: boolean;
257
+ data?: T[];
258
+ totalRecords?: number;
259
+ gridHeader?: ElementRef;
260
+ gridBody?: ElementRef;
261
+ readonly theme: _angular_core.InputSignal<"light" | "dark" | "auto">;
262
+ readonly showThemeSelector: _angular_core.InputSignal<boolean>;
263
+ readonly showColumnChooser: _angular_core.InputSignal<boolean>;
264
+ readonly showGlobalSearch: _angular_core.InputSignal<boolean>;
265
+ readonly showAddButton: _angular_core.InputSignal<boolean>;
266
+ readonly addButtonText: _angular_core.InputSignal<string>;
267
+ readonly addButtonUrl: _angular_core.InputSignal<string | undefined>;
268
+ readonly showExport: _angular_core.InputSignal<boolean>;
269
+ readonly exportFileName: _angular_core.InputSignal<string>;
270
+ readonly showFooter: _angular_core.InputSignal<boolean>;
271
+ addClick: EventEmitter<void>;
272
+ excelExport: EventEmitter<T[]>;
273
+ pdfExport: EventEmitter<T[]>;
274
+ onRefresh: EventEmitter<void>;
275
+ columnComponents: QueryList<GridColumnComponent>;
276
+ columnCommandTemplates: QueryList<GridColumnCommandTemplateDirective>;
277
+ captionCommandTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
278
+ footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
279
+ actionsTemplate?: TemplateRef<any>;
280
+ checkboxTemplate?: TemplateRef<any>;
281
+ dataLoad: EventEmitter<GridDataResult<T>>;
282
+ rowSelect: EventEmitter<T>;
283
+ rowUnselect: EventEmitter<T>;
284
+ stateChange: EventEmitter<GridState>;
285
+ gridData: T[];
286
+ loading: boolean;
287
+ Math: Math;
288
+ globalSearchTerm: string;
289
+ state: GridState;
290
+ pagination: PaginationMetadata;
291
+ selectedRows: Set<T>;
292
+ sortMetadata: SortMetadata[];
293
+ filterMetadata: FilterMetadata[];
294
+ displayedColumns: GridColumn[];
295
+ draggedColumn?: GridColumn;
296
+ dropTargetIndex?: number;
297
+ resizingColumn?: GridColumn;
298
+ resizeStartX: number;
299
+ resizeStartWidth: number;
300
+ showColumnChooserModal: boolean;
301
+ showFilterModal: boolean;
302
+ currentFilterColumn: GridColumn | null;
303
+ currentFilterOperator: 'contains' | 'notContains' | 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'lt' | 'lte' | 'gt' | 'gte' | 'isEmpty' | 'isNotEmpty';
304
+ filterValue: string;
305
+ constructor(gridDataService: GridDataService<T>, themeService: ThemeService);
306
+ ngAfterContentInit(): void;
307
+ private processTemplates;
308
+ ngOnInit(): void;
309
+ ngOnChanges(changes: SimpleChanges): void;
310
+ ngAfterViewInit(): void;
311
+ private initializeGrid;
312
+ private processColumnComponents;
313
+ loadData(): void;
314
+ onPageChange(page: number): void;
315
+ onPageSizeChange(pageSize: number): void;
316
+ onSort(column: GridColumn): void;
317
+ onFilter(column: GridColumn, value: any): void;
318
+ onRowSelect(row: T, event?: Event): void;
319
+ toggleSelectAll(event: Event): void;
320
+ isAllSelected(): boolean;
321
+ isSomeSelected(): boolean;
322
+ isRowSelected(row: T): boolean;
323
+ private buildOrderBy;
324
+ private buildFilter;
325
+ private sortLocal;
326
+ private filterLocal;
327
+ private updatePagination;
328
+ private emitStateChange;
329
+ trackByRow(index: number, row: any): any;
330
+ getCellValue(row: any, column: GridColumn): any;
331
+ getSortIcon(column: GridColumn): string;
332
+ getFilterValue(column: GridColumn): string;
333
+ openFilterModal(column: GridColumn, event: Event): void;
334
+ closeFilterModal(): void;
335
+ applyFilterModal(): void;
336
+ clearFilterModal(): void;
337
+ isFilterActive(column: GridColumn): boolean;
338
+ getPageNumbers(): number[];
339
+ toggleColumnVisibility(column: GridColumn): void;
340
+ getVisibleColumns(): GridColumn[];
341
+ onDragStart(event: DragEvent, column: GridColumn, index: number): void;
342
+ onColumnDragOver(event: DragEvent, index: number): void;
343
+ onColumnDrop(event: DragEvent, targetIndex: number): void;
344
+ onColumnDragEnd(): void;
345
+ onResizeStart(event: MouseEvent, column: GridColumn): void;
346
+ private onResize;
347
+ private onResizeEnd;
348
+ onGlobalSearch(term: string): void;
349
+ onAddButtonClick(): void;
350
+ onRefreshClick(): void;
351
+ exportToExcel(): void;
352
+ private generateExcelFile;
353
+ private formatCellValue;
354
+ private escapeXml;
355
+ exportToPDF(): void;
356
+ private generatePrintablePDF;
357
+ private escapeHtml;
358
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent<any>, never>;
359
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataGridComponent<any>, "nlabs-data-grid", never, { "config": { "alias": "config"; "required": false; }; "adapter": { "alias": "adapter"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "lazy": { "alias": "lazy"; "required": false; }; "data": { "alias": "data"; "required": false; }; "totalRecords": { "alias": "totalRecords"; "required": false; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "showThemeSelector": { "alias": "showThemeSelector"; "required": false; "isSignal": true; }; "showColumnChooser": { "alias": "showColumnChooser"; "required": false; "isSignal": true; }; "showGlobalSearch": { "alias": "showGlobalSearch"; "required": false; "isSignal": true; }; "showAddButton": { "alias": "showAddButton"; "required": false; "isSignal": true; }; "addButtonText": { "alias": "addButtonText"; "required": false; "isSignal": true; }; "addButtonUrl": { "alias": "addButtonUrl"; "required": false; "isSignal": true; }; "showExport": { "alias": "showExport"; "required": false; "isSignal": true; }; "exportFileName": { "alias": "exportFileName"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; }, { "addClick": "addClick"; "excelExport": "excelExport"; "pdfExport": "pdfExport"; "onRefresh": "onRefresh"; "dataLoad": "dataLoad"; "rowSelect": "rowSelect"; "rowUnselect": "rowUnselect"; "stateChange": "stateChange"; }, ["captionCommandTemplate", "footerTemplate", "columnComponents", "columnCommandTemplates"], never, true, never>;
360
+ }
361
+
362
+ declare class ThemeSelectorComponent {
363
+ showSelector: _angular_core.InputSignal<boolean>;
364
+ themeService: ThemeService;
365
+ setTheme(theme: Theme): void;
366
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeSelectorComponent, never>;
367
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeSelectorComponent, "theme-selector", never, { "showSelector": { "alias": "showSelector"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
368
+ }
369
+
370
+ declare class GridCaptionCommandTemplateDirective {
371
+ templateRef: TemplateRef<any>;
372
+ constructor(templateRef: TemplateRef<any>);
373
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridCaptionCommandTemplateDirective, never>;
374
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridCaptionCommandTemplateDirective, "[nlabsGridCaptionCommandTemplate]", never, {}, {}, never, never, true, never>;
375
+ }
376
+
377
+ declare class GridCellTemplateDirective {
378
+ templateRef: TemplateRef<any>;
379
+ constructor(templateRef: TemplateRef<any>);
380
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridCellTemplateDirective, never>;
381
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridCellTemplateDirective, "[nlabsGridCellTemplate]", never, {}, {}, never, never, true, never>;
382
+ }
383
+
384
+ declare class GridFooterTemplateDirective {
385
+ templateRef: TemplateRef<any>;
386
+ constructor(templateRef: TemplateRef<any>);
387
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridFooterTemplateDirective, never>;
388
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridFooterTemplateDirective, "[nlabsGridFooterTemplate]", never, {}, {}, never, never, true, never>;
389
+ }
390
+
391
+ declare class GridHeaderTemplateDirective {
392
+ templateRef: TemplateRef<any>;
393
+ constructor(templateRef: TemplateRef<any>);
394
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridHeaderTemplateDirective, never>;
395
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridHeaderTemplateDirective, "[nlabsGridHeaderTemplate]", never, {}, {}, never, never, true, never>;
396
+ }
397
+
398
+ interface User {
399
+ id: number;
400
+ name: string;
401
+ email: string;
402
+ age: number;
403
+ salary: number;
404
+ department: string;
405
+ city: string;
406
+ country: string;
407
+ phone: string;
408
+ address: string;
409
+ zipCode: string;
410
+ jobTitle: string;
411
+ manager: string;
412
+ active: boolean;
413
+ startDate: Date;
414
+ registeredDate: Date;
415
+ lastLogin: Date;
416
+ notes: string;
417
+ }
418
+ interface Product {
419
+ id: number;
420
+ name: string;
421
+ category: string;
422
+ price: number;
423
+ stock: number;
424
+ description: string;
425
+ }
426
+
427
+ /**
428
+ * Mock data adapter for demo purposes
429
+ * Simulates backend API with mock data
430
+ */
431
+ declare class MockDataAdapter implements IDataAdapter<User> {
432
+ private mockUsers;
433
+ getData(request: GridRequest): Observable<GridDataResult<User>>;
434
+ buildQuery(request: GridRequest): string;
435
+ private processRequest;
436
+ private applyFilter;
437
+ private applySort;
438
+ private generateMockUsers;
439
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MockDataAdapter, never>;
440
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MockDataAdapter>;
441
+ }
442
+
443
+ export { DataGridComponent, GridCaptionCommandTemplateDirective, GridCellTemplateDirective, GridColumnCommandTemplateDirective, GridColumnComponent, GridDataService, GridFooterTemplateDirective, GridHeaderTemplateDirective, MockDataAdapter, ODATA_BASE_URL, ODataAdapter, RestAdapter, ThemeSelectorComponent, ThemeService };
444
+ export type { CurrencyFormatType, FilterMetadata, FilterOperator, FilterType, GridColumn, GridConfig, GridDataResult, GridRequest, GridState, IDataAdapter, PaginationMetadata, Product, RestAdapterConfig, SortMetadata, TextAlignType, Theme, User };