igniteui-angular 21.1.0-rc.4 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +29 -0
  2. package/fesm2022/igniteui-angular-grids-core.mjs +5 -3
  3. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  4. package/fesm2022/igniteui-angular-grids-grid.mjs +6 -1
  5. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  6. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +1 -0
  7. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-grids-lite.mjs +2 -0
  9. package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
  10. package/fesm2022/igniteui-angular-simple-combo.mjs +1 -1
  11. package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
  12. package/lib/core/styles/components/grid/_grid-theme.scss +4 -1
  13. package/migrations/migration-collection.json +7 -0
  14. package/migrations/update-21_1_0_add-agent-skills/index.d.ts +3 -0
  15. package/migrations/update-21_1_0_add-agent-skills/index.js +46 -0
  16. package/package.json +4 -4
  17. package/skills/igniteui-angular-components/SKILL.md +71 -0
  18. package/skills/igniteui-angular-components/references/charts.md +447 -0
  19. package/skills/igniteui-angular-components/references/data-display.md +347 -0
  20. package/skills/igniteui-angular-components/references/directives.md +149 -0
  21. package/skills/igniteui-angular-components/references/feedback.md +141 -0
  22. package/skills/igniteui-angular-components/references/form-controls.md +298 -0
  23. package/skills/igniteui-angular-components/references/layout-manager.md +415 -0
  24. package/skills/igniteui-angular-components/references/layout.md +216 -0
  25. package/skills/igniteui-angular-components/references/setup.md +157 -0
  26. package/skills/igniteui-angular-grids/SKILL.md +110 -0
  27. package/skills/igniteui-angular-grids/references/data-operations.md +436 -0
  28. package/skills/igniteui-angular-grids/references/editing.md +480 -0
  29. package/skills/igniteui-angular-grids/references/features.md +218 -0
  30. package/skills/igniteui-angular-grids/references/paging-remote.md +388 -0
  31. package/skills/igniteui-angular-grids/references/state.md +448 -0
  32. package/skills/igniteui-angular-grids/references/structure.md +290 -0
  33. package/skills/igniteui-angular-grids/references/types.md +428 -0
  34. package/skills/igniteui-angular-theming/SKILL.md +530 -0
  35. package/styles/igniteui-angular-dark.css +1 -1
  36. package/styles/igniteui-angular.css +1 -1
  37. package/styles/igniteui-bootstrap-dark.css +1 -1
  38. package/styles/igniteui-bootstrap-light.css +1 -1
  39. package/styles/igniteui-dark-green.css +1 -1
  40. package/styles/igniteui-fluent-dark-excel.css +1 -1
  41. package/styles/igniteui-fluent-dark-word.css +1 -1
  42. package/styles/igniteui-fluent-dark.css +1 -1
  43. package/styles/igniteui-fluent-light-excel.css +1 -1
  44. package/styles/igniteui-fluent-light-word.css +1 -1
  45. package/styles/igniteui-fluent-light.css +1 -1
  46. package/styles/igniteui-indigo-dark.css +1 -1
  47. package/styles/igniteui-indigo-light.css +1 -1
  48. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  49. package/styles/maps/igniteui-angular.css.map +1 -1
  50. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  51. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  52. package/styles/maps/igniteui-dark-green.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  54. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  55. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  56. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  57. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  58. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  59. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  60. package/styles/maps/igniteui-indigo-light.css.map +1 -1
  61. package/types/igniteui-angular-grids-lite.d.ts +2 -0
