igniteui-angular 21.1.0 → 21.1.2
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-directives.mjs +28 -28
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-core.mjs +3 -0
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +10 -7
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +2 -2
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/igniteui-angular-components/SKILL.md +6 -9
- package/skills/igniteui-angular-components/references/charts.md +20 -10
- package/skills/igniteui-angular-components/references/data-display.md +13 -0
- package/skills/igniteui-angular-components/references/directives.md +123 -0
- package/skills/igniteui-angular-components/references/feedback.md +8 -0
- package/skills/igniteui-angular-components/references/form-controls.md +15 -0
- package/skills/igniteui-angular-components/references/layout-manager.md +5 -0
- package/skills/igniteui-angular-components/references/layout.md +9 -0
- package/skills/igniteui-angular-components/references/setup.md +10 -1
- package/skills/igniteui-angular-grids/SKILL.md +6 -6
- package/skills/igniteui-angular-grids/references/data-operations.md +13 -4
- package/skills/igniteui-angular-grids/references/editing.md +12 -1
- package/skills/igniteui-angular-grids/references/features.md +26 -10
- package/skills/igniteui-angular-grids/references/paging-remote.md +13 -4
- package/skills/igniteui-angular-grids/references/state.md +17 -151
- package/skills/igniteui-angular-grids/references/structure.md +9 -0
- package/skills/igniteui-angular-grids/references/types.md +104 -25
- package/skills/igniteui-angular-theming/SKILL.md +6 -106
- package/skills/igniteui-angular-theming/references/common-patterns.md +45 -0
- package/skills/igniteui-angular-theming/references/mcp-setup.md +77 -0
- package/types/igniteui-angular-grids-grid.d.ts +1 -0
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
> For Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite setup — see [`types.md`](./types.md).
|
|
6
6
|
> For paging and remote data — see [`paging-remote.md`](./paging-remote.md).
|
|
7
7
|
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
- [State Persistence](#state-persistence)
|
|
11
|
+
- [Tree Grid Data Operations](#tree-grid-data-operations)
|
|
12
|
+
- [Hierarchical Grid Data Operations](#hierarchical-grid-data-operations)
|
|
13
|
+
- [Pivot Grid Data Operations](#pivot-grid-data-operations)
|
|
14
|
+
- [Grid Lite Data Operations](#grid-lite-data-operations)
|
|
15
|
+
- [Key Rules](#key-rules)
|
|
16
|
+
|
|
8
17
|
## State Persistence
|
|
9
18
|
|
|
10
19
|
> **Docs:** [State Persistence](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/state-persistence) (substitute URL prefix per grid type)
|
|
@@ -20,7 +29,7 @@ Use `IgxGridStateDirective` to persist sorting, filtering, grouping, paging, sel
|
|
|
20
29
|
```
|
|
21
30
|
|
|
22
31
|
```typescript
|
|
23
|
-
import { IgxGridStateDirective } from 'igniteui-angular/grids/
|
|
32
|
+
import { IgxGridStateDirective } from 'igniteui-angular/grids/core';
|
|
24
33
|
|
|
25
34
|
export class StatefulGridComponent {
|
|
26
35
|
gridState = viewChild.required(IgxGridStateDirective);
|
|
@@ -234,7 +243,7 @@ Setting `[batchEditing]="true"` on the root hierarchical grid automatically prop
|
|
|
234
243
|
### Dimension-Based Filtering
|
|
235
244
|
|
|
236
245
|
```typescript
|
|
237
|
-
import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/
|
|
246
|
+
import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/core';
|
|
238
247
|
|
|
239
248
|
// Create a filter for a dimension
|
|
240
249
|
const regionFilter = new FilteringExpressionsTree(FilteringLogic.Or);
|
|
@@ -277,155 +286,12 @@ this.pivotGridRef().pipeTrigger++;
|
|
|
277
286
|
|
|
278
287
|
## Grid Lite Data Operations
|
|
279
288
|
|
|
280
|
-
**Grid Lite
|
|
281
|
-
|
|
282
|
-
>
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
import {
|
|
288
|
-
IgxGridLiteComponent,
|
|
289
|
-
IgxGridLiteSortingExpression,
|
|
290
|
-
IgxGridLiteSortingOptions
|
|
291
|
-
} from 'igniteui-angular/grids/lite';
|
|
292
|
-
|
|
293
|
-
@Component({
|
|
294
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
295
|
-
// ...
|
|
296
|
-
})
|
|
297
|
-
export class GridLiteSortExample {
|
|
298
|
-
gridRef = viewChild<IgxGridLiteComponent<Product>>('grid');
|
|
299
|
-
|
|
300
|
-
// Sorting options: mode can be 'single' or 'multiple'
|
|
301
|
-
sortingOptions: IgxGridLiteSortingOptions = { mode: 'multiple' };
|
|
302
|
-
|
|
303
|
-
// Initial sort state
|
|
304
|
-
sortExprs: IgxGridLiteSortingExpression[] = [
|
|
305
|
-
{ key: 'name', direction: 'ascending' }
|
|
306
|
-
];
|
|
307
|
-
|
|
308
|
-
sortByPrice() {
|
|
309
|
-
// Sort programmatically (single expression or array)
|
|
310
|
-
this.gridRef().sort({ key: 'price', direction: 'descending' });
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
clearAllSorts() {
|
|
314
|
-
this.gridRef().clearSort(); // clear all
|
|
315
|
-
// or: this.gridRef().clearSort('price'); // clear specific column
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
```html
|
|
321
|
-
<igx-grid-lite #grid
|
|
322
|
-
[data]="data"
|
|
323
|
-
[sortingOptions]="sortingOptions"
|
|
324
|
-
[(sortingExpressions)]="sortExprs"
|
|
325
|
-
(sorting)="onSorting($event)"
|
|
326
|
-
(sorted)="onSorted($event)">
|
|
327
|
-
<igx-grid-lite-column field="name" header="Name" sortable></igx-grid-lite-column>
|
|
328
|
-
<igx-grid-lite-column field="price" header="Price" dataType="number" sortable></igx-grid-lite-column>
|
|
329
|
-
</igx-grid-lite>
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Sort expression shape: `{ key: string, direction: 'ascending' | 'descending' | 'none' }`
|
|
333
|
-
|
|
334
|
-
Sorting modes:
|
|
335
|
-
- `'single'` — only one column sorted at a time
|
|
336
|
-
- `'multiple'` — multi-column sorting
|
|
337
|
-
- `triState: true` — allows cycling through ascending → descending → none
|
|
338
|
-
|
|
339
|
-
### Grid Lite Filtering
|
|
340
|
-
|
|
341
|
-
```typescript
|
|
342
|
-
import {
|
|
343
|
-
IgxGridLiteComponent,
|
|
344
|
-
IgxGridLiteFilteringExpression
|
|
345
|
-
} from 'igniteui-angular/grids/lite';
|
|
346
|
-
|
|
347
|
-
// Filter expression shape
|
|
348
|
-
const filters: IgxGridLiteFilteringExpression[] = [
|
|
349
|
-
{ key: 'price', condition: 'greaterThan', searchTerm: 100 },
|
|
350
|
-
{ key: 'name', condition: 'contains', searchTerm: 'Widget' }
|
|
351
|
-
];
|
|
352
|
-
|
|
353
|
-
// Programmatic filtering
|
|
354
|
-
this.gridRef().filter({ key: 'price', condition: 'greaterThan', searchTerm: 100 });
|
|
355
|
-
this.gridRef().clearFilter('price');
|
|
356
|
-
this.gridRef().clearFilter(); // clear all
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
```html
|
|
360
|
-
<igx-grid-lite #grid
|
|
361
|
-
[data]="data"
|
|
362
|
-
[(filteringExpressions)]="filterExprs"
|
|
363
|
-
(filtering)="onFiltering($event)"
|
|
364
|
-
(filtered)="onFiltered($event)">
|
|
365
|
-
<igx-grid-lite-column field="name" header="Name" filterable></igx-grid-lite-column>
|
|
366
|
-
<igx-grid-lite-column field="price" header="Price" dataType="number" filterable></igx-grid-lite-column>
|
|
367
|
-
</igx-grid-lite>
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
Filter expression shape: `{ key: string, condition: string, searchTerm: any, criteria?: any[], caseSensitive?: boolean }`
|
|
371
|
-
|
|
372
|
-
Filter conditions depend on `dataType`:
|
|
373
|
-
- **string**: `contains`, `startsWith`, `endsWith`, `equals`, `doesNotContain`, `doesNotEqual`, `empty`, `notEmpty`, `null`, `notNull`
|
|
374
|
-
- **number**: `equals`, `doesNotEqual`, `greaterThan`, `lessThan`, `greaterThanOrEqualTo`, `lessThanOrEqualTo`, `empty`, `notEmpty`, `null`, `notNull`
|
|
375
|
-
- **boolean**: `all`, `true`, `false`, `empty`, `notEmpty`, `null`, `notNull`
|
|
376
|
-
- **date**: `equals`, `doesNotEqual`, `before`, `after`, `today`, `yesterday`, `thisMonth`, `lastMonth`, `nextMonth`, `thisYear`, `lastYear`, `nextYear`, `empty`, `notEmpty`, `null`, `notNull`
|
|
377
|
-
|
|
378
|
-
### Grid Lite Remote Data Operations
|
|
379
|
-
|
|
380
|
-
Grid Lite uses `dataPipelineConfiguration` — a callback-based approach (NOT noop strategies):
|
|
381
|
-
|
|
382
|
-
```typescript
|
|
383
|
-
import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite';
|
|
384
|
-
|
|
385
|
-
dataPipeline: IgxGridLiteDataPipelineConfiguration<Product> = {
|
|
386
|
-
sort: async (params) => {
|
|
387
|
-
// params.grid — the grid instance
|
|
388
|
-
// params.data — current data array
|
|
389
|
-
// params.type — 'sort'
|
|
390
|
-
const result = await fetch(`/api/products?sort=${JSON.stringify(params.grid.sortingExpressions)}`);
|
|
391
|
-
return await result.json();
|
|
392
|
-
},
|
|
393
|
-
filter: async (params) => {
|
|
394
|
-
const result = await fetch(`/api/products?filter=${JSON.stringify(params.grid.filteringExpressions)}`);
|
|
395
|
-
return await result.json();
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
```html
|
|
401
|
-
<igx-grid-lite #grid
|
|
402
|
-
[data]="data"
|
|
403
|
-
[dataPipelineConfiguration]="dataPipeline">
|
|
404
|
-
</igx-grid-lite>
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
Callbacks can be synchronous (return `T[]`) or asynchronous (return `Promise<T[]>`). When a `dataPipelineConfiguration` callback is provided for a given operation, the client-side pipeline for that operation is bypassed entirely.
|
|
408
|
-
|
|
409
|
-
### Grid Lite Events
|
|
410
|
-
|
|
411
|
-
| Event | Cancelable | Payload |
|
|
412
|
-
|---|---|---|
|
|
413
|
-
| `(sorting)` | Yes (`event.detail.cancel = true`) | Sorting expression about to be applied |
|
|
414
|
-
| `(sorted)` | No | Sorting completed |
|
|
415
|
-
| `(filtering)` | Yes (`event.detail.cancel = true`) | Filter expression about to be applied |
|
|
416
|
-
| `(filtered)` | No | Filtering completed |
|
|
417
|
-
|
|
418
|
-
### Grid Lite Limitations (No Data Operations)
|
|
419
|
-
|
|
420
|
-
These data operations are **NOT available** in Grid Lite:
|
|
421
|
-
- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions
|
|
422
|
-
- Grouping — no `groupBy()`, no `IgxGroupByRow`
|
|
423
|
-
- Paging — no `IgxPaginatorComponent`
|
|
424
|
-
- Summaries — no `IgxSummaryOperand`
|
|
425
|
-
- Selection — no `rowSelection`, `cellSelection`, or `columnSelection`
|
|
426
|
-
- State persistence — no `IgxGridStateDirective`
|
|
427
|
-
- Export — no `IgxExcelExporterService` or `IgxCsvExporterService`
|
|
428
|
-
- Advanced filtering — no `advancedFilteringExpressionsTree`
|
|
289
|
+
> **Grid Lite sorting, filtering, remote data, events, and limitations are fully documented in [`types.md`](./types.md#grid-lite).** Refer to that file for all Grid Lite data operations — this section intentionally avoids duplicating that content.
|
|
290
|
+
>
|
|
291
|
+
> Key differences from Flat/Tree/Hierarchical Grid APIs:
|
|
292
|
+
> - Uses `IgxGridLiteSortingExpression` / `IgxGridLiteFilteringExpression` (NOT `ISortingExpression` / `FilteringExpressionsTree`)
|
|
293
|
+
> - Uses `dataPipelineConfiguration` for remote ops (NOT noop strategies + events)
|
|
294
|
+
> - Has no editing, grouping, paging, summaries, selection, state persistence, or export
|
|
429
295
|
|
|
430
296
|
## Key Rules
|
|
431
297
|
|
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md).
|
|
7
7
|
> For programmatic data operations — see [`data-operations.md`](./data-operations.md).
|
|
8
8
|
|
|
9
|
+
## Contents
|
|
10
|
+
|
|
11
|
+
- [Quick Start](#quick-start)
|
|
12
|
+
- [Column Configuration](#column-configuration)
|
|
13
|
+
- [Sorting](#sorting)
|
|
14
|
+
- [Filtering](#filtering)
|
|
15
|
+
- [Selection](#selection)
|
|
16
|
+
- [Key Rules](#key-rules)
|
|
17
|
+
|
|
9
18
|
## Quick Start
|
|
10
19
|
|
|
11
20
|
### Imports
|
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
> For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md).
|
|
6
6
|
> For editing, grouping, toolbar, export — see [`features.md`](./features.md).
|
|
7
7
|
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
- [Tree Grid](#tree-grid)
|
|
11
|
+
- [Hierarchical Grid](#hierarchical-grid)
|
|
12
|
+
- [Grid Lite](#grid-lite)
|
|
13
|
+
- [Pivot Grid](#pivot-grid)
|
|
14
|
+
- [Key Rules](#key-rules)
|
|
15
|
+
|
|
8
16
|
## Tree Grid
|
|
9
17
|
|
|
10
18
|
> **Docs:** [Tree Grid](https://www.infragistics.com/products/ignite-ui-angular/angular/components/treegrid/tree-grid)
|
|
@@ -333,6 +341,27 @@ dataPipeline: IgxGridLiteDataPipelineConfiguration<Product> = {
|
|
|
333
341
|
</igx-grid-lite>
|
|
334
342
|
```
|
|
335
343
|
|
|
344
|
+
### Grid Lite Events
|
|
345
|
+
|
|
346
|
+
| Event | Cancelable | Payload |
|
|
347
|
+
|---|---|---|
|
|
348
|
+
| `(sorting)` | Yes (`event.detail.cancel = true`) | Sorting expression about to be applied |
|
|
349
|
+
| `(sorted)` | No | Sorting completed |
|
|
350
|
+
| `(filtering)` | Yes (`event.detail.cancel = true`) | Filter expression about to be applied |
|
|
351
|
+
| `(filtered)` | No | Filtering completed |
|
|
352
|
+
|
|
353
|
+
### Grid Lite Limitations
|
|
354
|
+
|
|
355
|
+
These features are **NOT available** in Grid Lite:
|
|
356
|
+
- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions
|
|
357
|
+
- Grouping — no `groupBy()`, no `IgxGroupByRow`
|
|
358
|
+
- Paging — no `IgxPaginatorComponent`
|
|
359
|
+
- Summaries — no `IgxSummaryOperand`
|
|
360
|
+
- Selection — no `rowSelection`, `cellSelection`, or `columnSelection`
|
|
361
|
+
- State persistence — no `IgxGridStateDirective`
|
|
362
|
+
- Export — no `IgxExcelExporterService` or `IgxCsvExporterService`
|
|
363
|
+
- Advanced filtering — no `advancedFilteringExpressionsTree`
|
|
364
|
+
|
|
336
365
|
### Grid Lite Key Differences from Flat Grid
|
|
337
366
|
|
|
338
367
|
- **Separate package**: `npm install igniteui-grid-lite`
|
|
@@ -356,41 +385,91 @@ For **pivot table analytics** where users reshape data by dragging dimensions be
|
|
|
356
385
|
> **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
386
|
|
|
358
387
|
```typescript
|
|
359
|
-
import { Component
|
|
360
|
-
import {
|
|
361
|
-
|
|
388
|
+
import { Component } from "@angular/core";
|
|
389
|
+
import { DATA } from '../../data/pivot-data';
|
|
390
|
+
|
|
391
|
+
import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core';
|
|
392
|
+
import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid';
|
|
362
393
|
|
|
363
394
|
@Component({
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
395
|
+
selector: 'app-pivot-grid-basic-sample',
|
|
396
|
+
styleUrls: ['./pivot-grid-basic-sample.component.scss'],
|
|
397
|
+
templateUrl: './pivot-grid-basic-sample.component.html',
|
|
398
|
+
imports: [IgxPivotGridComponent]
|
|
368
399
|
})
|
|
369
|
-
export class
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
400
|
+
export class PivotGridBasicSampleComponent {
|
|
401
|
+
public data = DATA;
|
|
402
|
+
public pivotConfigHierarchy: IPivotConfiguration = {
|
|
403
|
+
columns: [
|
|
404
|
+
{
|
|
405
|
+
|
|
406
|
+
memberName: 'Product',
|
|
407
|
+
memberFunction: (data) => data.Product.Name,
|
|
408
|
+
enabled: true
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
],
|
|
412
|
+
rows: [
|
|
413
|
+
{
|
|
414
|
+
memberName: 'Seller',
|
|
415
|
+
memberFunction: (data) => data.Seller.Name,
|
|
416
|
+
enabled: true
|
|
417
|
+
}
|
|
418
|
+
],
|
|
419
|
+
values: [
|
|
420
|
+
{
|
|
421
|
+
member: 'NumberOfUnits',
|
|
422
|
+
aggregate: {
|
|
423
|
+
aggregator: IgxPivotNumericAggregate.sum,
|
|
424
|
+
key: 'sum',
|
|
425
|
+
label: 'Sum'
|
|
426
|
+
},
|
|
427
|
+
enabled: true
|
|
428
|
+
|
|
429
|
+
}
|
|
430
|
+
],
|
|
431
|
+
filters: null
|
|
432
|
+
};
|
|
383
433
|
}
|
|
384
434
|
```
|
|
385
435
|
|
|
386
436
|
```html
|
|
387
|
-
<igx-pivot-grid #
|
|
388
|
-
[data]="salesData()"
|
|
389
|
-
[pivotConfiguration]="pivotConfig"
|
|
390
|
-
height="600px">
|
|
437
|
+
<igx-pivot-grid #grid1 [data]="data" [pivotConfiguration]="pivotConfigHierarchy" height="500px">
|
|
391
438
|
</igx-pivot-grid>
|
|
392
439
|
```
|
|
393
440
|
|
|
441
|
+
```json
|
|
442
|
+
export const DATA = [
|
|
443
|
+
{
|
|
444
|
+
Product: {
|
|
445
|
+
Name: 'Clothing',
|
|
446
|
+
UnitPrice: '12.814860936633712'
|
|
447
|
+
},
|
|
448
|
+
Seller: {
|
|
449
|
+
Name: 'Stanley Brooker',
|
|
450
|
+
City: 'Seattle'
|
|
451
|
+
},
|
|
452
|
+
Date: '2007-01-01T00:00:00',
|
|
453
|
+
Value: '94.2652032683907',
|
|
454
|
+
NumberOfUnits: '282'
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
Product: {
|
|
458
|
+
Name: 'Clothing',
|
|
459
|
+
UnitPrice: '49.579375120615296'
|
|
460
|
+
},
|
|
461
|
+
Seller: {
|
|
462
|
+
Name: 'Elisa Longbottom',
|
|
463
|
+
City: 'Sofia'
|
|
464
|
+
},
|
|
465
|
+
Date: '2007-01-05T00:00:00',
|
|
466
|
+
Value: '70.798922689072285',
|
|
467
|
+
NumberOfUnits: '296'
|
|
468
|
+
}
|
|
469
|
+
...
|
|
470
|
+
];
|
|
471
|
+
```
|
|
472
|
+
|
|
394
473
|
### Pivot Data Selector
|
|
395
474
|
|
|
396
475
|
Provide a drag-and-drop UI for users to reshape the pivot interactively:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: igniteui-angular-theming
|
|
3
|
-
description: "
|
|
4
|
-
user-
|
|
3
|
+
description: "Generates and customizes Ignite UI for Angular themes including color palettes, typography, elevations, and component-level styles using the Sass theming system and the igniteui-theming MCP server. Use when users ask to theme, restyle, or style Ignite UI components, change colors or the color palette, switch between light and dark themes, create or apply a global theme, customize typography or elevation shadows, adjust spacing, sizing, or roundness, or configure per-component design tokens. Do NOT use for component behavior, APIs, or data binding — use igniteui-angular-components or igniteui-angular-grids instead."
|
|
4
|
+
user-invocable: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Ignite UI for Angular — Theming Skill
|
|
@@ -29,71 +29,7 @@ This skill teaches AI agents how to theme Ignite UI for Angular applications usi
|
|
|
29
29
|
|
|
30
30
|
## Setting Up the Theming MCP Server
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
### VS Code
|
|
35
|
-
|
|
36
|
-
Create or edit `.vscode/mcp.json` in your project:
|
|
37
|
-
|
|
38
|
-
```json
|
|
39
|
-
{
|
|
40
|
-
"servers": {
|
|
41
|
-
"igniteui-theming": {
|
|
42
|
-
"command": "npx",
|
|
43
|
-
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
This works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry — `npx -y` handles both cases.
|
|
50
|
-
|
|
51
|
-
### Cursor
|
|
52
|
-
|
|
53
|
-
Create or edit `.cursor/mcp.json`:
|
|
54
|
-
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"mcpServers": {
|
|
58
|
-
"igniteui-theming": {
|
|
59
|
-
"command": "npx",
|
|
60
|
-
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Claude Desktop
|
|
67
|
-
|
|
68
|
-
Edit the Claude Desktop config file:
|
|
69
|
-
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
70
|
-
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
71
|
-
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"mcpServers": {
|
|
75
|
-
"igniteui-theming": {
|
|
76
|
-
"command": "npx",
|
|
77
|
-
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### WebStorm / JetBrains IDEs
|
|
84
|
-
|
|
85
|
-
1. Go to **Settings → Tools → AI Assistant → MCP Servers**
|
|
86
|
-
2. Click **+ Add MCP Server**
|
|
87
|
-
3. Set Command to `npx` and Arguments to `igniteui-theming igniteui-theming-mcp`
|
|
88
|
-
4. Click OK and restart the AI Assistant
|
|
89
|
-
|
|
90
|
-
### Verifying the Setup
|
|
91
|
-
|
|
92
|
-
After configuring the MCP server, ask your AI assistant:
|
|
93
|
-
|
|
94
|
-
> "Detect which Ignite UI platform my project uses"
|
|
95
|
-
|
|
96
|
-
If the MCP server is running, the `detect_platform` tool will analyze your `package.json` and return the detected platform (e.g., `angular`).
|
|
32
|
+
> **Full setup instructions for VS Code, Cursor, Claude Desktop, and JetBrains IDEs are in [`references/mcp-setup.md`](./references/mcp-setup.md).** Read that file for editor-specific configuration steps and verification.
|
|
97
33
|
|
|
98
34
|
## Theming Architecture
|
|
99
35
|
|
|
@@ -474,41 +410,7 @@ Everything else must use `var(--ig-<family>-<shade>)` tokens.
|
|
|
474
410
|
|
|
475
411
|
## Common Patterns
|
|
476
412
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
```scss
|
|
480
|
-
@use 'igniteui-angular/theming' as *;
|
|
481
|
-
|
|
482
|
-
$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA);
|
|
483
|
-
$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212);
|
|
484
|
-
|
|
485
|
-
@include core();
|
|
486
|
-
@include typography($font-family: $material-typeface, $type-scale: $material-type-scale);
|
|
487
|
-
|
|
488
|
-
// Light is default
|
|
489
|
-
@include theme($palette: $light-palette, $schema: $light-material-schema);
|
|
490
|
-
|
|
491
|
-
// Dark via class on <body> or <html>
|
|
492
|
-
.dark-theme {
|
|
493
|
-
@include theme($palette: $dark-palette, $schema: $dark-material-schema);
|
|
494
|
-
}
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
### Scoping a Theme to a Container
|
|
498
|
-
|
|
499
|
-
```scss
|
|
500
|
-
.admin-panel {
|
|
501
|
-
@include theme($palette: $admin-palette, $schema: $light-indigo-schema);
|
|
502
|
-
}
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
### Licensed Package Users
|
|
506
|
-
|
|
507
|
-
If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import:
|
|
508
|
-
|
|
509
|
-
```scss
|
|
510
|
-
@use '@infragistics/igniteui-angular/theming' as *;
|
|
511
|
-
```
|
|
413
|
+
> **Light/dark theme switching, scoped themes, and licensed package configuration are in [`references/common-patterns.md`](./references/common-patterns.md).** Read that file for ready-to-use Sass patterns.
|
|
512
414
|
|
|
513
415
|
## Key Rules
|
|
514
416
|
|
|
@@ -524,7 +426,5 @@ If using the licensed `@infragistics/igniteui-angular` package, set `licensed: t
|
|
|
524
426
|
|
|
525
427
|
## Related Skills
|
|
526
428
|
|
|
527
|
-
- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) —
|
|
528
|
-
- [`igniteui-angular-
|
|
529
|
-
- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grid structure, column configuration, sorting, filtering, selection
|
|
530
|
-
- [`igniteui-angular-grids-types`](../igniteui-angular-grids-types/SKILL.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics
|
|
429
|
+
- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — UI components (form controls, layout, data display, feedback/overlays, directives, charts)
|
|
430
|
+
- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Common Theming Patterns
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.**
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Switching Between Light and Dark Themes](#switching-between-light-and-dark-themes)
|
|
8
|
+
- [Scoping a Theme to a Container](#scoping-a-theme-to-a-container)
|
|
9
|
+
- [Licensed Package Users](#licensed-package-users)
|
|
10
|
+
|
|
11
|
+
## Switching Between Light and Dark Themes
|
|
12
|
+
|
|
13
|
+
```scss
|
|
14
|
+
@use 'igniteui-angular/theming' as *;
|
|
15
|
+
|
|
16
|
+
$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA);
|
|
17
|
+
$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212);
|
|
18
|
+
|
|
19
|
+
@include core();
|
|
20
|
+
@include typography($font-family: $material-typeface, $type-scale: $material-type-scale);
|
|
21
|
+
|
|
22
|
+
// Light is default
|
|
23
|
+
@include theme($palette: $light-palette, $schema: $light-material-schema);
|
|
24
|
+
|
|
25
|
+
// Dark via class on <body> or <html>
|
|
26
|
+
.dark-theme {
|
|
27
|
+
@include theme($palette: $dark-palette, $schema: $dark-material-schema);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Scoping a Theme to a Container
|
|
32
|
+
|
|
33
|
+
```scss
|
|
34
|
+
.admin-panel {
|
|
35
|
+
@include theme($palette: $admin-palette, $schema: $light-indigo-schema);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Licensed Package Users
|
|
40
|
+
|
|
41
|
+
If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import:
|
|
42
|
+
|
|
43
|
+
```scss
|
|
44
|
+
@use '@infragistics/igniteui-angular/theming' as *;
|
|
45
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Setting Up the Theming MCP Server
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.**
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [VS Code](#vs-code)
|
|
8
|
+
- [Cursor](#cursor)
|
|
9
|
+
- [Claude Desktop](#claude-desktop)
|
|
10
|
+
- [WebStorm / JetBrains IDEs](#webstorm--jetbrains-ides)
|
|
11
|
+
- [Verifying the Setup](#verifying-the-setup)
|
|
12
|
+
|
|
13
|
+
The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in your editor before the theming tools become available.
|
|
14
|
+
|
|
15
|
+
## VS Code
|
|
16
|
+
|
|
17
|
+
Create or edit `.vscode/mcp.json` in your project:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"servers": {
|
|
22
|
+
"igniteui-theming": {
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry — `npx -y` handles both cases.
|
|
31
|
+
|
|
32
|
+
## Cursor
|
|
33
|
+
|
|
34
|
+
Create or edit `.cursor/mcp.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"igniteui-theming": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Claude Desktop
|
|
48
|
+
|
|
49
|
+
Edit the Claude Desktop config file:
|
|
50
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
51
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"igniteui-theming": {
|
|
57
|
+
"command": "npx",
|
|
58
|
+
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## WebStorm / JetBrains IDEs
|
|
65
|
+
|
|
66
|
+
1. Go to **Settings → Tools → AI Assistant → MCP Servers**
|
|
67
|
+
2. Click **+ Add MCP Server**
|
|
68
|
+
3. Set Command to `npx` and Arguments to `igniteui-theming igniteui-theming-mcp`
|
|
69
|
+
4. Click OK and restart the AI Assistant
|
|
70
|
+
|
|
71
|
+
## Verifying the Setup
|
|
72
|
+
|
|
73
|
+
After configuring the MCP server, ask your AI assistant:
|
|
74
|
+
|
|
75
|
+
> "Detect which Ignite UI platform my project uses"
|
|
76
|
+
|
|
77
|
+
If the MCP server is running, the `detect_platform` tool will analyze your `package.json` and return the detected platform (e.g., `angular`).
|
|
@@ -2071,6 +2071,7 @@ declare abstract class IgxGridBaseDirective implements GridType, OnInit, DoCheck
|
|
|
2071
2071
|
private _sortDescendingHeaderIconTemplate;
|
|
2072
2072
|
private _gridSize;
|
|
2073
2073
|
private _defaultRowHeight;
|
|
2074
|
+
private _borderSize;
|
|
2074
2075
|
private _rowCount;
|
|
2075
2076
|
private _cellMergeMode;
|
|
2076
2077
|
private _columnsToMerge;
|