igniteui-cli 15.1.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/PromptSession.d.ts +1 -1
  2. package/lib/PromptSession.js +2 -2
  3. package/lib/commands/ai-config.d.ts +3 -5
  4. package/lib/commands/ai-config.js +68 -23
  5. package/lib/commands/new.js +1 -1
  6. package/package.json +4 -4
  7. package/templates/blazor/igb/index.d.ts +1 -0
  8. package/templates/blazor/igb/index.js +12 -0
  9. package/templates/blazor/igb/projects/ai-config/files/AGENTS.md +65 -0
  10. package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +65 -0
  11. package/templates/blazor/igb/projects/ai-config/files/skills/README.md +61 -0
  12. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +118 -0
  13. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +302 -0
  14. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +350 -0
  15. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +178 -0
  16. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +365 -0
  17. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +180 -0
  18. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +322 -0
  19. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/mcp-setup.md +78 -0
  20. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/setup.md +214 -0
  21. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/SKILL.md +284 -0
  22. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/component-mapping.md +281 -0
  23. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/gotchas.md +503 -0
  24. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/SKILL.md +188 -0
  25. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/data-operations.md +264 -0
  26. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/editing.md +297 -0
  27. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/features.md +447 -0
  28. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/mcp-setup.md +78 -0
  29. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/paging-remote.md +299 -0
  30. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/sizing.md +284 -0
  31. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/state.md +160 -0
  32. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/structure.md +497 -0
  33. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/types.md +553 -0
  34. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +259 -0
  35. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/common-patterns.md +276 -0
  36. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/mcp-setup.md +81 -0
  37. package/templates/blazor/igb/projects/ai-config/index.d.ts +22 -0
  38. package/templates/blazor/igb/projects/ai-config/index.js +62 -0
  39. package/templates/blazor/index.d.ts +3 -0
  40. package/templates/blazor/index.js +11 -0
@@ -4,6 +4,6 @@ export declare class PromptSession extends BasePromptSession {
4
4
  protected getProjectLibrary(framework: Framework): Promise<ProjectLibrary>;
5
5
  protected completeAndRun(port?: number): Promise<void>;
6
6
  protected upgradePackages(): Promise<void>;
7
- protected configureAI(): Promise<void>;
7
+ protected configureAI(frameworkId: string): Promise<void>;
8
8
  protected templateSelectedTask(type?: "component" | "view"): Task<PromptTaskContext>;
9
9
  }
@@ -56,9 +56,9 @@ class PromptSession extends cli_core_1.BasePromptSession {
56
56
  yield upgrade_1.default.upgrade({ skipInstall: true, _: ["upgrade"], $0: "upgrade" });
57
57
  });
58
58
  }
