igniteui-angular 22.2.0-rc.0 → 22.2.0-rc.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 (111) hide show
  1. package/README.md +1 -1
  2. package/button-group/README.md +42 -9
  3. package/calendar/README.md +30 -20
  4. package/card/README.md +1 -1
  5. package/fesm2022/igniteui-angular-accordion.mjs +7 -7
  6. package/fesm2022/igniteui-angular-action-strip.mjs +11 -22
  7. package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-avatar.mjs +7 -7
  9. package/fesm2022/igniteui-angular-badge.mjs +7 -7
  10. package/fesm2022/igniteui-angular-banner.mjs +10 -10
  11. package/fesm2022/igniteui-angular-bottom-nav.mjs +22 -22
  12. package/fesm2022/igniteui-angular-button-group.mjs +32 -35
  13. package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
  14. package/fesm2022/igniteui-angular-calendar.mjs +132 -180
  15. package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
  16. package/fesm2022/igniteui-angular-card.mjs +47 -58
  17. package/fesm2022/igniteui-angular-card.mjs.map +1 -1
  18. package/fesm2022/igniteui-angular-carousel.mjs +22 -22
  19. package/fesm2022/igniteui-angular-chat-extras.mjs +6 -6
  20. package/fesm2022/igniteui-angular-chat.mjs +12 -12
  21. package/fesm2022/igniteui-angular-checkbox.mjs +7 -7
  22. package/fesm2022/igniteui-angular-chips.mjs +10 -10
  23. package/fesm2022/igniteui-angular-combo.mjs +69 -67
  24. package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
  25. package/fesm2022/igniteui-angular-core.mjs +139 -92
  26. package/fesm2022/igniteui-angular-core.mjs.map +1 -1
  27. package/fesm2022/igniteui-angular-date-picker.mjs +53 -70
  28. package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
  29. package/fesm2022/igniteui-angular-dialog.mjs +13 -13
  30. package/fesm2022/igniteui-angular-directives.mjs +194 -194
  31. package/fesm2022/igniteui-angular-drop-down.mjs +29 -29
  32. package/fesm2022/igniteui-angular-expansion-panel.mjs +28 -28
  33. package/fesm2022/igniteui-angular-grids-core.mjs +737 -661
  34. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  35. package/fesm2022/igniteui-angular-grids-grid.mjs +49 -49
  36. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +37 -37
  37. package/fesm2022/igniteui-angular-grids-lite.mjs +25 -17
  38. package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
  39. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +80 -80
  40. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  41. package/fesm2022/igniteui-angular-grids-tree-grid.mjs +55 -55
  42. package/fesm2022/igniteui-angular-icon.mjs +10 -10
  43. package/fesm2022/igniteui-angular-input-group.mjs +59 -55
  44. package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
  45. package/fesm2022/igniteui-angular-list.mjs +40 -40
  46. package/fesm2022/igniteui-angular-navbar.mjs +13 -13
  47. package/fesm2022/igniteui-angular-navigation-drawer.mjs +43 -38
  48. package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
  49. package/fesm2022/igniteui-angular-paginator.mjs +19 -19
  50. package/fesm2022/igniteui-angular-progressbar.mjs +19 -19
  51. package/fesm2022/igniteui-angular-query-builder.mjs +22 -22
  52. package/fesm2022/igniteui-angular-radio.mjs +25 -21
  53. package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
  54. package/fesm2022/igniteui-angular-select.mjs +29 -33
  55. package/fesm2022/igniteui-angular-select.mjs.map +1 -1
  56. package/fesm2022/igniteui-angular-simple-combo.mjs +9 -9
  57. package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
  58. package/fesm2022/igniteui-angular-slider.mjs +28 -28
  59. package/fesm2022/igniteui-angular-snackbar.mjs +7 -7
  60. package/fesm2022/igniteui-angular-splitter.mjs +13 -13
  61. package/fesm2022/igniteui-angular-stepper.mjs +34 -34
  62. package/fesm2022/igniteui-angular-switch.mjs +7 -7
  63. package/fesm2022/igniteui-angular-tabs.mjs +34 -34
  64. package/fesm2022/igniteui-angular-time-picker.mjs +26 -36
  65. package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
  66. package/fesm2022/igniteui-angular-toast.mjs +7 -7
  67. package/fesm2022/igniteui-angular-tree.mjs +28 -28
  68. package/fesm2022/igniteui-angular-virtual-scroll.mjs +497 -145
  69. package/fesm2022/igniteui-angular-virtual-scroll.mjs.map +1 -1
  70. package/migrations/common/UpdateChanges.d.ts +56 -0
  71. package/migrations/common/UpdateChanges.js +366 -38
  72. package/migrations/common/UpdateChanges.spec.js +829 -0
  73. package/migrations/migration-collection.json +1 -1
  74. package/migrations/update-22_2_0/index.js +145 -0
  75. package/migrations/update-22_2_0/index.spec.js +206 -0
  76. package/navigation-drawer/README.md +1 -1
  77. package/package.json +3 -3
  78. package/schematics/tsconfig.tsbuildinfo +1 -1
  79. package/skills/igniteui-angular-components/SKILL.md +9 -5
  80. package/skills/igniteui-angular-components/references/form-controls.md +1 -1
  81. package/skills/igniteui-angular-components/references/mcp-setup.md +14 -2
  82. package/skills/igniteui-angular-figma-to-app/SKILL.md +112 -525
  83. package/skills/igniteui-angular-figma-to-app/references/asset-extraction.md +49 -75
  84. package/skills/igniteui-angular-figma-to-app/references/design-provenance.md +201 -0
  85. package/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md +175 -52
  86. package/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +153 -99
  87. package/skills/igniteui-angular-figma-to-app/references/figma-exploration.md +226 -0
  88. package/skills/igniteui-angular-figma-to-app/references/mcp-setup.md +71 -105
  89. package/skills/igniteui-angular-figma-to-app/references/project-setup.md +63 -0
  90. package/skills/igniteui-angular-figma-to-app/references/theme-generation.md +120 -0
  91. package/skills/igniteui-angular-figma-to-app/references/validation-patterns.md +48 -50
  92. package/skills/igniteui-angular-generate-from-image-design/SKILL.md +11 -7
  93. package/skills/igniteui-angular-grids/SKILL.md +7 -3
  94. package/skills/igniteui-angular-grids/references/editing.md +1 -2
  95. package/skills/igniteui-angular-grids/references/grid-migration.md +1 -1
  96. package/skills/igniteui-angular-theming/SKILL.md +9 -5
  97. package/skills/igniteui-angular-theming/references/mcp-setup.md +12 -2
  98. package/types/igniteui-angular-button-group.d.ts +49 -34
  99. package/types/igniteui-angular-calendar.d.ts +33 -50
  100. package/types/igniteui-angular-card.d.ts +12 -17
  101. package/types/igniteui-angular-combo.d.ts +6 -0
  102. package/types/igniteui-angular-core.d.ts +25 -8
  103. package/types/igniteui-angular-grids-core.d.ts +48 -4
  104. package/types/igniteui-angular-grids-lite.d.ts +5 -1
  105. package/types/igniteui-angular-grids-pivot-grid.d.ts +1 -1
  106. package/types/igniteui-angular-input-group.d.ts +17 -3
  107. package/types/igniteui-angular-navigation-drawer.d.ts +1 -0
  108. package/types/igniteui-angular-radio.d.ts +5 -0
  109. package/types/igniteui-angular-time-picker.d.ts +0 -1
  110. package/types/igniteui-angular-virtual-scroll.d.ts +41 -13
  111. package/virtual-scroll/README.md +32 -1
