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.
Files changed (30) hide show
  1. package/fesm2022/igniteui-angular-directives.mjs +28 -28
  2. package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
  3. package/fesm2022/igniteui-angular-grids-core.mjs +3 -0
  4. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  5. package/fesm2022/igniteui-angular-grids-grid.mjs +10 -7
  6. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  7. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +2 -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 +6 -9
  11. package/skills/igniteui-angular-components/references/charts.md +20 -10
  12. package/skills/igniteui-angular-components/references/data-display.md +13 -0
  13. package/skills/igniteui-angular-components/references/directives.md +123 -0
  14. package/skills/igniteui-angular-components/references/feedback.md +8 -0
  15. package/skills/igniteui-angular-components/references/form-controls.md +15 -0
  16. package/skills/igniteui-angular-components/references/layout-manager.md +5 -0
  17. package/skills/igniteui-angular-components/references/layout.md +9 -0
  18. package/skills/igniteui-angular-components/references/setup.md +10 -1
  19. package/skills/igniteui-angular-grids/SKILL.md +6 -6
  20. package/skills/igniteui-angular-grids/references/data-operations.md +13 -4
  21. package/skills/igniteui-angular-grids/references/editing.md +12 -1
  22. package/skills/igniteui-angular-grids/references/features.md +26 -10
  23. package/skills/igniteui-angular-grids/references/paging-remote.md +13 -4
  24. package/skills/igniteui-angular-grids/references/state.md +17 -151
  25. package/skills/igniteui-angular-grids/references/structure.md +9 -0
  26. package/skills/igniteui-angular-grids/references/types.md +104 -25
  27. package/skills/igniteui-angular-theming/SKILL.md +6 -106
  28. package/skills/igniteui-angular-theming/references/common-patterns.md +45 -0
  29. package/skills/igniteui-angular-theming/references/mcp-setup.md +77 -0
  30. 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/grid';
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/grids/core';
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** is a lightweight, open-source (MIT licensed) Web Component grid with an Angular wrapper. It supports **sorting and filtering only** no editing, grouping, paging, summaries, selection, or export. Its API is **different from** the Flat/Tree/Hierarchical Grid APIs.
281
-
282
- > **IMPORTANT**: Grid Lite uses `IgxGridLiteSortingExpression` and `IgxGridLiteFilteringExpression` — NOT `ISortingExpression` or `FilteringExpressionsTree` from the enterprise grids.
283
-
284
- ### Grid Lite Sorting
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, ChangeDetectionStrategy, signal, viewChild } from '@angular/core';
360
- import { IgxPivotGridComponent, IGX_PIVOT_GRID_DIRECTIVES } from 'igniteui-angular/grids/pivot-grid';
361
- import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/pivot-grid';
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
- selector: 'app-sales-pivot',
365
- imports: [IGX_PIVOT_GRID_DIRECTIVES],
366
- templateUrl: './sales-pivot.component.html',
367
- changeDetection: ChangeDetectionStrategy.OnPush
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 SalesPivotComponent {
370
- pivotGridRef = viewChild.required<IgxPivotGridComponent>('pivotGrid');
371
- salesData = signal<Sale[]>([]);
372
-
373
- pivotConfig: IPivotConfiguration = {
374
- columns: [{ memberName: 'Quarter', enabled: true }],
375
- rows: [{ memberName: 'Region', enabled: true }],
376
- values: [{
377
- member: 'Revenue',
378
- aggregate: { aggregator: IgxPivotNumericAggregate.sum, key: 'SUM', label: 'Sum' },
379
- enabled: true
380
- }],
381
- filters: [{ memberName: 'Year', enabled: true }]
382
- };
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 #pivotGrid
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: "Customize Ignite UI components styling using the igniteui-theming MCP server for AI-assisted theming. Use when users ask to theme or restyle Ignite UI components, change the color palette, switch between light and dark themes, apply or generate a global theme, customize typography or elevations, or configure component-level styles."
4
- user-invokable: true
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
- 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.
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
- ### Switching Between Light and Dark Themes
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) — Form controls, application setup, architecture, and import patterns
528
- - [`igniteui-angular-components-layout`](../igniteui-angular-components-layout/SKILL.md) — Layout, data display, feedback/overlay components, and directives
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;