igniteui-angular 21.2.5 → 21.2.7

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 (30) hide show
  1. package/fesm2022/igniteui-angular-date-picker.mjs +2 -0
  2. package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
  3. package/fesm2022/igniteui-angular-grids-grid.mjs +13 -3
  4. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  5. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +20 -0
  6. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
  7. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +3 -2
  8. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  9. package/package.json +1 -1
  10. package/skills/igniteui-angular-components/SKILL.md +1 -1
  11. package/skills/igniteui-angular-components/references/charts.md +43 -222
  12. package/skills/igniteui-angular-components/references/data-display.md +7 -27
  13. package/skills/igniteui-angular-components/references/directives.md +12 -22
  14. package/skills/igniteui-angular-components/references/feedback.md +7 -15
  15. package/skills/igniteui-angular-components/references/form-controls.md +34 -24
  16. package/skills/igniteui-angular-components/references/layout-manager.md +2 -48
  17. package/skills/igniteui-angular-components/references/layout.md +0 -16
  18. package/skills/igniteui-angular-components/references/setup.md +0 -1
  19. package/skills/igniteui-angular-grids/SKILL.md +5 -0
  20. package/skills/igniteui-angular-grids/references/data-operations.md +16 -41
  21. package/skills/igniteui-angular-grids/references/editing.md +4 -12
  22. package/skills/igniteui-angular-grids/references/features.md +35 -26
  23. package/skills/igniteui-angular-grids/references/paging-remote.md +4 -8
  24. package/skills/igniteui-angular-grids/references/sizing.md +10 -0
  25. package/skills/igniteui-angular-grids/references/state.md +4 -14
  26. package/skills/igniteui-angular-grids/references/structure.md +1 -25
  27. package/skills/igniteui-angular-grids/references/types.md +11 -19
  28. package/types/igniteui-angular-grids-grid.d.ts +1 -0
  29. package/types/igniteui-angular-grids-hierarchical-grid.d.ts +9 -0
  30. package/types/igniteui-angular-grids-pivot-grid.d.ts +1 -0
@@ -18,8 +18,6 @@ This reference gives high-level guidance on when to use each feedback and overla
18
18
 
19
19
  ## Dialog
20
20
 
21
- > **Docs:** [Dialog Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/dialog)
22
-
23
21
  ```typescript
24
22
  import { IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective } from 'igniteui-angular/dialog';
25
23
  import { IgxButtonDirective } from 'igniteui-angular/directives';
@@ -31,7 +29,6 @@ import { IgxButtonDirective } from 'igniteui-angular/directives';
31
29
  [isModal]="true"
32
30
  [closeOnEscape]="true"
33
31
  [closeOnOutsideSelect]="false"
34
- title="Confirm Delete"
35
32
  (closed)="onDialogClosed()">
36
33
  <igx-dialog-title>Confirm Delete</igx-dialog-title>
37
34
  <p>Are you sure you want to delete this item? This action cannot be undone.</p>
@@ -57,10 +54,8 @@ Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(leftButtonSelect)`,
57
54
 
58
55
  ## Snackbar
59
56
 
60
- > **Docs:** [Snackbar Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/snackbar)
61
-
62
57
  ```typescript
63
- import { IgxSnackbarComponent, IgxSnackbarActionDirective } from 'igniteui-angular/snackbar';
58
+ import { IgxSnackbarComponent } from 'igniteui-angular/snackbar';
64
59
  import { IgxButtonDirective } from 'igniteui-angular/directives';
65
60
  ```
66
61
 
@@ -69,9 +64,10 @@ import { IgxButtonDirective } from 'igniteui-angular/directives';
69
64
  #snackbar
70
65
  [displayTime]="3000"
71
66
  [autoHide]="true"
67
+ actionText="UNDO"
68
+ (clicked)="undo()"
72
69
  (animationDone)="onSnackbarDone()">
73
70
  Item saved successfully
74
- <button igxButton="flat" igxSnackbarAction (click)="undo()">UNDO</button>
75
71
  </igx-snackbar>
