igniteui-angular 22.1.0-beta.0 → 22.1.0-beta.1

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 (40) hide show
  1. package/fesm2022/igniteui-angular-carousel.mjs +2 -2
  2. package/fesm2022/igniteui-angular-carousel.mjs.map +1 -1
  3. package/fesm2022/igniteui-angular-core.mjs +83 -24
  4. package/fesm2022/igniteui-angular-core.mjs.map +1 -1
  5. package/fesm2022/igniteui-angular-grids-grid.mjs +9 -0
  6. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  7. package/fesm2022/igniteui-angular-list.mjs +14 -1
  8. package/fesm2022/igniteui-angular-list.mjs.map +1 -1
  9. package/fesm2022/igniteui-angular-navigation-drawer.mjs +6 -1
  10. package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
  11. package/package.json +1 -1
  12. package/skills/igniteui-angular-components/SKILL.md +9 -29
  13. package/skills/igniteui-angular-components/references/charts.md +3 -33
  14. package/skills/igniteui-angular-components/references/data-display.md +8 -94
  15. package/skills/igniteui-angular-components/references/directives.md +13 -114
  16. package/skills/igniteui-angular-components/references/feedback.md +1 -4
  17. package/skills/igniteui-angular-components/references/form-controls.md +10 -75
  18. package/skills/igniteui-angular-components/references/layout-manager.md +15 -198
  19. package/skills/igniteui-angular-components/references/layout.md +1 -4
  20. package/skills/igniteui-angular-components/references/mcp-setup.md +28 -29
  21. package/skills/igniteui-angular-components/references/setup.md +6 -4
  22. package/skills/igniteui-angular-figma-to-app/SKILL.md +37 -25
  23. package/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +25 -26
  24. package/skills/igniteui-angular-figma-to-app/references/mcp-setup.md +13 -9
  25. package/skills/igniteui-angular-figma-to-app/references/validation-patterns.md +2 -2
  26. package/skills/igniteui-angular-generate-from-image-design/SKILL.md +22 -7
  27. package/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md +1 -1
  28. package/skills/igniteui-angular-grids/SKILL.md +21 -25
  29. package/skills/igniteui-angular-grids/references/data-operations.md +10 -11
  30. package/skills/igniteui-angular-grids/references/editing.md +3 -4
  31. package/skills/igniteui-angular-grids/references/features.md +16 -38
  32. package/skills/igniteui-angular-grids/references/grid-migration.md +6 -8
  33. package/skills/igniteui-angular-grids/references/paging-remote.md +2 -4
  34. package/skills/igniteui-angular-grids/references/state.md +4 -5
  35. package/skills/igniteui-angular-grids/references/structure.md +16 -9
  36. package/skills/igniteui-angular-grids/references/types.md +19 -33
  37. package/skills/igniteui-angular-theming/SKILL.md +12 -65
  38. package/skills/igniteui-angular-theming/references/mcp-setup.md +28 -31
  39. package/types/igniteui-angular-core.d.ts +32 -5
  40. package/types/igniteui-angular-list.d.ts +5 -0
@@ -14,22 +14,12 @@ This skill teaches AI agents how to theme Ignite UI for Angular applications usi
14
14
 
15
15
  - An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users
16
16
  - Sass support enabled in the project (default for Angular CLI projects)
17
- - The **Ignite UI Theming MCP server** (`igniteui-theming`) available as a tool provider
18
17
 
19
- > **AGENT INSTRUCTION MCP Server Setup (REQUIRED)**
20
- >
21
- > Before using any theming tools, you MUST verify the MCP server is available
22
- > by calling `detect_platform`. If the tool is not available or the call fails,
23
- > you MUST automatically configure it by following the setup process steps described below.
24
- >
25
- > After writing the file, inform the user that the MCP server has been
26
- > configured and they may need to reload the editor for the tools to activate.
27
- > Start the MCP server and wait for that MCP server to start before continuing the theming related work.
28
- > Do NOT skip this step or ask the user to do it manually.
18
+ ## Ignite UI Theming MCP Server (recommended, not required)
29
19
 
