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.
- package/README.md +1 -1
- package/button-group/README.md +42 -9
- package/calendar/README.md +30 -20
- package/card/README.md +1 -1
- package/fesm2022/igniteui-angular-accordion.mjs +7 -7
- package/fesm2022/igniteui-angular-action-strip.mjs +11 -22
- package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
- package/fesm2022/igniteui-angular-avatar.mjs +7 -7
- package/fesm2022/igniteui-angular-badge.mjs +7 -7
- package/fesm2022/igniteui-angular-banner.mjs +10 -10
- package/fesm2022/igniteui-angular-bottom-nav.mjs +22 -22
- package/fesm2022/igniteui-angular-button-group.mjs +32 -35
- package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs +132 -180
- package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
- package/fesm2022/igniteui-angular-card.mjs +47 -58
- package/fesm2022/igniteui-angular-card.mjs.map +1 -1
- package/fesm2022/igniteui-angular-carousel.mjs +22 -22
- package/fesm2022/igniteui-angular-chat-extras.mjs +6 -6
- package/fesm2022/igniteui-angular-chat.mjs +12 -12
- package/fesm2022/igniteui-angular-checkbox.mjs +7 -7
- package/fesm2022/igniteui-angular-chips.mjs +10 -10
- package/fesm2022/igniteui-angular-combo.mjs +69 -67
- package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-core.mjs +139 -92
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs +53 -70
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-dialog.mjs +13 -13
- package/fesm2022/igniteui-angular-directives.mjs +194 -194
- package/fesm2022/igniteui-angular-drop-down.mjs +29 -29
- package/fesm2022/igniteui-angular-expansion-panel.mjs +28 -28
- package/fesm2022/igniteui-angular-grids-core.mjs +737 -661
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +49 -49
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +37 -37
- package/fesm2022/igniteui-angular-grids-lite.mjs +25 -17
- package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +80 -80
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +55 -55
- package/fesm2022/igniteui-angular-icon.mjs +10 -10
- package/fesm2022/igniteui-angular-input-group.mjs +59 -55
- package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs +40 -40
- package/fesm2022/igniteui-angular-navbar.mjs +13 -13
- package/fesm2022/igniteui-angular-navigation-drawer.mjs +43 -38
- package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
- package/fesm2022/igniteui-angular-paginator.mjs +19 -19
- package/fesm2022/igniteui-angular-progressbar.mjs +19 -19
- package/fesm2022/igniteui-angular-query-builder.mjs +22 -22
- package/fesm2022/igniteui-angular-radio.mjs +25 -21
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-select.mjs +29 -33
- package/fesm2022/igniteui-angular-select.mjs.map +1 -1
- package/fesm2022/igniteui-angular-simple-combo.mjs +9 -9
- package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-slider.mjs +28 -28
- package/fesm2022/igniteui-angular-snackbar.mjs +7 -7
- package/fesm2022/igniteui-angular-splitter.mjs +13 -13
- package/fesm2022/igniteui-angular-stepper.mjs +34 -34
- package/fesm2022/igniteui-angular-switch.mjs +7 -7
- package/fesm2022/igniteui-angular-tabs.mjs +34 -34
- package/fesm2022/igniteui-angular-time-picker.mjs +26 -36
- package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-toast.mjs +7 -7
- package/fesm2022/igniteui-angular-tree.mjs +28 -28
- package/fesm2022/igniteui-angular-virtual-scroll.mjs +497 -145
- package/fesm2022/igniteui-angular-virtual-scroll.mjs.map +1 -1
- package/migrations/common/UpdateChanges.d.ts +56 -0
- package/migrations/common/UpdateChanges.js +366 -38
- package/migrations/common/UpdateChanges.spec.js +829 -0
- package/migrations/migration-collection.json +1 -1
- package/migrations/update-22_2_0/index.js +145 -0
- package/migrations/update-22_2_0/index.spec.js +206 -0
- package/navigation-drawer/README.md +1 -1
- package/package.json +3 -3
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/skills/igniteui-angular-components/SKILL.md +9 -5
- package/skills/igniteui-angular-components/references/form-controls.md +1 -1
- package/skills/igniteui-angular-components/references/mcp-setup.md +14 -2
- package/skills/igniteui-angular-figma-to-app/SKILL.md +112 -525
- package/skills/igniteui-angular-figma-to-app/references/asset-extraction.md +49 -75
- package/skills/igniteui-angular-figma-to-app/references/design-provenance.md +201 -0
- package/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md +175 -52
- package/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +153 -99
- package/skills/igniteui-angular-figma-to-app/references/figma-exploration.md +226 -0
- package/skills/igniteui-angular-figma-to-app/references/mcp-setup.md +71 -105
- package/skills/igniteui-angular-figma-to-app/references/project-setup.md +63 -0
- package/skills/igniteui-angular-figma-to-app/references/theme-generation.md +120 -0
- package/skills/igniteui-angular-figma-to-app/references/validation-patterns.md +48 -50
- package/skills/igniteui-angular-generate-from-image-design/SKILL.md +11 -7
- package/skills/igniteui-angular-grids/SKILL.md +7 -3
- package/skills/igniteui-angular-grids/references/editing.md +1 -2
- package/skills/igniteui-angular-grids/references/grid-migration.md +1 -1
- package/skills/igniteui-angular-theming/SKILL.md +9 -5
- package/skills/igniteui-angular-theming/references/mcp-setup.md +12 -2
- package/types/igniteui-angular-button-group.d.ts +49 -34
- package/types/igniteui-angular-calendar.d.ts +33 -50
- package/types/igniteui-angular-card.d.ts +12 -17
- package/types/igniteui-angular-combo.d.ts +6 -0
- package/types/igniteui-angular-core.d.ts +25 -8
- package/types/igniteui-angular-grids-core.d.ts +48 -4
- package/types/igniteui-angular-grids-lite.d.ts +5 -1
- package/types/igniteui-angular-grids-pivot-grid.d.ts +1 -1
- package/types/igniteui-angular-input-group.d.ts +17 -3
- package/types/igniteui-angular-navigation-drawer.d.ts +1 -0
- package/types/igniteui-angular-radio.d.ts +5 -0
- package/types/igniteui-angular-time-picker.d.ts +0 -1
- package/types/igniteui-angular-virtual-scroll.d.ts +41 -13
- 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
|
|
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
|
|
35
|
-
15. Do NOT advance to the next artboard until
|
|
36
|
-
16. playwright_browser_snapshot →
|
|
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
|
|
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
|
|
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
|
|
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
|
|
181
|
-
| ------------ |
|
|
182
|
-
| **Critical** | Missing element
|
|
183
|
-
| **Critical** | Broken layout
|
|
184
|
-
| **Major** | Wrong component
|
|
185
|
-
| **Major** | Wrong variant
|
|
186
|
-
| **
|
|
187
|
-
| **Minor** |
|
|
188
|
-
| **
|
|
189
|
-
| **Cosmetic** |
|
|
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:
|
|
219
|
-
FIX:
|
|
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
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
//
|
|
310
|
-
//
|
|
311
|
-
|
|
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
|
|
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:
|
|
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
|
-
> **
|
|
22
|
-
>
|
|
23
|
-
>
|
|
24
|
-
>
|
|
25
|
-
>
|
|
26
|
-
>
|
|
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.
|
|
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
|
|
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
|
|
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/
|
|
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. **
|
|
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.
|
|
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 (
|
|
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).
|
|
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
|
-
|
|
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**
|
|
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
|