76
72
  ```
77
73
 
@@ -88,8 +84,6 @@ save() {
88
84
 
89
85
  ## Toast
90
86
 
91
- > **Docs:** [Toast Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast)
92
-
93
87
  ```typescript
94
88
  import { IgxToastComponent } from 'igniteui-angular/toast';
95
89
  ```
@@ -104,8 +98,6 @@ Toast vs Snackbar: Toast is non-interactive (no action button), always auto-hide
104
98
 
105
99
  ## Banner
106
100
 
107
- > **Docs:** [Banner Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/banner)
108
-
109
101
  ```typescript
110
102
  import { IgxBannerComponent, IgxBannerActionsDirective } from 'igniteui-angular/banner';
111
103
  import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -114,12 +106,12 @@ import { IgxButtonDirective } from 'igniteui-angular/directives';
114
106
 
115
107
  ```html
116
108
  <igx-banner #banner (closed)="onBannerClosed()">
117
- <igx-icon igxBannerIcon>wifi_off</igx-icon>
109
+ <igx-icon>wifi_off</igx-icon>
118
110
  You are offline. Some features may not be available.
119
- <div igxBannerActions>
120
- <button igxButton="flat" (click)="banner.dismiss()">Dismiss</button>
111
+ <igx-banner-actions>
112
+ <button igxButton="flat" (click)="banner.close()">Dismiss</button>
121
113
  <button igxButton="flat" (click)="retry()">Retry</button>
122
- </div>
114
+ </igx-banner-actions>
123
115
  </igx-banner>
124
116
  ```
125
117
 