30
- ## Setting Up the Theming MCP Server
20
+ The `igniteui-theming` MCP server generates production-ready theme code (`create_theme`, `create_palette`, `create_component_theme`, `get_component_design_tokens`, `get_color`, and more). When its tools are available, prefer them over writing theme Sass from memory — start by calling `detect_platform`.
31
21
 
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.
22
+ If the tools are not available, do not block the task — use the manual Sass workflow in this file. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md).
33
23
 
34
24
  ## Theming Architecture
35
25
 
@@ -85,7 +75,7 @@ All files are located under `node_modules/igniteui-angular/styles/` (or `node_mo
85
75
 
86
76
  ## Custom Sass Theme (Manual)
87
77
 
88
- > **AGENT INSTRUCTION — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation:
78
+ > **Important — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation:
89
79
  >
90
80
  > - [Sass Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index)
91
81
  > - [Sass Configuration](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/configuration)
@@ -133,37 +123,7 @@ $dark-palette: palette(
133
123
 
134
124
  Override individual component appearance using component theme functions and the `tokens` mixin.
135
125
 
136
- > **AGENT INSTRUCTION — No Hardcoded Colors (CRITICAL)**
137
- >
138
- > Once a palette has been generated (via `palette()` in Sass or `create_palette` / `create_theme` via MCP),
139
- > **every color reference MUST come from the generated palette tokens** — never hardcode hex/RGB/HSL values.
140
- >
141
- > Use `var(--ig-primary-500)`, `var(--ig-secondary-300)`, `var(--ig-surface-500)`, etc. in CSS,
142
- > or the `get_color` MCP tool to obtain the correct token reference.
143
- >
144
- > **WRONG** (hardcoded hex — breaks theme switching, ignores the palette):
145
- >
146
- > ```scss
147
- > $custom-avatar: avatar-theme(
148
- > $background: #e91e63,
149
- > $color: #ffffff,
150
- > );
151
- > ```
152
- >
153
- > **RIGHT** (palette token — stays in sync with the theme):
154
- >
155
- > ```scss
156
- > $custom-avatar: avatar-theme(
157
- > $schema: $light-material-schema,
158
- > $background: var(--ig-primary-500),
159
- > $color: var(--ig-primary-500-contrast),
160
- > );
161
- > ```
162
- >
163
- > This applies to **all** style code: component themes, custom CSS rules, Sass variables used
164
- > for borders/backgrounds/text, Angular `host` bindings, and inline styles.
165
- > The only place raw hex values belong is the **initial `palette()` call** that seeds the color system.
166
- > Everything downstream must reference the palette.
126
+ All color values passed to component themes must be palette tokens, not raw hex/RGB/HSL see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation) below.
167
127
 
168
128
  ```scss
169
129
  @use 'igniteui-angular/theming' as *;
@@ -244,7 +204,7 @@ igx-avatar {
244
204
 
245
205
  The Ignite UI Theming MCP server provides tools for AI-assisted theme code generation.
246
206
 
247
- > **IMPORTANT — File Safety Rule**: When generating or updating theme code, **never overwrite existing style files directly**. Instead, always **propose the changes as an update** and let the user review and approve before writing to disk. If a `styles.scss` (or any target file) already exists, show the generated code as a diff or suggestion rather than replacing the file contents. This prevents accidental loss of custom styles the user has already written.
207
+ > **File safety**: When applying generated theme code to an existing style file, make targeted edits that preserve the user's existing custom styles never wholesale-replace the file contents. If the environment does not gate file writes behind user approval, present the change as a diff for review before writing.
248
208
 
249
209
  Always follow this workflow:
250
210
 
@@ -297,11 +257,6 @@ Params: {
297
257
  }
298
258
  ```
299
259
 
300
- > **Reminder**: After a palette is generated, all token values passed to
301
- > `create_component_theme` must reference palette CSS custom properties
302
- > (e.g., `var(--ig-primary-500)`, `var(--ig-secondary-A200)`,
303
- > `var(--ig-gray-100)`). Never pass raw hex values like `"#E3F2FD"`.
304
-
305
260
  ### Step 4 — Generate a Palette
306
261
 
307
262
  For simple mid-luminance base colors:
@@ -327,9 +282,9 @@ Tool: set_spacing → { spacing: 0.75, component: "grid" }
327
282
  Tool: set_roundness → { radiusFactor: 0.8 }
328
283
  ```
329
284
 
330
- ### Step 6 — Reference Palette Colors (MANDATORY for All Color Usage)
285
+ ### Step 6 — Reference Palette Colors via `get_color`
331
286
 
332
- After a palette is generated, **always** use the `get_color` tool to obtain the correct CSS custom property reference. Never hardcode hex/RGB/HSL values in component themes, custom CSS, or Sass variables.
287
+ After a palette is generated, use the `get_color` tool to obtain the correct CSS custom property reference for any color you need (see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation)):
333
288
 
334
289
  ```
335
290
  Tool: get_color
@@ -343,14 +298,6 @@ Params: { color: "primary", opacity: 0.5 }
343
298
  → hsl(from var(--ig-primary-500) h s l / 0.5)
344
299
  ```
345
300
 
346
- Use these token references everywhere:
347
- - Component theme `tokens` values
348
- - Custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`, etc.)
349
- - Sass variables for derived values (`$sidebar-bg: var(--ig-surface-500);`)
350
- - Angular `host` style bindings
351
-
352
- The **only** place raw hex values are acceptable is in the initial `palette()` call or the `create_palette` / `create_theme` MCP tool inputs that seed the color system.
353
-
354
301
  ### Loading Reference Data
355
302
 
356
303
  Use `read_resource` with these URIs for preset values and documentation:
@@ -365,9 +312,9 @@ Use `read_resource` with these URIs for preset values and documentation:
365
312
  | `theming://guidance/colors/rules` | Light/dark theme rules |
366
313
  | `theming://platforms/angular` | Angular platform specifics |
367
314
 
368
- ## Referencing Colors in Custom Styles
315
+ ## No Hardcoded Colors After Palette Generation
369
316
 
370
- After a theme is applied, the palette is available as CSS custom properties on `:root`. Use these tokens in all custom CSS never introduce standalone hex/RGB variables for colors that the palette already provides.
317
+ This is the single most important theming rule. Once a palette exists (via `palette()` in Sass or `create_palette` / `create_theme` via MCP), every color reference must come from the palette tokens, which are available as CSS custom properties on `:root`. This applies to all style code: component theme `tokens` values, custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`), Sass variables for derived values, Angular `host` bindings, and inline styles. Hardcoded values break theme switching and drift out of sync when the palette changes.
371
318
 
372
319
  ### Correct: Palette Tokens
373
320
 
@@ -420,7 +367,7 @@ Everything else must use `var(--ig-<family>-<shade>)` tokens.
420
367
 
421
368
  ## Key Rules
422
369
 
423
- 1. **Never overwrite existing files directly** — always propose theme code as an update for user review; do not replace existing style files without confirmation
370
+ 1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized
424
371
  2. **Always call `detect_platform` first** when using MCP tools
425
372
  3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names
426
373
  4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts)
@@ -428,7 +375,7 @@ Everything else must use `var(--ig-<family>-<shade>)` tokens.
428
375
  6. **Use `@include core()` once** before `@include theme()` in your global styles
429
376
  7. **Component themes use `@include tokens($theme)`** inside a selector to emit CSS custom properties
430
377
  8. **For compound components**, follow the full checklist returned by `get_component_design_tokens` — theme each child component with its scoped selector
431
- 9. **Never hardcode colors after palette generation** — once a palette is created, every color in component themes, custom CSS, and Sass variables must use `var(--ig-<family>-<shade>)` palette tokens (e.g., `var(--ig-primary-500)`, `var(--ig-gray-200)`). Raw hex/RGB/HSL values are only acceptable in the initial `palette()` seed call. This ensures themes remain consistent, switchable (light/dark), and maintainable
378
+ 9. **No hardcoded colors after palette generation** — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation); raw hex/RGB/HSL is only acceptable in the initial palette seed values
432
379
 
433
380
  ## Related Skills
434
381
 
@@ -2,40 +2,29 @@
2
2
 
3
3
  > **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.**
4
4
 
5
- ## Contents
5
+ The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in the editor/agent before the theming tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session.
6
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)
7
+ > Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-theming__detect_platform` in Claude Code). This skill refers to tools by their bare names.
12
8
 
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.
9
+ ## Recommended: One-Command Setup
14
10
 