59
- configureAI() {
59
+ configureAI(frameworkId) {
60
60
  return __awaiter(this, void 0, void 0, function* () {
61
- yield (0, ai_config_1.configure)();
61
+ yield (0, ai_config_1.configure)(frameworkId);
62
62
  });
63
63
  }
64
64
  templateSelectedTask(type = "component") {
@@ -1,14 +1,12 @@
1
- import { AIAgentTarget, AiCodingAssistant } from "@igniteui/cli-core";
1
+ import { type AIAgentTarget, type AiCodingAssistant } from "@igniteui/cli-core";
2
2
  import { CommandModule } from "yargs";
3
3
  export declare function configureMCP(assistants: AiCodingAssistant[]): void;
4
- export declare function configureSkills(agents: AIAgentTarget[]): void;
4
+ export declare function configureSkills(agents: AIAgentTarget[], framework: string): void;
5
5
  type AIAgentOption = AIAgentTarget | "none";
6
6
  type AIAssistantOption = AiCodingAssistant | "none";
7
- export declare function configure(agents?: AIAgentOption[], assistants?: AIAssistantOption[], skills?: boolean): Promise<{
7
+ export declare function configure(framework: string, agents?: AIAgentOption[], assistants?: AIAssistantOption[], skills?: boolean): Promise<{
8
8
  agents: AIAgentTarget[];
9
9
  assistants: AiCodingAssistant[];
10
10
  }>;
11
- export declare function promptForAgents(): Promise<AIAgentOption[]>;
12
- export declare function promptForAssistant(): Promise<AIAssistantOption[]>;
13
11
  declare const command: CommandModule;
14
12
  export default command;
@@ -12,8 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.configureMCP = configureMCP;
13
13
  exports.configureSkills = configureSkills;
14
14
  exports.configure = configure;
15
- exports.promptForAgents = promptForAgents;
16
- exports.promptForAssistant = promptForAssistant;
17
15
  const cli_core_1 = require("@igniteui/cli-core");
18
16
  function configureMCP(assistants) {
19
17
  for (const assistant of assistants) {
@@ -27,8 +25,8 @@ function configureMCP(assistants) {
27
25
  }
28
26
  }
29
27
  }
30
- function configureSkills(agents) {
31
- const result = (0, cli_core_1.copyAISkillsToProject)(agents);
28
+ function configureSkills(agents, framework) {
29
+ const result = (0, cli_core_1.copyAISkillsToProject)(agents, framework);
32
30
  if (result.found === 0) {
33
31
  cli_core_1.Util.warn("No AI skill files found. Make sure packages are installed (npm install) " +
34
32
  "and your Ignite UI packages are up-to-date.", "yellow");
@@ -44,8 +42,12 @@ function configureSkills(agents) {
44
42
  cli_core_1.Util.log(cli_core_1.Util.greenCheck() + ` ${written} AI skill file(s) created or updated.`);
45
43
  }
46
44
  }
47
- function configure() {
48
- return __awaiter(this, arguments, void 0, function* (agents = [], assistants = [], skills = true) {
45
+ function configure(framework_1) {
46
+ return __awaiter(this, arguments, void 0, function* (framework, agents = [], assistants = [], skills = true) {
47
+ if (framework === "jquery") {
48
+ // currently not supported
49
+ return { agents: [], assistants: [] };
50
+ }
49
51
  if (!agents.length) {
50
52
  agents = yield promptForAgents();
51
53
  }
@@ -63,9 +65,9 @@ function configure() {
63
65
  }
64
66
  else {
65
67
  if (skills) {
66
- configureSkills(resolvedAgents);
68
+ configureSkills(resolvedAgents, framework);
67
69
  }
68
- (0, cli_core_1.copyAgentInstructionFiles)(resolvedAgents);
70
+ (0, cli_core_1.copyAgentInstructionFiles)(resolvedAgents, framework);
69
71
  }
70
72
  return { agents: resolvedAgents, assistants: resolvedAssistants };
71
73
  });
@@ -116,35 +118,78 @@ function promptForAssistant() {
116
118
  return selected;
117
119
  });
118
120
  }
121
+ /** delayed call so it's not immediate on module import for testing purposes */
122
+ function getTemplateManager() {
123
+ return cli_core_1.App.container.get(cli_core_1.TEMPLATE_MANAGER);
124
+ }
125
+ /** Separate from the PromptSession prompt due to step by step config w/ jQuery and w/o Blazor */
126
+ function promptForFrameworkId() {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ const tm = getTemplateManager();
129
+ const frameRes = yield cli_core_1.InquirerWrapper.select({
130
+ name: "framework",
131
+ message: "Choose framework:",
132
+ choices: tm.getFrameworkNames(true).filter(x => x !== "jQuery"),
133
+ default: "Angular"
134
+ });
135
+ return tm.getFrameworkByName(frameRes).id;
136
+ });
137
+ }
119
138
  const command = {
120
139
  command: "ai-config",
121
140
  describe: "Configures Ignite UI AI tooling (MCP servers, AI coding skills and instructions)",
122
- builder: (yargs) => yargs
123
- .usage("")
124
- .option("agents", {
125
- describe: "AI agents/tools to generate configuration files for",
126
- choices: [...cli_core_1.AI_AGENT_CHOICES, "none"],
127
- type: "array"
128
- })
129
- .option("assistants", {
130
- describe: "Coding assistant(s) to configure MCP servers for",
131
- choices: [...cli_core_1.AI_ASSISTANT_CHOICES, "none"],
132
- type: "array"
133
- }),
141
+ builder: (yargs) => {
142
+ var _a;
143
+ return yargs
144
+ .usage("")
145
+ .option("agents", {
146
+ describe: "AI agents/tools to generate configuration files for",
147
+ choices: [...cli_core_1.AI_AGENT_CHOICES, "none"],
148
+ type: "array"
149
+ })
150
+ .option("assistants", {
151
+ describe: "Coding assistant(s) to configure MCP servers for",
152
+ choices: [...cli_core_1.AI_ASSISTANT_CHOICES, "none"],
153
+ type: "array"
154
+ })
155
+ .option("framework", {
156
+ alias: "f",
157
+ describe: "Manually set project framework to configure AI for.",
158
+ choices: (_a = getTemplateManager()) === null || _a === void 0 ? void 0 : _a.getFrameworkIds(true).filter(x => x !== "jquery"),
159
+ type: "string"
160
+ });
161
+ },
134
162
  handler(argv) {
135
163
  return __awaiter(this, void 0, void 0, function* () {
136
- var _a, _b;
164
+ var _a, _b, _c, _d;
137
165
  const agents = ((_a = argv.agents) !== null && _a !== void 0 ? _a : []);
138
166
  const assistants = ((_b = argv.assistants) !== null && _b !== void 0 ? _b : []);
139
167
  cli_core_1.GoogleAnalytics.post({
140
168
  t: "screenview",
141
169
  cd: "Ai Config"
142
170
  });
143
- const result = yield configure(agents, assistants);
171
+ let framework = (_c = argv.framework) !== null && _c !== void 0 ? _c : (0, cli_core_1.detectFramework)();
172
+ if (!framework) {
173
+ cli_core_1.Util.log("Framework not provided and couldn't detect project from config or structure.");
174
+ if (cli_core_1.Util.canPrompt()) {
175
+ framework = yield promptForFrameworkId();
176
+ }
177
+ else {
178
+ return cli_core_1.Util.error("Please provide --framework argument.", "red");
179
+ }
180
+ }
181
+ if (!((_d = getTemplateManager()) === null || _d === void 0 ? void 0 : _d.getFrameworkById(framework))) {
182
+ return cli_core_1.Util.error("Framework not supported", "red");
183
+ }
184
+ if (framework === "jquery") {
185
+ cli_core_1.Util.log("AI Config currently not available for jQuery projects.");
186
+ }
187
+ const result = yield configure(framework, agents, assistants);
144
188
  cli_core_1.GoogleAnalytics.post({
145
189
  t: "event",
146
190
  ec: "$ig ai-config",
147
- ea: `agent: ${result.agents.join(", ") || "none"}; assistant: ${result.assistants.join(", ") || "none"}`
191
+ ea: `agent: ${result.agents.join(", ") || "none"}; assistant: ${result.assistants.join(", ") || "none"}`,
192
+ cd1: framework
148
193
  });
149
194
  });
150
195
  }
@@ -174,7 +174,7 @@ const command = {
174
174
  yield cli_core_1.Util.processTemplates(templatePath, path.join(process.cwd(), argv.name), config, projTemplate.delimiters, false);
175
175
  }
176
176
  process.chdir(argv.name);
177
- yield (0, ai_config_1.configure)(argv.agents, argv.assistants);
177
+ yield (0, ai_config_1.configure)(argv.framework, argv.agents, argv.assistants);
178
178
  process.chdir("..");
179
179
  cli_core_1.Util.log(cli_core_1.Util.greenCheck() + " Project Created");
180
180
  if (!argv.skipInstall) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "igniteui-cli",
3
- "version": "15.1.0",
3
+ "version": "15.2.0",
4
4
  "description": "CLI tool for creating Ignite UI projects",
5
5
  "keywords": [
6
6
  "CLI",
@@ -66,9 +66,9 @@
66
66
  "all": true
67
67
  },
68
68
  "dependencies": {
69
- "@igniteui/angular-templates": "~21.2.1510",
70
- "@igniteui/cli-core": "~15.1.0",
71
- "@igniteui/mcp-server": "~15.1.0",
69
+ "@igniteui/angular-templates": "~21.2.1520",
70
+ "@igniteui/cli-core": "~15.2.0",
71
+ "@igniteui/mcp-server": "~15.2.0",
72
72
  "@inquirer/prompts": "^7.9.0",
73
73
  "chalk": "^5.3.0",
74
74
  "glob": "^11.0.0",
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cli_core_1 = require("@igniteui/cli-core");
4
+ class IgbBlazorProjectLibrary extends cli_core_1.BaseProjectLibrary {
5
+ constructor() {
6
+ super(__dirname);
7
+ this.name = "Ignite UI for Blazor";
8
+ this.projectType = "igb";
9
+ this.themes = ["default"];
10
+ }
11
+ }
12
+ module.exports = new IgbBlazorProjectLibrary();
@@ -0,0 +1,65 @@
1
+ You are an expert in C#, Blazor, and scalable web application development. You write functional, maintainable, performant, and accessible code following .NET and Blazor best practices. You are currently immersed in the latest .NET and Blazor, adopting modern C# features, component-based architecture with clean separation of concerns, and modern Blazor patterns for reactive UI and dependencygit pull injection.
2
+
3
+ ## Coding Standards
4
+
5
+ - Use strict type checking and enable nullability (`#nullable enable`)
6
+ - Prefer type inference (`var`) when the type is obvious
7
+ - Avoid `dynamic`; use generics or `object` with pattern matching when type is uncertain
8
+ - Use the latest C# version supported by the project;
9
+ - Prefer modern C# features: record types, pattern matching, global usings, file-scoped namespaces, primary constructors
10
+ - Use PascalCase for public members and component names; camelCase for private fields; prefix interfaces with `I` (e.g., `IUserService`)
11
+ - Follow the official .NET coding conventions: https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions
12
+
13
+ ## Blazor Architecture
14
+
15
+ - **File separation**: `.razor` (template), `.razor.cs` (logic), `.razor.css` (scoped styles)
16
+ - **Lifecycle**: Use `OnInitializedAsync` / `OnParametersSetAsync` for initialization and parameter changes
17
+ - **Data binding**: Use `@bind` for two-way binding
18
+ - **Component design**: Keep components small and focused on a single responsibility
19
+ - **Component inputs and outputs**: Use `[Parameter]` for component inputs and `EventCallback` for component outputs
20
+ - **Event handling**: Prefer `EventCallback<T>` over `Action<T>` for event handling to integrate with the Blazor render pipeline
21
+ - **DI**: Inject via `[Inject]` property or `@inject` directive; use `async/await` for all I/O
22
+ - **HTTP**: Use `HttpClient` or appropriate services to communicate with external APIs
23
+ - **Rendering**: Override `ShouldRender()` to skip unnecessary re-renders; call `StateHasChanged()` only outside Blazor's event pipeline
24
+ - **Errors**: Wrap components in `ErrorBoundary`; use try-catch for API calls with `ILogger` diagnostics
25
+ - **Validation**: Use `FluentValidation` or `DataAnnotations` for form validation
26
+
27
+ ## State Management
28
+
29
+ - Basic sharing: Cascading Parameters + `EventCallback`
30
+ - Session state (Server): StateContainer pattern via Scoped Service
31
+ - Persistence (WASM): `Blazored.LocalStorage` / `Blazored.SessionStorage`
32
+ - Complex apps: Fluxor or BlazorState
33
+
34
+ ## Styling
35
+
36
+ - Use `.razor.css` scoped stylesheets files for component-specific styles; CSS isolation prevents leakage between components
37
+ - Prefer CSS custom properties for themeable values
38
+ - Do NOT use inline styles; extract to `.razor.css` or a shared stylesheet
39
+
40
+ ## Caching
41
+
42
+ - Use `IMemoryCache` for lightweight server-side caching in Blazor Server apps
43
+ - For Blazor WebAssembly, use `localStorage` or `sessionStorage` to cache state between page reloads
44
+ - Consider distributed cache strategies (Redis, SQL Server Cache) for larger apps requiring shared state across multiple users
45
+ - Cache API responses to avoid redundant calls when data is unlikely to change
46
+
47
+ ## Security
48
+
49
+ - Use ASP.NET Identity or JWT for auth; always HTTPS with proper CORS
50
+ - Never expose sensitive data in client-side Blazor WebAssembly code
51
+
52
+ ## Testing
53
+
54
+ - Unit/integration: xUnit or MSTest with Moq or NSubstitute
55
+ - Component tests: bUnit for rendering and interaction verification
56
+ - Use Visual Studio's diagnostics tools for performance profiling
57
+
58
+ ## UI Components
59
+
60
+ - Use `IgniteUI.Blazor.Lite`, `IgniteUI.Blazor.GridLite` for general purpose components and light-weight grid, and `IgniteUI.Blazor` (trial version available publicly as `IgniteUI.Blazor.Trial`) for specialized feature-rich grids and charts.
61
+ - Components use the `Igb` prefix (e.g., `IgbGrid`, `IgbCombo`, `IgbDatePicker`).
62
+ - Every component requires module registration in `Program.cs`: `builder.Services.AddIgniteUIBlazor(typeof(IgbGridModule))`.
63
+ - Add `@using IgniteUI.Blazor.Controls` to `_Imports.razor`.
64
+ - Link a theme stylesheet in the host page (e.g., `_content/IgniteUI.Blazor/themes/light/bootstrap.css`).
65
+ - If the `IgniteUI.Blazor.Lite`, `IgniteUI.Blazor.GridLite` NuGet packages are not present in the project file, add it first.
@@ -0,0 +1,65 @@
1
+ You are an expert in C#, Blazor, and scalable web application development. You write functional, maintainable, performant, and accessible code following .NET and Blazor best practices. You are currently immersed in the latest .NET and Blazor, adopting modern C# features, component-based architecture with clean separation of concerns, and modern Blazor patterns for reactive UI and dependencygit pull injection.
2
+
3
+ ## Coding Standards
4
+
5
+ - Use strict type checking and enable nullability (`#nullable enable`)
6
+ - Prefer type inference (`var`) when the type is obvious
7
+ - Avoid `dynamic`; use generics or `object` with pattern matching when type is uncertain
8
+ - Use the latest C# version supported by the project;
9
+ - Prefer modern C# features: record types, pattern matching, global usings, file-scoped namespaces, primary constructors
10
+ - Use PascalCase for public members and component names; camelCase for private fields; prefix interfaces with `I` (e.g., `IUserService`)
11
+ - Follow the official .NET coding conventions: https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions
12
+
13
+ ## Blazor Architecture
14
+
15
+ - **File separation**: `.razor` (template), `.razor.cs` (logic), `.razor.css` (scoped styles)
16
+ - **Lifecycle**: Use `OnInitializedAsync` / `OnParametersSetAsync` for initialization and parameter changes
17
+ - **Data binding**: Use `@bind` for two-way binding
18
+ - **Component design**: Keep components small and focused on a single responsibility
19
+ - **Component inputs and outputs**: Use `[Parameter]` for component inputs and `EventCallback` for component outputs
20
+ - **Event handling**: Prefer `EventCallback<T>` over `Action<T>` for event handling to integrate with the Blazor render pipeline
21
+ - **DI**: Inject via `[Inject]` property or `@inject` directive; use `async/await` for all I/O
22
+ - **HTTP**: Use `HttpClient` or appropriate services to communicate with external APIs
23
+ - **Rendering**: Override `ShouldRender()` to skip unnecessary re-renders; call `StateHasChanged()` only outside Blazor's event pipeline
24
+ - **Errors**: Wrap components in `ErrorBoundary`; use try-catch for API calls with `ILogger` diagnostics
25
+ - **Validation**: Use `FluentValidation` or `DataAnnotations` for form validation
26
+
27
+ ## State Management
28
+
29
+ - Basic sharing: Cascading Parameters + `EventCallback`
30
+ - Session state (Server): StateContainer pattern via Scoped Service
31
+ - Persistence (WASM): `Blazored.LocalStorage` / `Blazored.SessionStorage`
32
+ - Complex apps: Fluxor or BlazorState
33
+
34
+ ## Styling
35
+
36
+ - Use `.razor.css` scoped stylesheets files for component-specific styles; CSS isolation prevents leakage between components
37
+ - Prefer CSS custom properties for themeable values
38
+ - Do NOT use inline styles; extract to `.razor.css` or a shared stylesheet
39
+
40
+ ## Caching
41
+
42
+ - Use `IMemoryCache` for lightweight server-side caching in Blazor Server apps
43
+ - For Blazor WebAssembly, use `localStorage` or `sessionStorage` to cache state between page reloads
44
+ - Consider distributed cache strategies (Redis, SQL Server Cache) for larger apps requiring shared state across multiple users
45
+ - Cache API responses to avoid redundant calls when data is unlikely to change
46
+
47
+ ## Security
48
+
49
+ - Use ASP.NET Identity or JWT for auth; always HTTPS with proper CORS
50
+ - Never expose sensitive data in client-side Blazor WebAssembly code
51
+
52
+ ## Testing
53
+
54
+ - Unit/integration: xUnit or MSTest with Moq or NSubstitute
55
+ - Component tests: bUnit for rendering and interaction verification
56
+ - Use Visual Studio's diagnostics tools for performance profiling
57
+
58
+ ## UI Components
59
+
60
+ - Use `IgniteUI.Blazor.Lite`, `IgniteUI.Blazor.GridLite` for general purpose components and light-weight grid, and `IgniteUI.Blazor` (trial version available publicly as `IgniteUI.Blazor.Trial`) for specialized feature-rich grids and charts.
61
+ - Components use the `Igb` prefix (e.g., `IgbGrid`, `IgbCombo`, `IgbDatePicker`).
62
+ - Every component requires module registration in `Program.cs`: `builder.Services.AddIgniteUIBlazor(typeof(IgbGridModule))`.
63
+ - Add `@using IgniteUI.Blazor.Controls` to `_Imports.razor`.
64
+ - Link a theme stylesheet in the host page (e.g., `_content/IgniteUI.Blazor/themes/light/bootstrap.css`).
65
+ - If the `IgniteUI.Blazor.Lite`, `IgniteUI.Blazor.GridLite` NuGet packages are not present in the project file, add it first.
@@ -0,0 +1,61 @@
1
+ # Ignite UI for Blazor - AI Agent Skills & Instructions
2
+
3
+ This folder contains a set of **skill files** for AI coding agents and the [`AGENTS.md`](./AGENTS.md) instruction file. Together they give agents the coding standards, Ignite UI Blazor conventions, and structured MCP-backed guidance needed to produce correct code - without hallucinating stale APIs.
4
+
5
+ ---
6
+
7
+ ## Available Skills
8
+
9
+ Skills are structured `SKILL.md` documents paired with `references/` sub-files. When a request matches a skill's domain, the agent reads the routing hub, reads the relevant reference files in parallel, calls the Ignite UI MCP tools, and produces output based only on that - never from memory.
10
+
11
+ ### [`igniteui-blazor-components`](./igniteui-blazor-components/SKILL.md)
12
+
13
+ All non-grid IgniteUI.Blazor.Lite components: form controls (Input, Combo, Select, Date Picker, Calendar, Checkbox, Radio, Slider, Rating), layout containers (Tabs, Stepper, Accordion, Navbar, Nav Drawer, Tree), data display (List, Card, Avatar, Badge, Chip, Button, Progress, Dropdown, Tooltip), feedback (Dialog, Snackbar, Toast, Banner), layout managers (Dock Manager, Tile Manager), and visualizations (charts, gauges, maps, sparklines).
14
+
15
+ ### [`igniteui-blazor-grids`](./igniteui-blazor-grids/SKILL.md)
16
+
17
+ All Ignite UI Blazor data grid types:
18
+
19
+ | Component | Package | Use case |
20
+ |---|---|---|
21
+ | `IgbGridLite` | `IgniteUI.Blazor.GridLite` (MIT) | Read-only display with sorting, filtering, virtualization |
22
+ | `IgbGrid` | `IgniteUI.Blazor` | Flat tabular data - editing, grouping, paging, export |
23
+ | `IgbTreeGrid` | `IgniteUI.Blazor` | Self-referencing tree data (org charts, BOM) |
24
+ | `IgbHierarchicalGrid` | `IgniteUI.Blazor` | Multi-schema parent-child data |
25
+ | `IgbPivotGrid` | `IgniteUI.Blazor` | Pivot table analytics |
26
+
27
+ ### [`igniteui-blazor-theming`](./igniteui-blazor-theming/SKILL.md)
28
+
29
+ Theme switching (Bootstrap, Material, Fluent, Indigo - light/dark), color palettes, CSS design tokens, dark mode, CSS shadow parts, and global layout tokens (roundness, spacing, size). All CSS is generated by the `igniteui-theming` MCP server - no token names are written from memory.
30
+
31
+ ### [`igniteui-blazor-generate-from-image-design`](./igniteui-blazor-generate-from-image-design/SKILL.md)
32
+
33
+ End-to-end workflow for implementing a Blazor view from a design image or mockup. Combines all three skills above: analyzes the image, discovers components via MCP, generates a theme, implements the full view with mock data, and refines visual fidelity.
34
+
35
+ ---
36
+
37
+ ## MCP Servers
38
+
39
+ Both servers must be configured in your AI tool. Setup instructions are in each skill's `references/mcp-setup.md`.
40
+
41
+ | Server | Purpose | Key tools |
42
+ |---|---|---|
43
+ | **`igniteui-cli`** | Component docs, API reference, scaffolding | `list_components`, `get_doc`, `search_docs`, `get_api_reference`, `search_api` |
44
+ | **`igniteui-theming`** | CSS palette and token generation | `create_palette`, `get_component_design_tokens`, `create_component_theme`, `set_roundness`, `set_spacing`, `set_size` |
45
+
46
+ ---
47
+
48
+ ## AGENTS.md - What It Is and Where to Put It
49
+
50
+ [`AGENTS.md`](./AGENTS.md) is a **general-purpose AI agent instruction file** for developers building Blazor applications *with* Ignite UI for Blazor. It is **not** the AGENTS.md for this library's own repository.
51
+
52
+ Copy it (and optionally the `skills/` folder) into your Blazor application project, then place it in the location your AI tool reads for project-level instructions:
53
+
54
+ | AI Tool | File to create | Notes |
55
+ |---|---|---|
56
+ | **GitHub Copilot** (VS Code) | `.github/copilot-instructions.md` | Must be named exactly `copilot-instructions.md` inside `.github/` |
57
+ | **Claude Code** | `CLAUDE.md` (project root) | Read automatically on session start; `.claude/` subfolder for extra settings |
58
+ | **Cursor** | `.cursor/rules/igniteui-blazor.mdc` or `.cursorrules` | `.mdc` supports YAML front matter (see below); `.cursorrules` is the legacy path |
59
+ | **Windsurf** | `.windsurfrules` (project root) | Read automatically |
60
+ | **Codex CLI** | `AGENTS.md` (project root) | Read from cwd and parent directories |
61
+ | **Aider** | `CONVENTIONS.md` or `--read AGENTS.md` flag | Pass at startup |
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: igniteui-blazor-components
3
+ description: "Covers non-grid Ignite UI for Blazor UI components: application setup, form controls (inputs, combos, selects, date/time pickers, calendar, checkbox, radio, switch, slider, rating), layout containers (tabs, stepper, accordion, expansion panel, navigation drawer, navbar, tree), data-display components (list, card, carousel, avatar, badge, chip, icon, progress indicators, dropdown, tooltip), feedback overlays (dialog, snackbar, toast, banner), layout managers (Dock Manager, Tile Manager); and visualizations (Category Chart, Data Chart, Financial/Stock Chart, Pie/Donut Chart, Sparkline, Treemap, Geographic Map, Gauges, Dashboard Tile) requiring IgniteUI.Blazor or IgniteUI.Blazor.Trial. Use when users ask about any Ignite UI Blazor component that is NOT a data grid. Do NOT use for data grids, tables, or tabular data - use igniteui-blazor-grids instead. Do NOT use for theming or styling - use igniteui-blazor-theming instead."
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Ignite UI for Blazor - UI Components
8
+
9
+ ## Prerequisites
10
+
11
+ - .NET 8+ Blazor project (Server, WebAssembly, Web App, or MAUI Blazor Hybrid)
12
+ - The correct NuGet package installed: `IgniteUI.Blazor.Lite` (NuGet.org, MIT) for general purpose UI components; `IgniteUI.Blazor.GridLite` (NuGet.org, MIT) for the lightweight grid; `IgniteUI.Blazor` (Infragistics private feed, licensed) for the full suite including charts, maps, gauges, and enterprise grids; or `IgniteUI.Blazor.Trial` (NuGet.org) for evaluation of the full suite
13
+ - `builder.Services.AddIgniteUIBlazor(...)` called in `Program.cs`
14
+ - `@using IgniteUI.Blazor.Controls` added to `_Imports.razor`
15
+ - A theme CSS file linked in the host page (see [`references/setup.md`](./references/setup.md))
16
+ - The **Ignite UI CLI MCP server** (`igniteui-cli`) is available as a tool provider
17
+
18
+ > **AGENT INSTRUCTION - MCP Server Setup (REQUIRED)**
19
+ >
20
+ > Before using any Ignite UI CLI MCP tools, you MUST verify the MCP server is available
21
+ > by calling `list_components(framework: "blazor")`. If the tool is not available or the call fails,
22
+ > you MUST automatically configure it by following the setup process steps described below.
23
+ >
24
+ > After writing the file, inform the user that the MCP server has been
25
+ > configured and they may need to reload the editor for the tools to activate.
26
+ > Start the MCP server and wait for that MCP server to start before continuing the component-related work.
27
+ > Do NOT skip this step or ask the user to do it manually.
28
+
29
+ ## Setting Up the Ignite UI CLI MCP Server
30
+
31
+ > **Full setup instructions for VS Code, Cursor, Claude Desktop, and JetBrains IDEs are in [`references/mcp-setup.md`](./references/mcp-setup.md).** Read that file for editor-specific configuration steps and verification.
32
+
33
+ ## MANDATORY AGENT PROTOCOL - YOU MUST FOLLOW THIS BEFORE PRODUCING ANY OUTPUT
34
+
35
+ **This file is a routing hub only. It contains no component examples and no component API details.**
36
+
37
+ > **DO NOT write any component names, property names, event names, module registration calls, or Razor attributes from memory.**
38
+ > Component APIs change between versions. Anything generated without reading the reference files and Blazor MCP docs will be incorrect.
39
+
40
+ You are **required** to complete ALL of the following steps before producing any component-related code or answer:
41
+
42
+ **STEP 1 - Identify every component or feature involved.**
43
+ 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., a form inside a Dialog requires reading both `form-controls.md` AND `feedback.md`).
44
+
45
+ **STEP 2 - Read every identified reference file in full (PARALLEL).**
46
+ Call `read_file` (or equivalent) on **all** reference files identified in Step 1 **in a single parallel batch**. Reference files map components to their MCP doc slugs and explain which MCP calls to make.
47
+
48
+ **STEP 3 - Extract doc slugs, then call `get_doc` and API tools for each component involved.**
49
+ Use the Ignite UI MCP `get_doc` tool with `framework: "blazor"` and the exact doc slug listed in the reference files you just read. It returns the actual registration pattern, Razor markup, examples, and CSS parts. Do NOT skip this step.
50
+
51
+ If a reference file does not list a slug for the requested component, call `search_docs(framework: "blazor", query: "<component or feature>")` to find the correct doc. If no Blazor doc exists, say that the component or feature is not covered instead of guessing.
52
+
53
+ Use `search_api` and `get_api_reference` for Blazor component API details when property names, methods, events, or signatures are needed.
54
+
55
+ **STEP 4 - Only then produce output.**
56
+ Base your code and explanation exclusively on what you read. If the reference files or MCP docs do not cover something, say so explicitly rather than guessing.
57
+
58
+ ### Task → Reference File
59
+
60
+ | Task | Reference file to read |
61
+ |---|---|
62
+ | NuGet install, `Program.cs` registration, `_Imports.razor`, CSS/script references, project types (Server, WASM, Web App, MAUI) | [`references/setup.md`](./references/setup.md) |
63
+ | Input, Combo Box, Select, Date Picker, Date Range Picker, Calendar, Date Time Input, Mask Input, Checkbox, Radio / Radio Group, Switch, Slider / Range Slider, Rating, form/value binding | [`references/form-controls.md`](./references/form-controls.md) |
64
+ | Tabs, Stepper, Accordion, Expansion Panel, Navigation Drawer, Navbar, Tree | [`references/layout.md`](./references/layout.md) |
65
+ | List, Card, Carousel, Avatar, Badge, Chip, Icon, Icon Button, Button, Button Group, Circular Progress, Linear Progress, Dropdown, Tooltip, Ripple | [`references/data-display.md`](./references/data-display.md) |
66
+ | Dialog, Snackbar, Toast, Banner | [`references/feedback.md`](./references/feedback.md) |
67
+ | Dock Manager (panes, tabs, floating, serialization), Tile Manager | [`references/layout-manager.md`](./references/layout-manager.md) |
68
+ | Category Chart, Data Chart, Financial / Stock Chart, Pie Chart, Donut Chart, Sparkline, Treemap, Geographic Map, Gauges, Dashboard Tile, visualization features (animations, tooltips, markers, highlighting, zooming, legends, maps, ranges) | [`references/charts.md`](./references/charts.md) |
69
+
70
+ > **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary file read is negligible; the cost of hallucinated API usage is a broken application.
71
+
72
+ ## Package Variants
73
+
74
+ | Package | Source | Who uses it |
75
+ |---|---|---|
76
+ | `IgniteUI.Blazor.Lite` | NuGet.org | Open-source / MIT users needing core UI components (forms, layout, navigation, data display, feedback) |
77
+ | `IgniteUI.Blazor.GridLite` | NuGet.org | Open-source / MIT users needing the lightweight `IgbGridLite` data grid |
78
+ | `IgniteUI.Blazor` | Infragistics private NuGet feed (`https://packages.infragistics.com/nuget/licensed/`) | Licensed / enterprise users that need the full component suite (grids, charts, maps, gauges, Dock Manager) |
79
+ | `IgniteUI.Blazor.Trial` | NuGet.org | Evaluation users — same full suite as `IgniteUI.Blazor` but with a trial watermark |
80
+
81
+ `IgniteUI.Blazor.Lite` contains the open-source UI component set, while `IgniteUI.Blazor.GridLite` contains the free `IgbGridLite` data grid package. Both use the `IgniteUI.Blazor.Controls` namespace. Do **not** mix the licensed `IgniteUI.Blazor` package with `IgniteUI.Blazor.Lite` in the same project; they use the same namespaces and duplicate some components.
82
+
83
+ ## Key Blazor-Specific Notes
84
+
85
+ > **AGENT INSTRUCTION - Module Registration**
86
+ >
87
+ > Every Ignite UI for Blazor component **and its sub-components** has a corresponding module. Register **all** modules for every component used on the page in `Program.cs`:
88
+ >
89
+ > ```csharp
90
+ > builder.Services.AddIgniteUIBlazor(typeof(IgbComboModule), typeof(IgbDatePickerModule));
91
+ > ```
92
+ >
93
+ > Calling `builder.Services.AddIgniteUIBlazor()` with no arguments registers ALL modules (useful for prototypes but increases bundle size). Prefer explicit module registration in production.
94
+
95
+ > **AGENT INSTRUCTION - `@ref` and `EnsureReady`**
96
+ >
97
+ > When accessing a component from C# code (e.g., to call `ShowAsync()` on a dialog), use `@ref`:
98
+ >
99
+ > ```razor
100
+ > <IgbDialog @ref="DialogRef" />
101
+ >
102
+ > @code {
103
+ > public IgbDialog DialogRef { get; set; }
104
+ > }
105
+ > ```
106
+ >
107
+ > Some components (e.g., `IgbIcon`) require `await component.EnsureReady()` before calling async registration methods in `OnAfterRenderAsync(bool firstRender)`.
108
+
109
+ > **AGENT INSTRUCTION - Forms**
110
+ >
111
+ > Several Ignite UI Blazor components such as `IgbCombo` and `IgbRadio` do **not** work with the standard HTML `<form>` element. Do not assume a universal form pattern. Check the component's MCP doc first, bind component values explicitly (`@bind-Value`, `@bind-Checked`, or documented change events), and only use form integration patterns shown by the current docs.
112
+
113
+ ---
114
+
115
+ ## Related Skills
116
+
117
+ - [`igniteui-blazor-grids`](../igniteui-blazor-grids/SKILL.md) - Data Grids (Grid, Tree Grid, Hierarchical Grid, Pivot Grid, Grid Lite)
118
+ - [`igniteui-blazor-theming`](../igniteui-blazor-theming/SKILL.md) - Theming & Styling