@@ -15,6 +15,7 @@
15
15
  - [Calendar](#calendar)
16
16
  - [Checkbox, Radio, Switch](#checkbox-radio-switch)
17
17
  - [Slider](#slider)
18
+ - [Autocomplete](#autocomplete)
18
19
  - [Reactive Forms Integration](#reactive-forms-integration)
19
20
  - [Key Rules](#key-rules)
20
21
 
@@ -23,8 +24,6 @@ This reference gives high-level guidance on when to use each form control compon
23
24
 
24
25
  ## Input Group
25
26
 
26
- > **Docs:** [Input Group](https://www.infragistics.com/products/ignite-ui-angular/angular/components/input-group)
27
-
28
27
  ```typescript
29
28
  import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group';
30
29
  import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -44,8 +43,6 @@ Types: `line` (default), `border`, `box`, `search`.
44
43
 
45
44
  ## Combo (Multi-Select Dropdown)
46
45
 
47
- > **Docs:** [Combo Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/combo)
48
-
49
46
  ```typescript
50
47
  import { IgxComboComponent } from 'igniteui-angular/combo';
51
48
  ```
@@ -68,8 +65,6 @@ Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(selectionChanging)`,
68
65
 
69
66
  ## Simple Combo (Single-Select)
70
67
 
71
- > **Docs:** [Combo — Single Selection](https://www.infragistics.com/products/ignite-ui-angular/angular/components/combo#single-selection)
72
-
73
68
  ```typescript
74
69
  import { IgxSimpleComboComponent } from 'igniteui-angular/simple-combo';
75
70
  ```
@@ -88,8 +83,6 @@ Same API as `igx-combo` but restricted to single selection.
88
83
 
89
84
  ## Select
90
85
 
91
- > **Docs:** [Select Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/select)
92
-
93
86
  ```typescript
94
87
  import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select';
95
88
  ```
@@ -104,8 +97,6 @@ import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/sel
104
97
 
105
98
  ## Date Picker
106
99
 
107
- > **Docs:** [Date Picker](https://www.infragistics.com/products/ignite-ui-angular/angular/components/date-picker)
108
-
109
100
  ```typescript
110
101
  import { IgxDatePickerComponent } from 'igniteui-angular/date-picker';
111
102
  ```
@@ -124,8 +115,6 @@ Implements `ControlValueAccessor` and `Validator`. Works with both reactive and
124
115
 
125
116
  ## Date Range Picker
126
117
 
127
- > **Docs:** [Date Range Picker](https://www.infragistics.com/products/ignite-ui-angular/angular/components/date-range-picker)
128
-
129
118
  ```typescript
130
119
  import { IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent } from 'igniteui-angular/date-picker';
131
120
  import { IgxDateTimeEditorDirective } from 'igniteui-angular/directives';
@@ -193,8 +182,6 @@ Common two-input configuration with calendar toggles:
193
182
 
194
183
  ## Time Picker
195
184
 
196
- > **Docs:** [Time Picker](https://www.infragistics.com/products/ignite-ui-angular/angular/components/time-picker)
197
-
198
185
  ```typescript
199
186
  import { IgxTimePickerComponent } from 'igniteui-angular/time-picker';
200
187
  ```
@@ -202,15 +189,12 @@ import { IgxTimePickerComponent } from 'igniteui-angular/time-picker';
202
189
  ```html
203
190
  <igx-time-picker
204
191
  [(ngModel)]="selectedTime"
205
- [inputFormat]="'HH:mm'"
206
- [is24HourFormat]="true">
192
+ [inputFormat]="'HH:mm'">
207
193
  </igx-time-picker>
208
194
  ```
209
195
 
210
196
  ## Calendar
211
197
 
212
- > **Docs:** [Calendar Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/calendar)
213
-
214
198
  ```typescript
215
199
  import { IgxCalendarComponent } from 'igniteui-angular/calendar';
216
200
  ```
@@ -228,8 +212,6 @@ Selection modes: `'single'`, `'multi'`, `'range'`.
228
212
 
229
213
  ## Checkbox, Radio, Switch
230
214
 
231
- > **Docs:** [Checkbox](https://www.infragistics.com/products/ignite-ui-angular/angular/components/checkbox) · [Radio Button](https://www.infragistics.com/products/ignite-ui-angular/angular/components/radio-button) · [Switch](https://www.infragistics.com/products/ignite-ui-angular/angular/components/switch)
232
-
233
215
  ```typescript
234
216
  import { IgxCheckboxComponent } from 'igniteui-angular/checkbox';
235
217
  import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular/radio';
@@ -249,8 +231,6 @@ import { IgxSwitchComponent } from 'igniteui-angular/switch';
249
231
 
250
232
  ## Slider
251
233
 
252
- > **Docs:** [Slider Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/slider/slider)
253
-
254
234
  ```typescript
255
235
  import { IgxSliderComponent, IgxSliderType } from 'igniteui-angular/slider';
256
236
 
@@ -275,12 +255,37 @@ public sliderType = IgxSliderType;
275
255
  </igx-slider>
276
256
  ```
277
257
 
258
+ ## Autocomplete
259
+
260
+ ```typescript
261
+ import { IgxAutocompleteDirective, IgxDropDownComponent, IgxDropDownItemComponent } from 'igniteui-angular/drop-down';
262
+ import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group';
263
+ ```
264
+
265
+ ```html
266
+ <igx-input-group type="border">
267
+ <label igxLabel>City</label>
268
+ <input igxInput type="text"
269
+ [(ngModel)]="selectedCity"
270
+ [igxAutocomplete]="citiesPanel" />
271
+ </igx-input-group>
272
+ <igx-drop-down #citiesPanel>
273
+ @for (city of cities | startsWith:selectedCity; track city) {
274
+ <igx-drop-down-item [value]="city">
275
+ {{ city }}
276
+ </igx-drop-down-item>
277
+ }
278
+ </igx-drop-down>
279
+ ```
280
+
281
+ The `igxAutocomplete` directive attaches to an input and displays a drop-down of suggestions as the user types. It references an `igx-drop-down` via a template variable.
282
+
283
+ Filtering is **not** built in — use a pipe or filter the data in the component to control which items appear.
284
+
278
285
  ## Reactive Forms Integration
279
286
 
280
287
  All form controls implement `ControlValueAccessor` and work with both reactive and template-driven forms.
281
288
 
282
- > **Docs:** [Angular Reactive Form Validation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/angular-reactive-form-validation)
283
-
284
289
  ```typescript
285
290
  import { ChangeDetectionStrategy, Component } from '@angular/core';
286
291
  import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
@@ -354,6 +359,11 @@ export class MyFormComponent {
354
359
  - Date/Time pickers implement both `ControlValueAccessor` and `Validator` — they integrate with reactive forms natively
355
360
  - For `igx-date-range-picker` with separate start and end inputs, use this structure for both inputs: `igx-picker-toggle igxPrefix`, then `input igxInput igxDateTimeEditor`, then optional `igx-picker-clear igxSuffix`.
356
361
  - Do not use a plain `igx-prefix` / `igx-suffix` icon for calendar or clear actions.
362
+ - How to choose between Combo, Simple Combo, Select, and Auto-complete:
363
+ - Use `igx-combo` for multi-select dropdowns with built-in filtering and grouping
364
+ - Use `igx-simple-combo` for single-select dropdowns with built-in filtering and grouping
365
+ - Use `igx-select` for simple single-select dropdowns without filtering or grouping (or when you want to provide custom filtering UI)
366
+ - Use `igxAutocomplete` for input fields with dynamic suggestions based on user input
357
367
 
358
368
  ## See Also
359
369
 
@@ -16,8 +16,6 @@ This reference gives high-level guidance on when to use each layout manager comp
16
16
 
17
17
  ## Layout Manager Directives
18
18
 
19
- > **Docs:** [Layout Manager](https://www.infragistics.com/products/ignite-ui-angular/angular/components/layout)
20
-
21
19
  The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties.
22
20
 
23
21
  ```typescript
@@ -115,9 +113,6 @@ import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directive
115
113
 
116
114
  ## Dock Manager
117
115
 
118
- > **Docs:** [Dock Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/dock-manager)
119
- > **Full API Docs:** [Dock Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/dock-manager.html)
120
-
121
116
  The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (`<igc-dockmanager>`). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component.
122
117
 
123
118
  ### Installation
@@ -130,12 +125,11 @@ npm install igniteui-dockmanager
130
125
 
131
126
  Because Dock Manager is a Web Component, it requires two one-time setup steps:
132
127
 
133
- **1. Register custom elements — `main.ts`:**
128
+ **1. Register custom elements — `app.config.ts`:**
134
129
 
135
130
  ```typescript
136
131
  import { defineCustomElements } from 'igniteui-dockmanager/loader';
137
132
 
138
- // Must be called before bootstrapApplication
139
133
  defineCustomElements();
140
134
  ```
141
135
 
@@ -366,50 +360,10 @@ export class DockManagerComponent {
366
360
  </igc-dockmanager>
367
361
  ```
368
362
 
369
- ### Pane Types
370
-
371
- | `IgcDockManagerPaneType` | Purpose |
372
- |---|---|
373
- | `splitPane` | Splits space horizontally or vertically between child panes |
374
- | `contentPane` | A single leaf pane that renders a slotted element via `contentId` |
375
- | `tabGroupPane` | Groups multiple `contentPane` children as tabs |
376
- | `documentHost` | A special area for `documentOnly: true` panes (like an editor area) |
377
-
378
- ### `IgcSplitPaneOrientation`
379
-
380
- | Value | Layout |
381
- |---|---|
382
- | `horizontal` | Children placed left-to-right |
383
- | `vertical` | Children placed top-to-bottom |
384
-
385
- ### Key `contentPane` Properties
386
-
387
- | Property | Type | Description |
388
- |---|---|---|
389
- | `contentId` | `string` | Matches the `slot` attribute on the rendered HTML element |
390
- | `header` | `string` | Tab/title bar label |
391
- | `isPinned` | `boolean` | `false` = auto-hidden (collapsed to edge); default `true` |
392
- | `documentOnly` | `boolean` | Restricts pane to `documentHost` areas only |
393
- | `size` | `number` | Relative size within parent split |
394
- | `allowClose` | `boolean` | Show close button (default `true`) |
395
- | `allowPinning` | `boolean` | Allow user to pin/unpin (default `true`) |
396
- | `allowFloating` | `boolean` | Allow user to float the pane (default `true`) |
397
-
398
- ### Key `splitPane` / floating pane Properties
399
-
400
- | Property | Type | Description |
401
- |---|---|---|
402
- | `orientation` | `IgcSplitPaneOrientation` | `horizontal` or `vertical` |
403
- | `size` | `number` | Relative size in the parent split |
404
- | `allowEmpty` | `boolean` | Allow pane to remain when all children are closed |
405
- | `floatingWidth` | `number` | Initial width of floating pane (px) |
406
- | `floatingHeight` | `number` | Initial height of floating pane (px) |
407
- | `floatingLocation` | `{x, y}` | Initial top-left corner position of floating pane |
408
-
409
363
  ### Key Rules for Dock Manager
410
364
 
411
365
  1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular`
412
- 2. **Call `defineCustomElements()` in `main.ts`** before `bootstrapApplication` — without this the `<igc-dockmanager>` element renders as an unknown element
366
+ 2. **Call `defineCustomElements()` from `igniteui-dockmanager/loader` in `app.config.ts`** — without this the `<igc-dockmanager>` element renders as an unknown element
413
367
  3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `<igc-dockmanager>`
414
368
  4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout
415
369
  5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users
@@ -17,8 +17,6 @@ This reference gives high-level guidance on when to use each layout component, t
17
17
 
18
18
  ## Tabs
19
19
 
20
- > **Docs:** [Tabs Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabs)
21
-
22
20
  ```typescript
23
21
  import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs';
24
22
  import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -46,8 +44,6 @@ Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'cente
46
44
 
47
45
  ## Bottom Navigation
48
46
 
49
- > **Docs:** [Bottom Navigation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabbar)
50
-
51
47
  ```typescript
52
48
  import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav';
53
49
  ```
@@ -73,8 +69,6 @@ import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderCom
73
69
 
74
70
  ## Stepper
75
71
 
76
- > **Docs:** [Stepper Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/stepper)
77
-
78
72
  ```typescript
79
73
  import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper';
80
74
  ```
@@ -100,10 +94,6 @@ import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper';
100
94
  </igx-stepper>
101
95
  ```
102
96
 
103
- Key inputs: `[linear]`, `[orientation]` (`'horizontal'` | `'vertical'`), `[stepType]` (`'indicator'` | `'title'` | `'full'`), `[animationType]`.
104
-
105
- Events: `(activeStepChanging)`, `(activeStepChanged)`.
106
-
107
97
  Programmatic navigation:
108
98
  ```typescript
109
99
  stepper = viewChild.required(IgxStepperComponent);
@@ -115,8 +105,6 @@ navigateTo(index: number) { this.stepper().navigateTo(index); }
115
105
 
116
106
  ## Accordion
117
107
 
118
- > **Docs:** [Accordion Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/accordion)
119
-
120
108
  ```typescript
121
109
  import { IgxAccordionComponent } from 'igniteui-angular/accordion';
122
110
  import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel';
@@ -154,8 +142,6 @@ Standalone `igx-expansion-panel` (without accordion):
154
142
 
155
143
  ## Splitter
156
144
 
157
- > **Docs:** [Splitter Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/splitter)
158
-
159
145
  ```typescript
160
146
  import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter';
161
147
  ```
@@ -180,8 +166,6 @@ import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'ig
180
166
 
181
167
  ## Navigation Drawer
182
168
 
183
- > **Docs:** [Navigation Drawer](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navdrawer)
184
-
185
169
  ```typescript
186
170
  import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer';
187
171
  import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -44,7 +44,6 @@ export const appConfig: ApplicationConfig = {
44
44
  |---|---|---|
45
45
  | `provideAnimations()` | `@angular/platform-browser/animations` | **All overlay and animated components** — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service |
46
46
  | `importProvidersFrom(HammerModule)` | `@angular/platform-browser` | OPTIONAL — touch gestures (Slider, Drag & Drop, swipe) |
47
- | `provideIgniteIntl()` | `igniteui-angular/core` | Localization for grids, date/time pickers, and components displaying formatted values |
48
47
 
49
48
  > **`provideAnimationsAsync()`** lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size:
50
49
  > ```typescript
@@ -44,6 +44,11 @@ Base your code and explanation exclusively on what you read in Step 3. If the re
44
44
 
45
45
  ---
46
46
 
47
+ ## Overview
48
+ This reference gives high-level guidance on grids and their features. For detailed documentation, call `get_doc` and `get_api_reference` from `igniteui-cli` with the specific component and feature you're interested in.
49
+
50
+ ---
51
+
47
52
  ## Prerequisites
48
53
 
49
54
  - Angular 20+ project
@@ -20,32 +20,6 @@ All programmatic data operations require a reference to the grid component. Use
20
20
 
21
21
  > **AGENT INSTRUCTION:** Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular`. Replace the package prefix in every import accordingly. Always use specific entry points — never the root barrel of either package.
22
22
 
23
- ```typescript
24
- import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core';
25
-
26
- // Open-source package — import from specific entry points
27
- // Grid Lite (separate npm package — requires `npm install igniteui-grid-lite`)
28
- import { IgxGridLiteComponent } from 'igniteui-angular/grids/lite';
29
- // Flat Grid
30
- import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid';
31
- // Tree Grid
32
- import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid';
33
- // Hierarchical Grid
34
- import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid';
35
- // Pivot Grid
36
- import { IgxPivotGridComponent, IGX_PIVOT_GRID_DIRECTIVES } from 'igniteui-angular/grids/pivot-grid';
37
-
38
- // Licensed package — same entry-point paths, different prefix:
39
- // import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid';
40
- // import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/tree-grid';
41
- // import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/hierarchical-grid';
42
- // import { IgxPivotGridComponent, IGX_PIVOT_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/pivot-grid';
43
-
44
- // AVOID — never import from the root barrel (wrong for BOTH variants)
45
- // import { IgxGridComponent } from 'igniteui-angular';
46
- // import { IgxGridComponent } from '@infragistics/igniteui-angular';
47
- ```
48
-
49
23
  ### Flat Grid Example
50
24
 
51
25
  ```typescript
@@ -123,8 +97,6 @@ export class CompanyGridComponent {
123
97
 
124
98
  ## Sorting
125
99
 
126
- > **Docs:** [Sorting](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sorting) · [Tree Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/treegrid/sorting) · [Hierarchical Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/sorting)
127
-
128
100
  > **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. Pivot Grid uses dimension-level sorting instead (see [`state.md`](./state.md)). **Grid Lite** uses a different sorting API — see [`state.md`](./state.md).
129
101
  >
130
102
  > **Tree Grid behavior**: sorting is applied per-level — children are sorted among their siblings, not globally flattened.
@@ -178,18 +150,21 @@ this.gridRef().clearSort();
178
150
  | Event | Cancelable | Payload |
179
151
  |---|---|---|
180
152
  | `(sorting)` | Yes | `ISortingEventArgs` — set `event.cancel = true` to prevent |
181
- | `(sortingDone)` | No | `ISortingEventArgs` — fires after sort is applied |
153
+ | `(sortingDone)` | No | `ISortingExpression \| ISortingExpression[]` — fires after sort is applied |
182
154
 
183
155
  ```typescript
184
156
  onSorting(event: ISortingEventArgs) {
185
157
  // Prevent sorting on a specific column
186
- if (event.fieldName === 'id') {
158
+ const exprs = Array.isArray(event.sortingExpressions)
159
+ ? event.sortingExpressions : [event.sortingExpressions];
160
+ if (exprs.some(e => e?.fieldName === 'id')) {
187
161
  event.cancel = true;
188
162
  }
189
163
  }
190
164
 
191
- onSortingDone(event: ISortingEventArgs) {
192
- console.log('Sorted by:', event.fieldName, event.dir);
165
+ onSortingDone(event: ISortingExpression | ISortingExpression[]) {
166
+ const expr = Array.isArray(event) ? event[0] : event;
167
+ console.log('Sorted by:', expr.fieldName, expr.dir);
193
168
  // Good place to trigger remote data fetch
194
169
  }
195
170
  ```
@@ -204,8 +179,8 @@ import { ISortingStrategy, SortingDirection } from 'igniteui-angular/core';
204
179
  class PrioritySortStrategy implements ISortingStrategy {
205
180
  private priorityOrder = ['Critical', 'High', 'Medium', 'Low'];
206
181
 
207
- sort(data: any[], fieldName: string, dir: SortingDirection): any[] {
208
- return data.sort((a, b) => {
182
+ sort(data: any[], fieldName: string, dir: SortingDirection, ignoreCase: boolean, valueResolver: (obj: any, key: string) => any): any[] {
183
+ return [...data].sort((a, b) => {
209
184
  const indexA = this.priorityOrder.indexOf(a[fieldName]);
210
185
  const indexB = this.priorityOrder.indexOf(b[fieldName]);
211
186
  return dir === SortingDirection.Asc ? indexA - indexB : indexB - indexA;
@@ -220,8 +195,6 @@ class PrioritySortStrategy implements ISortingStrategy {
220
195
 
221
196
  ## Filtering
222
197
 
223
- > **Docs:** [Filtering](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/filtering) · [Excel-Style](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/excel-style-filtering) · [Advanced](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/advanced-filtering) (substitute URL prefix per grid type)
224
-
225
198
  > **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. Pivot Grid uses dimension-level filtering instead (see [`state.md`](./state.md)). **Grid Lite** uses a different filtering API — see [`state.md`](./state.md).
226
199
  >
227
200
  > **Tree Grid behavior**: filtering is **recursive** — when a child matches, all its ancestor rows are shown (even if they don't match) and auto-expanded.
@@ -305,8 +278,11 @@ this.gridRef().cdr.detectChanges();
305
278
 
306
279
  ### Global Filtering & Cross-Column Logic
307
280
 
281
+ > **DEPRECATED (v19.0+):** `filterGlobal()` is deprecated. Use `filteringExpressionsTree` to build a tree that applies conditions across all columns instead.
282
+
308
283
  ```typescript
309
284
  // Filter all filterable columns at once with a search term
285
+ // ⚠️ Deprecated since v19.0 — prefer filteringExpressionsTree
310
286
  this.gridRef().filterGlobal('search term', IgxStringFilteringOperand.instance().condition('contains'), true);
311
287
  ```
312
288
 
@@ -319,7 +295,8 @@ Control the AND/OR logic between **different column** filters:
319
295
  ```
320
296
 
321
297
  ```typescript
322
- import { FilteringLogic } from 'igniteui-angular';
298
+ import { FilteringLogic } from 'igniteui-angular/core';
299
+ // import { FilteringLogic } from '@infragistics/igniteui-angular/core'; for licensed package
323
300
 
324
301
  // FilteringLogic.And (default) — row must match ALL column filters
325
302
  // FilteringLogic.Or — row must match ANY column filter
@@ -331,11 +308,11 @@ filteringLogic = FilteringLogic.And;
331
308
  | Event | Cancelable | Payload |
332
309
  |---|---|---|
333
310
  | `(filtering)` | Yes | `IFilteringEventArgs` — set `event.cancel = true` to prevent |
334
- | `(filteringDone)` | No | `IFilteringEventArgs` — fires after a **column-level** filter is applied |
311
+ | `(filteringDone)` | No | `IFilteringExpressionsTree` — fires after a **column-level** filter is applied |
335
312
  | `(filteringExpressionsTreeChange)` | No | `IFilteringExpressionsTree` — fires after the **grid-level** filter tree changes (use this for remote data) |
336
313
 
337
314
  ```typescript
338
- onFilteringDone(event: IFilteringEventArgs) {
315
+ onFilteringDone(event: IFilteringExpressionsTree) {
339
316
  // Trigger remote data fetch with new filter state
340
317
  this.loadFilteredData();
341
318
  }
@@ -354,8 +331,6 @@ onFilteringDone(event: IFilteringEventArgs) {
354
331
 
355
332
  ## Grouping (Flat Grid Only)
356
333
 
357
- > **Docs:** [Group By](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/groupby)
358
-
359
334
  > **NOTE**: GroupBy is **exclusive to the Flat Grid** (`igx-grid`). Tree Grid uses its natural hierarchy. Hierarchical Grid uses row islands. Pivot Grid uses dimensions.
360
335
 
361
336
  ### Template-Driven Grouping
@@ -31,8 +31,6 @@
31
31
 
32
32
  ### Cell Editing (Immediate)
33
33
 
34
- > **Docs:** [Cell Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/cell-editing)
35
-
36
34
  The simplest mode. Each cell saves the moment the user tabs away or presses Enter.
37
35
 
38
36
  ```typescript
@@ -78,9 +76,7 @@ export class CarsGridComponent {
78
76
  </igx-grid>
79
77
  ```
80
78
 
81
- ### Row Editing (Recommended for CRUD)
82
-
83
- > **Docs:** [Row Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/row-editing)
79
+ ### Row Editing
84
80
 
85
81
  Users click into a row, edit cells, then click **Done** or **Cancel** — changes only apply when Done is pressed. An overlay toolbar appears automatically.
86
82
 
@@ -171,10 +167,10 @@ When starting a new row programmatically, pre-populate fields using `(cellEditEn
171
167
  ```typescript
172
168
  onCellEditEnter(event: IGridEditEventArgs) {
173
169
  if (event.isAddRow && event.column.field === 'available') {
174
- event.cellEditArgs.newValue = true; // default new cars to available
170
+ event.newValue = true; // default new cars to available
175
171
  }
176
172
  if (event.isAddRow && event.column.field === 'year') {
177
- event.cellEditArgs.newValue = new Date().getFullYear();
173
+ event.newValue = new Date().getFullYear();
178
174
  }
179
175
  }
180
176
  ```
@@ -370,8 +366,6 @@ onCellEdit(event: IGridEditEventArgs) {
370
366
 
371
367
  ## Validation
372
368
 
373
- > **Docs:** [Validation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/validation)
374
-
375
369
  ### Template-Driven Validation
376
370
 
377
371
  Apply Angular validators directly on columns:
@@ -417,8 +411,6 @@ this.gridRef().validation.clear(recordId);
417
411
 
418
412
  ## Summaries
419
413
 
420
- > **Docs:** [Summaries](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/summaries) (substitute URL prefix per grid type)
421
-
422
414
  ### Built-In Summaries
423
415
 
424
416
  ```html
@@ -475,7 +467,7 @@ When grouping is enabled, summaries appear for each group. Control this with:
475
467
  2. **`[primaryKey]` is required for all editing** — row editing, batch editing, row adding, and row deletion all depend on it (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite)
476
468
  3. **Always set `[autoGenerate]="false"` when editing** — define columns explicitly and mark each with `[editable]="true"` to control exactly what users can change
477
469
  4. **Batch editing requires `[primaryKey]`** — call `endEdit(true)` before `transactions.undo()`/`redo()`, commit via `transactions.commit(data)`
478
- 5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(paging)` to prevent the action
470
+ 5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(rowEditEnter)`, `(cellEditEnter)` to prevent the action
479
471
  6. **Validation** — use template-driven validators on columns (`required`, `min`, `max`, `email`, `pattern`) or reactive validators via `(formGroupCreated)`
480
472
  7. **Use the correct component type for `viewChild`** — `IgxGridComponent`, `IgxTreeGridComponent`, `IgxHierarchicalGridComponent`, or `IgxPivotGridComponent`
481
473
  8. **Import the correct directives/components** — `IGX_GRID_DIRECTIVES`, `IGX_TREE_GRID_DIRECTIVES`, `IGX_HIERARCHICAL_GRID_DIRECTIVES`, or `IGX_PIVOT_GRID_DIRECTIVES`