15
- ## VS Code
11
+ From the project root:
16
12
 
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
- }
13
+ ```bash
14
+ npx -y igniteui-cli ai-config
28
15
  ```
29
16
 
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.
17
+ This configures **both** the `igniteui-theming` and `igniteui-cli` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure.
18
+
19
+ ## Manual Configuration (fallback)
31
20
 
32
- ## Cursor
21
+ Use these only when `ai-config` is unavailable or your editor is not covered by it.
33
22
 
34
- Create or edit `.cursor/mcp.json`:
23
+ ### VS Code `.vscode/mcp.json`
35
24
 
36
25
  ```json
37
26
  {
38
- "mcpServers": {
27
+ "servers": {
39
28
  "igniteui-theming": {
40
29
  "command": "npx",
41
30
  "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
@@ -44,11 +33,15 @@ Create or edit `.cursor/mcp.json`:
44
33
  }
45
34
  ```
46
35
 
47
- ## Claude Desktop
36
+ `npx -y` works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry.
48
37
 
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`
38
+ ### Claude Code
39
+
40
+ ```bash
41
+ claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp
42
+ ```
43
+
44
+ ### Cursor — `.cursor/mcp.json`
52
45
 
53
46
  ```json
54
47
  {
@@ -61,17 +54,21 @@ Edit the Claude Desktop config file:
61
54
  }