@@ -0,0 +1,120 @@
1
+ # Theme Generation
2
+
3
+ > **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 3 to generate the global theme and per-component tokens. Read in full, together with [`design-token-bridge.md`](design-token-bridge.md), before calling any theming tool.
6
+
7
+ **Goal:** produce Sass theming code that matches the Figma design's visual language using the design tokens extracted in Phase 1e (Path A) or the color census and measurements from Phase 1d (Path B).
8
+
9
+ ## 3a: Inspect Existing Theme (Guard)
10
+
11
+ Check **both** places a theme can come from:
12
+
13
+ - `src/styles.scss` (or the project's global stylesheet): `@include theme(...)`, `@include palette(...)`, or a named theme mixin such as `light-theme`, `dark-theme`, `fluent-light-theme`, `bootstrap-dark-theme`, `indigo-light-theme`.
14
+ - The `styles` array in `angular.json`: a prebuilt theme CSS such as `node_modules/igniteui-angular/styles/igniteui-angular.css` or `…/igniteui-fluent-light.css`.
15
+
16
+ Then classify what you found:
17
+
18
+ | Found | Meaning | Action |
19
+ | --- | --- | --- |
20
+ | Nothing | No theme | Continue with 3b–3c |
21
+ | A prebuilt theme CSS in `angular.json` and no Sass theme | The CLI's **Default** scaffold theme | Treat it as no theme. Continue with 3b–3c, and **remove the prebuilt CSS entry** from `angular.json` when you add the generated Sass theme. Otherwise both themes load and override each other |
22
+ | The CLI's **Custom** scaffold block: `$primary: #09f`, `$secondary: #4db8ff`, `$surface: #fff` passed to `palette(...)` and `@include theme($app-palette)` | The CLI's placeholder theme, not a choice made for this app | Treat it as no theme. Replace the block with the generated theme in 3c |
23
+ | Any other theme | A theme the app's authors chose | Keep it for now. Finish the comparison below after 3b |
24
+
25
+ **Existing app theme — compare after 3b.** Reuse it, and skip to 3d, only when **all three** match the design:
26
+
27
+ 1. the light/dark **variant**;
28
+ 2. the **design system**: the `$schema` argument, or the named mixin (`theme(...)` without `$schema` is `material`);
29
+ 3. the **primary color**: the seed color on the high-emphasis controls, as seen in the design (Path A: the kit variables; Path B: the color census).
30
+
31
+ If any of them differs, **ask the user** before changing the global theme. It affects every existing view in the app. If the user declines, generate the design's theme scoped to the new view's host selector instead of `:root`.
32
+
33
+ Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, use its value. Otherwise, use the artboard background color: near-black (`#121212`, `#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`.
34
+
35
+ ## 3b: Resolve Design System
36
+
37
+ You don't need to call `theming_detect_platform` to confirm the Angular package layout. We already did that in Phase 0.
38
+
39
+ **Choose the path from the dominant Phase 1f tier** (see `design-token-bridge.md § Two Paths`):
40
+
41
+ - **Path B (mostly Tier B/C):** the design system is the **closest baseline**, not a match. Choose it with `design-token-bridge.md § B1`, in this order: the user's request, then the kit's direct counterpart (Material 3 → `material`, Fluent 2 → `fluent`, Bootstrap → `bootstrap`), then text-field label placement, then control heights. A design whose fields have labels *above* them should not get `material`. Then continue: apply B2–B4 in 3c and B5–B8 in 3d.
42
+ - **Path A (mostly Tier A):** use this **strict precedence order**. Stop at the first signal that gives a clear answer:
43
+
44
+ 1. **Explicit user request** — "make it Material", "use Fluent", etc.
45
+ 2. **Library source name in design context** — the `figma_get_design_context` or `figma_get_metadata` response may reference the Figma source library file name (e.g. `"Indigo.Design UI Kit for Material"` → `material`).
46
+ 3. **Variable collection names from Phase 1e** — collection names like `Material/color/primary` identify the kit variant directly.
47
+ 4. **Elevation variable structure** — inspect the `Elevations/*` variables in `figma_get_variable_defs` output:
48
+ - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material Design**
49
+ - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap
50
+ 5. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` follow the Material 100–900 palette convention → likely **Material**.
51
+ 6. **Visual heuristics** (use only when all above are inconclusive): prominent shadows + ripple effects → `"material"`; flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; component borders + Bootstrap grid → `"bootstrap"`; rounded purple/indigo accents without Material shadows → `"indigo"`.
52
+
53
+ > **Never use font name as a primary signal.** "Titillium Web" is the default body font in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant.
54
+
55
+ Supported values: `material` (default), `bootstrap`, `fluent`, `indigo`.
56
+
57
+ ## 3c: Generate Global Theme
58
+
59
+ Extract the following using [references/design-token-bridge.md](design-token-bridge.md):
60
+
61
+ ```
62
+ Path A (Indigo.Design kits) — from Phase 1e variables:
63
+ primaryColor ← from "color/primary/500" or "primary/500"
64
+ secondaryColor ← from "color/secondary/500" or "secondary/500"
65
+ surfaceColor ← from "color/surface" or "surface/default"
66
+ fontFamily ← from "typography/font-family" or "typography/body/font-family"
67
+
68
+ Path B (any other kit, or none) — from the Phase 1d color census (`design-token-bridge.md § B2`):
69
+ primaryColor ← color painted on high-emphasis buttons / active indicators
70
+ secondaryColor ← a second accent actually used, else = primary
71
+ (material baseline: controls use secondary — seed it with the button color)
72
+ surfaceColor ← page background
73
+ fontFamily ← family of the text styles in use
74
+ type overrides ← kit type ramp by role (`design-token-bridge.md § B3`), incl. button text transform (§ B4)
75
+ ```
76
+
77
+ > **Parameter names differ between tools** — `theming_create_palette` uses `primary`, `secondary`, `surface`, `gray`, `success`, `warn`, `error`, `info`, and `variant`. `theming_create_theme` uses `primaryColor`, `secondaryColor`, `surfaceColor`, and has no `gray`. Do not mix them up.
78
+
79
+ > **fontFamily double-quote bug** — `theming_create_theme` may double-wrap the fontFamily string (e.g. `""'Titillium Web', sans-serif""`) in its Sass output, producing invalid Sass. If you see double-quoted strings in the generated output, strip the outer quotes before applying to `styles.scss`.
80
+
81
+ Generate the global theme in **one** call. `theming_create_theme` takes seed colors and emits the palette, typography, elevations, and spacing together:
82
+
83
+ ```
84
+ theming_create_theme({
85
+ platform: "angular",
86
+ designSystem: "<resolved design system>",
87
+ primaryColor, secondaryColor, surfaceColor,
88
+ variant: "<light|dark>",
89
+ fontFamily,
90
+ includeTypography: true,
91
+ includeElevations: true,
92
+ includeSpacing: true,
93
+ licensed: <true if @infragistics package>
94
+ })
95
+ ```
96
+
97
+ Call the individual generators only when you need one piece on its own:
98
+
99
+ - `theming_create_palette({ primary, secondary, surface, gray?, success?, warn?, error?, info?, variant, platform: "angular" })`, or `theming_create_custom_palette` for explicit shades (Path B full ramps). `create_custom_palette` emits its own `@include palette(...)`. Place it **after** the `create_theme` output, so its `:root` palette variables override the ones generated from the seed colors, and keep only one `@use "igniteui-angular/theming"` line. Check `--ig-primary-500` in Phase 5.
100
+ - `theming_create_typography({ fontFamily, designSystem, platform: "angular" })`. Do not pass `customScale`: the tool accepts it but its generators ignore it.
101
+ - `theming_create_elevations({ designSystem: "material" | "indigo" })`. The parameter is `designSystem`; there is no `preset` parameter.
102
+
103
+ **Path B type overrides.** After the theme output in `styles.scss`, add a `:root` block that sets the `--ig-<style>-<property>` variables for the type styles that differ from the baseline, including the button's text transform. See `design-token-bridge.md § B4`.
104
+
105
+ Apply the generated output to `src/styles.scss` as instructed in the tool's response.
106
+
107
+ ## 3d: Per-Component Token Mapping
108
+
109
+ > **Scope:** applies only to core Ignite UI Angular components (grid, navbar, card, inputs, chips, list, etc.). Charts, maps, and gauges have no Sass tokens — configure those via component inputs only.
110
+
111
+ For **every** Ignite UI core component in your plan, run this loop:
112
+
113
+ 1. `theming_get_component_design_tokens({ component: "<theme name>" })` — review all token names, types, and descriptions. Use the tool's component names (`input-group`, `navbar`, `grid`), and the variant name for buttons (`contained-button`, `flat-icon-button`, …). See `design-token-bridge.md § Per-Component Token Resolution`.
114
+ 2. Find the values for this component's surfaces (background, text, border, hover state). **Path A:** from the Phase 1e kit variables. **Path B:** from the Phase 1d color census and measurements. Variables, when they exist, only confirm them.
115
+ 3. `theming_create_component_theme({ component: "<theme name>", platform: "angular", designSystem: "<3b result>", variant: "<light|dark>", licensed: <true if @infragistics>, tokens: { <only differing tokens> } })`. Always pass `designSystem` and `variant`: the tool defaults to Material light and would compute the theme against the wrong schema.
116
+ 4. Apply the generated `@include tokens(<theme>)` block to the component's SCSS or to a scoped block in `styles.scss`
117
+
118
+ **Path B additions to this loop** (see `design-token-bridge.md § B5–B8`): include the component's **radius** tokens at the measured px value, its **border** and **shadow/elevation** tokens as the design shows them, and its hover/focus/disabled **state** tokens from the kit's state variants, in the same `theming_create_component_theme` call. Choose `--ig-size` from the measured control heights (`design-token-bridge.md § B7`) before tuning individual components.
119
+
120
+ When a specific component needs a different density or spacing from the global default, use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this scopes `--ig-size` or `--ig-spacing` to that component’s selector rather than applying globally. For compound components, use `scope` with a sub-component selector. Only apply these globally (`:root`) when the entire app has a clearly distinct density (Path B: when every component family moves the same way, see `design-token-bridge.md § B7`). Leave `theming_set_roundness` at its default unless the user explicitly requests a change. For Path B, express radius through per-component tokens instead, because one global factor cannot reproduce a kit's radii. Never derive multiplier values from Figma pixel values. See `references/design-token-bridge.md § Spacing, Sizing, and Roundness`.
@@ -2,15 +2,13 @@
2
2
 
3
3
  > **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.**
4
4
  >
5
- > Use this file in Phase 5 for the measurement-driven validation loop. Read in full
6
- > before calling any Playwright MCP tool.
5
+ > Use this file in Phase 5 for the measurement-driven validation loop. Read in full before calling any Playwright MCP tool.
7
6
 
8
7
  ---
9
8
 
10
9
  ## Core Philosophy
11
10
 
12
- **Measure, don't eyeball.** The goal is not visual regression (did this change from last week?) but design fidelity (does this match the Figma spec?).
13
- Screenshots give you the gestalt. `playwright_browser_evaluate` gives you the numbers. Numbers drive corrections.
11
+ **Measure, don't eyeball.** The goal is not visual regression (did this change from last week?) but design fidelity (does this match the Figma spec?). Screenshots give you the gestalt. `playwright_browser_evaluate` gives you the numbers. Numbers drive corrections.
14
12
 
15
13
  ---
16
14
 
@@ -23,7 +21,7 @@ Screenshots give you the gestalt. `playwright_browser_evaluate` gives you the nu
23
21
  4. playwright_browser_take_screenshot → capture the full viewport
24
22
  5. [Visual comparison] → compare against Phase 1c Figma screenshot section by section
25
23
  6. playwright_browser_evaluate → measure exact CSS values for EVERY section in the
26
- Phase 1g Surfaces table (mandatory, not just differing regions)
24
+ Phase 1g Table B (Layout Surfaces) (mandatory, not just differing regions)
27
25
  7. [Surfaces audit] → assert each section's backgroundColor, border, padding against spec
28
26
  8. [Action controls audit] → count and name all action buttons; compare against Phase 1d inventory
29
27
  9. [Input type audit] → check igx-input-group class modifier on all form controls
@@ -31,9 +29,9 @@ Screenshots give you the gestalt. `playwright_browser_evaluate` gives you the nu
31
29
  11. [Apply fixes] → edit source files
32
30
  12. playwright_browser_navigate → reload after fixes
33
31
  13. playwright_browser_take_screenshot → re-verify
34
- 14. Repeat steps 5-13 until no Critical/Major issues remain
35
- 15. Do NOT advance to the next artboard until all checks pass on the current page
36
- 16. playwright_browser_snapshot → final accessibility check (once per session)
32
+ 14. Repeat steps 5-13 until the exit condition below is met (only Cosmetic and Accepted items left)
33
+ 15. Do NOT advance to the next artboard until then
34
+ 16. playwright_browser_snapshot → accessibility check for this view (once per artboard)
37
35
  ```
38
36
 
39
37
  ---
@@ -55,9 +53,7 @@ playwright_browser_take_screenshot({ type: "png" })
55
53
 
56
54
  ### 2. `playwright_browser_evaluate` Uses `function`, Not `script`
57
55
 
58
- **Problem:** The `playwright_browser_evaluate` tool requires a `function` parameter
59
- (a JavaScript function string), **not** `script`. Passing `script` causes a validation
60
- error: _"Invalid input: expected string, received undefined"_.
56
+ **Problem:** The `playwright_browser_evaluate` tool requires a `function` parameter (a JavaScript function string), **not** `script`. Passing `script` causes a validation error: _"Invalid input: expected string, received undefined"_.
61
57
 
62
58
  **Fix:** Always use the `function` parameter with a self-contained arrow function string.
63
59
 
@@ -135,13 +131,13 @@ playwright_browser_evaluate({
135
131
  });
136
132
  ```
137
133
 
138
- ### Surfaces Audit (run for EVERY page, EVERY section in Phase 1g Surfaces table)
134
+ ### Surfaces Audit (run for EVERY page, EVERY section in Phase 1g Table B (Layout Surfaces))
139
135
 
140
136
  For each surface entry, run:
141
137
 
142
138
  ```javascript
143
139
  playwright_browser_evaluate({
144
- function: "() => { var sections = { /* fill from Phase 1g Surfaces table */ sectionA: '.section-a-selector', sectionB: '.section-b-selector' }; var result = {}; Object.keys(sections).forEach(function(key) { var el = document.querySelector(sections[key]); if (el) { var s = getComputedStyle(el); var r = el.getBoundingClientRect(); result[key] = { bg: s.backgroundColor, br: s.borderRadius, padding: s.padding, border: s.border, h: Math.round(r.height) }; } else { result[key] = 'NOT FOUND'; } }); return result; }",
140
+ function: "() => { var sections = { /* fill from Phase 1g Table B (Layout Surfaces) */ sectionA: '.section-a-selector', sectionB: '.section-b-selector' }; var result = {}; Object.keys(sections).forEach(function(key) { var el = document.querySelector(sections[key]); if (el) { var s = getComputedStyle(el); var r = el.getBoundingClientRect(); result[key] = { bg: s.backgroundColor, br: s.borderRadius, padding: s.padding, border: s.border, h: Math.round(r.height) }; } else { result[key] = 'NOT FOUND'; } }); return result; }",
145
141
  });
146
142
  ```
147
143
 
@@ -149,7 +145,7 @@ playwright_browser_evaluate({
149
145
 
150
146
  - If Figma surface has a background: `bg !== 'rgba(0, 0, 0, 0)'`
151
147
  - If Figma section floats on page background: `bg === 'rgba(0, 0, 0, 0)'` (do not over-surface)
152
- - `borderRadius`, `padding`, `border` match Phase 1g Surfaces table values
148
+ - `borderRadius`, `padding`, `border` match Phase 1g Table B (Layout Surfaces) values
153
149
 
154
150
  ### Input Type Audit (run for every page with form controls)
155
151
 
@@ -159,8 +155,7 @@ playwright_browser_evaluate({
159
155
  });
160
156
  ```
161
157
 
162
- Compare each result against the variant detected in Phase 1d. If all controls should be
163
- `border`, add `{ provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' }` to `app.config.ts`.
158
+ Compare each result against the variant detected in Phase 1d. If all controls should be `border`, add `{ provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' }` to `app.config.ts`.
164
159
 
165
160
  ### Action Controls Audit (run for every page)
166
161
 
@@ -170,23 +165,31 @@ playwright_browser_evaluate({
170
165
  });
171
166
  ```
172
167
 
173
- Compare the returned list against Phase 1d's action controls inventory. Any button in
174
- this list that is **not** in the Phase 1d inventory is fabricated and must be removed.
168
+ Compare the returned list against Phase 1d's action controls inventory. Any button in this list that is **not** in the Phase 1d inventory is fabricated and must be removed.
175
169
 
176
170
  ---
177
171
 
178
172
  ## Mismatch Severity Classification
179
173
 
180
- | Severity | Category | Decision rule | Action |
181
- | ------------ | ------------------------ | ------------------------------------------------------- | --------------------------- |
182
- | **Critical** | Missing element | Present in Figma, absent from DOM | Auto-fix |
183
- | **Critical** | Broken layout | Overlapping elements, content outside bounds | Auto-fix |
184
- | **Major** | Wrong component | Figma shows `igx-combo`, code has `igx-select` | Auto-fix |
185
- | **Major** | Wrong variant | `igxButton="flat"` when design shows `contained` | Auto-fix |
186
- | **Minor** | Spacing off by > 4px | `gap: 24px` measured, Figma shows `16px` | Auto-fix if single property |
187
- | **Minor** | Font size wrong by > 2px | `16px` measured, Figma shows `14px` | Auto-fix |
188
- | **Cosmetic** | Color shade | `rgb(50, 50, 50)` vs `#333333` (identical perceptually) | Report only |
189
- | **Cosmetic** | Spacing off by ≤ 4px | Minor rounding or sub-pixel difference | Report only |
174
+ | Severity | Category | Decision rule | Action |
175
+ | ------------ | -------- | ------------- | ------ |
176
+ | **Critical** | Missing element | Present in Figma, absent from DOM | Fix |
177
+ | **Critical** | Broken layout | Overlapping elements, content outside bounds | Fix |
178
+ | **Major** | Wrong component | Figma shows `igx-combo`, code has `igx-select` | Fix |
179
+ | **Major** | Wrong variant | `igxButton="flat"` when the design shows `contained` | Fix |
180
+ | **Major** | Token-fixable mismatch | Color, radius, border, shadow, or text casing differs, or a control height differs by more than 4px, and a component token, palette seed, `--ig-size` step, or `--ig-<style>-<property>` override can close it | Fix |
181
+ | **Minor** | Spacing off by > 4px | `gap: 24px` measured, Figma shows `16px` | Fix |
182
+ | **Minor** | Font size wrong by > 2px | `16px` measured, Figma shows `14px` | Fix |
183
+ | **Cosmetic** | Color rounding | The same color after conversion: `rgb(51, 51, 51)` vs `#333333`. Any visibly different shade (`#333` vs `#2d2d2d`, a 500-vs-600 seed) is **Major** | Report only |
184
+ | **Cosmetic** | Size off by ≤ 4px | Spacing or control height within 4px, or font size within 2px, from rounding or sub-pixel layout | Report only |
185
+ | **Accepted** | Approved anatomy delta | Matches a delta-ledger entry the user approved (e.g. an M3 segmented button's check icon, a breadcrumb rendered as semantic markup) | Report only. Do not "fix" it; it does not count toward the 3-retry rule |
186
+
187
+ **Exit condition for an artboard:** no Critical, Major, or Minor issues remain. Only Cosmetic and Accepted items may be left, and both go into the final report.
188
+
189
+ > **Accepted needs the user's approval.** A delta is Accepted only after the user approves its ledger entry. Most entries come from Phase 2d. When Phase 5 finds a difference that tokens, documented parts, or projected content cannot close, add it to the ledger and ask the user. Once they approve it, it is Accepted from then on. Until then, classify it normally, and never downgrade it silently.
190
+ >
191
+ > **Third-party kits (Path B):** color, radius, border, casing, and height mismatches are almost always fixable with component tokens or the `--ig-<style>-<property>` typography overrides. They are Major, never Accepted. Only *structural* differences (a label position the baseline cannot move, an adornment the component does not render, a behavior pattern with no equivalent) qualify for the ledger.
192
+
190
193
 
191
194
  ### Mismatch Report Format
192
195
 
@@ -197,7 +200,7 @@ ISSUE: <concise description of the mismatch>
197
200
  LOCATION: <component/section in the view>
198
201
  FIGMA: <value or description from the Figma design context>
199
202
  RENDERED: <value measured by Playwright>
200
- SEVERITY: <Critical | Major | Minor | Cosmetic>
203
+ SEVERITY: <Critical | Major | Minor | Cosmetic | Accepted>
201
204
  FIX: <specific, one-line code change — no vague instructions>
202
205
  ```
203
206
 
@@ -215,10 +218,8 @@ ISSUE: Grid header row height too large
215
218
  LOCATION: igx-grid header
216
219
  FIGMA: header height = 40px
217
220
  RENDERED: height = 56px
218
- SEVERITY: Minor
219
- FIX: Call theming_get_component_design_tokens("grid"), find "header-background" or size
220
- token, then call theming_set_size({ component: "grid", size: "small" }) or
221
- theming_create_component_theme with a custom header height token.
221
+ SEVERITY: Major
222
+ FIX: theming_set_size({ component: "grid", size: "small", platform: "angular" })
222
223
  ```
223
224
 
224
225
  ---
@@ -234,7 +235,7 @@ Run this checklist during the first screenshot comparison after implementation:
234
235
  | Page header | Typography size and weight, breadcrumb spacing, action button prominence |
235
236
  | Data table / grid | Column widths, header background, row height, cell padding, border color |
236
237
  | Cards / panels | **Background color** (must not be `rgba(0,0,0,0)` when surface exists in Figma), border, border radius, shadow, padding, divider |
237
- | Surface containers | Every entry in Phase 1g Surfaces table: `backgroundColor`, `borderRadius`, `padding`, `border`; child elements enclosed within bounding rect |
238
+ | Surface containers | Every entry in Phase 1g Table B (Layout Surfaces): `backgroundColor`, `borderRadius`, `padding`, `border`; child elements enclosed within bounding rect |
238
239
  | Form fields | Input type variant (line/border/box) — check `igx-input-group--border` vs `--box` vs `--line` CSS class; run Input Type Audit snippet |
239
240
  | Action controls | Count and name all buttons/toolbar actions; compare against Phase 1d inventory; remove any not in Figma |
240
241
  | Buttons | Variant (flat/outlined/contained), color, typography, padding |
@@ -262,12 +263,9 @@ After `playwright_browser_snapshot()`, verify:
262
263
 
263
264
  ### Spacing, Size, and Roundness Correction
264
265
 
265
- Do **not** patch internal component classes with `::ng-deep`. Those are implementation
266
- details subject to change between versions.
266
+ Do **not** patch internal component classes with `::ng-deep`. Those are implementation details subject to change between versions.
267
267
 
268
- Ignite UI components expose `--ig-size` and `--ig-spacing` CSS custom properties.
269
- Scope them to the component's selector — or to a sub-component selector for compound
270
- components — to adjust density and spacing without touching internal class names.
268
+ Ignite UI components expose `--ig-size` and `--ig-spacing` CSS custom properties. Scope them to the component's selector — or to a sub-component selector for compound components — to adjust density and spacing without touching internal class names.
271
269
 
272
270
  **Via theming MCP** (preferred — generates correctly scoped Sass or CSS output):
273
271
 
@@ -297,28 +295,28 @@ igx-grid-toolbar {
297
295
  }
298
296
  ```
299
297
 
300
- > **Multiplier reasoning:** the `--ig-spacing` value is relative to the default (1.0).
301
- > Choose a value based on visual judgment — `0.75` for slightly tighter, `0.5` for
302
- > compact — never by mapping a Figma pixel value directly.
298
+ > **Multiplier reasoning:** the `--ig-spacing` value is relative to the default (1.0). Choose a value based on visual judgment — `0.75` for slightly tighter, `0.5` for compact — never by mapping a Figma pixel value directly.
303
299
 
304
300
  ### Typography size correction
305
301
 
306
- ```
307
- // Re-check the typography doc, then update the SCSS
308
- // Example: heading is 28px but should be 24px
309
- // Check theming_get_component_design_tokens to find the right token,
310
- // or override directly in the component's SCSS
311
- .igx-navbar__title {
312
- font-size: 1.5rem; // 24px
302
+ Fix the type style, not an internal class. Every type style is a set of `--ig-<style>-<property>` variables on `:root` (see `design-token-bridge.md § B4`):
303
+
304
+ ```scss
305
+ // Example: the page heading renders at 28px, the design shows 24px. Native <h1>
306
+ // elements get the h1 type style inside an element with the `ig-typography` class:
307
+ :root {
308
+ --ig-h1-font-size: 1.5rem; // 24px
313
309
  }
314
310
  ```
315
311
 
312
+ If the text belongs to a component, find which type style it uses in the component's doc, or use its typography-related design tokens from `theming_get_component_design_tokens`. Or style content you project into it.
313
+
316
314
  ### Color correction via palette token
317
315
 
318
316
  ```
319
317
  // Instead of hardcoding, use a CSS variable from the generated palette
320
318
  background-color: var(--ig-primary-500);
321
- color: var(--ig-primary-contrast-500);
319
+ color: var(--ig-primary-500-contrast);
322
320
  ```
323
321
 
324
322
  ### Missing element
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  license: MIT
3
3
  name: igniteui-angular-generate-from-image-design
4
- description: Implement Angular application views from design images using Ignite UI Angular components. Uses MCP servers (igniteui-cli, igniteui-theming, angular-cli) to discover components, generate themes, and follow best practices. Triggers when the user provides a design image (screenshot, mockup, wireframe) and wants it built as a working Angular view with igniteui-angular components. Also triggers when the user asks to "implement this design", "build this UI", "convert this mockup", or "create a page from this image" in an Ignite UI Angular project.
4
+ description: "Implements Angular application views from design images using Ignite UI Angular components. Uses MCP servers (igniteui-cli, igniteui-theming, angular-cli) to discover components, generate themes, and follow best practices. WHEN TO USE: the user provides a design image (screenshot, mockup, wireframe) and wants it built as a working Angular view with igniteui-angular components, or asks to \"implement this design\", \"build this UI\", \"convert this mockup\", or \"create a page from this image\" in an Ignite UI Angular project. WHEN NOT TO USE: the design is a Figma file or Figma URL, whatever UI kit it was built with (use igniteui-angular-figma-to-app; fall back to this skill only when the Figma MCP is unavailable and the user provides an exported image); questions about a single component's API (use igniteui-angular-components or igniteui-angular-grids); theme-only changes with no view to build (use igniteui-angular-theming)."
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -18,12 +18,16 @@ Complete these steps in order before writing any implementation code:
18
18
  5. Call `get_doc` for every chosen component family before using it.
19
19
  6. Only then start coding.
20
20
 
21
- > **If the MCP tools are unavailable**, do not block the task: fall back to the reference
22
- > files of the [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and
23
- > [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills for component APIs,
24
- > and the [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) skill's manual
25
- > Sass workflow for theming. Suggest running `npx -y igniteui-cli ai-config` (configures the
26
- > `igniteui-cli` and `igniteui-theming` MCP servers) and reloading the editor for future sessions.
21
+ > **The `igniteui-cli` and `igniteui-theming` MCP servers are required.** Before step 1,
22
+ > verify both by calling `list_components` (with `framework: "angular"`) and `detect_platform`.
23
+ > If either tool is not available, configure the servers yourself by running
24
+ > `npx -y igniteui-cli ai-config` (or `ig ai-config`) from the project root, ask the user to
25
+ > reload the editor or agent session, and stop. Continue without them only if the user
26
+ > explicitly asks to — then fall back to the reference files of the
27
+ > [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and
28
+ > [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills and the
29
+ > [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) skill's manual Sass
30
+ > workflow, and mark every API detail you could not verify as unverified.
27
31
 
28
32
  ## Workflow
29
33
 
@@ -1,12 +1,16 @@
1
1
  ---
2
2
  license: MIT
3
3
  name: igniteui-angular-grids
4
- description: "Provides guidance on all Ignite UI for Angular data grid types (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) including setup, column configuration, sorting, filtering, selection, editing, grouping, summaries, toolbar, export, paging, remote data, and state persistence. Use when users ask about grids, tables, data grids, tabular data display, cell editing, batch editing, row selection, column pinning, column hiding, grouping rows, pivot tables, tree-structured data, hierarchical data, master-detail views, or exporting grid data. Do NOT use for non-grid UI components (forms, dialogs, navigation, charts) — use igniteui-angular-components instead. Do NOT use for theming or styling — use igniteui-angular-theming instead."
4
+ description: "Provides guidance on all Ignite UI for Angular data grid types (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) including setup, column configuration, sorting, filtering, selection, editing, grouping, summaries, toolbar, export, paging, remote data, and state persistence. WHEN TO USE: users ask about grids, tables, data grids, tabular data display, cell editing, batch editing, row selection, column pinning, column hiding, grouping rows, pivot tables, tree-structured data, hierarchical data, master-detail views, or exporting grid data. WHEN NOT TO USE: non-grid UI components such as forms, dialogs, navigation, or charts (use igniteui-angular-components); theming or styling (use igniteui-angular-theming)."
5
5
  user-invocable: true
6
6
  ---
7
7
 
8
8
  # Ignite UI for Angular — Data Grids
9
9
 
10
+ ## Ignite UI CLI MCP Server (required)
11
+
12
+ **Verify the `igniteui-cli` MCP server before any other step** by calling `list_components` with `framework: "angular"`. If the tool is not available, follow the setup procedure in [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md#ignite-ui-cli-mcp-server-required): configure it yourself with `npx -y igniteui-cli ai-config` (or `ig ai-config`), ask the user to reload the editor or agent session and stop, and continue without the server only if the user explicitly asks to.
13
+
10
14
  ## Required Workflow
11
15
 
12
16
  **This file is a routing hub only. It contains no code examples and no API details.** Grid APIs change between releases, so never write component selectors, import paths, method names, or property names from memory — read the relevant reference files first.
@@ -14,7 +18,7 @@ user-invocable: true
14
18
  1. **Identify the grid type.** Use the Grid Selection Decision Guide below. If the grid type is not explicitly stated, infer it from context or ask.
15
19
  2. **Identify every task category involved.** Map the user's request to one or more rows in the Task → Reference File table below. A single request often spans multiple categories (e.g., remote paging plus editing requires both `paging-remote.md` and `editing.md`).
16
20
  3. **Read every identified reference file in full**, in a single parallel batch of file reads — even if you believe you already know the answer.
17
- 4. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs`/`search_api` from the `igniteui-cli` MCP server when available; otherwise state explicitly that the detail is unverified instead of guessing.
21
+ 4. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs`/`search_api` from the `igniteui-cli` MCP server. Never guess — if the MCP server cannot answer it, state explicitly that the detail is unverified.
18
22
 
19
23
  ### Task → Reference File
20
24
 
@@ -35,7 +39,7 @@ user-invocable: true
35
39
  ---
36
40
 
37
41
  ## Overview
38
- This skill gives high-level guidance on grids and their features. The `igniteui-cli` MCP server (when available) has **full docs for grid toolbars and export** (`grid-toolbar`, `grid-export-excel`, `exporter-pdf`, and the tree/hierarchical/pivot variants — call `list_components` to see the current catalog) and an API-member index via `search_api`/`get_api_reference` for member-level lookups. For everything else, the reference files below are the primary guidance.
42
+ This skill gives high-level guidance on grids and their features. The `igniteui-cli` MCP server has **full docs for grid toolbars and export** (`grid-toolbar`, `grid-export-excel`, `exporter-pdf`, and the tree/hierarchical/pivot variants — call `list_components` to see the current catalog) and an API-member index via `search_api`/`get_api_reference` for member-level lookups. For everything else, the reference files below are the primary guidance.
39
43
 
40
44
  ---
41
45
 
@@ -425,8 +425,7 @@ Default summaries by type:
425
425
  ### Custom Summary Operand
426
426
 
427
427
  ```typescript
428
- import { IgxNumberSummaryOperand } from 'igniteui-angular/grids/core';
429
- import { IgxSummaryResult } from 'igniteui-angular/core';
428
+ import { IgxNumberSummaryOperand, IgxSummaryResult } from 'igniteui-angular/core';
430
429
 
431
430
  class RevenueSummary extends IgxNumberSummaryOperand {
432
431
  operate(data: number[]): IgxSummaryResult[] {
@@ -12,7 +12,7 @@ Grid APIs change between releases — do not write migration code from memory. B
12
12
 
13
13
  1. **Identify the current Grid Lite usage** - read the user's existing component files to understand their column configuration, templates, data binding, and any `dataPipelineConfiguration` usage.
14
14
  2. **Consult the grids skill** - read the relevant reference files from [`igniteui-angular-grids`](../SKILL.md) for the target features the user needs after migration.
15
- 3. **Use the MCP server when in doubt** - call `get_doc` or `search_docs` from the `igniteui-cli` MCP server (if available) for Angular to verify current API details.
15
+ 3. **Verify with the MCP server** - call `get_doc`, `search_docs`, or `search_api` from the `igniteui-cli` MCP server for Angular to verify current API details.
16
16
  4. **Only then produce output** - base all code on verified references, not memory.
17
17
 
18
18
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  license: MIT
3
3
  name: igniteui-angular-theming
4
- 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
+ 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. WHEN TO USE: 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. WHEN NOT TO USE: component behavior, APIs, or data binding (use igniteui-angular-components or igniteui-angular-grids); building whole views from a design image or Figma file (use igniteui-angular-generate-from-image-design or igniteui-angular-figma-to-app)."
5
5
  user-invocable: true
6
6
  ---
7
7
 
@@ -16,11 +16,15 @@ This skill teaches AI agents how to theme Ignite UI for Angular applications usi
16
16
  - An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users
17
17
  - Sass support enabled in the project (default for Angular CLI projects)
18
18
 
19
- ## Ignite UI Theming MCP Server (recommended, not required)
19
+ ## Ignite UI Theming MCP Server (required)
20
20
 
21
- 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`.
21
+ 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). Use its tools for all theme code — never write theme Sass or component token names from memory.
22
22
 
23
- 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).
23
+ **Verify the server before any other step** by calling `detect_platform`. If the tool is not available:
24
+
25
+ 1. **Configure it yourself — do not just suggest it.** From the project root, run `npx -y igniteui-cli ai-config` (or `ig ai-config` when `igniteui-cli` is installed globally). It configures both the `igniteui-theming` and `igniteui-cli` MCP servers, preserves existing server entries, and copies the Agent Skills. If the client is not covered, add the entry manually from [`references/mcp-setup.md`](./references/mcp-setup.md) — the server command is `npx -y igniteui-theming igniteui-theming-mcp`.
26
+ 2. **Ask the user to reload the editor or agent session, then stop.** MCP tools cannot be loaded into a running session.
27
+ 3. **Continue without the server only if the user explicitly asks to.** In that case, use the manual Sass workflow in this file and mark every token name you could not verify with `get_component_design_tokens` as unverified.
24
28
 
25
29
  ## Theming Architecture
26
30
 
@@ -369,7 +373,7 @@ Everything else must use `var(--ig-<family>-<shade>)` tokens.
369
373
  ## Key Rules
370
374
 
371
375
  1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized
372
- 2. **Always call `detect_platform` first** when using MCP tools
376
+ 2. **Always call `detect_platform` first** — it verifies the MCP server is connected and sets the correct import paths
373
377
  3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names
374
378
  4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts)
375
379
  5. **Surface color must match the variant** — light color for `light`, dark color for `dark`
@@ -2,10 +2,18 @@
2
2
 
3
3
  > **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.**
4
4
 
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.
5
+ The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. **It is required by the Ignite UI Agent Skills.** 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
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.
8
8
 
9
+ ## Agent Responsibilities
10
+
11
+ When the `detect_platform` tool is not available, the agent configures the server itself — it does not only suggest the setup to the user:
12
+
13
+ 1. Run the one-command setup below from the project root.
14
+ 2. Ask the user to reload the editor or agent session, then stop.
15
+ 3. Continue without the server only if the user explicitly asks to, and mark every token name that could not be verified with `get_component_design_tokens` as unverified.
16
+
9
17
  ## Recommended: One-Command Setup
10
18
 
11
19
  From the project root:
@@ -14,7 +22,7 @@ From the project root:
14
22
  npx -y igniteui-cli ai-config
15
23
  ```
16
24
 
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.
25
+ 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. When `igniteui-cli` is installed globally (`npm install -g igniteui-cli`), use `ig ai-config` instead.
18
26
 
19
27
  ## Manual Configuration (fallback)
20
28
 
@@ -41,6 +49,8 @@ Use these only when `ai-config` is unavailable or your editor is not covered by
41
49
  claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp
42
50
  ```
43
51
 
52
+ Or add the entry to the project's `.mcp.json` at the repository root, using the `mcpServers` key shown for Cursor below.
53
+
44
54
  ### Cursor — `.cursor/mcp.json`
45
55
 
46
56
  ```json