eru-grid 0.0.21 → 0.0.23

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,1512 @@
1
+ import * as eru_grid from 'eru-grid';
2
+ import * as _angular_core from '@angular/core';
3
+ import { OnInit, AfterViewInit, OnDestroy, QueryList, ElementRef, ChangeDetectorRef, EventEmitter, Provider } from '@angular/core';
4
+ import { FixedSizeVirtualScrollStrategy, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
5
+ import { MatDatepicker } from '@angular/material/datepicker';
6
+ import { MatCommonModule } from '@angular/material/core';
7
+
8
+ interface Row {
9
+ entity_id: string;
10
+ entity_data: {
11
+ [key: string]: any;
12
+ };
13
+ [key: string]: any;
14
+ }
15
+ interface RowGroup {
16
+ id: string;
17
+ key: string;
18
+ title: string;
19
+ totalRowCount: number;
20
+ isExpanded?: boolean;
21
+ isLoading?: boolean;
22
+ currentPage?: number;
23
+ hasMoreRows?: boolean;
24
+ currentLoadedRows: number;
25
+ subtotal?: {
26
+ [key: string]: number;
27
+ };
28
+ }
29
+ interface RowGrandTotal {
30
+ [key: string]: number;
31
+ }
32
+ interface GroupItem$1 {
33
+ type: 'header' | 'row' | 'table-header' | 'row-place-holder' | 'ghost-loading';
34
+ group?: RowGroup;
35
+ row?: Row;
36
+ }
37
+ interface ColumnWidthConstraints {
38
+ minWidth?: number;
39
+ maxWidth?: number;
40
+ }
41
+ type GridMode = 'table' | 'pivot';
42
+ interface GridFeatures {
43
+ editable: boolean;
44
+ columnResizable: boolean;
45
+ columnReorderable: boolean;
46
+ cellSelection: boolean;
47
+ rowSelection: boolean;
48
+ exportable: boolean;
49
+ filtering: boolean;
50
+ showColumnLines?: boolean;
51
+ showRowLines?: boolean;
52
+ enableRowSubtotals?: boolean;
53
+ enableColumnSubtotals?: boolean;
54
+ enableColumnGrandTotal?: boolean;
55
+ enableGrandTotal?: boolean;
56
+ subtotalPosition?: 'before' | 'after';
57
+ subtotalPositionColumn?: 'before' | 'after';
58
+ grandTotalPosition?: 'before' | 'after';
59
+ grandTotalPositionColumn?: 'before' | 'after';
60
+ subtotalLabel?: string;
61
+ freezeField?: string;
62
+ freezeHeader?: boolean;
63
+ freezeGrandTotal?: boolean;
64
+ replaceZeroValue?: string;
65
+ gridHeight?: number;
66
+ allowSelection?: boolean;
67
+ actionColumn?: boolean;
68
+ actionColumnPosition?: 'before' | 'after';
69
+ designMode?: boolean;
70
+ }
71
+ interface GridStyles {
72
+ subTotalStyle?: 'bold' | 'italic' | 'highlighted';
73
+ grandTotalStyle?: 'bold' | 'italic' | 'highlighted';
74
+ }
75
+ interface GridTokens {
76
+ [key: string]: string;
77
+ }
78
+ interface GridConfiguration {
79
+ mode: GridMode;
80
+ config: GridFeatures;
81
+ fields: Field[];
82
+ styles?: GridStyles;
83
+ tokens?: GridTokens;
84
+ pivot?: PivotConfiguration;
85
+ data?: any[];
86
+ columnConstraints?: {
87
+ global?: ColumnWidthConstraints;
88
+ byDatatype?: Partial<Record<DataTypes, ColumnWidthConstraints>>;
89
+ };
90
+ }
91
+ interface Field {
92
+ name: string;
93
+ label: string;
94
+ datatype: DataTypes;
95
+ field_size: number;
96
+ grid_index: number;
97
+ required?: boolean;
98
+ mandatory?: boolean;
99
+ minWidth?: number;
100
+ maxWidth?: number;
101
+ symbol?: string;
102
+ options?: any[];
103
+ option_type?: 'STATIC' | 'API' | 'ENTITY_DATA';
104
+ entity_name?: string;
105
+ api_field?: string;
106
+ api_name?: string;
107
+ field_name?: string;
108
+ decimal?: number;
109
+ num_val?: number;
110
+ num_val_check?: 'MAX' | 'MIN';
111
+ seperator?: 'thousands' | 'millions' | 'none';
112
+ isLeaf?: boolean;
113
+ parentPath?: string[];
114
+ children?: Field[];
115
+ level?: number;
116
+ colspan?: number;
117
+ rowspan?: number;
118
+ showSubtotals?: boolean;
119
+ aggregationFunction?: AggregationFunction;
120
+ enableDrilldown?: boolean;
121
+ }
122
+ type DataTypes = 'number' | 'textbox' | 'currency' | 'date' | 'datetime' | 'duration' | 'dropdown_single_select' | 'dropdown_multi_select' | 'location' | 'email' | 'people' | 'checkbox' | 'phone' | 'priority' | 'status' | 'progress' | 'attachment' | 'tags';
123
+ type AggregationFunction = 'sum' | 'count' | 'avg' | 'min' | 'max';
124
+ interface PivotColumnGroupState {
125
+ [groupKey: string]: {
126
+ isExpanded: boolean;
127
+ level: number;
128
+ childGroups?: string[];
129
+ parentGroup?: string;
130
+ };
131
+ }
132
+ interface PivotConfiguration {
133
+ rows: string[];
134
+ cols: string[];
135
+ aggregations: Field[];
136
+ clientSideThreshold?: number;
137
+ }
138
+ interface PivotMetadata {
139
+ totalRows: number;
140
+ totalColumns: number;
141
+ processingTime?: number;
142
+ memoryUsed?: number;
143
+ dataSize: number;
144
+ }
145
+ interface PivotRow {
146
+ [key: string]: any;
147
+ _rowKey: string;
148
+ _sourceCount: number;
149
+ _isSubtotal?: boolean;
150
+ _isGrandTotal?: boolean;
151
+ _subtotalLevel?: number;
152
+ _subtotalLabel?: string;
153
+ }
154
+ interface PivotColumnHeader {
155
+ label: string;
156
+ name: string;
157
+ children?: PivotColumnHeader[];
158
+ leafColumns?: string[];
159
+ level: number;
160
+ colspan: number;
161
+ rowspan: number;
162
+ dataType: DataTypes;
163
+ isSubtotal?: boolean;
164
+ isGrandTotal?: boolean;
165
+ subtotalLevel?: number;
166
+ parentValue?: string;
167
+ isCollapsible?: boolean;
168
+ isExpanded?: boolean;
169
+ groupKey?: string;
170
+ parentGroupKey?: string;
171
+ collapsedValue?: any;
172
+ collapsedDisplayMode?: 'subtotal' | 'aggregated' | 'first-value' | 'count';
173
+ enableDrilldown?: boolean;
174
+ }
175
+ interface PivotHeaderStructure {
176
+ maxDepth: number;
177
+ headerRows: PivotColumnHeader[][];
178
+ leafColumns: Field[];
179
+ }
180
+ interface PivotResult {
181
+ data: PivotRow[];
182
+ columnDefinitions: Field[];
183
+ rowCount: number;
184
+ metadata: PivotMetadata;
185
+ configuration: PivotConfiguration;
186
+ headerStructure?: PivotHeaderStructure;
187
+ columnGroupState?: PivotColumnGroupState;
188
+ }
189
+ interface Drilldown {
190
+ frozenGrandTotalCell: boolean;
191
+ columnName: string;
192
+ rowId: string;
193
+ rowData?: any;
194
+ columnValue: any;
195
+ }
196
+ interface ActionClick {
197
+ rowId: string;
198
+ rowData?: any;
199
+ }
200
+ interface RowDataRequest {
201
+ groupId: string;
202
+ page: number;
203
+ pageSize: number;
204
+ timestamp: number;
205
+ groupTitle?: string;
206
+ groupKey?: string;
207
+ }
208
+ interface RowDataResponse {
209
+ groupId: string;
210
+ rows: Row[];
211
+ hasMore: boolean;
212
+ totalCount?: number;
213
+ }
214
+
215
+ declare class PivotTransformService {
216
+ private columnGroupState;
217
+ /**
218
+ * Main method to transform flat data into pivot table
219
+ */
220
+ transformData(sourceData: any[], configuration: PivotConfiguration, gridConfiguration?: GridConfiguration): PivotResult;
221
+ /**
222
+ * Group data by row dimensions and collect unique column dimension values
223
+ */
224
+ private groupByDimensions;
225
+ /**
226
+ * Sort grouped data hierarchically so parent dimensions appear with their children grouped together
227
+ */
228
+ private sortGroupsHierarchically;
229
+ /**
230
+ * Natural sort that handles numbers properly
231
+ */
232
+ private naturalSort;
233
+ /**
234
+ * Convert string to title case
235
+ */
236
+ private toTitleCase;
237
+ /**
238
+ * Generate unique pivot column values from pre-collected dimension value sets
239
+ */
240
+ private generatePivotColumnsFromSets;
241
+ /**
242
+ * Create pivot rows with aggregated data (PERFORMANCE OPTIMIZED)
243
+ */
244
+ private createPivotRows;
245
+ /**
246
+ * Calculate aggregation for a field (PERFORMANCE OPTIMIZED)
247
+ */
248
+ private calculateAggregationOptimized;
249
+ /**
250
+ * Calculate aggregation for a field (ORIGINAL - kept for compatibility)
251
+ */
252
+ private calculateAggregation;
253
+ /**
254
+ * Generate column definitions for the pivot table
255
+ */
256
+ private generateColumnDefinitions;
257
+ /**
258
+ * Format column label for display
259
+ */
260
+ private formatColumnLabel;
261
+ /**
262
+ * Get appropriate data type for aggregation function
263
+ */
264
+ private getAggregationDataType;
265
+ /**
266
+ * Optimize data for large datasets by processing in chunks
267
+ */
268
+ transformDataAsync(sourceData: any[], configuration: PivotConfiguration, chunkSize?: number): Promise<PivotResult>;
269
+ /**
270
+ * Split array into chunks
271
+ */
272
+ private chunkArray;
273
+ /**
274
+ * Generate nested header structure with collapsible support
275
+ */
276
+ private generateNestedHeaderStructure;
277
+ /**
278
+ * Build nested column headers recursively - generates complete cartesian product structure
279
+ */
280
+ private buildNestedHeaders;
281
+ /**
282
+ * Calculate colspan for a header at given level - GENERIC VERSION
283
+ */
284
+ private calculateColspan;
285
+ /**
286
+ * Generate leaf columns for the actual data with collapsible support
287
+ */
288
+ private generateLeafColumnsWithCollapsible;
289
+ /**
290
+ * Get collapsed levels for a combination path
291
+ */
292
+ private getCollapsedLevels;
293
+ /**
294
+ * Generate leaf columns for the actual data
295
+ */
296
+ private generateLeafColumns;
297
+ /**
298
+ * Generate all combinations of dimension values
299
+ */
300
+ private generateCombinations;
301
+ /**
302
+ * Generate flat header structure for single dimension
303
+ */
304
+ private generateFlatHeaderStructure;
305
+ /**
306
+ * Add subtotals to pivot data based on configuration
307
+ */
308
+ private addSubtotals;
309
+ /**
310
+ * Add subtotal rows for row dimensions
311
+ */
312
+ private addRowSubtotals;
313
+ /**
314
+ * Add column subtotals as new columns
315
+ */
316
+ private addColumnSubtotals;
317
+ /**
318
+ * Generate all possible subtotal combinations for hierarchical column dimensions
319
+ */
320
+ private generateSubtotalCombinations;
321
+ /**
322
+ * Generate all possible dimension paths at a specific level
323
+ */
324
+ private generateCombinationsAtLevel;
325
+ /**
326
+ * Generate columns with properly positioned subtotal columns
327
+ */
328
+ private generateColumnsWithInterleavedSubtotals;
329
+ /**
330
+ * Group combinations by dimension levels for subtotal insertion
331
+ */
332
+ private groupCombinationsByDimensions;
333
+ /**
334
+ * Add interleaved subtotals within column groups
335
+ */
336
+ private addInterleavedSubtotals;
337
+ /**
338
+ * Group pivot columns by dimension prefixes for subtotal insertion
339
+ */
340
+ private groupPivotColumnsByDimensions;
341
+ /**
342
+ * Create a subtotal column for a specific dimension prefix
343
+ */
344
+ private createSubtotalColumn;
345
+ /**
346
+ * Add grand total row
347
+ */
348
+ private addGrandTotalRow;
349
+ /**
350
+ * Add column grand totals as new columns
351
+ */
352
+ private addColumnGrandTotals;
353
+ /**
354
+ * Calculate grand total values for all rows (ignores showSubtotals flag)
355
+ */
356
+ private calculateGrandTotalRow;
357
+ /**
358
+ * Calculate subtotal values for a group of rows
359
+ */
360
+ private calculateSubtotalRow;
361
+ /**
362
+ * Apply aggregation function to array of values
363
+ */
364
+ private applyAggregationFunction;
365
+ /**
366
+ * Group rows by dimension values
367
+ */
368
+ private groupRowsByDimensions;
369
+ /**
370
+ * Initialize column group state based on configuration
371
+ */
372
+ /**
373
+ * Generate unique key for column group
374
+ */
375
+ private generateColumnGroupKey;
376
+ /**
377
+ * Toggle collapse/expand state of a column group
378
+ */
379
+ toggleColumnGroup(groupKey: string, configuration: PivotConfiguration): void;
380
+ /**
381
+ * Check if a column group is expanded
382
+ */
383
+ isColumnGroupExpanded(groupKey: string): boolean;
384
+ /**
385
+ * Get collapsed value for a column group
386
+ */
387
+ /**
388
+ * Calculate subtotal for a column group
389
+ */
390
+ private calculateGroupSubtotal;
391
+ /**
392
+ * Calculate aggregated value for a column group
393
+ */
394
+ private calculateGroupAggregation;
395
+ /**
396
+ * Get column keys that belong to a specific group
397
+ */
398
+ private getGroupColumnKeys;
399
+ /**
400
+ * Get first child value for a column group
401
+ */
402
+ private getFirstChildValue;
403
+ /**
404
+ * Get count of non-null values in a column group
405
+ */
406
+ private getGroupValueCount;
407
+ /**
408
+ * Get current column group state
409
+ */
410
+ getColumnGroupState(): PivotColumnGroupState;
411
+ /**
412
+ * Set column group state (for restoring state)
413
+ */
414
+ setColumnGroupState(state: PivotColumnGroupState): void;
415
+ /**
416
+ * Calculate rowspan information for pivot rows to merge cells with same values
417
+ * in earlier dimensions
418
+ */
419
+ calculateRowspanInfo(pivotRows: PivotRow[], rowDimensions: string[]): Map<string, {
420
+ rowspan: number;
421
+ skip: boolean;
422
+ parentSpan: number;
423
+ }>;
424
+ /**
425
+ * Insert column subtotal headers at the correct positions within each priority group
426
+ */
427
+ private insertColumnSubtotalHeaders;
428
+ /**
429
+ * Add subtotal headers at their correct row levels
430
+ */
431
+ private addSubtotalHeadersAtCorrectLevels;
432
+ /**
433
+ * Rearrange headers in each row to match the leaf column order
434
+ */
435
+ private rearrangeHeadersToMatchLeafColumns;
436
+ /**
437
+ * Reorder headers by hierarchy to match leaf column interleaved positioning - GENERIC VERSION
438
+ */
439
+ private reorderHeadersByHierarchy;
440
+ /**
441
+ * Extract unique values for a specific column dimension from source data
442
+ */
443
+ private extractDimensionValues;
444
+ /**
445
+ * Extract all dimension values arrays from headers or source data
446
+ */
447
+ private extractAllDimensionValues;
448
+ /**
449
+ * Group rating headers by their priority parent - GENERIC VERSION
450
+ */
451
+ private groupRatingHeadersByPriority;
452
+ /**
453
+ * Group subtotals by their priority
454
+ */
455
+ private groupSubtotalsByPriority;
456
+ /**
457
+ * Group status headers by their rating parent (combination) - GENERIC VERSION
458
+ */
459
+ private groupStatusHeadersByRating;
460
+ /**
461
+ * Group subtotals by their rating (Priority+Rating combination)
462
+ */
463
+ private groupSubtotalsByRating;
464
+ /**
465
+ * Add parent group keys to headers based on their position and row level - GENERIC VERSION
466
+ */
467
+ private addParentGroupKeysToHeaders;
468
+ /**
469
+ * Group headers by their parentGroupKey
470
+ */
471
+ private groupHeadersByParentKey;
472
+ /**
473
+ * Group subtotals by their parentGroupKey
474
+ */
475
+ private groupSubtotalsByParentKey;
476
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PivotTransformService, never>;
477
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PivotTransformService>;
478
+ }
479
+
480
+ declare class EruGridStore {
481
+ private readonly gridConfigService;
482
+ private readonly pivotTransformService;
483
+ private readonly columnConstraintsService;
484
+ private readonly _columns;
485
+ private readonly _groups;
486
+ private readonly _rows;
487
+ private _groupRows;
488
+ private readonly _selectedRowIds;
489
+ private readonly _rowGrandTotal;
490
+ private readonly _dynamicDataRequest;
491
+ private readonly _dynamicData;
492
+ private readonly _configuration;
493
+ private readonly _isLoading;
494
+ private readonly _error;
495
+ private readonly _activeCell;
496
+ private readonly _pivotConfiguration;
497
+ private readonly _pivotResult;
498
+ private readonly _drilldown;
499
+ private readonly _actionClick;
500
+ private readonly _dataRequest;
501
+ private readonly _requestQueue;
502
+ readonly columns: _angular_core.Signal<Field[]>;
503
+ readonly groups: _angular_core.Signal<RowGroup[]>;
504
+ readonly rows: _angular_core.Signal<Row[]>;
505
+ readonly groupRows: _angular_core.Signal<Map<string, Row[]>>;
506
+ readonly selectedRowIds: _angular_core.Signal<Set<string>>;
507
+ readonly configuration: _angular_core.Signal<GridConfiguration>;
508
+ readonly isLoading: _angular_core.Signal<boolean>;
509
+ readonly requestQueue: _angular_core.Signal<RowDataRequest[]>;
510
+ readonly error: _angular_core.Signal<string | null>;
511
+ readonly activeCell: _angular_core.Signal<any>;
512
+ readonly rowGrandTotal: _angular_core.Signal<RowGrandTotal | null>;
513
+ readonly pivotConfiguration: _angular_core.Signal<PivotConfiguration | null>;
514
+ readonly pivotResult: _angular_core.Signal<PivotResult | null>;
515
+ readonly drilldown: _angular_core.Signal<Drilldown | null>;
516
+ readonly actionClick: _angular_core.Signal<ActionClick | null>;
517
+ readonly dataRequest: _angular_core.Signal<RowDataRequest | null>;
518
+ readonly dynamicDataRequest: _angular_core.Signal<string[] | null>;
519
+ readonly dynamicData: _angular_core.Signal<Map<string, any> | null>;
520
+ readonly selectedRows: _angular_core.Signal<Row[]>;
521
+ readonly totalSelectedCount: _angular_core.Signal<number>;
522
+ readonly hasSelection: _angular_core.Signal<boolean>;
523
+ readonly expandedGroups: _angular_core.Signal<RowGroup[]>;
524
+ readonly visibleColumns: _angular_core.Signal<Field[]>;
525
+ readonly currentMode: _angular_core.Signal<GridMode>;
526
+ readonly isPivotMode: _angular_core.Signal<boolean>;
527
+ readonly isEditingEnabled: _angular_core.Signal<boolean>;
528
+ readonly displayColumns: _angular_core.Signal<Field[]>;
529
+ readonly displayData: _angular_core.Signal<PivotRow[] | Row[]>;
530
+ readonly pivotGrandTotalData: _angular_core.Signal<PivotRow[]>;
531
+ readonly pivotDisplayData: _angular_core.Signal<PivotRow[]>;
532
+ readonly tableDisplayData: _angular_core.Signal<Row[]>;
533
+ setColumns(columns: Field[]): void;
534
+ /**
535
+ * Detect which columns are used for grouping by analyzing row data
536
+ * A column is considered grouped if all rows within each group have the same value
537
+ */
538
+ private detectGroupedColumns;
539
+ /**
540
+ * Get column value from a row
541
+ */
542
+ private getRowColumnValue;
543
+ /**
544
+ * Compare two values for equality, handling null/undefined
545
+ */
546
+ private compareValues;
547
+ getConfiguration(): GridConfiguration;
548
+ reorderColumns(fromIndex: number, toIndex: number): void;
549
+ updateColumnRequired(columnName: string, required: boolean): void;
550
+ updateColumnWidth(columnName: string, field_size: number): void;
551
+ setGroups(groups: RowGroup[]): void;
552
+ toggleGroupExpansion(groupId: string): void;
553
+ updateGroupLoadingState(groupId: string, isLoading: boolean): void;
554
+ updateGroupAfterLoading(groupId: string, loadedCount: number, fullyExhausted?: boolean): void;
555
+ setRows(rows: Row[]): void;
556
+ addRows(newRows: Row[]): void;
557
+ updateRow(rowId: string, updates: Partial<Row>): void;
558
+ selectRow(rowId: string): void;
559
+ deselectRow(rowId: string): void;
560
+ toggleRowSelection(rowId: string): void;
561
+ selectAllRowsInGroup(groupId: string): void;
562
+ deselectAllRowsInGroup(groupId: string): void;
563
+ clearSelection(): void;
564
+ setConfiguration(configuration: GridConfiguration): void;
565
+ /**
566
+ * Validates and enforces rules for grid configuration
567
+ */
568
+ validateAndEnforceConfiguration(config: GridConfiguration): GridConfiguration;
569
+ /**
570
+ * Update specific configuration properties
571
+ * This method ensures proper signal updates for nested properties
572
+ */
573
+ updateConfigurationProperties(updates: Partial<GridConfiguration['config']>): void;
574
+ /**
575
+ * Update grid lines configuration
576
+ * This method specifically handles grid lines updates
577
+ */
578
+ updateGridLines(showColumnLines?: boolean, showRowLines?: boolean): void;
579
+ gridConfiguration(): GridConfiguration;
580
+ setActiveCell(activeCell: any): void;
581
+ setLoading(isLoading: boolean): void;
582
+ setError(error: string | null): void;
583
+ isRowSelected(rowId: string): boolean;
584
+ isGroupSelected(groupId: string): boolean;
585
+ getRowsForGroup(groupId: string): Row[];
586
+ setGridMode(mode: GridMode): void;
587
+ updateGridConfiguration(updates: Partial<GridConfiguration>): void;
588
+ setPivotConfiguration(pivotConfig: PivotConfiguration): void;
589
+ setSourceData(data: any[]): void;
590
+ private transformToPivot;
591
+ clearPivot(): void;
592
+ forceRefreshPivot(): void;
593
+ validatePivotConfiguration(config: PivotConfiguration): {
594
+ isValid: boolean;
595
+ errors: string[];
596
+ };
597
+ isFeatureEnabled(feature: keyof Omit<GridFeatures, 'subtotalPosition' | 'subtotalLabel' | 'freezeField'>): boolean;
598
+ /**
599
+ * Get access to the PivotTransformService for external manipulation
600
+ */
601
+ getPivotTransformService(): PivotTransformService;
602
+ /**
603
+ * Regenerate pivot data (useful after column group state changes)
604
+ */
605
+ regeneratePivotData(): void;
606
+ /**
607
+ * Update pivot configuration and regenerate if needed
608
+ */
609
+ updatePivotConfiguration(updates: Partial<PivotConfiguration>): void;
610
+ /**
611
+ * Check if freeze is enabled and valid for current mode
612
+ */
613
+ isFreezeEnabled(): boolean;
614
+ /**
615
+ * Validate freeze field for pivot mode
616
+ */
617
+ private isValidPivotFreezeField;
618
+ /**
619
+ * Get the freeze field name
620
+ */
621
+ getFreezeField(): string | null;
622
+ /**
623
+ * Check if freeze header is enabled
624
+ */
625
+ isFreezeHeaderEnabled(): boolean;
626
+ /**
627
+ * Check if freeze grand total is enabled
628
+ */
629
+ isFreezeGrandTotalEnabled(): boolean;
630
+ setDrilldown(drilldown: Drilldown, columnValues: string): void;
631
+ clearPivotDrilldown(): void;
632
+ setActionClick(actionClick: ActionClick): void;
633
+ clearActionClick(): void;
634
+ /**
635
+ * Emit a data request signal (called by grid component)
636
+ */
637
+ setDataRequest(request: RowDataRequest): void;
638
+ /**
639
+ * Add request to queue (for handling multiple simultaneous requests)
640
+ */
641
+ addToRequestQueue(request: RowDataRequest): void;
642
+ /**
643
+ * Remove request from queue (called by consumer after handling)
644
+ */
645
+ removeFromRequestQueue(requestId: string): void;
646
+ /**
647
+ * Clear all requests from queue
648
+ */
649
+ clearRequestQueue(): void;
650
+ /**
651
+ * Clear the data request signal (called by consumer after handling)
652
+ */
653
+ clearDataRequest(): void;
654
+ /**
655
+ * Mark a group as loading (called by grid component before requesting)
656
+ */
657
+ startGroupLoading(groupId: string): void;
658
+ /**
659
+ * Complete loading for a group (called by consumer after data received)
660
+ */
661
+ completeGroupLoading(groupId: string): void;
662
+ /**
663
+ * Add rows for a specific group (called by consumer with API data)
664
+ */
665
+ addRowsForGroup(groupId: string, rows: Row[], hasMore: boolean): void;
666
+ /**
667
+ * Handle error for data request (called by consumer when API fails)
668
+ */
669
+ handleDataRequestError(groupId: string, error: any): void;
670
+ /**
671
+ * Set the row grand total for table mode
672
+ */
673
+ setRowGrandTotal(grandTotal: RowGrandTotal | null): void;
674
+ /**
675
+ * Get the row grand total for table mode
676
+ */
677
+ getRowGrandTotal(): RowGrandTotal | null;
678
+ /**
679
+ * Set the dynamic data request
680
+ */
681
+ setDynamicDataRequest(request: string): void;
682
+ /**
683
+ * Get the dynamic data request
684
+ */
685
+ getDynamicDataRequest(): string[] | null;
686
+ removeDynamicDataRequest(key: string): void;
687
+ /**
688
+ * Set the dynamic data
689
+ */
690
+ setDynamicData(key: string, data: any): void;
691
+ /**
692
+ * Get the dynamic data for a specific API key
693
+ */
694
+ getDynamicData(key: string): any | null;
695
+ removeDynamicData(key: string): void;
696
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EruGridStore, never>;
697
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EruGridStore>;
698
+ }
699
+
700
+ type Theme = 'light' | 'dark' | 'high-contrast' | 'auto';
701
+ declare class ThemeService {
702
+ private document;
703
+ private readonly storageKey;
704
+ private readonly _currentTheme;
705
+ private readonly _systemTheme;
706
+ readonly currentTheme: _angular_core.Signal<Theme>;
707
+ readonly systemTheme: _angular_core.Signal<"light" | "dark">;
708
+ readonly effectiveTheme: _angular_core.WritableSignal<"light" | "dark" | "high-contrast">;
709
+ constructor();
710
+ private initializeTheme;
711
+ private setupSystemThemeListener;
712
+ private applyTheme;
713
+ private updateCSSVariables;
714
+ setTheme(theme: Theme): void;
715
+ toggleTheme(): void;
716
+ getAvailableThemes(): Array<{
717
+ value: Theme;
718
+ label: string;
719
+ }>;
720
+ isLightTheme(): boolean;
721
+ isDarkTheme(): boolean;
722
+ isHighContrastTheme(): boolean;
723
+ isAutoTheme(): boolean;
724
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
725
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
726
+ }
727
+
728
+ declare class ColumnConstraintsService {
729
+ private readonly DATATYPE_DEFAULTS;
730
+ /**
731
+ * Get effective constraints for a column, considering all override levels
732
+ */
733
+ getColumnConstraints(column: Field | undefined, gridConfig?: GridConfiguration): ColumnWidthConstraints;
734
+ /**
735
+ * Validate and constrain a width value for a column
736
+ */
737
+ constrainWidth(width: number, column: Field | undefined, gridConfig?: GridConfiguration): number;
738
+ /**
739
+ * Get all datatype defaults (for documentation/debugging)
740
+ */
741
+ getDatatypeDefaults(): Record<DataTypes, ColumnWidthConstraints>;
742
+ /**
743
+ * Get default field_size for a column following fallback hierarchy
744
+ * Priority: column.field_size > datatype config minWidth > global config minWidth > datatype default minWidth > 150
745
+ */
746
+ getDefaultFieldSize(column: Field | undefined, gridConfig?: GridConfiguration): number;
747
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnConstraintsService, never>;
748
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ColumnConstraintsService>;
749
+ }
750
+
751
+ declare class EruGridService {
752
+ private eruGridStore;
753
+ private themeService;
754
+ private columnConstraintsService;
755
+ constructor(eruGridStore: EruGridStore, themeService: ThemeService, columnConstraintsService: ColumnConstraintsService);
756
+ set_table_configuration(data: GridConfiguration): void;
757
+ get columns(): _angular_core.Signal<Field[]>;
758
+ get groups(): _angular_core.Signal<RowGroup[]>;
759
+ get rows(): _angular_core.Signal<eru_grid.Row[]>;
760
+ get selectedRowIds(): _angular_core.Signal<Set<string>>;
761
+ get hasSelection(): _angular_core.Signal<boolean>;
762
+ get theme(): ThemeService;
763
+ getColumnConstraints(column: Field | undefined): eru_grid.ColumnWidthConstraints;
764
+ constrainColumnWidth(width: number, column: Field | undefined): number;
765
+ getDatatypeDefaults(): Record<DataTypes, eru_grid.ColumnWidthConstraints>;
766
+ /**
767
+ * Configure the grid for pivot mode with pivot configuration
768
+ */
769
+ set_pivot_configuration(pivotConfig: PivotConfiguration, sourceData?: any[]): void;
770
+ /**
771
+ * Switch grid to table mode or pivot mode
772
+ */
773
+ set_grid_mode(mode: GridMode): void;
774
+ /**
775
+ * Update grid configuration with new settings
776
+ */
777
+ update_grid_configuration(updates: Partial<GridConfiguration>): void;
778
+ /**
779
+ * Enable or disable specific grid features
780
+ */
781
+ set_grid_features(features: Partial<GridFeatures>): void;
782
+ /**
783
+ * Clear pivot configuration and return to table mode
784
+ */
785
+ clear_pivot(): void;
786
+ /**
787
+ * Validate pivot configuration
788
+ */
789
+ validate_pivot_configuration(config: PivotConfiguration): {
790
+ isValid: boolean;
791
+ errors: string[];
792
+ };
793
+ get currentMode(): _angular_core.Signal<GridMode>;
794
+ get isPivotMode(): _angular_core.Signal<boolean>;
795
+ get pivotConfiguration(): _angular_core.Signal<PivotConfiguration | null>;
796
+ get pivotResult(): _angular_core.Signal<eru_grid.PivotResult | null>;
797
+ get displayColumns(): _angular_core.Signal<Field[]>;
798
+ get displayData(): _angular_core.Signal<eru_grid.PivotRow[] | eru_grid.Row[]>;
799
+ get isEditingEnabled(): _angular_core.Signal<boolean>;
800
+ get configuration(): _angular_core.Signal<GridConfiguration>;
801
+ get isLoading(): _angular_core.Signal<boolean>;
802
+ get error(): _angular_core.Signal<string | null>;
803
+ /**
804
+ * Check if a specific feature is enabled
805
+ */
806
+ isFeatureEnabled(feature: keyof Omit<GridFeatures, 'subtotalPosition' | 'subtotalLabel' | 'freezeField'>): boolean;
807
+ /**
808
+ * Get direct access to grid store (for debugging purposes)
809
+ */
810
+ getGridStore(): EruGridStore;
811
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EruGridService, never>;
812
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EruGridService>;
813
+ }
814
+
815
+ /**
816
+ * Custom virtual scroll strategy optimized for catching every scroll event
817
+ * Uses smaller buffer sizes (minBufferPx: 50, maxBufferPx: 150) to ensure
818
+ * more frequent scroll detection, especially important when you have 4 grids
819
+ * and need to catch every scroll event.
820
+ *
821
+ * The itemSize is set dynamically via the viewport's [itemSize] input binding
822
+ * which uses averageGroupHeight(). The strategy's itemSize parameter here is
823
+ * just a fallback default.
824
+ */
825
+ declare class CustomVirtualScrollStrategy extends FixedSizeVirtualScrollStrategy {
826
+ constructor();
827
+ }
828
+ declare class EruGridComponent implements OnInit, AfterViewInit, OnDestroy {
829
+ private changeDetectorRef;
830
+ gridService: EruGridService;
831
+ gridStore: EruGridStore;
832
+ private elementRef;
833
+ private resizeObserver;
834
+ isColumnReordering: _angular_core.WritableSignal<boolean>;
835
+ firstTr: number | null;
836
+ allViewports?: QueryList<CdkVirtualScrollViewport>;
837
+ rowContainer?: ElementRef;
838
+ headerScroller: ElementRef<HTMLDivElement>;
839
+ headerScrollers?: QueryList<ElementRef<HTMLDivElement>>;
840
+ gtScroller: ElementRef<HTMLDivElement>;
841
+ gridConfig: GridConfiguration | undefined;
842
+ initialMinHeight: number;
843
+ initialTotalWidth: number;
844
+ viewport: CdkVirtualScrollViewport;
845
+ groupsViewport: CdkVirtualScrollViewport;
846
+ previousOffset: _angular_core.WritableSignal<number>;
847
+ groups: _angular_core.Signal<RowGroup[]>;
848
+ ghostRows: _angular_core.WritableSignal<number>;
849
+ groupedRows: _angular_core.Signal<GroupItem[]>;
850
+ columns: _angular_core.Signal<Field[]>;
851
+ selectedRowIds: _angular_core.Signal<Set<string>>;
852
+ totalRowCount: _angular_core.Signal<number>;
853
+ averageGroupHeight: _angular_core.Signal<number>;
854
+ currentPivotScrollIndex: _angular_core.WritableSignal<number>;
855
+ firstDataRowIndex: _angular_core.WritableSignal<number>;
856
+ private ngZone;
857
+ groupContentHeightsMap: _angular_core.Signal<Map<string, number>>;
858
+ private _virtualRowspanCache;
859
+ mode: _angular_core.Signal<eru_grid.GridMode>;
860
+ isResizable: _angular_core.Signal<boolean>;
861
+ isEditable: _angular_core.Signal<boolean>;
862
+ gridHeight: _angular_core.Signal<number>;
863
+ showColumnLines: _angular_core.Signal<boolean>;
864
+ showRowLines: _angular_core.Signal<boolean>;
865
+ maxDepth: _angular_core.Signal<number>;
866
+ subTotalStyle: _angular_core.Signal<"bold" | "italic" | "highlighted">;
867
+ grandTotalStyle: _angular_core.Signal<"bold" | "italic" | "highlighted">;
868
+ freezeHeader: _angular_core.Signal<boolean>;
869
+ freezeGrandTotal: _angular_core.Signal<boolean>;
870
+ grandTotalPosition: _angular_core.Signal<"before" | "after">;
871
+ grandTotalPositionColumn: _angular_core.Signal<"before" | "after">;
872
+ enableColumnGrandTotal: _angular_core.Signal<boolean>;
873
+ enableColumnSubtotals: _angular_core.Signal<boolean>;
874
+ subtotalPositionColumn: _angular_core.Signal<"before" | "after">;
875
+ subtotalLabel: _angular_core.Signal<string>;
876
+ /**
877
+ * Check if a group has subtotal data
878
+ * @param group The group to check
879
+ * @returns true if the group has subtotal data
880
+ */
881
+ hasSubtotalData(group: RowGroup): boolean;
882
+ /**
883
+ * Get subtotal value for a column in a group
884
+ * @param group The group containing the subtotal
885
+ * @param columnName The column name to get the subtotal for
886
+ * @returns The subtotal value or null if not available
887
+ */
888
+ getSubtotalValue(group: RowGroup, columnName: string): number | null;
889
+ /**
890
+ * Check if grand total data is available (computed signal for reactivity)
891
+ */
892
+ hasGrandTotalData: _angular_core.Signal<boolean>;
893
+ /**
894
+ * Get grand total value for a column
895
+ * @param columnName The column name to get the grand total for
896
+ * @returns The grand total value or null if not available
897
+ */
898
+ getGrandTotalValue(columnName: string): number | null;
899
+ /**
900
+ * Check if a row is the first visible row in the pivot viewport
901
+ * @param rowIndex The index of the row in the virtual scroll
902
+ * @returns true if this is the first visible row
903
+ */
904
+ isFirstVisiblePivotRow(rowIndex: number): boolean;
905
+ /**
906
+ * Handle scroll events for pivot mode
907
+ * @param scrollIndex The current scroll index
908
+ */
909
+ onPivotScroll(scrollIndex: number): void;
910
+ getTotalTableWidth(): number;
911
+ getMinHeightPx(): number;
912
+ adjustScrollWidth(): boolean;
913
+ /**
914
+ * Get the rendered range (what's in the DOM including buffer)
915
+ * @returns Object with start, end, and count of rendered items
916
+ */
917
+ private readonly ROWS_PER_PAGE;
918
+ private readonly SCROLL_THRESHOLD;
919
+ private lastLoadedGroupIds;
920
+ private requestedGroupIds;
921
+ private columnsInitialized;
922
+ /**
923
+ * Get content height for a specific group from the computed signal
924
+ * This is efficient as it uses the cached computed signal instead of recalculating
925
+ */
926
+ getGroupContentHeight(groupId: string): number;
927
+ /**
928
+ * Calculate total height of a group including header and content
929
+ * This is used for the outer groups virtual scroll viewport
930
+ */
931
+ protected getTotalGroupHeight(group: RowGroup): number;
932
+ /**
933
+ * Calculate average group height for the outer virtual scroll viewport itemSize
934
+ * Uses getMinHeightPx() to ensure proper height calculation
935
+ */
936
+ constructor(changeDetectorRef: ChangeDetectorRef);
937
+ applyTokens(): void;
938
+ ngOnInit(): void;
939
+ ngAfterViewInit(): void;
940
+ ngOnDestroy(): void;
941
+ set_table_group(data: RowGroup[]): void;
942
+ getInitialMinHeightPx(): number;
943
+ getInitialTotalWidth(): number;
944
+ applyCdkWidth(): boolean;
945
+ private createGroupedRows;
946
+ initializeGroups(): void;
947
+ private fetchInitialRows;
948
+ /**
949
+ * Fetch data for currently visible groups that haven't been requested yet
950
+ * This is called on initial load and when groups become visible during scrolling
951
+ */
952
+ private fetchDataForVisibleGroups;
953
+ private updateViewportSize;
954
+ addRowsForGroup(groupId: string, rows: Row[], hasMore: boolean): void;
955
+ onScroll(scrollIndex: number, group: RowGroup): void;
956
+ /**
957
+ * Get viewport by group ID using the data-group-id attribute
958
+ */
959
+ private getViewportByGroupId;
960
+ protected getVisibleGroups(): RowGroup[];
961
+ private getGroupItemAtIndex;
962
+ private checkAndLoadMoreRows;
963
+ private intelligentGroupLoading;
964
+ /**
965
+ * Request rows for a specific group via signal
966
+ */
967
+ private requestRowsForGroup;
968
+ shouldShowRequiredToggleRow(): boolean;
969
+ onColumnRequiredChange(columnName: string, required: boolean): void;
970
+ trackByColumnFn(index: number, column: Field): string;
971
+ trackByGroupItemFn(index: number, groupItem: GroupItem): string;
972
+ trackByPivotRowFn(index: number, pivotRow: PivotRow): string;
973
+ trackByRowFn(index: number, row: any): string;
974
+ trackByGroupFn(index: number, group: RowGroup): string;
975
+ getRowsForGroup(groupId: string): Row[];
976
+ getRowsForGroupSignal(groupId: string): _angular_core.Signal<Row[]>;
977
+ trackByHeaderFn(index: number, header: any): string;
978
+ hasNestedHeaders(): boolean;
979
+ getHeaderRows(): any[][];
980
+ getLeafColumns(): Field[];
981
+ isRowDimensionHeader(header: any): boolean;
982
+ /**
983
+ * Get the Field corresponding to a PivotColumnHeader
984
+ * For nested headers, finds the first matching leaf column
985
+ */
986
+ getFieldForPivotHeader(header: any): Field | undefined;
987
+ getPivotGridColumns(): string;
988
+ private initializeColumnWidths;
989
+ toggleRowSelection(event: Event, row: any): void;
990
+ toggleGroupSelection(event: Event, groupId: string): void;
991
+ onActionClick(event: Event, row: any): void;
992
+ /**
993
+ * Check if action column is enabled
994
+ * @returns true if actionColumn is enabled, false otherwise (default: false)
995
+ */
996
+ isActionColumnEnabled: _angular_core.Signal<boolean>;
997
+ /**
998
+ * Get action column position
999
+ * @returns 'before' | 'after' (default: 'after')
1000
+ */
1001
+ getActionColumnPosition: _angular_core.Signal<"before" | "after">;
1002
+ /**
1003
+ * Check if action column should be shown at a specific position
1004
+ * @param position The position to check ('before' | 'after')
1005
+ * @returns true if action column is enabled and matches the position
1006
+ */
1007
+ shouldShowActionColumn(position: 'before' | 'after'): boolean;
1008
+ toggleAllGroups(event: Event): void;
1009
+ isRowSelected(rowId?: string): boolean;
1010
+ isGroupSelected(groupId: string): boolean;
1011
+ isAllGroupsSelected(): boolean;
1012
+ getSelectedRows(): any[];
1013
+ toggleGroupExpansion(groupId: string): void;
1014
+ /**
1015
+ * Toggle collapse/expand state of a column group
1016
+ */
1017
+ toggleColumnGroup(groupKey: string): void;
1018
+ /**
1019
+ * Check if a column group is expanded
1020
+ */
1021
+ isColumnGroupExpanded(groupKey: string): boolean;
1022
+ /**
1023
+ * Get rowspan information for pivot table cells
1024
+ */
1025
+ private _rowspanInfo;
1026
+ /**
1027
+ * Debug counter for sticky column debugging
1028
+ */
1029
+ private _stickyDebugCount;
1030
+ getRowspanInfo(): Map<string, {
1031
+ rowspan: number;
1032
+ skip: boolean;
1033
+ parentSpan: number;
1034
+ }>;
1035
+ /**
1036
+ * Get the effective rowspan for a cell in virtual scrolling context
1037
+ * This method ensures proper rowspan continuity when scrolling
1038
+ */
1039
+ getEffectiveRowspan(visibleRowIndex: number, columnName: string): number | null;
1040
+ /**
1041
+ * Check if a cell should be skipped (hidden due to rowspan) - ENHANCED FOR VIRTUAL SCROLLING
1042
+ */
1043
+ shouldSkipCell(rowIndex: number, columnName: string): boolean;
1044
+ /**
1045
+ * Get the effective cell value, considering virtual parents for virtual scrolling
1046
+ */
1047
+ getEffectiveCellValue(index: number, columnName: string, pivotRow: any): any;
1048
+ /**
1049
+ * Get rowspan value for a specific cell - VIRTUAL SCROLLING COMPATIBLE
1050
+ * This is a compatibility wrapper around getEffectiveRowspan
1051
+ */
1052
+ /**
1053
+ * Get columns that should be frozen on the left (all row dimensions up to and including freezeField)
1054
+ */
1055
+ /**
1056
+ * Get columns that should be scrollable on the right (all except frozen fields)
1057
+ */
1058
+ /**
1059
+ * Get headers that should be frozen (all row dimension headers up to and including freezeField)
1060
+ */
1061
+ /**
1062
+ * Get headers that should be scrollable (all except frozen fields)
1063
+ */
1064
+ /**
1065
+ * Check if a column should be sticky (frozen on the left)
1066
+ */
1067
+ isStickyColumn(columnName: string, colIndex: number): boolean;
1068
+ /**
1069
+ * Get the left position for sticky columns (CSS left value)
1070
+ */
1071
+ getStickyColumnLeft(columnName: string, colIndex: number): number;
1072
+ /**
1073
+ * Check if a column is a row dimension column
1074
+ */
1075
+ isRowDimensionColumn(columnName: string): boolean;
1076
+ /**
1077
+ * Handle body scroll to synchronize header and grand total horizontal scroll
1078
+ */
1079
+ /**
1080
+ * Handle scroll events on the groups viewport
1081
+ * This detects when new groups become visible and fetches their data
1082
+ * Can be called with either Event (from scroll event) or number (from scrolledIndexChange)
1083
+ */
1084
+ onGroupsViewportScroll(event: Event | number): void;
1085
+ private groupsScrollTimeout;
1086
+ onTableBodyScroll(event: Event): void;
1087
+ onBodyScroll(event: Event): void;
1088
+ /**
1089
+ * Handle header scroll to synchronize body horizontal scroll
1090
+ */
1091
+ onHeaderScroll(event: Event): void;
1092
+ toggleGroupCollapse(groupId: string): void;
1093
+ /**
1094
+ * Manually trigger scrollbar compensation recalculation (for testing)
1095
+ */
1096
+ recalculateScrollbarCompensation(): void;
1097
+ /**
1098
+ * Adjust header padding to compensate for body table scrollbar width
1099
+ * This ensures perfect column alignment between header and body tables
1100
+ */
1101
+ private adjustHeaderScrollbarCompensation;
1102
+ groupSeperatorColSpan(): number;
1103
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EruGridComponent, never>;
1104
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EruGridComponent, "eru-grid", never, { "gridConfig": { "alias": "gridConfig"; "required": false; }; }, {}, never, never, true, never>;
1105
+ }
1106
+ interface GroupItem {
1107
+ type: 'header' | 'row' | 'table-header' | 'row-place-holder' | 'ghost-loading';
1108
+ group?: RowGroup;
1109
+ row?: Row;
1110
+ }
1111
+
1112
+ declare class ThemeToggleComponent {
1113
+ private themeService;
1114
+ availableThemes: {
1115
+ value: Theme;
1116
+ label: string;
1117
+ }[];
1118
+ getCurrentThemeLabel(): string;
1119
+ getCurrentThemeIcon(): string;
1120
+ getThemeIcon(theme: Theme): string;
1121
+ isActiveTheme(theme: Theme): boolean;
1122
+ setTheme(theme: Theme): void;
1123
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeToggleComponent, never>;
1124
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeToggleComponent, "eru-theme-toggle", never, {}, {}, never, never, true, never>;
1125
+ }
1126
+
1127
+ declare class HelloWorldComponent {
1128
+ constructor();
1129
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HelloWorldComponent, never>;
1130
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HelloWorldComponent, "eru-hello-world", never, {}, {}, never, never, true, never>;
1131
+ }
1132
+
1133
+ interface CurrencyValidationResult {
1134
+ isValid: boolean;
1135
+ error?: string;
1136
+ }
1137
+ declare class CurrencyComponent {
1138
+ private el;
1139
+ value: _angular_core.InputSignal<string | number | null>;
1140
+ config: _angular_core.InputSignal<Field | null>;
1141
+ isEditable: _angular_core.InputSignal<boolean>;
1142
+ isActive: _angular_core.InputSignal<boolean>;
1143
+ isDrillable: _angular_core.InputSignal<boolean>;
1144
+ replaceZeroValue: _angular_core.InputSignal<string | undefined>;
1145
+ placeholder: _angular_core.InputSignal<string>;
1146
+ valueChange: EventEmitter<string | number | null>;
1147
+ blur: EventEmitter<string | number | null>;
1148
+ focus: EventEmitter<void>;
1149
+ drilldownClick: EventEmitter<string | number | null>;
1150
+ validationError: EventEmitter<string>;
1151
+ editModeChange: EventEmitter<boolean>;
1152
+ currentValue: _angular_core.WritableSignal<string | number | null>;
1153
+ error: _angular_core.WritableSignal<string>;
1154
+ constructor();
1155
+ formatNumberSignal: _angular_core.Signal<string | undefined>;
1156
+ onActivate(): void;
1157
+ onBlur(): void;
1158
+ onValueChange(event: any): void;
1159
+ onDrillableClick(event: Event): void;
1160
+ private validateField;
1161
+ private focusAndPositionCursor;
1162
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CurrencyComponent, never>;
1163
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CurrencyComponent, "eru-currency", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "replaceZeroValue": { "alias": "replaceZeroValue"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "validationError": "validationError"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1164
+ }
1165
+
1166
+ interface NumberValidationResult {
1167
+ isValid: boolean;
1168
+ error?: string;
1169
+ }
1170
+ declare class NumberComponent {
1171
+ private el;
1172
+ value: _angular_core.InputSignal<string | number | null>;
1173
+ config: _angular_core.InputSignal<Field | null>;
1174
+ isEditable: _angular_core.InputSignal<boolean>;
1175
+ isActive: _angular_core.InputSignal<boolean>;
1176
+ isDrillable: _angular_core.InputSignal<boolean>;
1177
+ replaceZeroValue: _angular_core.InputSignal<string | undefined>;
1178
+ placeholder: _angular_core.InputSignal<string>;
1179
+ valueChange: EventEmitter<string | number | null>;
1180
+ blur: EventEmitter<string | number | null>;
1181
+ focus: EventEmitter<void>;
1182
+ drilldownClick: EventEmitter<string | number | null>;
1183
+ validationError: EventEmitter<string>;
1184
+ editModeChange: EventEmitter<boolean>;
1185
+ currentValue: _angular_core.WritableSignal<string | number | null>;
1186
+ error: _angular_core.WritableSignal<string>;
1187
+ constructor();
1188
+ formatNumberSignal: _angular_core.Signal<string | undefined>;
1189
+ onActivate(): void;
1190
+ onBlur(): void;
1191
+ onValueChange(event: any): void;
1192
+ onDrillableClick(event: Event): void;
1193
+ private validateField;
1194
+ private focusAndPositionCursor;
1195
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberComponent, never>;
1196
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberComponent, "eru-number", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "replaceZeroValue": { "alias": "replaceZeroValue"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "validationError": "validationError"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1197
+ }
1198
+
1199
+ interface TextboxValidationResult {
1200
+ isValid: boolean;
1201
+ error?: string;
1202
+ }
1203
+ declare class TextboxComponent implements OnInit {
1204
+ private el;
1205
+ value: _angular_core.InputSignal<string | null>;
1206
+ config: _angular_core.InputSignal<Field | null>;
1207
+ isEditable: _angular_core.InputSignal<boolean>;
1208
+ isActive: _angular_core.InputSignal<boolean>;
1209
+ isDrillable: _angular_core.InputSignal<boolean>;
1210
+ columnWidth: _angular_core.InputSignal<number>;
1211
+ fieldSize: _angular_core.InputSignal<number>;
1212
+ eruGridStore: _angular_core.InputSignal<EruGridStore | null>;
1213
+ externalError: _angular_core.InputSignal<string>;
1214
+ valueChange: EventEmitter<string | null>;
1215
+ blur: EventEmitter<string | null>;
1216
+ focus: EventEmitter<void>;
1217
+ drilldownClick: EventEmitter<string | null>;
1218
+ validationError: EventEmitter<string>;
1219
+ editModeChange: EventEmitter<boolean>;
1220
+ currentValue: _angular_core.WritableSignal<string | null>;
1221
+ internalError: _angular_core.WritableSignal<string>;
1222
+ error: _angular_core.Signal<string>;
1223
+ constructor();
1224
+ ngOnInit(): void;
1225
+ getProperty(property: string): any;
1226
+ hasRequiredValidation(): boolean;
1227
+ onActivate(): void;
1228
+ onBlur(event: FocusEvent): void;
1229
+ onValueChange(event: any): void;
1230
+ onDrillableClick(event: Event): void;
1231
+ private validateField;
1232
+ private focusAndPositionCursor;
1233
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextboxComponent, never>;
1234
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextboxComponent, "eru-textbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "columnWidth": { "alias": "columnWidth"; "required": false; "isSignal": true; }; "fieldSize": { "alias": "fieldSize"; "required": false; "isSignal": true; }; "eruGridStore": { "alias": "eruGridStore"; "required": false; "isSignal": true; }; "externalError": { "alias": "externalError"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "validationError": "validationError"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1235
+ }
1236
+
1237
+ interface EmailValidationResult {
1238
+ isValid: boolean;
1239
+ error?: string;
1240
+ }
1241
+ declare class EmailComponent implements OnInit {
1242
+ private el;
1243
+ value: _angular_core.InputSignal<string | null>;
1244
+ config: _angular_core.InputSignal<Field | null>;
1245
+ isEditable: _angular_core.InputSignal<boolean>;
1246
+ isActive: _angular_core.InputSignal<boolean>;
1247
+ isDrillable: _angular_core.InputSignal<boolean>;
1248
+ columnWidth: _angular_core.InputSignal<number>;
1249
+ fieldSize: _angular_core.InputSignal<number>;
1250
+ eruGridStore: _angular_core.InputSignal<EruGridStore | null>;
1251
+ placeholder: _angular_core.InputSignal<string>;
1252
+ externalError: _angular_core.InputSignal<string>;
1253
+ valueChange: EventEmitter<string | null>;
1254
+ blur: EventEmitter<string | null>;
1255
+ focus: EventEmitter<void>;
1256
+ drilldownClick: EventEmitter<string | null>;
1257
+ validationError: EventEmitter<string>;
1258
+ editModeChange: EventEmitter<boolean>;
1259
+ currentValue: _angular_core.WritableSignal<string | null>;
1260
+ internalError: _angular_core.WritableSignal<string>;
1261
+ error: _angular_core.Signal<string>;
1262
+ constructor();
1263
+ ngOnInit(): void;
1264
+ getProperty(property: string): any;
1265
+ hasRequiredValidation(): boolean;
1266
+ onActivate(): void;
1267
+ onBlur(event: FocusEvent): void;
1268
+ onValueChange(event: any): void;
1269
+ onDrillableClick(event: Event): void;
1270
+ private validateField;
1271
+ private focusAndPositionCursor;
1272
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmailComponent, never>;
1273
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmailComponent, "eru-email", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "columnWidth": { "alias": "columnWidth"; "required": false; "isSignal": true; }; "fieldSize": { "alias": "fieldSize"; "required": false; "isSignal": true; }; "eruGridStore": { "alias": "eruGridStore"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "externalError": { "alias": "externalError"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "validationError": "validationError"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1274
+ }
1275
+
1276
+ declare global {
1277
+ interface Window {
1278
+ google: typeof google;
1279
+ }
1280
+ }
1281
+ declare var google: {
1282
+ maps: {
1283
+ places: {
1284
+ Autocomplete: new (input: HTMLInputElement, options?: any) => {
1285
+ getPlace: () => any;
1286
+ addListener: (event: string, callback: () => void) => void;
1287
+ };
1288
+ AutocompleteOptions: any;
1289
+ };
1290
+ };
1291
+ };
1292
+ interface LocationConfig {
1293
+ required?: boolean;
1294
+ maxLength?: number;
1295
+ googleApiKey?: string;
1296
+ enableAutocomplete?: boolean;
1297
+ }
1298
+ interface LocationValidationResult {
1299
+ isValid: boolean;
1300
+ error?: string;
1301
+ }
1302
+ declare class LocationComponent implements OnInit, AfterViewInit {
1303
+ private el;
1304
+ locationInput?: ElementRef<HTMLInputElement>;
1305
+ value: _angular_core.InputSignal<string | null>;
1306
+ config: _angular_core.InputSignal<Field | null>;
1307
+ isEditable: _angular_core.InputSignal<boolean>;
1308
+ isActive: _angular_core.InputSignal<boolean>;
1309
+ isDrillable: _angular_core.InputSignal<boolean>;
1310
+ columnWidth: _angular_core.InputSignal<number>;
1311
+ fieldSize: _angular_core.InputSignal<number>;
1312
+ eruGridStore: _angular_core.InputSignal<EruGridStore | null>;
1313
+ externalError: _angular_core.InputSignal<string>;
1314
+ valueChange: EventEmitter<string | null>;
1315
+ blur: EventEmitter<string | null>;
1316
+ focus: EventEmitter<void>;
1317
+ drilldownClick: EventEmitter<string | null>;
1318
+ validationError: EventEmitter<string>;
1319
+ editModeChange: EventEmitter<boolean>;
1320
+ currentValue: _angular_core.WritableSignal<string | null>;
1321
+ internalError: _angular_core.WritableSignal<string>;
1322
+ autocomplete: any;
1323
+ error: _angular_core.Signal<string>;
1324
+ constructor();
1325
+ ngOnInit(): void;
1326
+ ngAfterViewInit(): void;
1327
+ getProperty(property: string): any;
1328
+ hasRequiredValidation(): boolean;
1329
+ shouldEnableAutocomplete(): boolean;
1330
+ private initializeAutocomplete;
1331
+ private loadGoogleMapsScript;
1332
+ private setupAutocomplete;
1333
+ onActivate(): void;
1334
+ onBlur(event: FocusEvent): void;
1335
+ onValueChange(event: any): void;
1336
+ onDrillableClick(event: Event): void;
1337
+ private validateField;
1338
+ private focusAndPositionCursor;
1339
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LocationComponent, never>;
1340
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LocationComponent, "eru-location", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "columnWidth": { "alias": "columnWidth"; "required": false; "isSignal": true; }; "fieldSize": { "alias": "fieldSize"; "required": false; "isSignal": true; }; "eruGridStore": { "alias": "eruGridStore"; "required": false; "isSignal": true; }; "externalError": { "alias": "externalError"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "validationError": "validationError"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1341
+ }
1342
+
1343
+ declare class CheckboxComponent {
1344
+ value: _angular_core.InputSignal<boolean>;
1345
+ isEditable: _angular_core.InputSignal<boolean>;
1346
+ isActive: _angular_core.InputSignal<boolean>;
1347
+ isDrillable: _angular_core.InputSignal<boolean>;
1348
+ label: _angular_core.InputSignal<string>;
1349
+ valueChange: EventEmitter<boolean>;
1350
+ change: EventEmitter<boolean>;
1351
+ blur: EventEmitter<boolean>;
1352
+ focus: EventEmitter<void>;
1353
+ drilldownClick: EventEmitter<boolean>;
1354
+ editModeChange: EventEmitter<boolean>;
1355
+ currentValue: _angular_core.WritableSignal<boolean>;
1356
+ constructor();
1357
+ onValueChange(event: boolean): void;
1358
+ onActivate(): void;
1359
+ onBlur(): void;
1360
+ onDrillableClick(event: Event): void;
1361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
1362
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "eru-checkbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "change": "change"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1363
+ }
1364
+
1365
+ declare class DateComponent {
1366
+ private el;
1367
+ datepicker: MatDatepicker<Date>;
1368
+ value: _angular_core.InputSignal<string | Date | null>;
1369
+ isEditable: _angular_core.InputSignal<boolean>;
1370
+ isActive: _angular_core.InputSignal<boolean>;
1371
+ isDrillable: _angular_core.InputSignal<boolean>;
1372
+ placeholder: _angular_core.InputSignal<string>;
1373
+ valueChange: EventEmitter<string | null>;
1374
+ dateChange: EventEmitter<string | null>;
1375
+ drilldownClick: EventEmitter<string | null>;
1376
+ editModeChange: EventEmitter<boolean>;
1377
+ currentValue: _angular_core.WritableSignal<Date | null>;
1378
+ private shouldOpenPicker;
1379
+ constructor();
1380
+ onActivate(): void;
1381
+ onDateChange(date: Date | null): void;
1382
+ onDrillableClick(event: Event): void;
1383
+ formatDate(date: Date | null): string;
1384
+ parseDateString(dateString: string): Date | null;
1385
+ getDisplayValue(): string;
1386
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateComponent, never>;
1387
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateComponent, "eru-date", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "dateChange": "dateChange"; "drilldownClick": "drilldownClick"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1388
+ }
1389
+
1390
+ interface CountryCode {
1391
+ name: string;
1392
+ code: string;
1393
+ dial_code: string;
1394
+ flag: string;
1395
+ }
1396
+
1397
+ declare class PhoneComponent implements OnInit, AfterViewInit {
1398
+ private el;
1399
+ phoneContainer: ElementRef<HTMLElement>;
1400
+ value: _angular_core.InputSignal<string | null>;
1401
+ defaultCountry: _angular_core.InputSignal<string>;
1402
+ isEditable: _angular_core.InputSignal<boolean>;
1403
+ isActive: _angular_core.InputSignal<boolean>;
1404
+ isDrillable: _angular_core.InputSignal<boolean>;
1405
+ columnWidth: _angular_core.InputSignal<number>;
1406
+ fieldSize: _angular_core.InputSignal<number>;
1407
+ valueChange: EventEmitter<string | null>;
1408
+ blur: EventEmitter<string | null>;
1409
+ focus: EventEmitter<void>;
1410
+ drilldownClick: EventEmitter<string | null>;
1411
+ editModeChange: EventEmitter<boolean>;
1412
+ countryCodes: _angular_core.WritableSignal<CountryCode[]>;
1413
+ selectedCountry: _angular_core.WritableSignal<CountryCode>;
1414
+ countrySearchText: _angular_core.WritableSignal<string>;
1415
+ phoneNumber: _angular_core.WritableSignal<string>;
1416
+ currentValue: _angular_core.WritableSignal<string | null>;
1417
+ isInputFocused: _angular_core.WritableSignal<boolean>;
1418
+ isDropdownOpen: _angular_core.WritableSignal<boolean>;
1419
+ filteredCountries: _angular_core.Signal<CountryCode[]>;
1420
+ isFocused: _angular_core.Signal<boolean>;
1421
+ readonly fullPhoneValue: _angular_core.Signal<string>;
1422
+ constructor();
1423
+ ngOnInit(): void;
1424
+ ngAfterViewInit(): void;
1425
+ onActivate(): void;
1426
+ onInputFocus(event: FocusEvent): void;
1427
+ onInputBlur(event: FocusEvent): void;
1428
+ onDrillableClick(event: Event): void;
1429
+ /**
1430
+ * Get the flag emoji for display
1431
+ * @returns The flag emoji string
1432
+ */
1433
+ getDisplayFlag(): string;
1434
+ /**
1435
+ * Get the dial code and phone number together (without flag)
1436
+ * @returns The dial code and phone number formatted as "dialCode phoneNumber"
1437
+ */
1438
+ getDisplayPhoneNumber(): string;
1439
+ /**
1440
+ * Format the complete display value (flag + dial code + number)
1441
+ * @returns The complete formatted phone number with flag
1442
+ */
1443
+ formatDisplayValue(): string;
1444
+ selectCountry(countryCode: string): void;
1445
+ onCountryChange(countryCode: string): void;
1446
+ onCountrySelectOpenedChange(opened: boolean): void;
1447
+ onCountrySearchChange(searchValue: string): void;
1448
+ displayFlag(country?: CountryCode): string;
1449
+ onPhoneNumberInput(event: Event): void;
1450
+ private emitValueChange;
1451
+ private focusAndPositionCursor;
1452
+ private parseAndSetValue;
1453
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PhoneComponent, never>;
1454
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PhoneComponent, "eru-phone", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultCountry": { "alias": "defaultCountry"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "columnWidth": { "alias": "columnWidth"; "required": false; "isSignal": true; }; "fieldSize": { "alias": "fieldSize"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1455
+ }
1456
+
1457
+ declare class ProgressComponent implements OnInit {
1458
+ private el;
1459
+ value: _angular_core.InputSignal<number | null>;
1460
+ config: _angular_core.InputSignal<Field | null>;
1461
+ isEditable: _angular_core.InputSignal<boolean>;
1462
+ isActive: _angular_core.InputSignal<boolean>;
1463
+ isDrillable: _angular_core.InputSignal<boolean>;
1464
+ columnWidth: _angular_core.InputSignal<number>;
1465
+ fieldSize: _angular_core.InputSignal<number>;
1466
+ eruGridStore: _angular_core.InputSignal<EruGridStore | null>;
1467
+ valueChange: EventEmitter<number>;
1468
+ blur: EventEmitter<number | null>;
1469
+ focus: EventEmitter<void>;
1470
+ drilldownClick: EventEmitter<number | null>;
1471
+ editModeChange: EventEmitter<boolean>;
1472
+ currentValue: _angular_core.WritableSignal<number>;
1473
+ displayValue: _angular_core.Signal<number>;
1474
+ constructor();
1475
+ ngOnInit(): void;
1476
+ onActivate(): void;
1477
+ onBlur(): void;
1478
+ onValueChange(value: number): void;
1479
+ onDrillableClick(event: Event): void;
1480
+ getProperty(property: string): any;
1481
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressComponent, never>;
1482
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressComponent, "eru-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "columnWidth": { "alias": "columnWidth"; "required": false; "isSignal": true; }; "fieldSize": { "alias": "fieldSize"; "required": false; "isSignal": true; }; "eruGridStore": { "alias": "eruGridStore"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1483
+ }
1484
+
1485
+ interface RatingConfig {
1486
+ startValue?: number;
1487
+ endValue?: number;
1488
+ emojiValue?: 'star' | 'smile' | 'heart';
1489
+ }
1490
+ declare class RatingComponent {
1491
+ value: _angular_core.InputSignal<number>;
1492
+ config: _angular_core.InputSignal<RatingConfig>;
1493
+ isEditable: _angular_core.InputSignal<boolean>;
1494
+ isActive: _angular_core.InputSignal<boolean>;
1495
+ valueChange: EventEmitter<number>;
1496
+ editModeChange: EventEmitter<boolean>;
1497
+ currentValue: _angular_core.WritableSignal<number>;
1498
+ hoverRating: _angular_core.WritableSignal<number>;
1499
+ constructor();
1500
+ getRatingStars: _angular_core.Signal<number[]>;
1501
+ getEmoji(star: number): string;
1502
+ onActivate(): void;
1503
+ setRating(value: number): void;
1504
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RatingComponent, never>;
1505
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RatingComponent, "eru-rating", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "editModeChange": "editModeChange"; }, never, never, true, never>;
1506
+ }
1507
+
1508
+ declare const MATERIAL_PROVIDERS: Provider[];
1509
+ declare const MATERIAL_MODULES: (typeof MatCommonModule)[];
1510
+
1511
+ export { CheckboxComponent, ColumnConstraintsService, CurrencyComponent, CustomVirtualScrollStrategy, DateComponent, EmailComponent, EruGridComponent, EruGridService, EruGridStore, HelloWorldComponent, LocationComponent, MATERIAL_MODULES, MATERIAL_PROVIDERS, NumberComponent, PhoneComponent, ProgressComponent, RatingComponent, TextboxComponent, ThemeService, ThemeToggleComponent };
1512
+ export type { ActionClick, AggregationFunction, ColumnWidthConstraints, CurrencyValidationResult, DataTypes, Drilldown, EmailValidationResult, Field, GridConfiguration, GridFeatures, GridMode, GridStyles, GridTokens, GroupItem$1 as GroupItem, LocationConfig, LocationValidationResult, NumberValidationResult, PivotColumnGroupState, PivotColumnHeader, PivotConfiguration, PivotHeaderStructure, PivotMetadata, PivotResult, PivotRow, RatingConfig, Row, RowDataRequest, RowDataResponse, RowGrandTotal, RowGroup, TextboxValidationResult, Theme };