@gp-grid/angular 0.10.3 → 0.11.1
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.
- package/LICENSE +203 -203
- package/dist/styles.css +950 -0
- package/fesm2022/gp-grid-angular.mjs +1630 -0
- package/package.json +10 -22
- package/types/gp-grid-angular.d.ts +444 -0
- package/ng-package.json +0 -10
- package/src/lib/components/filter-popup/filter-logic.ts +0 -243
- package/src/lib/components/filter-popup.component.ts +0 -236
- package/src/lib/components/filter-popup.template.ts +0 -182
- package/src/lib/components/grid-body.component.ts +0 -284
- package/src/lib/components/grid-body.template.ts +0 -93
- package/src/lib/components/grid-header.component.ts +0 -206
- package/src/lib/components/grid-overlays.component.ts +0 -140
- package/src/lib/components/index.ts +0 -4
- package/src/lib/createGridData.ts +0 -82
- package/src/lib/gp-grid-bindings.ts +0 -150
- package/src/lib/gp-grid-view-model.ts +0 -148
- package/src/lib/gp-grid.component.ts +0 -279
- package/src/lib/gp-grid.factory.ts +0 -52
- package/src/lib/gp-grid.template.ts +0 -77
- package/src/lib/styles/index.ts +0 -0
- package/src/lib/types.ts +0 -28
- package/src/public-api.ts +0 -57
- package/tsconfig.json +0 -11
- package/tsconfig.lib.json +0 -27
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gp-grid/angular",
|
|
3
3
|
"description": "A high-performance Angular data grid component with virtual scrolling, cell selection, sorting, filtering, and Excel-like editing",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.1",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
-
"module": "
|
|
7
|
-
"typings": "
|
|
6
|
+
"module": "fesm2022/gp-grid-angular.mjs",
|
|
7
|
+
"typings": "types/gp-grid-angular.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
"./package.json": {
|
|
10
10
|
"default": "./package.json"
|
|
11
11
|
},
|
|
12
12
|
".": {
|
|
13
|
-
"types": "./
|
|
14
|
-
"default": "./
|
|
13
|
+
"types": "./types/gp-grid-angular.d.ts",
|
|
14
|
+
"default": "./fesm2022/gp-grid-angular.mjs"
|
|
15
15
|
},
|
|
16
16
|
"./dist/styles.css": "./dist/styles.css"
|
|
17
17
|
},
|
|
@@ -46,26 +46,14 @@
|
|
|
46
46
|
"filtering",
|
|
47
47
|
"editable"
|
|
48
48
|
],
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "ng-packagr -p ng-package.json",
|
|
51
|
-
"postbuild": "node -e \"require('fs').copyFileSync('../core/dist/styles.css', 'dist/styles.css')\" && echo '✓ dist/styles.css copied'",
|
|
52
|
-
"build:production": "ng-packagr -p ng-package.json",
|
|
53
|
-
"postbuild:production": "node -e \"const fs=require('fs'),p=require('path');fs.copyFileSync('../core/dist/styles.css','dist/styles.css');const d='dist/angular/fesm2022';for(const f of fs.readdirSync(d))if(f.endsWith('.map'))fs.rmSync(p.join(d,f));\" && echo '✓ dist/styles.css copied, sourcemaps stripped'"
|
|
54
|
-
},
|
|
55
49
|
"peerDependencies": {
|
|
56
50
|
"@angular/common": ">=18.0.0",
|
|
57
51
|
"@angular/core": ">=18.0.0"
|
|
58
52
|
},
|
|
59
|
-
"devDependencies": {
|
|
60
|
-
"@angular/common": "^18.0.0",
|
|
61
|
-
"@angular/compiler": "^18.0.0",
|
|
62
|
-
"@angular/compiler-cli": "^18.0.0",
|
|
63
|
-
"@angular/core": "^18.0.0",
|
|
64
|
-
"ng-packagr": "^18.0.0",
|
|
65
|
-
"typescript": "~5.9.0"
|
|
66
|
-
},
|
|
67
53
|
"dependencies": {
|
|
68
|
-
"@gp-grid/core": "
|
|
54
|
+
"@gp-grid/core": "0.11.1",
|
|
69
55
|
"tslib": "^2.8.1"
|
|
70
|
-
}
|
|
71
|
-
|
|
56
|
+
},
|
|
57
|
+
"sideEffects": false,
|
|
58
|
+
"type": "module"
|
|
59
|
+
}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { TemplateRef, ElementRef, AfterViewInit, OnDestroy, Signal, OnInit } from '@angular/core';
|
|
3
|
+
import * as _gp_grid_core from '@gp-grid/core';
|
|
4
|
+
import { HeaderRendererParams, SortDirection, VisibleColumnInfo, HeaderData, ColumnDefinition, SlotData, CellPosition, CellRange, CellValue, CellRendererParams, EditRendererParams, FillHandlePosition, DragState, ColumnFilterModel, BatchChangeSetters, DataSource, RowId, HighlightingOptions, CellValueChangedEvent, ParallelSortOptions, MutableDataSource } from '@gp-grid/core';
|
|
5
|
+
export { CellDataType, CellPosition, CellRange, CellRendererParams, CellValue, CellValueChangedEvent, ColumnDefinition, ColumnFilterModel, DataSource, DataSourceRequest, DataSourceResponse, EditRendererParams, FilterCondition, FilterModel, GridCore, GridInstruction, HeaderRendererParams, HighlightContext, HighlightingOptions, MutableDataSource, RowId, SortDirection, SortModel, createClientDataSource, createDataSourceFromArray, createMutableClientDataSource, createServerDataSource } from '@gp-grid/core';
|
|
6
|
+
|
|
7
|
+
type HeaderRendererTemplate = TemplateRef<{
|
|
8
|
+
$implicit: HeaderRendererParams;
|
|
9
|
+
}>;
|
|
10
|
+
interface HeaderSortEvent {
|
|
11
|
+
colId: string;
|
|
12
|
+
direction: SortDirection | null;
|
|
13
|
+
addToExisting: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface HeaderPointerDownEvent {
|
|
16
|
+
colIndex: number;
|
|
17
|
+
colWidth: number;
|
|
18
|
+
colHeight: number;
|
|
19
|
+
event: PointerEvent;
|
|
20
|
+
}
|
|
21
|
+
interface FilterPointerDownEvent {
|
|
22
|
+
colIndex: number;
|
|
23
|
+
anchorEl: HTMLElement;
|
|
24
|
+
}
|
|
25
|
+
interface ResizePointerDownEvent {
|
|
26
|
+
colIndex: number;
|
|
27
|
+
colWidth: number;
|
|
28
|
+
event: PointerEvent;
|
|
29
|
+
}
|
|
30
|
+
declare class GridHeaderComponent {
|
|
31
|
+
headerHeight: _angular_core.InputSignal<number>;
|
|
32
|
+
scrollLeft: _angular_core.InputSignal<number>;
|
|
33
|
+
contentWidth: _angular_core.InputSignal<number>;
|
|
34
|
+
totalWidth: _angular_core.InputSignal<number>;
|
|
35
|
+
isLoading: _angular_core.InputSignal<boolean>;
|
|
36
|
+
visibleColumnsWithIndices: _angular_core.InputSignal<VisibleColumnInfo[]>;
|
|
37
|
+
columnPositions: _angular_core.InputSignal<number[]>;
|
|
38
|
+
columnWidths: _angular_core.InputSignal<number[]>;
|
|
39
|
+
headers: _angular_core.InputSignal<Map<number, HeaderData>>;
|
|
40
|
+
sortingEnabled: _angular_core.InputSignal<boolean>;
|
|
41
|
+
headerRenderers: _angular_core.InputSignal<Record<string, HeaderRendererTemplate>>;
|
|
42
|
+
globalHeaderRenderer: _angular_core.InputSignal<HeaderRendererTemplate>;
|
|
43
|
+
headerPointerDown: _angular_core.OutputEmitterRef<HeaderPointerDownEvent>;
|
|
44
|
+
filterPointerDown: _angular_core.OutputEmitterRef<FilterPointerDownEvent>;
|
|
45
|
+
resizePointerDown: _angular_core.OutputEmitterRef<ResizePointerDownEvent>;
|
|
46
|
+
headerSort: _angular_core.OutputEmitterRef<HeaderSortEvent>;
|
|
47
|
+
headerFilterOpen: _angular_core.OutputEmitterRef<{
|
|
48
|
+
colIndex: number;
|
|
49
|
+
anchorEl: HTMLElement;
|
|
50
|
+
}>;
|
|
51
|
+
protected innerWidth: _angular_core.Signal<number>;
|
|
52
|
+
protected transformStyle: _angular_core.Signal<string>;
|
|
53
|
+
protected onHeaderPointerDown(event: PointerEvent, colIndex: number, colWidth: number): void;
|
|
54
|
+
protected onFilterPointerDown(event: PointerEvent, colIndex: number): void;
|
|
55
|
+
protected onResizePointerDown(event: PointerEvent, colIndex: number, colWidth: number): void;
|
|
56
|
+
protected headerTemplate(column: ColumnDefinition): HeaderRendererTemplate | null;
|
|
57
|
+
protected headerParams(column: ColumnDefinition, colIndex: number, headerData: HeaderData | undefined): HeaderRendererParams;
|
|
58
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridHeaderComponent, never>;
|
|
59
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridHeaderComponent, "gp-grid-header", never, { "headerHeight": { "alias": "headerHeight"; "required": true; "isSignal": true; }; "scrollLeft": { "alias": "scrollLeft"; "required": true; "isSignal": true; }; "contentWidth": { "alias": "contentWidth"; "required": true; "isSignal": true; }; "totalWidth": { "alias": "totalWidth"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "visibleColumnsWithIndices": { "alias": "visibleColumnsWithIndices"; "required": true; "isSignal": true; }; "columnPositions": { "alias": "columnPositions"; "required": true; "isSignal": true; }; "columnWidths": { "alias": "columnWidths"; "required": true; "isSignal": true; }; "headers": { "alias": "headers"; "required": true; "isSignal": true; }; "sortingEnabled": { "alias": "sortingEnabled"; "required": false; "isSignal": true; }; "headerRenderers": { "alias": "headerRenderers"; "required": false; "isSignal": true; }; "globalHeaderRenderer": { "alias": "globalHeaderRenderer"; "required": false; "isSignal": true; }; }, { "headerPointerDown": "headerPointerDown"; "filterPointerDown": "filterPointerDown"; "resizePointerDown": "resizePointerDown"; "headerSort": "headerSort"; "headerFilterOpen": "headerFilterOpen"; }, never, never, true, never>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
type RowClassFn = (rowIndex: number, rowData: unknown) => string[];
|
|
63
|
+
type CellClassFn = (rowIndex: number, colIndex: number, column: ColumnDefinition, rowData: unknown) => string[];
|
|
64
|
+
type CellRendererTemplate = TemplateRef<{
|
|
65
|
+
$implicit: CellRendererParams;
|
|
66
|
+
}>;
|
|
67
|
+
type EditRendererTemplate = TemplateRef<{
|
|
68
|
+
$implicit: EditRendererParams;
|
|
69
|
+
}>;
|
|
70
|
+
interface FillHandlePointerDownEvent {
|
|
71
|
+
event: PointerEvent;
|
|
72
|
+
}
|
|
73
|
+
interface CellPointerDownEvent {
|
|
74
|
+
rowIndex: number;
|
|
75
|
+
colIndex: number;
|
|
76
|
+
event: PointerEvent;
|
|
77
|
+
}
|
|
78
|
+
interface CellPointerEnterEvent {
|
|
79
|
+
rowIndex: number;
|
|
80
|
+
colIndex: number;
|
|
81
|
+
}
|
|
82
|
+
interface CellDoubleClickEvent {
|
|
83
|
+
rowIndex: number;
|
|
84
|
+
colIndex: number;
|
|
85
|
+
}
|
|
86
|
+
interface EditingCellState {
|
|
87
|
+
row: number;
|
|
88
|
+
col: number;
|
|
89
|
+
initialValue: CellValue;
|
|
90
|
+
}
|
|
91
|
+
declare class GridBodyComponent {
|
|
92
|
+
scrollContainer: ElementRef<HTMLDivElement>;
|
|
93
|
+
rowHeight: _angular_core.InputSignal<number>;
|
|
94
|
+
totalHeaderHeight: _angular_core.InputSignal<number>;
|
|
95
|
+
contentWidth: _angular_core.InputSignal<number>;
|
|
96
|
+
contentHeight: _angular_core.InputSignal<number>;
|
|
97
|
+
rowsWrapperOffset: _angular_core.InputSignal<number>;
|
|
98
|
+
slotsArray: _angular_core.InputSignal<SlotData<unknown>[]>;
|
|
99
|
+
visibleColumnWithIndices: _angular_core.InputSignal<VisibleColumnInfo[]>;
|
|
100
|
+
totalWidth: _angular_core.InputSignal<number>;
|
|
101
|
+
columnPositions: _angular_core.InputSignal<number[]>;
|
|
102
|
+
columnWidths: _angular_core.InputSignal<number[]>;
|
|
103
|
+
totalRows: _angular_core.InputSignal<number>;
|
|
104
|
+
activeCell: _angular_core.InputSignal<CellPosition>;
|
|
105
|
+
selectionRange: _angular_core.InputSignal<CellRange>;
|
|
106
|
+
editingCell: _angular_core.InputSignal<EditingCellState>;
|
|
107
|
+
cellRenderers: _angular_core.InputSignal<Record<string, CellRendererTemplate>>;
|
|
108
|
+
globalCellRenderer: _angular_core.InputSignal<CellRendererTemplate>;
|
|
109
|
+
editRenderers: _angular_core.InputSignal<Record<string, EditRendererTemplate>>;
|
|
110
|
+
globalEditRenderer: _angular_core.InputSignal<EditRendererTemplate>;
|
|
111
|
+
hoverPosition: _angular_core.InputSignal<CellPosition>;
|
|
112
|
+
computeRowClasses: _angular_core.InputSignal<RowClassFn>;
|
|
113
|
+
computeCellClasses: _angular_core.InputSignal<CellClassFn>;
|
|
114
|
+
fillHandlePosition: _angular_core.InputSignal<FillHandlePosition>;
|
|
115
|
+
dragState: _angular_core.InputSignal<DragState>;
|
|
116
|
+
scrolled: _angular_core.OutputEmitterRef<number>;
|
|
117
|
+
cellPointerDown: _angular_core.OutputEmitterRef<CellPointerDownEvent>;
|
|
118
|
+
cellPointerEnter: _angular_core.OutputEmitterRef<CellPointerEnterEvent>;
|
|
119
|
+
cellPointerLeave: _angular_core.OutputEmitterRef<void>;
|
|
120
|
+
cellDoubleClick: _angular_core.OutputEmitterRef<CellDoubleClickEvent>;
|
|
121
|
+
editValueChange: _angular_core.OutputEmitterRef<string>;
|
|
122
|
+
editCommit: _angular_core.OutputEmitterRef<void>;
|
|
123
|
+
editCancel: _angular_core.OutputEmitterRef<void>;
|
|
124
|
+
fillHandlePointerDown: _angular_core.OutputEmitterRef<FillHandlePointerDownEvent>;
|
|
125
|
+
protected innerWidth: _angular_core.Signal<number>;
|
|
126
|
+
protected sizerHeight: _angular_core.Signal<number>;
|
|
127
|
+
protected rowDropIndicator: _angular_core.Signal<_gp_grid_core.RowDragState>;
|
|
128
|
+
protected rowDropIndicatorWidth: _angular_core.Signal<number>;
|
|
129
|
+
protected wrapperTransform: _angular_core.Signal<string>;
|
|
130
|
+
protected onScroll(): void;
|
|
131
|
+
protected cellParams(rowData: unknown, column: ColumnDefinition, rowIndex: number, colIndex: number): CellRendererParams;
|
|
132
|
+
protected cellTemplate(column: ColumnDefinition): CellRendererTemplate | null;
|
|
133
|
+
protected editTemplate(column: ColumnDefinition): EditRendererTemplate | null;
|
|
134
|
+
protected editParams(rowData: unknown, column: ColumnDefinition, rowIndex: number, colIndex: number): EditRendererParams;
|
|
135
|
+
protected cellDisplay(rowData: unknown, column: ColumnDefinition, rowIndex: number, colIndex: number): string;
|
|
136
|
+
protected cellClass(rowIndex: number, colIndex: number, column: ColumnDefinition, rowData: unknown): string;
|
|
137
|
+
protected rowClass(rowIndex: number, rowData: unknown): string;
|
|
138
|
+
protected isEditing(rowIndex: number, colIndex: number): boolean;
|
|
139
|
+
protected editInitialValue(): string;
|
|
140
|
+
protected asInput(event: Event): HTMLInputElement;
|
|
141
|
+
protected onEditFocus(event: FocusEvent): void;
|
|
142
|
+
protected onEditKeyDown(event: KeyboardEvent): void;
|
|
143
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridBodyComponent, never>;
|
|
144
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridBodyComponent, "gp-grid-body", never, { "rowHeight": { "alias": "rowHeight"; "required": true; "isSignal": true; }; "totalHeaderHeight": { "alias": "totalHeaderHeight"; "required": true; "isSignal": true; }; "contentWidth": { "alias": "contentWidth"; "required": true; "isSignal": true; }; "contentHeight": { "alias": "contentHeight"; "required": true; "isSignal": true; }; "rowsWrapperOffset": { "alias": "rowsWrapperOffset"; "required": true; "isSignal": true; }; "slotsArray": { "alias": "slotsArray"; "required": true; "isSignal": true; }; "visibleColumnWithIndices": { "alias": "visibleColumnWithIndices"; "required": true; "isSignal": true; }; "totalWidth": { "alias": "totalWidth"; "required": true; "isSignal": true; }; "columnPositions": { "alias": "columnPositions"; "required": true; "isSignal": true; }; "columnWidths": { "alias": "columnWidths"; "required": true; "isSignal": true; }; "totalRows": { "alias": "totalRows"; "required": true; "isSignal": true; }; "activeCell": { "alias": "activeCell"; "required": false; "isSignal": true; }; "selectionRange": { "alias": "selectionRange"; "required": false; "isSignal": true; }; "editingCell": { "alias": "editingCell"; "required": false; "isSignal": true; }; "cellRenderers": { "alias": "cellRenderers"; "required": false; "isSignal": true; }; "globalCellRenderer": { "alias": "globalCellRenderer"; "required": false; "isSignal": true; }; "editRenderers": { "alias": "editRenderers"; "required": false; "isSignal": true; }; "globalEditRenderer": { "alias": "globalEditRenderer"; "required": false; "isSignal": true; }; "hoverPosition": { "alias": "hoverPosition"; "required": false; "isSignal": true; }; "computeRowClasses": { "alias": "computeRowClasses"; "required": false; "isSignal": true; }; "computeCellClasses": { "alias": "computeCellClasses"; "required": false; "isSignal": true; }; "fillHandlePosition": { "alias": "fillHandlePosition"; "required": false; "isSignal": true; }; "dragState": { "alias": "dragState"; "required": false; "isSignal": true; }; }, { "scrolled": "scrolled"; "cellPointerDown": "cellPointerDown"; "cellPointerEnter": "cellPointerEnter"; "cellPointerLeave": "cellPointerLeave"; "cellDoubleClick": "cellDoubleClick"; "editValueChange": "editValueChange"; "editCommit": "editCommit"; "editCancel": "editCancel"; "fillHandlePointerDown": "fillHandlePointerDown"; }, never, never, true, never>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
interface TextConditionState {
|
|
148
|
+
operator: string;
|
|
149
|
+
value: string;
|
|
150
|
+
nextOperator: 'and' | 'or';
|
|
151
|
+
}
|
|
152
|
+
interface NumberConditionState {
|
|
153
|
+
operator: string;
|
|
154
|
+
value: string;
|
|
155
|
+
valueTo: string;
|
|
156
|
+
nextOperator: 'and' | 'or';
|
|
157
|
+
}
|
|
158
|
+
type FilterMode = 'values' | 'condition';
|
|
159
|
+
|
|
160
|
+
declare class FilterPopupComponent implements AfterViewInit, OnDestroy {
|
|
161
|
+
popupEl: ElementRef<HTMLDivElement>;
|
|
162
|
+
column: _angular_core.InputSignal<ColumnDefinition>;
|
|
163
|
+
colIndex: _angular_core.InputSignal<number>;
|
|
164
|
+
anchorEl: _angular_core.InputSignal<HTMLElement>;
|
|
165
|
+
distinctValues: _angular_core.InputSignal<CellValue[]>;
|
|
166
|
+
currentFilter: _angular_core.InputSignal<ColumnFilterModel>;
|
|
167
|
+
apply: _angular_core.OutputEmitterRef<{
|
|
168
|
+
colId: string;
|
|
169
|
+
filter: ColumnFilterModel | null;
|
|
170
|
+
}>;
|
|
171
|
+
close: _angular_core.OutputEmitterRef<void>;
|
|
172
|
+
popupTop: _angular_core.WritableSignal<number>;
|
|
173
|
+
popupLeft: _angular_core.WritableSignal<number>;
|
|
174
|
+
popupMinWidth: _angular_core.WritableSignal<number>;
|
|
175
|
+
positioned: _angular_core.WritableSignal<boolean>;
|
|
176
|
+
filterMode: FilterMode;
|
|
177
|
+
searchText: string;
|
|
178
|
+
selectedValues: Set<string>;
|
|
179
|
+
includeBlanks: boolean;
|
|
180
|
+
textConditions: TextConditionState[];
|
|
181
|
+
numberConditions: NumberConditionState[];
|
|
182
|
+
readonly textOperators: readonly {
|
|
183
|
+
value: _gp_grid_core.TextFilterOperator;
|
|
184
|
+
label: string;
|
|
185
|
+
}[];
|
|
186
|
+
readonly numberOperators: readonly {
|
|
187
|
+
value: _gp_grid_core.NumberFilterOperator;
|
|
188
|
+
label: string;
|
|
189
|
+
}[];
|
|
190
|
+
protected readonly isValueLessTextOp: (operator: string) => boolean;
|
|
191
|
+
protected readonly isValueLessNumberOp: (operator: string) => boolean;
|
|
192
|
+
constructor();
|
|
193
|
+
ngAfterViewInit(): void;
|
|
194
|
+
ngOnDestroy(): void;
|
|
195
|
+
onEscape(): void;
|
|
196
|
+
isNumberColumn(): boolean;
|
|
197
|
+
showValuesMode(): boolean;
|
|
198
|
+
uniqueValues(): string[];
|
|
199
|
+
filteredUniqueValues(): string[];
|
|
200
|
+
toggleValue(val: string, checked: boolean): void;
|
|
201
|
+
selectAll(): void;
|
|
202
|
+
deselectAll(): void;
|
|
203
|
+
onTextOperatorChange(index: number, value: string): void;
|
|
204
|
+
onNumberOperatorChange(index: number, value: string): void;
|
|
205
|
+
addTextCondition(): void;
|
|
206
|
+
addNumberCondition(): void;
|
|
207
|
+
removeTextCondition(index: number): void;
|
|
208
|
+
removeNumberCondition(index: number): void;
|
|
209
|
+
setTextNextOp(index: number, value: 'and' | 'or'): void;
|
|
210
|
+
setNumberNextOp(index: number, value: 'and' | 'or'): void;
|
|
211
|
+
handleApply(): void;
|
|
212
|
+
handleClear(): void;
|
|
213
|
+
private buildFilter;
|
|
214
|
+
private initFromCurrentFilter;
|
|
215
|
+
private updatePosition;
|
|
216
|
+
private onDocumentPointerDown;
|
|
217
|
+
private onWindowResize;
|
|
218
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPopupComponent, never>;
|
|
219
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterPopupComponent, "gp-grid-filter-popup", never, { "column": { "alias": "column"; "required": true; "isSignal": true; }; "colIndex": { "alias": "colIndex"; "required": true; "isSignal": true; }; "anchorEl": { "alias": "anchorEl"; "required": true; "isSignal": true; }; "distinctValues": { "alias": "distinctValues"; "required": true; "isSignal": true; }; "currentFilter": { "alias": "currentFilter"; "required": false; "isSignal": true; }; }, { "apply": "apply"; "close": "close"; }, never, never, true, never>;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
interface ActiveFilterPopup {
|
|
223
|
+
colIndex: number;
|
|
224
|
+
column: ColumnDefinition;
|
|
225
|
+
distinctValues: CellValue[];
|
|
226
|
+
currentFilter?: ColumnFilterModel;
|
|
227
|
+
anchorEl: HTMLElement | null;
|
|
228
|
+
}
|
|
229
|
+
declare class GridOverlaysComponent {
|
|
230
|
+
filterPopup: _angular_core.InputSignal<ActiveFilterPopup>;
|
|
231
|
+
isLoading: _angular_core.InputSignal<boolean>;
|
|
232
|
+
errorMessage: _angular_core.InputSignal<string>;
|
|
233
|
+
headerHeight: _angular_core.InputSignal<number>;
|
|
234
|
+
rowHeight: _angular_core.InputSignal<number>;
|
|
235
|
+
dragState: _angular_core.InputSignal<DragState>;
|
|
236
|
+
visibleColumnWithIndices: _angular_core.InputSignal<VisibleColumnInfo[]>;
|
|
237
|
+
columnPositions: _angular_core.InputSignal<number[]>;
|
|
238
|
+
scrollLeft: _angular_core.InputSignal<number>;
|
|
239
|
+
effectiveColumns: _angular_core.InputSignal<ColumnDefinition[]>;
|
|
240
|
+
totalWidth: _angular_core.InputSignal<number>;
|
|
241
|
+
filterApply: _angular_core.OutputEmitterRef<{
|
|
242
|
+
colId: string;
|
|
243
|
+
filter: ColumnFilterModel | null;
|
|
244
|
+
}>;
|
|
245
|
+
filterClose: _angular_core.OutputEmitterRef<void>;
|
|
246
|
+
protected isResizing: _angular_core.Signal<boolean>;
|
|
247
|
+
protected resizeLineLeft: _angular_core.Signal<number>;
|
|
248
|
+
protected columnMove: _angular_core.Signal<_gp_grid_core.ColumnMoveDragState>;
|
|
249
|
+
protected rowDragGhost: _angular_core.Signal<_gp_grid_core.RowDragState>;
|
|
250
|
+
protected columnMoveGhostText: _angular_core.Signal<string>;
|
|
251
|
+
protected columnMoveDropLeft: _angular_core.Signal<number>;
|
|
252
|
+
protected rowDragGhostWidth: _angular_core.Signal<number>;
|
|
253
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridOverlaysComponent, never>;
|
|
254
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridOverlaysComponent, "gp-grid-overlays", never, { "filterPopup": { "alias": "filterPopup"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "headerHeight": { "alias": "headerHeight"; "required": true; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": true; "isSignal": true; }; "dragState": { "alias": "dragState"; "required": true; "isSignal": true; }; "visibleColumnWithIndices": { "alias": "visibleColumnWithIndices"; "required": true; "isSignal": true; }; "columnPositions": { "alias": "columnPositions"; "required": true; "isSignal": true; }; "scrollLeft": { "alias": "scrollLeft"; "required": true; "isSignal": true; }; "effectiveColumns": { "alias": "effectiveColumns"; "required": true; "isSignal": true; }; "totalWidth": { "alias": "totalWidth"; "required": true; "isSignal": true; }; }, { "filterApply": "filterApply"; "filterClose": "filterClose"; }, never, never, true, never>;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Column definition extended for Angular — allows `cellRenderer`,
|
|
259
|
+
* `editRenderer`, and `headerRenderer` to be passed directly as
|
|
260
|
+
* `TemplateRef` references in addition to the core's string-key / function
|
|
261
|
+
* forms.
|
|
262
|
+
*/
|
|
263
|
+
interface AngularColumnDefinition extends Omit<ColumnDefinition, 'cellRenderer' | 'editRenderer' | 'headerRenderer'> {
|
|
264
|
+
cellRenderer?: string | TemplateRef<{
|
|
265
|
+
$implicit: CellRendererParams;
|
|
266
|
+
}> | ((params: CellRendererParams) => unknown);
|
|
267
|
+
editRenderer?: string | TemplateRef<{
|
|
268
|
+
$implicit: EditRendererParams;
|
|
269
|
+
}> | ((params: EditRendererParams) => unknown);
|
|
270
|
+
headerRenderer?: string | TemplateRef<{
|
|
271
|
+
$implicit: HeaderRendererParams;
|
|
272
|
+
}> | ((params: HeaderRendererParams) => unknown);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
interface GpGridViewModelDeps {
|
|
276
|
+
getColumns: () => AngularColumnDefinition[];
|
|
277
|
+
getRows: () => unknown[];
|
|
278
|
+
getRowHeight: () => number;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Reactive view-state container for GpGridComponent.
|
|
282
|
+
*
|
|
283
|
+
* Owns every signal and computed the template binds against, plus the
|
|
284
|
+
* batch-change setters bag wired into those signals. The component
|
|
285
|
+
* becomes a thin shell that holds lifecycle, event handlers, and inputs.
|
|
286
|
+
*
|
|
287
|
+
* Angular-specific (uses signal/computed from @angular/core) — lives in
|
|
288
|
+
* the angular package, not core.
|
|
289
|
+
*/
|
|
290
|
+
declare class GpGridViewModel {
|
|
291
|
+
readonly headerState: _angular_core.WritableSignal<Map<number, HeaderData>>;
|
|
292
|
+
readonly viewportWidth: _angular_core.WritableSignal<number>;
|
|
293
|
+
readonly scrollLeft: _angular_core.WritableSignal<number>;
|
|
294
|
+
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
295
|
+
readonly errorMessage: _angular_core.WritableSignal<string>;
|
|
296
|
+
readonly filterPopup: _angular_core.WritableSignal<ActiveFilterPopup>;
|
|
297
|
+
readonly pendingScrollTop: _angular_core.WritableSignal<number>;
|
|
298
|
+
readonly activeCell: _angular_core.WritableSignal<CellPosition>;
|
|
299
|
+
readonly selectionRange: _angular_core.WritableSignal<CellRange>;
|
|
300
|
+
readonly editingCell: _angular_core.WritableSignal<EditingCellState>;
|
|
301
|
+
readonly hoverPosition: _angular_core.WritableSignal<CellPosition>;
|
|
302
|
+
readonly columnsOverride: _angular_core.WritableSignal<ColumnDefinition[]>;
|
|
303
|
+
readonly dragState: _angular_core.WritableSignal<DragState>;
|
|
304
|
+
readonly contentWidth: _angular_core.WritableSignal<number>;
|
|
305
|
+
readonly contentHeight: _angular_core.WritableSignal<number>;
|
|
306
|
+
readonly rowsWrapperOffset: _angular_core.WritableSignal<number>;
|
|
307
|
+
readonly slots: _angular_core.WritableSignal<Map<string, SlotData<unknown>>>;
|
|
308
|
+
readonly effectiveColumns: Signal<ColumnDefinition[]>;
|
|
309
|
+
readonly visibleColumnWithIndices: Signal<VisibleColumnInfo[]>;
|
|
310
|
+
readonly columnPositions: Signal<number[]>;
|
|
311
|
+
readonly columnWidths: Signal<number[]>;
|
|
312
|
+
readonly totalWidth: Signal<number>;
|
|
313
|
+
readonly fillHandlePosition: Signal<FillHandlePosition | null>;
|
|
314
|
+
readonly slotsArray: Signal<SlotData[]>;
|
|
315
|
+
readonly totalRows: Signal<number>;
|
|
316
|
+
readonly batchSetters: BatchChangeSetters;
|
|
317
|
+
private filterAnchorEl;
|
|
318
|
+
constructor(deps: GpGridViewModelDeps);
|
|
319
|
+
setFilterAnchor(el: HTMLElement | null): void;
|
|
320
|
+
private materializeFilterPopup;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
declare class GpGridComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
324
|
+
container: ElementRef<HTMLDivElement>;
|
|
325
|
+
body: GridBodyComponent;
|
|
326
|
+
private readonly isBrowser;
|
|
327
|
+
columns: _angular_core.InputSignal<AngularColumnDefinition[]>;
|
|
328
|
+
rows: _angular_core.InputSignal<unknown[]>;
|
|
329
|
+
dataSource: _angular_core.InputSignal<DataSource<unknown>>;
|
|
330
|
+
getRowId: _angular_core.InputSignal<(row: unknown) => RowId>;
|
|
331
|
+
rowHeight: _angular_core.InputSignal<number>;
|
|
332
|
+
headerHeight: _angular_core.InputSignal<number>;
|
|
333
|
+
darkMode: _angular_core.InputSignal<boolean>;
|
|
334
|
+
cellRenderers: _angular_core.InputSignal<Record<string, CellRendererTemplate>>;
|
|
335
|
+
headerRenderers: _angular_core.InputSignal<Record<string, HeaderRendererTemplate>>;
|
|
336
|
+
editRenderers: _angular_core.InputSignal<Record<string, EditRendererTemplate>>;
|
|
337
|
+
cellRenderer: _angular_core.InputSignal<CellRendererTemplate>;
|
|
338
|
+
headerRenderer: _angular_core.InputSignal<HeaderRendererTemplate>;
|
|
339
|
+
editRenderer: _angular_core.InputSignal<EditRendererTemplate>;
|
|
340
|
+
highlighting: _angular_core.InputSignal<HighlightingOptions<Record<string, unknown>>>;
|
|
341
|
+
rowDragEntireRow: _angular_core.InputSignal<boolean>;
|
|
342
|
+
overscan: _angular_core.InputSignal<number>;
|
|
343
|
+
sortingEnabled: _angular_core.InputSignal<boolean>;
|
|
344
|
+
wheelDampening: _angular_core.InputSignal<number>;
|
|
345
|
+
onRowDragEnd: _angular_core.OutputEmitterRef<{
|
|
346
|
+
source: number;
|
|
347
|
+
target: number;
|
|
348
|
+
}>;
|
|
349
|
+
onCellValueChanged: _angular_core.OutputEmitterRef<CellValueChangedEvent<unknown>>;
|
|
350
|
+
onColumnResized: _angular_core.OutputEmitterRef<{
|
|
351
|
+
colIndex: number;
|
|
352
|
+
newWidth: number;
|
|
353
|
+
}>;
|
|
354
|
+
onColumnMoved: _angular_core.OutputEmitterRef<{
|
|
355
|
+
fromIndex: number;
|
|
356
|
+
toIndex: number;
|
|
357
|
+
}>;
|
|
358
|
+
protected readonly vm: GpGridViewModel;
|
|
359
|
+
private readonly bindings;
|
|
360
|
+
constructor();
|
|
361
|
+
ngOnInit(): void;
|
|
362
|
+
ngAfterViewInit(): void;
|
|
363
|
+
ngOnDestroy(): void;
|
|
364
|
+
protected onBodyScroll(scrollLeft: number): void;
|
|
365
|
+
protected onHeaderPointerDown(evt: HeaderPointerDownEvent): void;
|
|
366
|
+
protected onFilterPointerDown(evt: FilterPointerDownEvent): void;
|
|
367
|
+
protected onCellPointerDown(evt: CellPointerDownEvent): void;
|
|
368
|
+
protected onCellPointerEnter(evt: CellPointerEnterEvent): void;
|
|
369
|
+
protected onFillHandlePointerDown(evt: FillHandlePointerDownEvent): void;
|
|
370
|
+
protected onCellPointerLeave(): void;
|
|
371
|
+
protected computeRowClassesFn: (rowIndex: number, rowData: unknown) => string[];
|
|
372
|
+
protected computeCellClassesFn: (rowIndex: number, colIndex: number, column: ColumnDefinition, rowData: unknown) => string[];
|
|
373
|
+
protected onCellDoubleClick(evt: CellDoubleClickEvent): void;
|
|
374
|
+
protected onEditValueChange(value: string): void;
|
|
375
|
+
protected onEditCommit(): void;
|
|
376
|
+
protected onEditCancel(): void;
|
|
377
|
+
protected onHeaderSort(evt: HeaderSortEvent): void;
|
|
378
|
+
protected onWheel(event: WheelEvent): void;
|
|
379
|
+
protected onKeyDown(event: KeyboardEvent): void;
|
|
380
|
+
protected onResizePointerDown(evt: ResizePointerDownEvent): void;
|
|
381
|
+
protected onFilterApply(event: {
|
|
382
|
+
colId: string;
|
|
383
|
+
filter: ColumnFilterModel | null;
|
|
384
|
+
}): void;
|
|
385
|
+
protected onFilterClose(): void;
|
|
386
|
+
private onDocumentPointerMove;
|
|
387
|
+
private onDocumentPointerUp;
|
|
388
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GpGridComponent, never>;
|
|
389
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GpGridComponent, "gp-grid", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "getRowId": { "alias": "getRowId"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "headerHeight": { "alias": "headerHeight"; "required": false; "isSignal": true; }; "darkMode": { "alias": "darkMode"; "required": false; "isSignal": true; }; "cellRenderers": { "alias": "cellRenderers"; "required": false; "isSignal": true; }; "headerRenderers": { "alias": "headerRenderers"; "required": false; "isSignal": true; }; "editRenderers": { "alias": "editRenderers"; "required": false; "isSignal": true; }; "cellRenderer": { "alias": "cellRenderer"; "required": false; "isSignal": true; }; "headerRenderer": { "alias": "headerRenderer"; "required": false; "isSignal": true; }; "editRenderer": { "alias": "editRenderer"; "required": false; "isSignal": true; }; "highlighting": { "alias": "highlighting"; "required": false; "isSignal": true; }; "rowDragEntireRow": { "alias": "rowDragEntireRow"; "required": false; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "sortingEnabled": { "alias": "sortingEnabled"; "required": false; "isSignal": true; }; "wheelDampening": { "alias": "wheelDampening"; "required": false; "isSignal": true; }; }, { "onRowDragEnd": "onRowDragEnd"; "onCellValueChanged": "onCellValueChanged"; "onColumnResized": "onColumnResized"; "onColumnMoved": "onColumnMoved"; }, never, never, true, never>;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
interface CreateGridDataOptions<TData> {
|
|
393
|
+
/** Function to extract a unique ID from each row. Required. */
|
|
394
|
+
getRowId: (row: TData) => RowId;
|
|
395
|
+
/** Debounce time for batching transactions in ms. Default 50. */
|
|
396
|
+
debounceMs?: number;
|
|
397
|
+
/** Use Web Worker for sorting large datasets (default: true) */
|
|
398
|
+
useWorker?: boolean;
|
|
399
|
+
/** Options for parallel sorting (only used when useWorker is true) */
|
|
400
|
+
parallelSort?: ParallelSortOptions | false;
|
|
401
|
+
}
|
|
402
|
+
interface GridDataApi<TData> {
|
|
403
|
+
/** The data source to pass to <gp-grid [dataSource]="dataSource" />. */
|
|
404
|
+
dataSource: MutableDataSource<TData>;
|
|
405
|
+
/** Update a single row by ID with partial data. */
|
|
406
|
+
updateRow: (id: RowId, data: Partial<TData>) => void;
|
|
407
|
+
/** Add rows to the data source. */
|
|
408
|
+
addRows: (rows: TData[]) => void;
|
|
409
|
+
/** Remove rows by ID. */
|
|
410
|
+
removeRows: (ids: RowId[]) => void;
|
|
411
|
+
/** Update a single cell value. */
|
|
412
|
+
updateCell: (id: RowId, field: string, value: CellValue) => void;
|
|
413
|
+
/** Clear all data from the data source. */
|
|
414
|
+
clear: () => void;
|
|
415
|
+
/** Get a row by its ID. */
|
|
416
|
+
getRowById: (id: RowId) => TData | undefined;
|
|
417
|
+
/** Get the current total row count. */
|
|
418
|
+
getTotalRowCount: () => number;
|
|
419
|
+
/** Force immediate processing of queued transactions. */
|
|
420
|
+
flushTransactions: () => Promise<void>;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Angular helper for efficient grid data mutations.
|
|
424
|
+
*
|
|
425
|
+
* Wraps `createMutableClientDataSource` to provide a simple API for
|
|
426
|
+
* updating grid data without triggering full pipeline rebuilds.
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```ts
|
|
430
|
+
* private readonly grid = createGridData(initialRows, {
|
|
431
|
+
* getRowId: (row) => row.id,
|
|
432
|
+
* });
|
|
433
|
+
*
|
|
434
|
+
* // Template:
|
|
435
|
+
* // <gp-grid [dataSource]="grid.dataSource" [columns]="columns" />
|
|
436
|
+
*
|
|
437
|
+
* // Update a row imperatively:
|
|
438
|
+
* this.grid.updateRow(42, { name: 'New name' });
|
|
439
|
+
* ```
|
|
440
|
+
*/
|
|
441
|
+
declare const createGridData: <TData = unknown>(initialData: TData[], options: CreateGridDataOptions<TData>) => GridDataApi<TData>;
|
|
442
|
+
|
|
443
|
+
export { FilterPopupComponent, GpGridComponent, GridBodyComponent, GridHeaderComponent, GridOverlaysComponent, createGridData };
|
|
444
|
+
export type { ActiveFilterPopup, AngularColumnDefinition, CellClassFn, CellDoubleClickEvent, CellPointerDownEvent, CellPointerEnterEvent, CellRendererTemplate, CreateGridDataOptions, EditRendererTemplate, EditingCellState, FillHandlePointerDownEvent, FilterPointerDownEvent, GridDataApi, HeaderPointerDownEvent, HeaderRendererTemplate, HeaderSortEvent, ResizePointerDownEvent, RowClassFn };
|