62
55
  ```
63
56
 
64
- ## WebStorm / JetBrains IDEs
57
+ ### Claude Desktop
58
+
59
+ Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above.
60
+
61
+ ### WebStorm / JetBrains IDEs
65
62
 
66
63
  1. Go to **Settings → Tools → AI Assistant → MCP Servers**
67
64
  2. Click **+ Add MCP Server**
68
- 3. Set Command to `npx` and Arguments to `igniteui-theming igniteui-theming-mcp`
65
+ 3. Set Command to `npx` and Arguments to `-y igniteui-theming igniteui-theming-mcp`
69
66
  4. Click OK and restart the AI Assistant
70
67
 
71
68
  ## Verifying the Setup
72
69
 
73
- After configuring the MCP server, ask your AI assistant:
70
+ After restarting the editor/session, ask the AI assistant:
74
71
 
75
72
  > "Detect which Ignite UI platform my project uses"
76
73
 
77
- If the MCP server is running, the `detect_platform` tool will analyze your `package.json` and return the detected platform (e.g., `angular`).
74
+ If the MCP server is running, the `detect_platform` tool will analyze `package.json` and return the detected platform (e.g., `angular`).
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injector, AfterRenderRef, EventEmitter, OnDestroy, ElementRef, Type, ViewContainerRef, ComponentRef, NgZone, QueryList, ChangeDetectorRef, TemplateRef, PipeTransform, DestroyRef, Provider } from '@angular/core';
2
+ import { InjectionToken, Injector, AfterRenderRef, NgZone, EventEmitter, OnDestroy, ElementRef, Type, ViewContainerRef, ComponentRef, QueryList, ChangeDetectorRef, TemplateRef, PipeTransform, DestroyRef, Provider } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { BehaviorSubject, Observable } from 'rxjs';
5
5
  import { AnimationReferenceMetadata, AnimationPlayer as AnimationPlayer$1 } from '@angular/animations';
@@ -707,8 +707,14 @@ interface IgxGestureEvent {
707
707
  * @internal
708
708
  */
709
709
  interface IgxTouchManagerCallbacks {
710
- /** Fired on pointer down once the pointer type passes the configured filter, before any movement. */
711
- pointerDown?: (event: IgxGestureEvent) => void;
710
+ /**
711
+ * Fired on pointer down once the pointer type passes the configured filter, before any movement.
712
+ *
713
+ * Return `false` to veto the gesture (e.g. when the touch does not start in an active zone).
714
+ * The manager then stops tracking immediately and best-effort releases the pointer capture, so
715
+ * normal page/component scrolling is not blocked by the `touchmove` listener.
716
+ */
717
+ pointerDown?: (event: IgxGestureEvent) => boolean | void;
712
718
  /** Fired on the first pointer move of a tracked gesture, once movement begins (mirrors Hammer's `panstart`). */
713
719
  panStart?: (event: IgxGestureEvent) => void;
714
720
  /** Fired on each pointer move while a gesture is tracked. */
@@ -737,14 +743,28 @@ interface IgxTouchManagerOptions {
737
743
  tapThreshold?: number;
738
744
  /** Minimum velocity (in px/ms) for a primarily horizontal gesture to be recognized as a swipe. Defaults to `0.3`. */
739
745
  swipeVelocityThreshold?: number;
746
+ /**
747
+ * Predicate evaluated on pointer down. When it returns `false` the gesture is not tracked at all,
748
+ * so no pointer capture is taken and the native scrolling of the page is not prevented.
749
+ * Defaults to always tracking.
750
+ */
751
+ canStart?: (event: PointerEvent) => boolean;
752
+ /**
753
+ * When provided, the listeners are attached outside of the Angular zone so that the high frequency
754
+ * `panMove` callback does not trigger change detection. The remaining callbacks are still invoked
755
+ * inside the Angular zone.
756
+ */
757
+ ngZone?: NgZone;
740
758
  }
741
759
  /**
742
760
  * Lightweight, zoneless pointer-based gesture manager.
743
761
  *
744
762
  * Consolidates the pan/swipe/tap recognition logic shared across components
745
763
  * (carousel, navigation drawer, list item, time picker) on top of native
746
- * Pointer Events. It does not depend on `NgZone`; consumers update their own
747
- * state inside the provided callbacks.
764
+ * Pointer Events. It does not require `NgZone`; consumers update their own
765
+ * state inside the provided callbacks. An `NgZone` can optionally be supplied so
766
+ * that the listeners are attached outside of Angular and only the discrete
767
+ * callbacks re-enter it, keeping continuous dragging free of change detection.
748
768
  *
749
769
  * Outside of a browser environment (e.g. during server-side rendering) it is a
750
770
  * noop: no listeners are attached and no callbacks are invoked, so consumers can
@@ -779,16 +799,23 @@ declare class IgxTouchManager {
779
799
  private readonly _setPointerCapture;
780
800
  private readonly _tapThreshold;
781
801
  private readonly _swipeVelocityThreshold;
802
+ private readonly _canStart;
803
+ private readonly _ngZone;
782
804
  constructor(target: EventTarget, callbacks: IgxTouchManagerCallbacks, options?: IgxTouchManagerOptions);
783
805
  /** Detaches all listeners and stops tracking. */
784
806
  destroy(): void;
785
807
  private _accepts;
808
+ private _runOutsideAngular;
809
+ /** Invokes a discrete (low frequency) callback back inside the Angular zone, when one is provided. */
810
+ private _runInAngular;
786
811
  private _createEvent;
787
812
  private _onPointerDown;
788
813
  private _onPointerMove;
789
814
  private _onPointerUp;
790
815
  private _onPointerCancel;
791
816
  private _onTouchMove;
817
+ /** Stops tracking the current gesture and best-effort releases the pointer capture. */
818
+ private _stopTracking;
792
819
  }
793
820
 
794
821
  interface AnimationService {
@@ -68,6 +68,7 @@ declare class IgxListItemComponent implements IListChild, OnInit, OnDestroy {
68
68
  list: IgxListBaseDirective;
69
69
  private elementRef;
70
70
  private _renderer;
71
+ private _zone;
71
72
  /**
72
73
  * @hidden
73
74
  */
@@ -293,6 +294,10 @@ declare class IgxListItemComponent implements IListChild, OnInit, OnDestroy {
293
294
  * @hidden
294
295
  */
295
296
  ngOnDestroy(): void;
297
+ /**
298
+ * @hidden
299
+ */
300
+ private get panningAllowed();
296
301
  /**
297
302
  * @hidden
298
303
  */