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.
- package/fesm2022/igniteui-angular-date-picker.mjs +2 -0
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +13 -3
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +20 -0
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +3 -2
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/igniteui-angular-components/SKILL.md +1 -1
- package/skills/igniteui-angular-components/references/charts.md +43 -222
- package/skills/igniteui-angular-components/references/data-display.md +7 -27
- package/skills/igniteui-angular-components/references/directives.md +12 -22
- package/skills/igniteui-angular-components/references/feedback.md +7 -15
- package/skills/igniteui-angular-components/references/form-controls.md +34 -24
- package/skills/igniteui-angular-components/references/layout-manager.md +2 -48
- package/skills/igniteui-angular-components/references/layout.md +0 -16
- package/skills/igniteui-angular-components/references/setup.md +0 -1
- package/skills/igniteui-angular-grids/SKILL.md +5 -0
- package/skills/igniteui-angular-grids/references/data-operations.md +16 -41
- package/skills/igniteui-angular-grids/references/editing.md +4 -12
- package/skills/igniteui-angular-grids/references/features.md +35 -26
- package/skills/igniteui-angular-grids/references/paging-remote.md +4 -8
- package/skills/igniteui-angular-grids/references/sizing.md +10 -0
- package/skills/igniteui-angular-grids/references/state.md +4 -14
- package/skills/igniteui-angular-grids/references/structure.md +1 -25
- package/skills/igniteui-angular-grids/references/types.md +11 -19
- package/types/igniteui-angular-grids-grid.d.ts +1 -0
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +9 -0
- 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
|
|
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
|
|
109
|
+
<igx-icon>wifi_off</igx-icon>
|
|
118
110
|
You are offline. Some features may not be available.
|
|
119
|
-
<
|
|
120
|
-
<button igxButton="flat" (click)="banner.
|
|
111
|
+
<igx-banner-actions>
|
|
112
|
+
<button igxButton="flat" (click)="banner.close()">Dismiss</button>
|
|
121
113
|
<button igxButton="flat" (click)="retry()">Retry</button>
|
|
122
|
-
</
|
|
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 — `
|
|
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 `
|
|
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 | `
|
|
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
|
-
|
|
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:
|
|
192
|
-
|
|
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 | `
|
|
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:
|
|
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
|
|
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.
|
|
170
|
+
event.newValue = true; // default new cars to available
|
|
175
171
|
}
|
|
176
172
|
if (event.isAddRow && event.column.field === 'year') {
|
|
177
|
-
event.
|
|
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)`, `(
|
|
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`
|