igniteui-cli 15.0.0-rc.0 → 15.0.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/bin/execute.js +10 -3
- package/lib/PromptSession.d.ts +1 -0
- package/lib/PromptSession.js +7 -0
- package/lib/cli.js +23 -4
- package/lib/commands/ai-config.d.ts +7 -0
- package/lib/commands/ai-config.js +126 -0
- package/lib/commands/index.d.ts +1 -0
- package/lib/commands/index.js +3 -1
- package/lib/commands/types.d.ts +1 -0
- package/lib/commands/types.js +4 -2
- package/package.json +4 -4
- package/templates/react/igr-ts/projects/_base/files/AGENTS.md +5 -0
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/README.md +89 -0
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/SKILL.md +0 -1
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/CHARTS-GRIDS.md +291 -2
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md +0 -9
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REFS-FORMS.md +11 -8
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/SKILL.md +0 -1
- package/templates/webcomponents/igc-ts/projects/_base/files/AGENTS.md +6 -0
- package/templates/webcomponents/igc-ts/projects/_base/files/__dot__claude/skills/README.md +65 -0
- package/templates/webcomponents/igc-ts/projects/_base/files/__dot__claude/skills/igniteui-wc-choose-components/SKILL.md +26 -0
- package/templates/webcomponents/igc-ts/projects/_base/files/eslint.config.js +35 -0
- package/templates/webcomponents/igc-ts/projects/_base/files/package.json +17 -17
- package/templates/webcomponents/igc-ts/projects/_base/files/vite.config.ts +8 -10
- package/templates/webcomponents/igc-ts/projects/_base_with_home/files/package.json +19 -19
- package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app.ts +3 -3
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REVEAL-SDK.md +0 -198
- package/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/REVEAL-THEME.md +0 -86
- package/templates/webcomponents/igc-ts/projects/_base/files/eslint.config.mjs +0 -37
- package/templates/webcomponents/igc-ts/projects/_base/files/web-dev-server.config.mjs +0 -27
package/bin/execute.js
CHANGED
|
@@ -13,11 +13,18 @@ resolve("igniteui-cli", { basedir: process.cwd() }, function (err, res) {
|
|
|
13
13
|
const localVersion = require(path.join(process.cwd(), "node_modules/igniteui-cli/package.json"))["version"];
|
|
14
14
|
const globalVersion = require(path.join(__dirname, "../package.json"))["version"];
|
|
15
15
|
if (globalVersion !== localVersion) {
|
|
16
|
-
console.log("Different igniteui-cli global and local version");
|
|
16
|
+
console.log("Different igniteui-cli global and local version");
|
|
17
|
+
}
|
|
18
|
+
if (args[0] === "ai-config") {
|
|
19
|
+
cli = require("../lib/cli");
|
|
20
|
+
} else {
|
|
21
|
+
cli = require(res);
|
|
17
22
|
}
|
|
18
|
-
cli = require(res);
|
|
19
23
|
} else {
|
|
20
24
|
cli = require("../lib/cli");
|
|
21
25
|
}
|
|
22
|
-
cli.run(args)
|
|
26
|
+
cli.run(args).catch(function (err) {
|
|
27
|
+
console.error("Error: " + (err.message || err));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
});
|
|
23
30
|
});
|
package/lib/PromptSession.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare class PromptSession extends BasePromptSession {
|
|
|
9
9
|
start(): Promise<void>;
|
|
10
10
|
protected completeAndRun(port?: number): Promise<void>;
|
|
11
11
|
protected upgradePackages(): Promise<void>;
|
|
12
|
+
protected configureAI(): Promise<void>;
|
|
12
13
|
/**
|
|
13
14
|
* Get user name and set template's extra configurations if any
|
|
14
15
|
* @param projectLibrary to add component to
|
package/lib/PromptSession.js
CHANGED
|
@@ -39,6 +39,7 @@ exports.PromptSession = void 0;
|
|
|
39
39
|
const cli_core_1 = require("@igniteui/cli-core");
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
41
|
const add_1 = __importDefault(require("./commands/add"));
|
|
42
|
+
const ai_config_1 = require("./commands/ai-config");
|
|
42
43
|
const start_1 = __importDefault(require("./commands/start"));
|
|
43
44
|
const upgrade_1 = __importDefault(require("./commands/upgrade"));
|
|
44
45
|
class PromptSession extends cli_core_1.BasePromptSession {
|
|
@@ -133,6 +134,12 @@ class PromptSession extends cli_core_1.BasePromptSession {
|
|
|
133
134
|
yield upgrade_1.default.upgrade({ skipInstall: true, _: ["upgrade"], $0: "upgrade" });
|
|
134
135
|
});
|
|
135
136
|
}
|
|
137
|
+
configureAI() {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
// skip adding skills since those are baked into the project template atm:
|
|
140
|
+
(0, ai_config_1.configure)(false);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
136
143
|
/**
|
|
137
144
|
* Get user name and set template's extra configurations if any
|
|
138
145
|
* @param projectLibrary to add component to
|
package/lib/cli.js
CHANGED
|
@@ -29,6 +29,8 @@ function run() {
|
|
|
29
29
|
return __awaiter(this, arguments, void 0, function* (args = null) {
|
|
30
30
|
cli_core_1.App.initialize();
|
|
31
31
|
const templateManager = new TemplateManager_1.TemplateManager();
|
|
32
|
+
// TODO: Refactor all code to use TemplateManager from the App container:
|
|
33
|
+
cli_core_1.App.container.set(cli_core_1.TEMPLATE_MANAGER, templateManager);
|
|
32
34
|
commands_1.newCommand.addChoices(templateManager.getFrameworkIds());
|
|
33
35
|
commands_1.newCommand.templateManager = templateManager;
|
|
34
36
|
commands_1.add.templateManager = templateManager;
|
|
@@ -52,6 +54,7 @@ function run() {
|
|
|
52
54
|
.command(commands_1.list)
|
|
53
55
|
.command(commands_1.upgrade)
|
|
54
56
|
.command(commands_1.mcp)
|
|
57
|
+
.command(commands_1.aiConfig)
|
|
55
58
|
.version(false) // disable built-in `yargs.version` to override it with our custom option
|
|
56
59
|
.options({
|
|
57
60
|
version: {
|
|
@@ -78,6 +81,15 @@ function run() {
|
|
|
78
81
|
}, false // setting this to `true` is supposed to exec the middleware after parsing and before arg validation
|
|
79
82
|
// but in reality it also does not trigger the command's handler (╯°□°)╯︵ ┻━┻
|
|
80
83
|
)
|
|
84
|
+
.fail((msg, err, yargs) => {
|
|
85
|
+
var _a;
|
|
86
|
+
const message = (_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : msg;
|
|
87
|
+
if (message) {
|
|
88
|
+
cli_core_1.Util.error(message, "red");
|
|
89
|
+
yargs.showHelp();
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
92
|
+
})
|
|
81
93
|
.help().alias("help", "h")
|
|
82
94
|
.parseAsync(args, // the args to parse to argv
|
|
83
95
|
{}, // docs say context to pass in to handlers, but nuh-uh, it's just garbage
|
|
@@ -109,10 +121,17 @@ function run() {
|
|
|
109
121
|
/* istanbul ignore next */
|
|
110
122
|
cli_core_1.App.testMode = !!argv.testMode;
|
|
111
123
|
if (!helpRequest && !commands_1.ALL_COMMANDS.has(command === null || command === void 0 ? void 0 : command.toString())) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
124
|
+
if (command) {
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
cli_core_1.Util.error(`Unknown command: "${command}"`, "red");
|
|
127
|
+
cli_core_1.Util.log(yield yargsModule.getHelp());
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
cli_core_1.Util.log("Starting Step by step mode.", "green");
|
|
131
|
+
cli_core_1.Util.log("For available commands, stop this execution and use --help.", "green");
|
|
132
|
+
const prompts = new PromptSession_1.PromptSession(templateManager);
|
|
133
|
+
prompts.start();
|
|
134
|
+
}
|
|
116
135
|
}
|
|
117
136
|
}));
|
|
118
137
|
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IFileSystem } from "@igniteui/cli-core";
|
|
2
|
+
import { CommandModule } from "yargs";
|
|
3
|
+
export declare function configureMCP(fileSystem?: IFileSystem): void;
|
|
4
|
+
export declare function configureSkills(): void;
|
|
5
|
+
export declare function configure(skills?: boolean): void;
|
|
6
|
+
declare const command: CommandModule;
|
|
7
|
+
export default command;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.configureMCP = configureMCP;
|
|
36
|
+
exports.configureSkills = configureSkills;
|
|
37
|
+
exports.configure = configure;
|
|
38
|
+
const cli_core_1 = require("@igniteui/cli-core");
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const IGNITEUI_SERVER_KEY = "igniteui-cli";
|
|
41
|
+
const IGNITEUI_THEMING_SERVER_KEY = "igniteui-theming";
|
|
42
|
+
const igniteuiServer = {
|
|
43
|
+
command: "npx",
|
|
44
|
+
args: ["-y", "igniteui-cli@next", "mcp"]
|
|
45
|
+
};
|
|
46
|
+
const igniteuiThemingServer = {
|
|
47
|
+
command: "npx",
|
|
48
|
+
args: ["-y", "igniteui-theming", "igniteui-theming-mcp"]
|
|
49
|
+
};
|
|
50
|
+
function getConfigPath() {
|
|
51
|
+
return path.join(process.cwd(), ".vscode", "mcp.json");
|
|
52
|
+
}
|
|
53
|
+
function readJson(filePath, fallback, fileSystem) {
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(fileSystem.readFile(filePath));
|
|
56
|
+
}
|
|
57
|
+
catch (_a) {
|
|
58
|
+
return fallback;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function writeJson(filePath, data, fileSystem) {
|
|
62
|
+
fileSystem.writeFile(filePath, JSON.stringify(data, null, 2) + "\n");
|
|
63
|
+
}
|
|
64
|
+
function configureMCP(fileSystem = new cli_core_1.FsFileSystem()) {
|
|
65
|
+
const configPath = getConfigPath();
|
|
66
|
+
const config = readJson(configPath, { servers: {} }, fileSystem);
|
|
67
|
+
config.servers = config.servers || {};
|
|
68
|
+
let modified = false;
|
|
69
|
+
if (!config.servers[IGNITEUI_SERVER_KEY]) {
|
|
70
|
+
config.servers[IGNITEUI_SERVER_KEY] = igniteuiServer;
|
|
71
|
+
modified = true;
|
|
72
|
+
}
|
|
73
|
+
if (!config.servers[IGNITEUI_THEMING_SERVER_KEY]) {
|
|
74
|
+
config.servers[IGNITEUI_THEMING_SERVER_KEY] = igniteuiThemingServer;
|
|
75
|
+
modified = true;
|
|
76
|
+
}
|
|
77
|
+
if (!modified) {
|
|
78
|
+
cli_core_1.Util.log(` Ignite UI MCP servers already configured in ${configPath}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
writeJson(configPath, config, fileSystem);
|
|
82
|
+
cli_core_1.Util.log(cli_core_1.Util.greenCheck() + ` MCP servers configured in ${configPath}`);
|
|
83
|
+
}
|
|
84
|
+
function configureSkills() {
|
|
85
|
+
const result = (0, cli_core_1.copyAISkillsToProject)();
|
|
86
|
+
if (result.found === 0) {
|
|
87
|
+
cli_core_1.Util.warn("No AI skill files found. Make sure packages are installed (npm install) " +
|
|
88
|
+
"and your Ignite UI packages are up-to-date.", "yellow");
|
|
89
|
+
}
|
|
90
|
+
else if (result.failed > 0) {
|
|
91
|
+
cli_core_1.Util.warn(`Failed to write ${result.failed} skill file(s) out of ${result.found}.`, "yellow");
|
|
92
|
+
}
|
|
93
|
+
else if (result.skipped === result.found) {
|
|
94
|
+
cli_core_1.Util.log("Everything is already up-to-date.");
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const written = result.found - result.skipped;
|
|
98
|
+
cli_core_1.Util.log(cli_core_1.Util.greenCheck() + ` ${written} AI skill file(s) created or updated.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function configure(skills = true) {
|
|
102
|
+
configureMCP();
|
|
103
|
+
if (skills) {
|
|
104
|
+
configureSkills();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const command = {
|
|
108
|
+
command: "ai-config",
|
|
109
|
+
describe: "Configure Ignite UI AI tooling (MCP servers and AI coding skills)",
|
|
110
|
+
builder: (yargs) => yargs.usage(""),
|
|
111
|
+
handler(_argv) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
cli_core_1.GoogleAnalytics.post({
|
|
114
|
+
t: "screenview",
|
|
115
|
+
cd: "MCP"
|
|
116
|
+
});
|
|
117
|
+
cli_core_1.GoogleAnalytics.post({
|
|
118
|
+
t: "event",
|
|
119
|
+
ec: "$ig ai-config",
|
|
120
|
+
ea: "client: vscode"
|
|
121
|
+
});
|
|
122
|
+
configure();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
exports.default = command;
|
package/lib/commands/index.d.ts
CHANGED
package/lib/commands/index.js
CHANGED
|
@@ -17,9 +17,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.upgrade = exports.test = exports.start = exports.newCommand = exports.mcp = exports.list = exports.generate = exports.doc = exports.config = exports.build = exports.add = void 0;
|
|
20
|
+
exports.upgrade = exports.test = exports.start = exports.newCommand = exports.mcp = exports.list = exports.generate = exports.doc = exports.config = exports.build = exports.aiConfig = exports.add = void 0;
|
|
21
21
|
var add_1 = require("./add");
|
|
22
22
|
Object.defineProperty(exports, "add", { enumerable: true, get: function () { return __importDefault(add_1).default; } });
|
|
23
|
+
var ai_config_1 = require("./ai-config");
|
|
24
|
+
Object.defineProperty(exports, "aiConfig", { enumerable: true, get: function () { return __importDefault(ai_config_1).default; } });
|
|
23
25
|
var build_1 = require("./build");
|
|
24
26
|
Object.defineProperty(exports, "build", { enumerable: true, get: function () { return __importDefault(build_1).default; } });
|
|
25
27
|
var config_1 = require("./config");
|
package/lib/commands/types.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare const TEST_COMMAND_NAME = "test";
|
|
|
12
12
|
export declare const LIST_COMMAND_NAME = "list";
|
|
13
13
|
export declare const UPGRADE_COMMAND_NAME = "upgrade-packages";
|
|
14
14
|
export declare const MCP_COMMAND_NAME = "mcp";
|
|
15
|
+
export declare const AI_CONFIG_COMMAND_NAME = "ai-config";
|
|
15
16
|
export declare const ALL_COMMANDS: Set<string>;
|
|
16
17
|
export interface PositionalArgs {
|
|
17
18
|
/** The framework that the project will target. */
|
package/lib/commands/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ALL_COMMANDS = exports.MCP_COMMAND_NAME = exports.UPGRADE_COMMAND_NAME = exports.LIST_COMMAND_NAME = exports.TEST_COMMAND_NAME = exports.DOC_COMMAND_NAME = exports.CONFIG_COMMAND_NAME = exports.GENERATE_COMMAND_NAME = exports.START_COMMAND_NAME = exports.BUILD_COMMAND_NAME = exports.NEW_COMMAND_NAME = exports.ADD_COMMAND_NAME = void 0;
|
|
3
|
+
exports.ALL_COMMANDS = exports.AI_CONFIG_COMMAND_NAME = exports.MCP_COMMAND_NAME = exports.UPGRADE_COMMAND_NAME = exports.LIST_COMMAND_NAME = exports.TEST_COMMAND_NAME = exports.DOC_COMMAND_NAME = exports.CONFIG_COMMAND_NAME = exports.GENERATE_COMMAND_NAME = exports.START_COMMAND_NAME = exports.BUILD_COMMAND_NAME = exports.NEW_COMMAND_NAME = exports.ADD_COMMAND_NAME = void 0;
|
|
4
4
|
exports.ADD_COMMAND_NAME = "add";
|
|
5
5
|
exports.NEW_COMMAND_NAME = "new";
|
|
6
6
|
exports.BUILD_COMMAND_NAME = "build";
|
|
@@ -12,6 +12,7 @@ exports.TEST_COMMAND_NAME = "test";
|
|
|
12
12
|
exports.LIST_COMMAND_NAME = "list";
|
|
13
13
|
exports.UPGRADE_COMMAND_NAME = "upgrade-packages";
|
|
14
14
|
exports.MCP_COMMAND_NAME = "mcp";
|
|
15
|
+
exports.AI_CONFIG_COMMAND_NAME = "ai-config";
|
|
15
16
|
exports.ALL_COMMANDS = new Set([
|
|
16
17
|
exports.ADD_COMMAND_NAME,
|
|
17
18
|
exports.NEW_COMMAND_NAME,
|
|
@@ -23,5 +24,6 @@ exports.ALL_COMMANDS = new Set([
|
|
|
23
24
|
exports.TEST_COMMAND_NAME,
|
|
24
25
|
exports.LIST_COMMAND_NAME,
|
|
25
26
|
exports.UPGRADE_COMMAND_NAME,
|
|
26
|
-
exports.MCP_COMMAND_NAME
|
|
27
|
+
exports.MCP_COMMAND_NAME,
|
|
28
|
+
exports.AI_CONFIG_COMMAND_NAME
|
|
27
29
|
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "igniteui-cli",
|
|
3
|
-
"version": "15.0.0-rc.
|
|
3
|
+
"version": "15.0.0-rc.2",
|
|
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.1.1500-rc.
|
|
70
|
-
"@igniteui/cli-core": "~15.0.0-rc.
|
|
71
|
-
"@igniteui/mcp-server": "~15.0.0-rc.
|
|
69
|
+
"@igniteui/angular-templates": "~21.1.1500-rc.2",
|
|
70
|
+
"@igniteui/cli-core": "~15.0.0-rc.2",
|
|
71
|
+
"@igniteui/mcp-server": "~15.0.0-rc.2",
|
|
72
72
|
"@inquirer/prompts": "^7.9.0",
|
|
73
73
|
"@types/yargs": "^17.0.33",
|
|
74
74
|
"chalk": "^5.3.0",
|
|
@@ -109,3 +109,8 @@ You are an expert in building front-end web applications with React with deep kn
|
|
|
109
109
|
## UI Components
|
|
110
110
|
|
|
111
111
|
- Use `igniteui-react`.
|
|
112
|
+
- Use `igniteui-react-grids` for advanced grids.
|
|
113
|
+
- Use `igniteui-react` and `igniteui-grid-lite` for Grid Lite; import from `igniteui-react/grid-lite`.
|
|
114
|
+
- Use `igniteui-react-charts`, `igniteui-react-gauges`, and `igniteui-react-maps` for charts, gauges, and maps.
|
|
115
|
+
- For package-specific components such as grids, Grid Lite, charts, gauges, and maps, do not assume they come from `igniteui-react`; follow `.claude/skills/igniteui-react-components/SKILL.md` to choose the correct package and imports.
|
|
116
|
+
- If the required Ignite UI package is not present in `package.json`, add or install the correct dependency first.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# LLM Agent Skills for Ignite UI for React
|
|
2
|
+
|
|
3
|
+
This directory contains skills for GitHub Copilot and other LLM agents to help developers use **Ignite UI for React** effectively in their applications.
|
|
4
|
+
|
|
5
|
+
## What are Skills?
|
|
6
|
+
|
|
7
|
+
Skills are structured instructions that help AI agents understand and execute common tasks consistently. Each skill is a self-contained guide that provides step-by-step instructions, code examples, and best practices — all specific to React and the `igniteui-react` family of packages.
|
|
8
|
+
|
|
9
|
+
## Available Skills
|
|
10
|
+
|
|
11
|
+
| Skill | Description | Use When |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| [igniteui-react-components](./igniteui-react-components/SKILL.md) | Identify the right React components (`Igr*`) for a UI pattern, then install, import, and use them — JSX patterns, events, refs, forms | Choosing components or setting up and using them in React |
|
|
14
|
+
| [igniteui-react-customize-theme](./igniteui-react-customize-theme/SKILL.md) | Customize styling using CSS custom properties, Sass, and the theming system in a React context | Applying custom brand colors/styles |
|
|
15
|
+
| [igniteui-react-optimize-bundle-size](./igniteui-react-optimize-bundle-size/SKILL.md) | Reduce bundle size with granular imports, tree-shaking, and lazy loading | Optimizing production performance |
|
|
16
|
+
|
|
17
|
+
## How to Use
|
|
18
|
+
|
|
19
|
+
When working with an AI agent like GitHub Copilot, reference skills by name or ask questions naturally:
|
|
20
|
+
|
|
21
|
+
### Natural Questions
|
|
22
|
+
|
|
23
|
+
- "How do I add a data grid to my React app?"
|
|
24
|
+
- "What Ignite UI component should I use for a date picker?"
|
|
25
|
+
- "Help me customize the button colors to match my brand"
|
|
26
|
+
- "My bundle size is too large, how can I reduce it?"
|
|
27
|
+
- "How do I handle events on IgrCombo?"
|
|
28
|
+
|
|
29
|
+
### Direct Skill Reference
|
|
30
|
+
|
|
31
|
+
- "Follow the igniteui-react-components skill for setting up my project"
|
|
32
|
+
- "Use the igniteui-react-customize-theme skill to help me style components"
|
|
33
|
+
- "Apply the igniteui-react-optimize-bundle-size skill to reduce my bundle"
|
|
34
|
+
|
|
35
|
+
## Skill Structure
|
|
36
|
+
|
|
37
|
+
Each skill contains:
|
|
38
|
+
|
|
39
|
+
- **Example Usage**: Common questions or scenarios
|
|
40
|
+
- **When to Use**: Situations where the skill applies
|
|
41
|
+
- **Related Skills**: Other relevant skills to explore
|
|
42
|
+
- **Step-by-Step Instructions**: Detailed guidance with code examples
|
|
43
|
+
- **Common Issues & Solutions**: Troubleshooting guidance
|
|
44
|
+
- **Best Practices**: Recommended approaches
|
|
45
|
+
- **Additional Resources**: Further reading and documentation
|
|
46
|
+
|
|
47
|
+
## Editor / Agent Setup
|
|
48
|
+
|
|
49
|
+
Most modern AI assistants (GitHub Copilot, Cursor, Windsurf, Claude Code, etc.) should auto-discover these skills from a specified location in the workspace or global profile.
|
|
50
|
+
|
|
51
|
+
For example, you can copy them into the agent-specific skills folder for your editor:
|
|
52
|
+
|
|
53
|
+
### GitHub Copilot
|
|
54
|
+
|
|
55
|
+
Copy the skill files into your project's `.agents/skills/` directory:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
.agents/
|
|
59
|
+
skills/
|
|
60
|
+
igniteui-react-components/
|
|
61
|
+
SKILL.md
|
|
62
|
+
reference/
|
|
63
|
+
igniteui-react-customize-theme/
|
|
64
|
+
SKILL.md
|
|
65
|
+
reference/
|
|
66
|
+
igniteui-react-optimize-bundle-size/
|
|
67
|
+
SKILL.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Claude Code
|
|
71
|
+
|
|
72
|
+
Copy the skill files into your project's `.claude/skills/` directory:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
.claude/
|
|
76
|
+
skills/
|
|
77
|
+
igniteui-react-components/
|
|
78
|
+
SKILL.md
|
|
79
|
+
reference/
|
|
80
|
+
igniteui-react-customize-theme/
|
|
81
|
+
SKILL.md
|
|
82
|
+
reference/
|
|
83
|
+
igniteui-react-optimize-bundle-size/
|
|
84
|
+
SKILL.md
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Other Agents (Cursor, Windsurf, etc.)
|
|
88
|
+
|
|
89
|
+
Consult your agent's documentation for the correct skills directory path and copy the skill files there. The skill structure is agent-agnostic — any assistant that supports skill files can use them directly.
|
|
@@ -54,7 +54,6 @@ This skill is organized into focused reference files. Load the appropriate file
|
|
|
54
54
|
| Event Handling | [EVENT-HANDLING.md](./reference/EVENT-HANDLING.md) | Event props, CustomEvent types, common events |
|
|
55
55
|
| Refs & Forms | [REFS-FORMS.md](./reference/REFS-FORMS.md) | useRef, controlled/uncontrolled forms, React Hook Form |
|
|
56
56
|
| Charts, Gauges, Maps & Grid Lite | [CHARTS-GRIDS.md](./reference/CHARTS-GRIDS.md) | Module registration, container sizing |
|
|
57
|
-
| Reveal SDK | [REVEAL-SDK.md](./reference/REVEAL-SDK.md) | Embedded BI dashboards, theme sync |
|
|
58
57
|
| Troubleshooting | [TROUBLESHOOTING.md](./reference/TROUBLESHOOTING.md) | Common issues and solutions |
|
|
59
58
|
|
|
60
59
|
---
|