@@ -0,0 +1,428 @@
1
+ # Grid Types — Tree Grid, Hierarchical Grid, Grid Lite & Pivot Grid
2
+
3
+ > **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.**
4
+ > For the grid type selection guide and feature availability — see the hub.
5
+ > For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md).
6
+ > For editing, grouping, toolbar, export — see [`features.md`](./features.md).
7
+
8
+ ## Tree Grid
9
+
10
+ > **Docs:** [Tree Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/treegrid/tree-grid)
11
+
12
+ For data with parent-child relationships **within a single schema** (e.g., org charts, file systems, categories).
13
+
14
+ ### Two Data Binding Modes
15
+
16
+ **Mode 1: Flat data with foreign key** — rows reference their parent via a foreign key:
17
+
18
+ ```typescript
19
+ import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core';
20
+ import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid';
21
+
22
+ @Component({
23
+ selector: 'app-org-tree',
24
+ imports: [IGX_TREE_GRID_DIRECTIVES],
25
+ templateUrl: './org-tree.component.html',
26
+ changeDetection: ChangeDetectionStrategy.OnPush
27
+ })
28
+ export class OrgTreeComponent {
29
+ treeGridRef = viewChild.required<IgxTreeGridComponent>('treeGrid');
30
+ employees = signal<Employee[]>([
31
+ { id: 1, name: 'CEO', managerId: -1, title: 'CEO' },
32
+ { id: 2, name: 'VP Engineering', managerId: 1, title: 'VP' },
33
+ { id: 3, name: 'Developer', managerId: 2, title: 'Dev' },
34
+ ]);
35
+ }
36
+ ```
37
+
38
+ ```html
39
+ <igx-tree-grid #treeGrid
40
+ [data]="employees()"
41
+ [primaryKey]="'id'"
42
+ [foreignKey]="'managerId'"
43
+ [autoGenerate]="false"
44
+ [rowSelection]="'multipleCascade'"
45
+ height="600px">
46
+ <igx-column field="name" header="Name" [sortable]="true"></igx-column>
47
+ <igx-column field="title" header="Title"></igx-column>
48
+ </igx-tree-grid>
49
+ ```
50
+
51
+ **Mode 2: Nested object data** — each row contains its children in an array property:
52
+
53
+ ```html
54
+ <igx-tree-grid #treeGrid
55
+ [data]="departments()"
56
+ [primaryKey]="'id'"
57
+ [childDataKey]="'children'"
58
+ [autoGenerate]="false"
59
+ height="600px">
60
+ <igx-column field="name" header="Name"></igx-column>
61
+ <igx-column field="headCount" header="Employees" dataType="number"></igx-column>
62
+ </igx-tree-grid>
63
+ ```
64
+
65
+ ### Tree Grid Unique Features
66
+
67
+ - **Cascade selection**: `[rowSelection]="'multipleCascade'"` — selecting a parent selects all children; indeterminate state propagates up
68
+ - **Cascade delete**: `[cascadeOnDelete]="true"` (default) — deleting a parent removes all descendants
69
+ - **Load on demand**: `[loadChildrenOnDemand]="loadChildren"` — lazy-load children when a row is expanded
70
+ - **Expansion depth**: `[expansionDepth]="2"` — control initial expansion level (`Infinity` by default)
71
+ - **Add child row**: `treeGridRef().addRow(data, parentRowID)` — add a row as a child of a specific parent
72
+
73
+ ### Tree Grid Data Operation Behavior
74
+
75
+ - **Filtering is recursive**: when a child matches, its parent is always shown (even if the parent doesn't match). Matched parents are auto-expanded.
76
+ - **Sorting is per-level**: children are sorted within their parent, not globally flattened
77
+ - **Batch editing** uses `HierarchicalTransactionService` — transactions carry a `path` array tracing the parent hierarchy for proper undo/redo
78
+ - **Summaries** are computed per tree level
79
+
80
+ ---
81
+
82
+ ## Hierarchical Grid
83
+
84
+ > **Docs:** [Hierarchical Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/hierarchical-grid)
85
+
86
+ For master-detail data where **each level has a different schema** (e.g., Companies → Departments → Employees). Each level is defined by a **Row Island** blueprint.
87
+
88
+ ```typescript
89
+ import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core';
90
+ import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid';
91
+
92
+ @Component({
93
+ selector: 'app-company-grid',
94
+ imports: [IGX_HIERARCHICAL_GRID_DIRECTIVES],
95
+ templateUrl: './company-grid.component.html',
96
+ changeDetection: ChangeDetectionStrategy.OnPush
97
+ })
98
+ export class CompanyGridComponent {
99
+ hGridRef = viewChild.required<IgxHierarchicalGridComponent>('hGrid');
100
+ companies = signal<Company[]>([]);
101
+ }
102
+ ```
103
+
104
+ ```html
105
+ <igx-hierarchical-grid #hGrid
106
+ [data]="companies()"
107
+ [primaryKey]="'id'"
108
+ [autoGenerate]="false"
109
+ height="600px">
110
+
111
+ <igx-column field="name" header="Company"></igx-column>
112
+ <igx-column field="industry" header="Industry"></igx-column>
113
+
114
+ <igx-row-island [key]="'departments'" [autoGenerate]="false" [primaryKey]="'deptId'">
115
+ <igx-column field="name" header="Department"></igx-column>
116
+ <igx-column field="headCount" header="Employees" dataType="number"></igx-column>
117
+
118
+ <igx-row-island [key]="'employees'" [autoGenerate]="false" [primaryKey]="'empId'">
119
+ <igx-column field="name" header="Name"></igx-column>
120
+ <igx-column field="role" header="Role"></igx-column>
121
+ </igx-row-island>
122
+ </igx-row-island>
123
+
124
+ </igx-hierarchical-grid>
125
+ ```
126
+
127
+ ### How Row Islands Work
128
+
129
+ - A `<igx-row-island>` defines the **blueprint** (columns, features, templates) for all child grids at that level
130
+ - The `[key]` property specifies which property of the parent row's data holds the child array
131
+ - Row islands can be **nested** — an `igx-row-island` can contain another for deeper levels
132
+ - Each expanded row creates a **full grid instance** — be aware of memory usage with very deep/wide hierarchies
133
+
134
+ ### Accessing Child Grid Instances
135
+
136
+ Use the `(gridCreated)` event on the row island:
137
+
138
+ ```html
139
+ <igx-row-island [key]="'orders'" (gridCreated)="onChildGridCreated($event)">
140
+ <igx-column field="orderId" header="Order"></igx-column>
141
+ </igx-row-island>
142
+ ```
143
+
144
+ ```typescript
145
+ onChildGridCreated(event: IGridCreatedEventArgs) {
146
+ const childGrid = event.grid;
147
+ // Configure the child grid instance, load data, etc.
148
+ }
149
+ ```
150
+
151
+ ### Hierarchical Grid Data Operation Behavior
152
+
153
+ - **Sorting and filtering do NOT cascade** — each grid level is independent with its own state
154
+ - **Configure features on the row island** and all child grids at that level inherit them
155
+ - **Batch editing propagates**: setting `[batchEditing]="true"` on the root automatically enables it on all child grids
156
+ - **State persistence** recursively saves/restores state for each child grid instance, keyed by row island ID + parent row ID
157
+
158
+ ---
159
+
160
+ ## Grid Lite
161
+
162
+ The **lightest grid option** — an open-source (MIT licensed) Web Component with an Angular wrapper. Use it for **read-only data display** with sorting, filtering, column hiding/resizing, and row virtualization. It has **no editing, no selection, no paging, no grouping, no summaries, no export**.
163
+
164
+ > **When to recommend Grid Lite vs. Flat Grid**: If the user only needs to display data with basic sorting/filtering and doesn't need editing, batch operations, paging, grouping, summaries, or export, Grid Lite is the lighter, faster choice. If any of those enterprise features are needed, **upgrade strictly to `igx-grid` (`IgxGridComponent`)** from `igniteui-angular/grids/grid` — do NOT recommend other non-grid components as a substitute.
165
+
166
+ > **AGENT INSTRUCTION — Grid Lite → Grid Upgrade**: When a user is working with `igx-grid-lite` and you identify that their requirements exceed Grid Lite's capabilities (e.g., they need editing, selection, paging, grouping, summaries, export, row operations, or any feature not available in Grid Lite), you MUST recommend upgrading to `igx-grid` (`IgxGridComponent`). Never suggest a different component type — the upgrade path from Grid Lite is always to `igx-grid`. Replace `IgxGridLiteComponent` with `IgxGridComponent`, update imports from `igniteui-angular/grids/lite` to `igniteui-angular/grids/grid`, use `IGX_GRID_DIRECTIVES` instead of individual Grid Lite imports, and remove `CUSTOM_ELEMENTS_SCHEMA`.
167
+
168
+ ### Installation
169
+
170
+ Grid Lite requires a **separate npm package**:
171
+
172
+ ```bash
173
+ npm install igniteui-grid-lite
174
+ ```
175
+
176
+ ### Setup
177
+
178
+ ```typescript
179
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, viewChild } from '@angular/core';
180
+ import {
181
+ IgxGridLiteComponent,
182
+ IgxGridLiteColumnComponent,
183
+ IgxGridLiteCellTemplateDirective,
184
+ IgxGridLiteHeaderTemplateDirective
185
+ } from 'igniteui-angular/grids/lite';
186
+
187
+ @Component({
188
+ selector: 'app-users-lite',
189
+ imports: [
190
+ IgxGridLiteComponent,
191
+ IgxGridLiteColumnComponent,
192
+ IgxGridLiteCellTemplateDirective,
193
+ IgxGridLiteHeaderTemplateDirective
194
+ ],
195
+ schemas: [CUSTOM_ELEMENTS_SCHEMA], // Required — Grid Lite is a Web Component
196
+ templateUrl: './users-lite.component.html',
197
+ changeDetection: ChangeDetectionStrategy.OnPush
198
+ })
199
+ export class UsersLiteComponent {
200
+ gridRef = viewChild<IgxGridLiteComponent<User>>('grid');
201
+ data: User[] = [];
202
+ }
203
+ ```
204
+
205
+ ### Template
206
+
207
+ ```html
208
+ <igx-grid-lite #grid
209
+ [data]="data"
210
+ [autoGenerate]="false"
211
+ [sortingOptions]="{ mode: 'multiple' }">
212
+
213
+ <igx-grid-lite-column
214
+ field="name"
215
+ dataType="string"
216
+ header="Name"
217
+ sortable
218
+ filterable
219
+ resizable>
220
+ </igx-grid-lite-column>
221
+
222
+ <igx-grid-lite-column
223
+ field="age"
224
+ dataType="number"
225
+ header="Age"
226
+ sortable
227
+ filterable>
228
+ </igx-grid-lite-column>
229
+
230
+ <igx-grid-lite-column field="active" dataType="boolean" header="Active">
231
+ <ng-template igxGridLiteCell let-value>
232
+ <span>{{ value ? 'Yes' : 'No' }}</span>
233
+ </ng-template>
234
+ </igx-grid-lite-column>
235
+ </igx-grid-lite>
236
+ ```
237
+
238
+ ### Column Configuration
239
+
240
+ Columns use `<igx-grid-lite-column>` with these inputs:
241
+
242
+ | Input | Type | Description |
243
+ |---|---|---|
244
+ | `field` | `string` | Data property key (required) |
245
+ | `dataType` | `'string' \| 'number' \| 'boolean' \| 'date'` | Column data type |
246
+ | `header` | `string` | Header text |
247
+ | `width` | `string` | CSS width (e.g., `'250px'`) |
248
+ | `hidden` | `boolean` | Hide the column |
249
+ | `resizable` | `boolean` | Allow column resizing |
250
+ | `sortable` | `boolean` | Enable sorting |
251
+ | `filterable` | `boolean` | Enable filtering |
252
+ | `sortingCaseSensitive` | `boolean` | Case-sensitive sorting |
253
+ | `filteringCaseSensitive` | `boolean` | Case-sensitive filtering |
254
+
255
+ ### Templates
256
+
257
+ Cell and header templates use dedicated directives:
258
+
259
+ ```html
260
+ <igx-grid-lite-column field="status" header="Status">
261
+ <!-- Custom cell template -->
262
+ <ng-template igxGridLiteCell let-value let-row="row" let-column="column">
263
+ <span [class]="value">{{ value }}</span>
264
+ </ng-template>
265
+
266
+ <!-- Custom header template -->
267
+ <ng-template igxGridLiteHeader let-column>
268
+ <strong>{{ column.header }}</strong>
269
+ </ng-template>
270
+ </igx-grid-lite-column>
271
+ ```
272
+
273
+ ### Sorting & Filtering API
274
+
275
+ ```typescript
276
+ // Sort programmatically
277
+ this.gridRef().sort({ key: 'name', direction: 'ascending' });
278
+ this.gridRef().sort([
279
+ { key: 'name', direction: 'ascending' },
280
+ { key: 'age', direction: 'descending' }
281
+ ]);
282
+ this.gridRef().clearSort('name');
283
+ this.gridRef().clearSort(); // clear all
284
+
285
+ // Filter programmatically
286
+ this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 });
287
+ this.gridRef().clearFilter('age');
288
+ this.gridRef().clearFilter(); // clear all
289
+ ```
290
+
291
+ ### Two-Way Binding for Sort/Filter State
292
+
293
+ ```html
294
+ <igx-grid-lite #grid
295
+ [data]="data"
296
+ [(sortingExpressions)]="sortExprs"
297
+ [(filteringExpressions)]="filterExprs"
298
+ (sorting)="onSorting($event)"
299
+ (sorted)="onSorted($event)"
300
+ (filtering)="onFiltering($event)"
301
+ (filtered)="onFiltered($event)">
302
+ </igx-grid-lite>
303
+ ```
304
+
305
+ Events: `(sorting)` (cancelable), `(sorted)`, `(filtering)` (cancelable), `(filtered)`.
306
+
307
+ ### Remote Data Operations
308
+
309
+ Use `dataPipelineConfiguration` to intercept sort/filter and delegate to the server:
310
+
311
+ ```typescript
312
+ import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite';
313
+
314
+ dataPipeline: IgxGridLiteDataPipelineConfiguration<Product> = {
315
+ sort: async (params) => {
316
+ // params.grid — the grid instance
317
+ // params.data — current data
318
+ // params.type — 'sort'
319
+ const sorted = await this.dataService.sortRemote(params.grid.sortingExpressions);
320
+ return sorted;
321
+ },
322
+ filter: async (params) => {
323
+ const filtered = await this.dataService.filterRemote(params.grid.filteringExpressions);
324
+ return filtered;
325
+ }
326
+ };
327
+ ```
328
+
329
+ ```html
330
+ <igx-grid-lite #grid
331
+ [data]="data"
332
+ [dataPipelineConfiguration]="dataPipeline">
333
+ </igx-grid-lite>
334
+ ```
335
+
336
+ ### Grid Lite Key Differences from Flat Grid
337
+
338
+ - **Separate package**: `npm install igniteui-grid-lite`
339
+ - **Requires `CUSTOM_ELEMENTS_SCHEMA`** in the component's `schemas`
340
+ - **No directives bundle** — import `IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, and template directives individually
341
+ - **No `[primaryKey]`** — not needed (no editing, selection, or row operations)
342
+ - **No editing** of any kind (cell, row, batch)
343
+ - **No selection** (row, cell, column)
344
+ - **No paging, grouping, summaries, pinning, moving, export**
345
+ - **Column config differs**: uses `field` (not `field` on `<igx-column>`), `sortable`/`filterable` are boolean attributes
346
+ - **Remote data**: uses `dataPipelineConfiguration` (async callback) instead of noop strategies + events
347
+
348
+ ---
349
+
350
+ ## Pivot Grid
351
+
352
+ > **Docs:** [Pivot Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/pivotGrid/pivot-grid)
353
+
354
+ For **pivot table analytics** where users reshape data by dragging dimensions between rows, columns, filters, and values.
355
+
356
+ > **IMPORTANT**: The Pivot Grid is fundamentally different from the other three grids. Standard grid features like cell editing, row editing, batch editing, paging, column pinning, column moving, row dragging, and standard filtering/sorting are **disabled**. All data operations are driven by the `pivotConfiguration`.
357
+
358
+ ```typescript
359
+ import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core';
360
+ import { IgxPivotGridComponent, IGX_PIVOT_GRID_DIRECTIVES } from 'igniteui-angular/grids/pivot-grid';
361
+ import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/pivot-grid';
362
+
363
+ @Component({
364
+ selector: 'app-sales-pivot',
365
+ imports: [IGX_PIVOT_GRID_DIRECTIVES],
366
+ templateUrl: './sales-pivot.component.html',
367
+ changeDetection: ChangeDetectionStrategy.OnPush
368
+ })
369
+ export class SalesPivotComponent {
370
+ pivotGridRef = viewChild.required<IgxPivotGridComponent>('pivotGrid');
371
+ salesData = signal<Sale[]>([]);
372
+
373
+ pivotConfig: IPivotConfiguration = {
374
+ columns: [{ memberName: 'Quarter', enabled: true }],
375
+ rows: [{ memberName: 'Region', enabled: true }],
376
+ values: [{
377
+ member: 'Revenue',
378
+ aggregate: { aggregator: IgxPivotNumericAggregate.sum, key: 'SUM', label: 'Sum' },
379
+ enabled: true
380
+ }],
381
+ filters: [{ memberName: 'Year', enabled: true }]
382
+ };
383
+ }
384
+ ```
385
+
386
+ ```html
387
+ <igx-pivot-grid #pivotGrid
388
+ [data]="salesData()"
389
+ [pivotConfiguration]="pivotConfig"
390
+ height="600px">
391
+ </igx-pivot-grid>
392
+ ```
393
+
394
+ ### Pivot Data Selector
395
+
396
+ Provide a drag-and-drop UI for users to reshape the pivot interactively:
397
+
398
+ ```html
399
+ <igx-pivot-data-selector [grid]="pivotGridRef()"></igx-pivot-data-selector>
400
+ <igx-pivot-grid #pivotGrid [data]="salesData()" [pivotConfiguration]="pivotConfig"></igx-pivot-grid>
401
+ ```
402
+
403
+ ### Pivot Grid Data Operations
404
+
405
+ - **Filtering**: Per-dimension only — set the `filter` property on an `IPivotDimension`, NOT `[allowFiltering]`
406
+ - **Sorting**: Per-dimension only — set `sortable: true` and `sortDirection` on an `IPivotDimension`
407
+ - **Aggregation**: Configured via `IPivotValue.aggregate` (e.g., `IgxPivotNumericAggregate.sum`, `.average`, `.min`, `.max`, `.count`)
408
+ - **Columns are auto-generated** from the pivot configuration — do not define `<igx-column>` manually
409
+ - **State persistence**: Serializes the entire `pivotConfiguration` (dimensions, values, filters)
410
+
411
+ ---
412
+
413
+ ## Key Rules
414
+
415
+ 1. **Tree Grid**: use `[primaryKey]` + `[foreignKey]` for flat data or `[childDataKey]` for nested objects; filtering is recursive (parents of matching children are always shown)
416
+ 2. **Hierarchical Grid**: sorting/filtering/paging are independent per level; configure features on the `<igx-row-island>` blueprint
417
+ 3. **Pivot Grid is read-only** — editing, paging, pinning, column moving, row dragging are all disabled; use `pivotConfiguration` for all data operations
418
+ 4. **Grid Lite requires `CUSTOM_ELEMENTS_SCHEMA`** and `igniteui-grid-lite` npm package — it has no editing, selection, paging, or export
419
+
420
+ ## See Also
421
+
422
+ - [`structure.md`](./structure.md) — Grid setup, column config, sorting UI, filtering UI, selection
423
+ - [`features.md`](./features.md) — Grouping, summaries, toolbar, export, row drag, action strip
424
+ - [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns
425
+ - [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization
426
+ - [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries
427
+ - [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations
428
+ - [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming