diff --git a/CHANGELOG.md b/CHANGELOG.md index bedf3b4b1..c71f349b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4592 @@ +# 14.10.0-alpha.4 + +## igniteui/cli-core@14.10.0-alpha.4 (2026-03-27) + + + +# 14.10.0-alpha.3 (2026-03-25) + + + +# 14.10.0-alpha.1 (2026-03-25) + + +#### Bug Fixes + +* **eslint:** correct config ignores and resolve lint errors ([68d01ac](https://github.com/IgniteUI/igniteui-cli/commit/68d01ac6102e4e3d660dff9d229e826ea64943db)) +* **lint:** re-enable no-console rule ([3ffa07f](https://github.com/IgniteUI/igniteui-cli/commit/3ffa07ff8812e93dd358b38332f3abc2ea955af2)) + + + +## 14.9.2 (2026-03-11) + + +#### Bug Fixes + +* **packages:** disable non-functional registry login attempt on upgrade ([#1528](https://github.com/IgniteUI/igniteui-cli/issues/1528)) ([1008a1e](https://github.com/IgniteUI/igniteui-cli/commit/1008a1e3fadb20553f464162d69a5bb2393d615b)) +* **packages:** login command for node@24+ spawn change ([cbb6502](https://github.com/IgniteUI/igniteui-cli/commit/cbb6502e90cfeaa7a87885748aa4b337c37c0b2f)) +* **upgrade-packages:** correctly glob files on windows ([#1511](https://github.com/IgniteUI/igniteui-cli/issues/1511)) ([64f2735](https://github.com/IgniteUI/igniteui-cli/commit/64f2735963f269fb4b60dd7479566baae33119c8)) + + +#### Reverts + +* partially revert changes swapping exec with spawn ([3a64b67](https://github.com/IgniteUI/igniteui-cli/commit/3a64b67bc43df42f72363e63192b90fea38b111f)) + + + +## 14.9.1 (2026-02-25) + + + +# 14.9.0 (2026-02-25) + + +#### Features + +* **ng:** update igniteui-angular to 21.1.0 ([#1495](https://github.com/IgniteUI/igniteui-cli/issues/1495)) ([399f83e](https://github.com/IgniteUI/igniteui-cli/commit/399f83e4278dafdf9a3832fa013840f05ba586e6)) + + + +## 14.8.5-beta.3 (2026-02-11) + + + +## 14.8.5-beta.0 (2026-02-10) + + + +## 14.8.4 (2026-02-05) + + + +## 14.8.3 (2026-01-19) + + + +## 14.8.2 (2026-01-13) + + + +## 14.8.2-beta.4 (2026-01-12) + + + +## 14.8.2-beta.3 (2026-01-12) + + + +## 14.8.2-beta.2 (2026-01-12) + + + +## 14.8.2-beta.0 (2026-01-12) + + + +# 14.8.0 (2025-12-03) + + + +# 14.8.0-beta.2 (2025-12-01) + + + +# 14.8.0-beta.1 (2025-12-01) + + + +## 14.7.1 (2025-11-20) + + + +# 14.7.0 (2025-11-17) + + +#### Bug Fixes + +* command injection vulnerabilities in PackageManager and start command ([#1438](https://github.com/IgniteUI/igniteui-cli/issues/1438)) ([1f86df3](https://github.com/IgniteUI/igniteui-cli/commit/1f86df3d6e660b93db047415e9c53af1ef4f0a30)) + + +#### Features + +* **ng:** use ng lint schematic ([#1439](https://github.com/IgniteUI/igniteui-cli/issues/1439)) ([fa917cd](https://github.com/IgniteUI/igniteui-cli/commit/fa917cd7c974db05061f9442d8c5cdcc74853928)) + + + +## 14.6.4 (2025-10-14) + + + +## 14.6.3 (2025-10-09) + + + +## 14.6.2 (2025-10-07) + + + +## 14.6.1 (2025-10-06) + + + +# 14.6.0 (2025-10-02) + + +#### Features + +* **ng:** update ig, ng and other libs ([#1427](https://github.com/IgniteUI/igniteui-cli/issues/1427)) ([93fbbcc](https://github.com/IgniteUI/igniteui-cli/commit/93fbbcce2668084dcc958736f7167e36e9cbed47)) + + + +## 14.5.8 (2025-09-25) + + +#### Bug Fixes + +* **react:** enhance upgrade-packages to support workspace glob patterns for projects without explicit workspaces ([#1424](https://github.com/IgniteUI/igniteui-cli/issues/1424)) ([6eeee2f](https://github.com/IgniteUI/igniteui-cli/commit/6eeee2ff879902197f012e83eb6064a72a4c438e)) + + + +## 14.5.7 (2025-09-23) + + + +## 14.5.6 (2025-09-18) + + +#### Bug Fixes + +* Remove --legacy-peer-deps flag to allow automatic peer dependency installation ([fe0ea3d](https://github.com/IgniteUI/igniteui-cli/commit/fe0ea3df94614b10dc494e241b070309e283c0b6)) +* **wc:** enhance upgrade-packages to support workspace glob patterns and vite.config.ts files ([#1408](https://github.com/IgniteUI/igniteui-cli/issues/1408)) ([bcd62be](https://github.com/IgniteUI/igniteui-cli/commit/bcd62be52107bcbdab6d207866fe7ffb99883b6d)) + + + +## 14.5.4 (2025-07-01) + + + +## 14.5.3 (2025-06-28) + + + +## 14.5.1 (2025-06-24) + + + +# 14.5.0 (2025-06-05) + + + +## 14.4.4 (2025-05-21) + + +#### Features + +* add azure pipelines yaml files for angular, react and wc templates ([#1396](https://github.com/IgniteUI/igniteui-cli/issues/1396)) ([6a3e39d](https://github.com/IgniteUI/igniteui-cli/commit/6a3e39d41f50abe51fa7fd819961412304a31343)) + + + +## 14.4.3 (2025-04-25) + + +#### Features + +* **React:** Update react html files with licensed packages when upgrading packages ([#1395](https://github.com/IgniteUI/igniteui-cli/issues/1395)) ([7a7c4f0](https://github.com/IgniteUI/igniteui-cli/commit/7a7c4f0b5b74acc67e7524e643ee2a102ededb46)) + + + +## 14.4.2 (2025-04-24) + + + +## 14.4.1 (2025-04-23) + + + +# 14.4.0 (2025-04-17) + + + +## 14.3.18 (2025-04-11) + + +#### Bug Fixes + +* add missing static css files for WC ([#1385](https://github.com/IgniteUI/igniteui-cli/issues/1385)) ([95018f9](https://github.com/IgniteUI/igniteui-cli/commit/95018f93704f62af70b9c4a2e07b46554e6331a4)) + + + +## 14.3.17 (2025-04-09) + + +#### Bug Fixes + +* **WC:** update themes import paths to licensed version ([#1387](https://github.com/IgniteUI/igniteui-cli/issues/1387)) ([260068b](https://github.com/IgniteUI/igniteui-cli/commit/260068b9c9e3f4e895717ca6003f6ba0aded5cf2)) + + + +## 14.3.16 (2025-03-31) + + +#### Bug Fixes + +* **workflows:** Do not throw error if github workflows directory does not exist when updating ([#1383](https://github.com/IgniteUI/igniteui-cli/issues/1383)) ([acc771a](https://github.com/IgniteUI/igniteui-cli/commit/acc771afac962166f630c36beff428aa83af97de)) + + + +## 14.3.14 (2025-02-24) + + +#### Bug Fixes + +* update eslint and fix warnings ([#1378](https://github.com/IgniteUI/igniteui-cli/issues/1378)) ([aa84345](https://github.com/IgniteUI/igniteui-cli/commit/aa84345ff21fc0fccde94063099e4c713862cde8)) + + + +## 14.3.12-beta.0 (2025-01-27) + + + +## 14.3.11 (2025-01-24) + + +#### Bug Fixes + +* static data paths when deploy to github pages ([#1371](https://github.com/IgniteUI/igniteui-cli/issues/1371)) ([4b40231](https://github.com/IgniteUI/igniteui-cli/commit/4b402313f4d2a2cfd80115d274514d9e5507334c)) + + + +## 14.3.10 (2025-01-23) + + + +## 14.3.9 (2025-01-23) + + + +## 14.3.8 (2025-01-23) + + + +## 14.3.7 (2025-01-22) + + + +## 14.3.6 (2024-12-12) + + + +## 14.3.5 (2024-12-06) + + +#### Bug Fixes + +* **web-components:** fix the step for updating the router navigation in github pages workflow ([#1358](https://github.com/IgniteUI/igniteui-cli/issues/1358)) ([3e0f42c](https://github.com/IgniteUI/igniteui-cli/commit/3e0f42c4fc7a75f6819f8ba85f760ac6a6d854f1)) + + + +## 14.3.4 (2024-12-04) + + + +## 14.3.3 (2024-12-02) + + + +## 14.3.2 (2024-11-28) + + +#### Features + +* Add pages deployment variable logic and fixes in github pages yaml files ([#1337](https://github.com/IgniteUI/igniteui-cli/issues/1337)) ([c75d9c7](https://github.com/IgniteUI/igniteui-cli/commit/c75d9c7a9d7a9244e7a9a814770809f06280529a)) +* allow reordering of array literal expressions ([#1323](https://github.com/IgniteUI/igniteui-cli/issues/1323)) ([412a2a5](https://github.com/IgniteUI/igniteui-cli/commit/412a2a585fa16fda53eb643c74af7fb4037c1412)) + + + +## 14.2.3 (2024-11-15) + + + +## 14.2.2 (2024-11-08) + + + +## 14.2.1 (2024-10-28) + + + +# 14.2.0 (2024-10-25) + + + +# 14.2.0-beta.4 (2024-10-23) + + + +# 14.1.0 (2024-10-11) + + + +## 14.0.2 (2024-09-20) + + + +## 14.0.1 (2024-09-05) + + + +# 14.0.0 (2024-08-23) + + + +# 14.0.0-beta.2 (2024-07-24) + + +#### Features + +* **igx-templates:** add AngularTypeScriptFileUpdate ([e7f6ed3](https://github.com/IgniteUI/igniteui-cli/commit/e7f6ed3d339bb444dcdbaec4cabe5dcbff27b5ac)) + + + +## 13.3.3 (2024-07-16) + + + +## 13.3.2 (2024-07-04) + + + +## 13.3.1 (2024-06-28) + + +#### Features + +* **core:** add FormattingService ([f7ea2a4](https://github.com/IgniteUI/igniteui-cli/commit/f7ea2a4d8f57b5f1edb531df76d05c541df754e1)) +* **core:** add new types ([aa636a3](https://github.com/IgniteUI/igniteui-cli/commit/aa636a3b1642da1a57758d49e0f7f6f79c7e2d01)) +* **core:** add TypeScriptASTTransformer ([9854847](https://github.com/IgniteUI/igniteui-cli/commit/9854847e32c718d82013e1fc8b58d9b06700b819)) + + + +# 13.3.0-rc.0 (2024-05-31) + + + +## 13.2.1 (2024-05-09) + + + +# 13.2.0 (2024-04-29) + + + +# 13.2.0-rc.0 (2024-04-29) + + + +## 13.1.16 (2024-04-28) + + + +## 13.1.15 (2024-04-12) + + + +## 13.1.13 (2024-04-11) + + + +## 13.1.12 (2024-03-21) + + +#### Features + +* **cli:** upgrade packages for React and WC ([#1198](https://github.com/IgniteUI/igniteui-cli/issues/1198)) ([16c9b8d](https://github.com/IgniteUI/igniteui-cli/commit/16c9b8dda219ebacd473a2fad5e0c0ea70d5f320)) + + + +## 13.1.11 (2024-03-12) + + + +## 13.1.10 (2024-03-11) + + + +## 13.1.9 (2024-03-05) + + + +## 13.1.8 (2024-02-29) + + + +## 13.1.7 (2024-02-28) + + + +## 13.1.6 (2024-02-26) + + +#### Features + +* **ng-add:** add setup config provideAnimations ([2f47676](https://github.com/IgniteUI/igniteui-cli/commit/2f476762ac772039228fe10565d49a6ced76b72d)) + + + +## 13.1.5 (2024-01-31) + + + +## 13.1.3 (2024-01-17) + + + +## 13.1.1 (2023-12-14) + + +#### Bug Fixes + +* **kebacase:** do not add dash before numbers ([25d8f54](https://github.com/IgniteUI/igniteui-cli/commit/25d8f544243f6e1f5583c772f4b8e0e3cbb7ca12)) +* **kebap-case:** add dash between number and uppercase letter ([0be7637](https://github.com/IgniteUI/igniteui-cli/commit/0be7637bc19423821e066a9e62dbdec3e5bd5cb4)) + + +#### Features + +* **igr-ts:** add igr-ts proj type ([#1146](https://github.com/IgniteUI/igniteui-cli/issues/1146)) ([4609525](https://github.com/IgniteUI/igniteui-cli/commit/460952505758fcf1ab9b559ed6809015f3c5d3a5)), closes [#1147](https://github.com/IgniteUI/igniteui-cli/issues/1147) [#1153](https://github.com/IgniteUI/igniteui-cli/issues/1153) + + + +## 13.0.1 (2023-11-15) + + +#### Bug Fixes + +* update Utils.LowerDashed function ([#1171](https://github.com/IgniteUI/igniteui-cli/issues/1171)) ([2254ecc](https://github.com/IgniteUI/igniteui-cli/commit/2254ecc0267be8c19e7f1d5295886b2ba6c345c7)) + + + +# 13.0.0 (2023-11-09) + + + +# 13.0.0-rc.0 (2023-11-09) + + + +## 12.0.6-beta.2 (2023-10-02) + + + +## 12.0.5 (2023-07-18) + + + +## 12.0.4 (2023-07-18) + + + +## 12.0.3 (2023-06-28) + + + +## 12.0.3-beta.0 (2023-06-02) + + + +## 12.0.1 (2023-05-26) + + + +# 12.0.0 (2023-05-15) + + + +# 12.0.0-rc.0 (2023-05-15) + + +#### Features + +* **igx:** add base_with_home proj to igx-templates ([#1118](https://github.com/IgniteUI/igniteui-cli/issues/1118)) ([d84c431](https://github.com/IgniteUI/igniteui-cli/commit/d84c4310a03e35588626c57148091c6b224c7bc3)) +* **igx:** update to 16 ([#1120](https://github.com/IgniteUI/igniteui-cli/issues/1120)) ([e6efa40](https://github.com/IgniteUI/igniteui-cli/commit/e6efa40c2c748d2679b6be66252bc7732e51de29)) + + + +## 11.1.1 (2023-04-11) + + + +# 11.1.0 (2023-03-28) + + + +# 11.1.0-rc.0 (2023-03-24) + + + +## 11.0.2 (2023-02-17) + + + +# 11.0.0 (2022-11-23) + + + +# 10.1.0-beta.13 (2022-10-27) + + + +# 10.1.0-beta.12 (2022-10-27) + + + +# 10.1.0-beta.11 (2022-10-25) + + + +# 10.1.0-beta.10 (2022-10-25) + + + +# 10.1.0-beta.8 (2022-10-23) + + + +# 10.1.0-beta.7 (2022-10-19) + + + +# 10.1.0-beta.5 (2022-10-18) + + + +# 10.1.0-beta.4 (2022-10-18) + + + +# 10.1.0-beta.3 (2022-10-17) + + + +# 10.1.0-beta.2 (2022-10-14) + + + +# 10.1.0-beta.1 (2022-10-14) + + + +# 10.1.0-beta.0 (2022-10-07) + + + +## 10.0.5 (2022-09-19) + + + +## 10.0.4-beta.0 (2022-06-30) + + + +## 10.0.2 (2022-06-29) + + + +## 10.0.1 (2022-06-17) + + +#### Bug Fixes + +* **package-manager:** skip setting up child install tasks for new projects ([de2a134](https://github.com/IgniteUI/igniteui-cli/commit/de2a1341e13ba20635a5ed94c5cc7e4c79c7ca46)) + + + +# 9.2.0 (2022-05-26) + + + +## 9.1.4 (2022-05-20) + + + +## 9.1.3 (2022-05-19) + + + +## 9.1.2 (2022-05-16) + + + +## 9.1.1 (2022-03-18) + + + +## 9.1.1-rc.0 (2022-03-17) + + + +# 9.1.0 (2022-03-02) + + + +# 9.1.0-rc.1 (2022-02-25) + + + +# 9.1.0-beta.0 (2022-02-22) + + +#### Bug Fixes + +* **start:** pass in options for wc child process ([2df9e33](https://github.com/IgniteUI/igniteui-cli/commit/2df9e337e86e353d6d3dde6b53001af7af36fe12)) + + + +## 9.0.6 (2022-02-04) + + + +## 9.0.5 (2022-02-04) + + + +## 9.0.5-beta.2 (2022-02-03) + + + +## 9.0.5-beta.1 (2022-01-28) + + + +## 9.0.5-beta.0 (2021-12-20) + + + +## 9.0.4 (2021-12-15) + + + +## 9.0.3 (2021-12-13) + + +#### Bug Fixes + +* **import:** Update func signature ([a3ac17a](https://github.com/IgniteUI/igniteui-cli/commit/a3ac17ab30436ed0420c92902c53ff7c3dfd0534)) +* **lint:** Fix lint errors ([6b5dd98](https://github.com/IgniteUI/igniteui-cli/commit/6b5dd985e90fb9cf8675c6cf0c06c6193e27fb32)) + + +#### Features + +* **typescript:** Add support for typescript 4.5.2 ([055ca5b](https://github.com/IgniteUI/igniteui-cli/commit/055ca5b7f8e54acdd8f3f1d6b6d7517916d852f3)) + + + +## 9.0.1 (2021-11-25) + + + +# 9.0.0 (2021-11-22) + + + +# 9.0.0-rc.3 (2021-11-22) + + + +# 9.0.0-rc.2 (2021-11-19) + + +#### Bug Fixes + +* add igx-scrollbar class to body, [#14033](https://github.com/IgniteUI/igniteui-cli/issues/14033) ([b02ac58](https://github.com/IgniteUI/igniteui-cli/commit/b02ac5822015c6b1b1fdd4684a52a2eecb3eadd9)) + + + +# 9.0.0-rc.1 (2021-11-17) + + + +# 9.0.0-rc.0 (2021-11-17) + + +#### Features + +* **angular:** update to Angular 13 [#895](https://github.com/IgniteUI/igniteui-cli/issues/895) ([#896](https://github.com/IgniteUI/igniteui-cli/issues/896)) ([32f1721](https://github.com/IgniteUI/igniteui-cli/commit/32f17215290af3372b554f0e440e39b9b9b5040a)) + + + +# 8.3.0-rc.0 (2021-11-11) + + + +# 8.3.0-beta.6 (2021-11-09) + + + +# 8.3.0-beta.5 (2021-11-09) + + + +# 8.3.0-beta.4 (2021-11-09) + + + +# 8.3.0-beta.3 (2021-11-08) + + + +# 8.3.0-beta.2 (2021-11-08) + + + +# 8.3.0-beta.1 (2021-11-04) + + + +# 8.3.0-beta.0 (2021-11-04) + + + +## 8.2.1 (2021-10-08) + + + +## 8.2.1-rc.0 (2021-10-07) + + + +# 8.2.0 (2021-10-04) + + + +# 8.2.0-alpha.0 (2021-09-30) + + + +## 8.1.2 (2021-09-28) + + +#### Bug Fixes + +* **ts-transform:** respect quote type from editorconfig ([99b3aad](https://github.com/IgniteUI/igniteui-cli/commit/99b3aadce0e6e7de8e2fef502db2ff1811d7a11e)) + + + +## 8.1.1 (2021-09-02) + + +#### Bug Fixes + +* **lint:** Fix all lint errors. ([659cc29](https://github.com/IgniteUI/igniteui-cli/commit/659cc2913f20092bd9ffc3f5a1a1f549db005912)) + + +#### Features + +* **ig-ts:** Empty project is now angular project. ([83e5c6f](https://github.com/IgniteUI/igniteui-cli/commit/83e5c6f8370b0d10a349751d9b90f3f284d9ae69)) + + + +# 8.1.0-rc.0 (2021-07-30) + + + +# 8.1.0-beta.1 (2021-07-30) + + + +# 8.1.0-beta.0 (2021-07-28) + + +#### Features + +* update angular to v12.1 [#856](https://github.com/IgniteUI/igniteui-cli/issues/856) ([#857](https://github.com/IgniteUI/igniteui-cli/issues/857)) ([971822e](https://github.com/IgniteUI/igniteui-cli/commit/971822e343158bd107ef5b07bf60773509bd928c)) + + + +## 8.0.3 (2021-07-14) + + + +## 8.0.2 (2021-07-07) + + + +## 8.0.2-beta.1 (2021-07-06) + + + +## 8.0.2-beta.0 (2021-07-02) + + + +## 8.0.1 (2021-07-01) + + + +# 8.0.0 (2021-05-14) + + + +# 8.0.0-rc.0 (2021-05-13) + + + +# 8.0.0-alpha.1 (2021-05-13) + + + +## 7.1.1 (2021-03-15) + + + +## 7.1.1-beta.0 (2021-03-12) + + + +# 7.1.0 (2021-02-22) + + + +# 7.1.0-beta.0 (2021-02-18) + + + +## 7.0.1 (2020-11-16) + + + +# 7.0.0 (2020-11-13) + + + +# 7.0.0-rc.2 (2020-11-12) + + + +# 7.0.0-rc.1 (2020-11-10) + + + +# 7.0.0-rc.0 (2020-11-10) + + + +# 7.0.0-alpha.0 (2020-11-10) + + + +# 6.2.0 (2020-10-20) + + + +# 6.2.0-rc.0 (2020-10-16) + + + +# 6.2.0-beta.0 (2020-10-14) + + + +# 6.1.0 (2020-08-12) + + + +# 6.1.0-beta.0 (2020-08-07) + + + +# 6.1.0-alpha.0 (2020-07-09) + + +#### Features + +* **tsutil:** add optional parent route to TsFileUpdateUtil.addRoute method ([#777](https://github.com/IgniteUI/igniteui-cli/issues/777)) ([2df694a](https://github.com/IgniteUI/igniteui-cli/commit/2df694ac03a4601059f730b6cc9ae7d3ab6371ea)) + + + +# 6.0.0 (2020-06-25) + + + +# 6.0.0-rc.0 (2020-06-25) + + +#### Bug Fixes + +* use group.json for step by step groups [#707](https://github.com/IgniteUI/igniteui-cli/issues/707) ([adf562c](https://github.com/IgniteUI/igniteui-cli/commit/adf562c639725fb6a8008ef682f5fbdd66e65b55)) + + +#### Features + +* remove angular as default choice for step by step [#579](https://github.com/IgniteUI/igniteui-cli/issues/579) ([5d2697e](https://github.com/IgniteUI/igniteui-cli/commit/5d2697e019d344cc5ebedf9ac00de94b012ded73)) + + + +# 5.2.0 (2020-06-11) + + + +## 5.1.1 (2020-06-03) + + + +# 5.1.0 (2020-06-01) + + + +# 5.1.0-beta.4 (2020-06-01) + + +#### Bug Fixes + +* **package-manager:** manually update pckgJSON instead of letting npm do it, [#751](https://github.com/IgniteUI/igniteui-cli/issues/751) ([6fa4c0c](https://github.com/IgniteUI/igniteui-cli/commit/6fa4c0c8d5afecfef8a8c1de18b1f6620edc006c)) + + + +# 5.1.0-beta.3 (2020-05-29) + + +#### Bug Fixes + +* **upgrade:** clear stdin stream before login prompt ([c77f49a](https://github.com/IgniteUI/igniteui-cli/commit/c77f49ab940933e9df6da2518d5192d5d49fbd0c)) + + + +# 5.1.0-beta.2 (2020-05-28) + + + +# 5.1.0-beta.1 (2020-05-28) + + + +# 5.1.0-beta.0 (2020-05-27) + + +#### Bug Fixes + +* **templates:** upgrade command properly replaces strings in ALL .ts files ([2d2c9b3](https://github.com/IgniteUI/igniteui-cli/commit/2d2c9b3dc02da3f7633642d9b3b4a02d7f0bb119)) + + +#### Features + +* **commands:** Add 'upgrade-packages' command ([25db37d](https://github.com/IgniteUI/igniteui-cli/commit/25db37d0df1fa52d81501b74ab328330e7a60744)) +* **schematics:** update-package logic added ([197b94e](https://github.com/IgniteUI/igniteui-cli/commit/197b94e367d5e9a359c989beef01c6f35d7b54b5)) +* **step-by-step:** add prompt to upgrade to private feed packages, [#724](https://github.com/IgniteUI/igniteui-cli/issues/724) ([63c0c85](https://github.com/IgniteUI/igniteui-cli/commit/63c0c85639c1e5e5415c82f96a6b5cb5bbad4b99)) + + + +# 5.1.0-alpha.0 (2020-05-20) + + + +## 5.0.3 (2020-05-18) + + + +## 5.0.2 (2020-05-05) + + +#### Bug Fixes + +* **start:** inherit all stdio, not just input [#699](https://github.com/IgniteUI/igniteui-cli/issues/699) ([1c03891](https://github.com/IgniteUI/igniteui-cli/commit/1c03891227bcdcff6dbff2005939e631737d8b7f)) + + + +# 5.0.0 (2020-02-11) + + + +# 5.0.0-rc.4 (2020-02-11) + + + +# 5.0.0-rc.3 (2020-02-07) + + + +# 5.0.0-rc.2 (2020-02-07) + + + +# 5.0.0-rc.0 (2020-01-31) + + + +# 5.0.0-beta.3 (2019-12-13) + + + +# 5.0.0-beta.2 (2019-12-06) + + +#### Features + +* **schematics:** adding a name for schematics projects [#587](https://github.com/IgniteUI/igniteui-cli/issues/587) ([#602](https://github.com/IgniteUI/igniteui-cli/issues/602)) ([19409d0](https://github.com/IgniteUI/igniteui-cli/commit/19409d0b7018c518c64c7ff161a6ec4a3438f834)) + + + +# 5.0.0-beta.1 (2019-11-28) + + +#### Bug Fixes + +* **schematics:** component schematics checks for available names [#576](https://github.com/IgniteUI/igniteui-cli/issues/576) ([#586](https://github.com/IgniteUI/igniteui-cli/issues/586)) ([bccd6c1](https://github.com/IgniteUI/igniteui-cli/commit/bccd6c131c4ab9bc197cfa29e1b792494270720f)) +* **schematics:** this package is a dep in new project instead of ignteui-cli ([c04a13c](https://github.com/IgniteUI/igniteui-cli/commit/c04a13c1c82c1d4a9a627503086f86d9040c6778)) +* **templating, igx-ts:** add dot path variable for prefixed files that glob ignores ([486a0da](https://github.com/IgniteUI/igniteui-cli/commit/486a0da0ee6190f16544ee46ae360b822c057b53)) + + + +# 5.0.0-alpha.1 (2019-10-02) + +## igniteui/angular-templates@21.1.14100-alpha.4 (2026-03-27) + + + +# 14.10.0-alpha.3 (2026-03-25) + + +#### Features + +* Updated VS Code MCP configuration to align with new naming conventions. ([4fdb8e0](https://github.com/IgniteUI/igniteui-cli/commit/4fdb8e091b87c960c9cbbb35c126b6b7a32475fc)) + + + +# 14.10.0-alpha.1 (2026-03-25) + + +#### Bug Fixes + +* **eslint:** correct config ignores and resolve lint errors ([68d01ac](https://github.com/IgniteUI/igniteui-cli/commit/68d01ac6102e4e3d660dff9d229e826ea64943db)) +* **igx-ts-legacy:** update igx ts legacy templates ([#1517](https://github.com/IgniteUI/igniteui-cli/issues/1517)) ([c26c8ff](https://github.com/IgniteUI/igniteui-cli/commit/c26c8ff298092c21b2aa6ca77a75cd2a5fdedc79)) + + +#### Features + +* add copilot instructions for AI agents in multiple templates ([73921a7](https://github.com/IgniteUI/igniteui-cli/commit/73921a738efcc0a3e2a7df24bdf509f9f694da8a)) +* **claude:** add CLAUDE.md files for AI agent instructions across multiple templates ([5a96a33](https://github.com/IgniteUI/igniteui-cli/commit/5a96a33eac3f2fcbaf1444ac7778f7c8c2c89952)) +* **igx-ts:** update angular project to use vitest with playwright ([#1542](https://github.com/IgniteUI/igniteui-cli/issues/1542)) ([85dd3e6](https://github.com/IgniteUI/igniteui-cli/commit/85dd3e609295d7d801c127715c5fe8947f90f23d)) +* **igx-ts:** update project setup and templates naming ([#1514](https://github.com/IgniteUI/igniteui-cli/issues/1514)) ([ed4d1dd](https://github.com/IgniteUI/igniteui-cli/commit/ed4d1ddced09cee062caae7f8445df5ba11d8cac)) +* **mcp:** add angular-cli server configuration to mcp.json ([43a01a0](https://github.com/IgniteUI/igniteui-cli/commit/43a01a08ca6ac9b9a7958a172e5f27b02fe1fbb1)) +* **templates:** add AGENTS.md and mcp.json files for React and Web Components and Angular project templates ([d867f44](https://github.com/IgniteUI/igniteui-cli/commit/d867f44e17d01be82ec6853c6b0c22910a652b73)) + + + +## 14.9.2 (2026-03-11) + + +#### Bug Fixes + +* **igx-ts-legacy:** fi grid type import and add missing override ([ff24df0](https://github.com/IgniteUI/igniteui-cli/commit/ff24df0e665d8c834f510bfc62fc99af6532a38e)) +* **igx-ts:** fix eslint configurations ([#1509](https://github.com/IgniteUI/igniteui-cli/issues/1509)) ([ec63959](https://github.com/IgniteUI/igniteui-cli/commit/ec63959ee65e5c369d483d5dc34965f121a36cae)) +* **igx-ts:** fix side nav route data text ([487ba12](https://github.com/IgniteUI/igniteui-cli/commit/487ba122c2d51822642d15f501ea776193bf6a44)) +* **igx-ts:** update igniteui-angular versions and remove overrides ([#1508](https://github.com/IgniteUI/igniteui-cli/issues/1508)) ([6b4e1c8](https://github.com/IgniteUI/igniteui-cli/commit/6b4e1c87e8e7a94a5212a7037072088b7eec8a1a)) + + + +## 14.9.1 (2026-02-25) + + + +# 14.9.0 (2026-02-25) + + +#### Bug Fixes + +* **angular:** add igniteui angular core override ([0a5d46f](https://github.com/IgniteUI/igniteui-cli/commit/0a5d46f73bd3d621a833d07ad09318ccbdcfb9b9)) +* **angular:** add missing providers ([804703e](https://github.com/IgniteUI/igniteui-cli/commit/804703e984919aa2fac6272f8058f94256460b73)) +* **angular:** empty template config ([75eef02](https://github.com/IgniteUI/igniteui-cli/commit/75eef022a33f0dc6bc5b90816ccee9c415d76289)) +* update imports ([a2bf7bf](https://github.com/IgniteUI/igniteui-cli/commit/a2bf7bf6fc973ba0af8d12dc1c33605419475891)) + + +#### Features + +* **ng:** update igniteui-angular to 21.1.0 ([#1495](https://github.com/IgniteUI/igniteui-cli/issues/1495)) ([399f83e](https://github.com/IgniteUI/igniteui-cli/commit/399f83e4278dafdf9a3832fa013840f05ba586e6)) + + + +## 14.8.5-beta.3 (2026-02-11) + + +#### Bug Fixes + +* **angular:** fix the type of the providers ([142dbda](https://github.com/IgniteUI/igniteui-cli/commit/142dbda9665430bb3fb5a97744e8913195975708)) + + + +## 14.8.5-beta.0 (2026-02-10) + + +#### Bug Fixes + +* **angular:** add provide zone change detection in app config for angular standalone ([27b516b](https://github.com/IgniteUI/igniteui-cli/commit/27b516b640b1ecf9fdb7320e6a5c84a398aab505)) + + + +## 14.8.4 (2026-02-05) + + +#### Bug Fixes + +* add same fix to legacy angular projects ([2456829](https://github.com/IgniteUI/igniteui-cli/commit/245682908c81c931b65707b5098a98e3991f6f71)) +* **angular:** increase maximum error budget ([#1485](https://github.com/IgniteUI/igniteui-cli/issues/1485)) ([63a03bd](https://github.com/IgniteUI/igniteui-cli/commit/63a03bddb3459797bc5a0121f2d601823fd3cd35)) +* move tearDown to chart related test files ([40b1739](https://github.com/IgniteUI/igniteui-cli/commit/40b1739734199b035c32b02937456c9ae444654a)) +* remove calls to test.ts ([c08ca9f](https://github.com/IgniteUI/igniteui-cli/commit/c08ca9fcd472488a125c2f073bd06e051a5f3314)) +* remove test.ts as not needed ([451d49a](https://github.com/IgniteUI/igniteui-cli/commit/451d49ab3c6b7652b29b062e1e3a9301f2497a0f)) + + + +## 14.8.3 (2026-01-19) + + +#### Bug Fixes + +* **angular:** remove glob and rimraf from standalone package json ([#1478](https://github.com/IgniteUI/igniteui-cli/issues/1478)) ([0a3afce](https://github.com/IgniteUI/igniteui-cli/commit/0a3afce21e6e14196c8942f9f15a56793e1679fa)) + + + +## 14.8.2 (2026-01-13) + + + +## 14.8.2-beta.4 (2026-01-12) + + + +## 14.8.2-beta.3 (2026-01-12) + + + +## 14.8.2-beta.2 (2026-01-12) + + + +## 14.8.2-beta.0 (2026-01-12) + + + +# 14.8.0 (2025-12-03) + + + +# 14.8.0-beta.2 (2025-12-01) + + + +# 14.8.0-beta.1 (2025-12-01) + + + +## 14.7.1 (2025-11-20) + + + +# 14.7.0 (2025-11-17) + + +#### Features + +* **ng:** use ng lint schematic ([#1439](https://github.com/IgniteUI/igniteui-cli/issues/1439)) ([fa917cd](https://github.com/IgniteUI/igniteui-cli/commit/fa917cd7c974db05061f9442d8c5cdcc74853928)) + + + +## 14.6.4 (2025-10-14) + + + +## 14.6.3 (2025-10-09) + + +#### Bug Fixes + +* **ng:** move eqeqeq rule ([#1433](https://github.com/IgniteUI/igniteui-cli/issues/1433)) ([29a574d](https://github.com/IgniteUI/igniteui-cli/commit/29a574db2af16adff262440d789c58216ba08a8e)) + + + +## 14.6.2 (2025-10-07) + + + +## 14.6.1 (2025-10-06) + + + +# 14.6.0 (2025-10-02) + + +#### Features + +* **ng:** update ig, ng and other libs ([#1427](https://github.com/IgniteUI/igniteui-cli/issues/1427)) ([93fbbcc](https://github.com/IgniteUI/igniteui-cli/commit/93fbbcce2668084dcc958736f7167e36e9cbed47)) + + + +## 14.5.8 (2025-09-25) + + + +## 14.5.7 (2025-09-23) + + +#### Bug Fixes + +* **angular:** fix eslint config for angular modules ([#1423](https://github.com/IgniteUI/igniteui-cli/issues/1423)) ([2420d26](https://github.com/IgniteUI/igniteui-cli/commit/2420d26511cffef06cad58fa7e67a61a6b885187)) + + + +## 14.5.6 (2025-09-18) + + +#### Bug Fixes + +* **ng, standalone:** add test setup file for angular standalone ([#1421](https://github.com/IgniteUI/igniteui-cli/issues/1421)) ([feebb55](https://github.com/IgniteUI/igniteui-cli/commit/feebb5574cfffe86f6f2b342c2643b3ef9651a3c)) + + + +## 14.5.4 (2025-07-01) + + +#### Bug Fixes + +* **ng:** Add same proj rxjs version in overrides, so there are no peer dep errors for it. It is needed when having reveal or other overrides. ([4728d19](https://github.com/IgniteUI/igniteui-cli/commit/4728d19e7658cf5c4d863a6c277be696f77e5ac5)) + + + +## 14.5.3 (2025-06-28) + + +#### Bug Fixes + +* **angular:** fix theme errors ([#1404](https://github.com/IgniteUI/igniteui-cli/issues/1404)) ([3e7e4a3](https://github.com/IgniteUI/igniteui-cli/commit/3e7e4a3777bde5cc025df182bb57e5b9f002c5d9)) + + + +## 14.5.1 (2025-06-24) + + + +# 14.5.0 (2025-06-05) + + + +## 14.4.4 (2025-05-21) + + +#### Features + +* add azure pipelines yaml files for angular, react and wc templates ([#1396](https://github.com/IgniteUI/igniteui-cli/issues/1396)) ([6a3e39d](https://github.com/IgniteUI/igniteui-cli/commit/6a3e39d41f50abe51fa7fd819961412304a31343)) + + + +## 14.4.3 (2025-04-25) + + + +## 14.4.2 (2025-04-24) + + + +## 14.4.1 (2025-04-23) + + + +# 14.4.0 (2025-04-17) + + + +## 14.3.18 (2025-04-11) + + +#### Bug Fixes + +* add missing static css files for WC ([#1385](https://github.com/IgniteUI/igniteui-cli/issues/1385)) ([95018f9](https://github.com/IgniteUI/igniteui-cli/commit/95018f93704f62af70b9c4a2e07b46554e6331a4)) + + + +## 14.3.17 (2025-04-09) + + + +## 14.3.16 (2025-03-31) + + + +## 14.3.14 (2025-02-24) + + +#### Bug Fixes + +* **angular:** add ovverides for reveal sdk wrappers ([d2bc8cb](https://github.com/IgniteUI/igniteui-cli/commit/d2bc8cb26584f5836d633d24421d6dc774bd53a5)) +* update eslint and fix warnings ([#1378](https://github.com/IgniteUI/igniteui-cli/issues/1378)) ([aa84345](https://github.com/IgniteUI/igniteui-cli/commit/aa84345ff21fc0fccde94063099e4c713862cde8)) + + + +## 14.3.12-beta.0 (2025-01-27) + + + +## 14.3.11 (2025-01-24) + + +#### Bug Fixes + +* static data paths when deploy to github pages ([#1371](https://github.com/IgniteUI/igniteui-cli/issues/1371)) ([4b40231](https://github.com/IgniteUI/igniteui-cli/commit/4b402313f4d2a2cfd80115d274514d9e5507334c)) + + + +## 14.3.10 (2025-01-23) + + + +## 14.3.9 (2025-01-23) + + + +## 14.3.8 (2025-01-23) + + + +## 14.3.7 (2025-01-22) + + +#### Bug Fixes + +* **github-pages:** upgrade github pages deploy and artefact versions ([#1366](https://github.com/IgniteUI/igniteui-cli/issues/1366)) ([db6d0ea](https://github.com/IgniteUI/igniteui-cli/commit/db6d0eaef44c189cb80f10925d25595d97b7da4b)) + + + +## 14.3.6 (2024-12-12) + + + +## 14.3.5 (2024-12-06) + + +#### Bug Fixes + +* **web-components:** fix the step for updating the router navigation in github pages workflow ([#1358](https://github.com/IgniteUI/igniteui-cli/issues/1358)) ([3e0f42c](https://github.com/IgniteUI/igniteui-cli/commit/3e0f42c4fc7a75f6819f8ba85f760ac6a6d854f1)) + + + +## 14.3.4 (2024-12-04) + + + +## 14.3.3 (2024-12-02) + + + +## 14.3.2 (2024-11-28) + + +#### Bug Fixes + +* adapt ngModules templates to 19 changes ([2ce6e9d](https://github.com/IgniteUI/igniteui-cli/commit/2ce6e9d38acef0f0e8981ef054f61ab35d137fd8)) + + + +# 14.3.0 (2024-11-25) + + +#### Features + +* Add pages deployment variable logic and fixes in github pages yaml files ([#1337](https://github.com/IgniteUI/igniteui-cli/issues/1337)) ([c75d9c7](https://github.com/IgniteUI/igniteui-cli/commit/c75d9c7a9d7a9244e7a9a814770809f06280529a)) +* allow reordering of array literal expressions ([#1323](https://github.com/IgniteUI/igniteui-cli/issues/1323)) ([412a2a5](https://github.com/IgniteUI/igniteui-cli/commit/412a2a585fa16fda53eb643c74af7fb4037c1412)) + + + +## 14.2.3 (2024-11-15) + + + +## 14.2.2 (2024-11-08) + + + +## 14.2.1 (2024-10-28) + + + +# 14.2.0 (2024-10-25) + + + +# 14.2.0-beta.4 (2024-10-23) + + + +# 14.1.0 (2024-10-11) + + + +## 14.0.2 (2024-09-20) + + + +## 14.0.1 (2024-09-05) + + + +# 14.0.0 (2024-08-23) + + + +# 14.0.0-beta.2 (2024-07-24) + + + +## 13.4.1 (2024-07-24) + + +#### Features + +* **igx-templates:** add AngularTypeScriptFileUpdate ([e7f6ed3](https://github.com/IgniteUI/igniteui-cli/commit/e7f6ed3d339bb444dcdbaec4cabe5dcbff27b5ac)) + + + +# 13.4.0 (2024-07-22) + + + +## 13.3.3 (2024-07-16) + + + +## 13.3.2 (2024-07-04) + + + +## 13.3.1 (2024-06-28) + + + +# 13.3.0-rc.0 (2024-05-31) + + +#### Features + +* **ng-sa-base:** add vscode template folder ([a4787e7](https://github.com/IgniteUI/igniteui-cli/commit/a4787e74fcc715aceaa4c265fd97e4452e70463e)) +* **ngm-base:** add vscode template folder ([0ed6fb8](https://github.com/IgniteUI/igniteui-cli/commit/0ed6fb8cf8ef75103c84e8ee2ddeaa2886be3922)) + + + +## 13.2.1 (2024-05-09) + + + +# 13.2.0 (2024-04-29) + + + +# 13.2.0-rc.0 (2024-04-29) + + + +## 13.1.16 (2024-04-28) + + + +## 13.1.15 (2024-04-12) + + + +## 13.1.13 (2024-04-11) + + +#### Bug Fixes + +* **cli-templetes:** Replaced index.html to ApplicationTitle as placeholder ([#1237](https://github.com/IgniteUI/igniteui-cli/issues/1237)) ([d622d54](https://github.com/IgniteUI/igniteui-cli/commit/d622d54fbd3becbc514bfc971eac4c97b3346255)) +* fix yml script placeholder delimiters ([#1239](https://github.com/IgniteUI/igniteui-cli/issues/1239)) ([45a2264](https://github.com/IgniteUI/igniteui-cli/commit/45a2264a93edc5b0ca307d5ec43fcd6a9de42cea)) + + + +## 13.1.12 (2024-03-21) + + +#### Features + +* **cli:** upgrade packages for React and WC ([#1198](https://github.com/IgniteUI/igniteui-cli/issues/1198)) ([16c9b8d](https://github.com/IgniteUI/igniteui-cli/commit/16c9b8dda219ebacd473a2fad5e0c0ea70d5f320)) + + + +## 13.1.11 (2024-03-12) + + + +## 13.1.10 (2024-03-11) + + + +## 13.1.9 (2024-03-05) + + + +## 13.1.8 (2024-02-29) + + + +## 13.1.7 (2024-02-28) + + + +## 13.1.6 (2024-02-26) + + +#### Features + +* **_base-legacy:** update project type to legacy ([f8984c9](https://github.com/IgniteUI/igniteui-cli/commit/f8984c93f02e8391ca721bc49eeabd45e5f7bb34)) +* **_base:** provide http client ([1e1d1c2](https://github.com/IgniteUI/igniteui-cli/commit/1e1d1c2d6c70a110ace81e74c91bcab2a7021086)) + + + +## 13.1.5 (2024-01-31) + + + +## 13.1.3 (2024-01-17) + + +#### Bug Fixes + +* **igx-ts:** update karma-jasmine-html-reporter ([0cf034d](https://github.com/IgniteUI/igniteui-cli/commit/0cf034db6474b8ed88e9b3d93e9b3011afd47b3b)) + + + +## 13.1.1 (2023-12-14) + + +#### Bug Fixes + +* **igx:** remove prod config for ng build ([d90c056](https://github.com/IgniteUI/igniteui-cli/commit/d90c056aed7ac87f972ea719eeac9367e6b97226)) + + +#### Features + +* **igr-ts:** add igr-ts proj type ([#1146](https://github.com/IgniteUI/igniteui-cli/issues/1146)) ([4609525](https://github.com/IgniteUI/igniteui-cli/commit/460952505758fcf1ab9b559ed6809015f3c5d3a5)), closes [#1147](https://github.com/IgniteUI/igniteui-cli/issues/1147) [#1153](https://github.com/IgniteUI/igniteui-cli/issues/1153) + + + +## 13.0.1 (2023-11-15) + + + +# 13.0.0 (2023-11-09) + + + +# 13.0.0-rc.0 (2023-11-09) + + + +## 12.0.6-beta.2 (2023-10-02) + + + +## 12.0.5 (2023-07-18) + + + +## 12.0.4 (2023-07-18) + + + +## 12.0.3 (2023-06-28) + + + +## 12.0.3-beta.0 (2023-06-02) + + +#### Bug Fixes + +* **igx:** more fixes ([1373d18](https://github.com/IgniteUI/igniteui-cli/commit/1373d18e45d8fa9bb69bf5692b360bb4ecec531b)) +* **igx:** replace DataGridSelectionMode with GridSelectionMode ([fc61052](https://github.com/IgniteUI/igniteui-cli/commit/fc61052d68f5fffbaf96c0f7c71220c39c7d5ef2)) + + + +## 12.0.1 (2023-05-26) + + + +## 11.1.2 (2023-05-25) + + + +# 12.0.0 (2023-05-15) + + + +# 12.0.0-rc.0 (2023-05-15) + + +#### Features + +* **igx:** add base_with_home proj to igx-templates ([#1118](https://github.com/IgniteUI/igniteui-cli/issues/1118)) ([d84c431](https://github.com/IgniteUI/igniteui-cli/commit/d84c4310a03e35588626c57148091c6b224c7bc3)) +* **igx:** update to 16 ([#1120](https://github.com/IgniteUI/igniteui-cli/issues/1120)) ([e6efa40](https://github.com/IgniteUI/igniteui-cli/commit/e6efa40c2c748d2679b6be66252bc7732e51de29)) + + + +## 11.1.1 (2023-04-11) + + + +# 11.1.0 (2023-03-28) + + + +# 11.1.0-rc.0 (2023-03-24) + + +#### Bug Fixes + +* **igx-ts:** updating dependencies [#1099](https://github.com/IgniteUI/igniteui-cli/issues/1099) ([#1102](https://github.com/IgniteUI/igniteui-cli/issues/1102)) ([cd3b35a](https://github.com/IgniteUI/igniteui-cli/commit/cd3b35ac7961474ecd4ecbb8c4dffa33067c20f1)) + + + +## 11.0.2 (2023-02-17) + + + +# 11.0.0 (2022-11-23) + + + +# 10.1.0-beta.13 (2022-10-27) + + + +# 10.1.0-beta.12 (2022-10-27) + + + +# 10.1.0-beta.11 (2022-10-25) + + + +# 10.1.0-beta.10 (2022-10-25) + + + +# 10.1.0-beta.8 (2022-10-23) + + + +# 10.1.0-beta.7 (2022-10-19) + + + +# 10.1.0-beta.5 (2022-10-18) + + + +# 10.1.0-beta.4 (2022-10-18) + + + +# 10.1.0-beta.3 (2022-10-17) + + + +# 10.1.0-beta.2 (2022-10-14) + + + +# 10.1.0-beta.1 (2022-10-14) + + + +# 10.1.0-beta.0 (2022-10-07) + + + +## 10.0.5 (2022-09-19) + + + +## 10.0.4-beta.0 (2022-06-30) + + + +## 10.0.2 (2022-06-29) + + + +## 10.0.1 (2022-06-17) + + + +# 9.2.0 (2022-05-26) + + + +## 9.1.4 (2022-05-20) + + + +## 9.1.3 (2022-05-19) + + + +## 9.1.2 (2022-05-16) + + +#### Bug Fixes + +* **fintech grid:** fix slow grid [#1020](https://github.com/IgniteUI/igniteui-cli/issues/1020) ([4f888dc](https://github.com/IgniteUI/igniteui-cli/commit/4f888dc3c2b1fd6ad896b197634d3aa0c3ef57cd)) + + + +## 9.1.1 (2022-03-18) + + + +## 9.1.1-rc.0 (2022-03-17) + + +#### Bug Fixes + +* **ng:** gridAPI rename ([5b8b0a5](https://github.com/IgniteUI/igniteui-cli/commit/5b8b0a5e5e21ce5ae2228e0d025eea0195206292)) + + +#### Features + +* **ng:** update to 13.3.0 ([17553b0](https://github.com/IgniteUI/igniteui-cli/commit/17553b0da7586d14d91778417161f2a77864fd16)) + + + +# 9.1.0 (2022-03-02) + + + +# 9.1.0-rc.1 (2022-02-25) + + +#### Bug Fixes + +* **templates:** Adding override modifier. ([6334d17](https://github.com/IgniteUI/igniteui-cli/commit/6334d174642212d942c5f5669c1082ae56bb3cc8)) + + + +# 9.1.0-rc.0 (2022-02-24) + + + +# 9.1.0-beta.0 (2022-02-22) + + +#### Bug Fixes + +* **angular:** change more igx- ([f9ade5e](https://github.com/IgniteUI/igniteui-cli/commit/f9ade5e176444ce3c2a80f60baf43d239b8788fe)) +* **angular:** remove old code ([3b063db](https://github.com/IgniteUI/igniteui-cli/commit/3b063db9cf51509b289148f4928cdfda9837a6dd)) + + + +## 9.0.6 (2022-02-04) + + + +## 9.0.5 (2022-02-04) + + + +## 9.0.5-beta.2 (2022-02-03) + + + +## 9.0.5-beta.1 (2022-01-28) + + + +## 9.0.5-beta.0 (2021-12-20) + + + +## 9.0.4 (2021-12-15) + + + +## 9.0.3 (2021-12-13) + + +#### Bug Fixes + +* **schematics:** fix home import without placeholder ([#966](https://github.com/IgniteUI/igniteui-cli/issues/966)) ([9263bb2](https://github.com/IgniteUI/igniteui-cli/commit/9263bb22b6dd699845d3e6fad7ab78536f7a484c)) + + +#### Features + +* **typescript:** Add support for typescript 4.5.2 ([055ca5b](https://github.com/IgniteUI/igniteui-cli/commit/055ca5b7f8e54acdd8f3f1d6b6d7517916d852f3)) +* Update [@use](https://github.com/use) [@forward](https://github.com/forward) and hsla ([#961](https://github.com/IgniteUI/igniteui-cli/issues/961)) ([2ef8435](https://github.com/IgniteUI/igniteui-cli/commit/2ef8435816f8ff4f60c7e0cd4ed497a11fc815da)) + + + +## 9.0.1 (2021-11-25) + + + +# 9.0.0 (2021-11-22) + + + +# 9.0.0-rc.3 (2021-11-22) + + +#### Bug Fixes + +* changes from latest rc, packages updates ([f59905f](https://github.com/IgniteUI/igniteui-cli/commit/f59905fbd0d37d536b2a13dd002cc99ce8c48165)) + + + +# 9.0.0-rc.2 (2021-11-19) + + +#### Bug Fixes + +* add igx-scrollbar class to body, [#14033](https://github.com/IgniteUI/igniteui-cli/issues/14033) ([b02ac58](https://github.com/IgniteUI/igniteui-cli/commit/b02ac5822015c6b1b1fdd4684a52a2eecb3eadd9)) +* **angular:** new theme imports upgrade packages ([3ae74d9](https://github.com/IgniteUI/igniteui-cli/commit/3ae74d9bb9a338f939e9e5fb73c978003401c2a7)) + + + +# 9.0.0-rc.1 (2021-11-17) + + + +# 9.0.0-rc.0 (2021-11-17) + + +#### Features + +* **angular:** update to Angular 13 [#895](https://github.com/IgniteUI/igniteui-cli/issues/895) ([#896](https://github.com/IgniteUI/igniteui-cli/issues/896)) ([32f1721](https://github.com/IgniteUI/igniteui-cli/commit/32f17215290af3372b554f0e440e39b9b9b5040a)) + + + +# 8.3.0-rc.0 (2021-11-11) + + + +# 8.3.0-beta.6 (2021-11-09) + + + +# 8.3.0-beta.5 (2021-11-09) + + + +# 8.3.0-beta.4 (2021-11-09) + + + +# 8.3.0-beta.3 (2021-11-08) + + + +# 8.3.0-beta.2 (2021-11-08) + + + +# 8.3.0-beta.1 (2021-11-04) + + + +# 8.3.0-beta.0 (2021-11-04) + + + +## 8.2.1 (2021-10-08) + + + +## 8.2.1-rc.0 (2021-10-07) + + + +# 8.2.0 (2021-10-04) + + + +# 8.2.0-alpha.0 (2021-09-30) + + +#### Bug Fixes + +* remove icon color, becasue it is deprecated ([7b33804](https://github.com/IgniteUI/igniteui-cli/commit/7b338049a3182d7a8ea9e7106d10ef485dcc0623)) + + + +## 8.1.2 (2021-09-28) + + + +## 8.1.1 (2021-09-02) + + + +# 8.1.0-rc.0 (2021-07-30) + + +#### Bug Fixes + +* **igx-ts:** remove deprecated properties from scenario templates ([f84dc3c](https://github.com/IgniteUI/igniteui-cli/commit/f84dc3cd9626d5f287caed74cd32fda6849906e2)) + + + +# 8.1.0-beta.1 (2021-07-30) + + +#### Bug Fixes + +* **awesome-grid:** fix deprecated properties warnings ([f7a5b0c](https://github.com/IgniteUI/igniteui-cli/commit/f7a5b0c589c4b0aa8ded7c036859956d84c1ed23)) +* **fintech-grid:** fix console warnings and errors ([eaaf733](https://github.com/IgniteUI/igniteui-cli/commit/eaaf73311b45b9fc326353c8c6e6a1efe3f6f225)) +* **igx-ts:** Update angular.json ([c038c70](https://github.com/IgniteUI/igniteui-cli/commit/c038c708c5d2476e819071fd6c9defe29915b904)) +* **igx-ts:** use explicit index in drop-down components for logic view ([cb96f7d](https://github.com/IgniteUI/igniteui-cli/commit/cb96f7dcc2a5a4af2c585b22b50daa372f3684e9)) + + +#### Features + +* **igx-ts:** update custom grid templates w/ 12.1 paginator ([2b5058b](https://github.com/IgniteUI/igniteui-cli/commit/2b5058bd8c2f1946fd1f52b848a5b6ca9aebfcee)) + + + +# 8.1.0-beta.0 (2021-07-28) + + +#### Features + +* **igx-templates:** add igx-accordion template ([#851](https://github.com/IgniteUI/igniteui-cli/issues/851)) ([03e74cd](https://github.com/IgniteUI/igniteui-cli/commit/03e74cd194184b629ea09ec3cfa5218943d0feef)) +* update angular to v12.1 [#856](https://github.com/IgniteUI/igniteui-cli/issues/856) ([#857](https://github.com/IgniteUI/igniteui-cli/issues/857)) ([971822e](https://github.com/IgniteUI/igniteui-cli/commit/971822e343158bd107ef5b07bf60773509bd928c)) + + + +## 8.0.3 (2021-07-14) + + +#### Bug Fixes + +* **igx-ts:** fix strict errors in base and side-nav projects ([963d23d](https://github.com/IgniteUI/igniteui-cli/commit/963d23dc9771d8d184bff89fe2e2782e3bd97219)) +* **igx-ts:** fix strict errors in side-nav-auth project ([695f430](https://github.com/IgniteUI/igniteui-cli/commit/695f430c693b4a4cb817784d4b20dc0c268ec80c)) + + + +## 8.0.2 (2021-07-07) + + + +## 8.0.2-beta.1 (2021-07-06) + + +#### Bug Fixes + +* **angular-templates:** fix issue with strict templates in igx-ts ([38aaa75](https://github.com/IgniteUI/igniteui-cli/commit/38aaa756908493244414a51cc31688c27246b2f6)), closes [#850](https://github.com/IgniteUI/igniteui-cli/issues/850) + + + +## 8.0.2-beta.0 (2021-07-02) + + + +## 8.0.1 (2021-07-01) + + + +# 8.0.0 (2021-05-14) + + +#### Bug Fixes + +* **fonts:** Fix icon font names and families ([35a702e](https://github.com/IgniteUI/igniteui-cli/commit/35a702ee21d4a780b9318de071246969af54fca7)) +* **template:** Fix and upadte awesome template ([f2b51aa](https://github.com/IgniteUI/igniteui-cli/commit/f2b51aa2685220b282ca8a25bb2580f44b960bcb)) +* **warnings:** Update icons for grids samples ([0efbbae](https://github.com/IgniteUI/igniteui-cli/commit/0efbbaecdcb3b6095c6ebc483729214f5e4753aa)) + + + +# 8.0.0-rc.0 (2021-05-13) + + + +# 8.0.0-alpha.1 (2021-05-13) + + +#### Bug Fixes + +* **igx-templates:** provide service in tree sample, add some style ([b76452a](https://github.com/IgniteUI/igniteui-cli/commit/b76452a22d047a07d95c19fd3c720466065f178e)) +* remove strict checks and update open() method ([f2877e3](https://github.com/IgniteUI/igniteui-cli/commit/f2877e342746f85962d3f10125c6b784e53eb5d2)) + + +#### Features + +* **igx-templates:** add igx-tree template ([41bc6c3](https://github.com/IgniteUI/igniteui-cli/commit/41bc6c37b19c9136335347a468cdd5c8685a1f61)) + + + +## 7.1.1 (2021-03-15) + + + +## 7.1.1-beta.0 (2021-03-12) + + + +# 7.1.0 (2021-02-22) + + + +# 7.1.0-beta.0 (2021-02-18) + + +#### Bug Fixes + +* **toolbar:** Update hgrid & treegrid custom template toolbar ([c27af22](https://github.com/IgniteUI/igniteui-cli/commit/c27af22c413da93305a5c90c8a60a6dbac1a01e1)) + + + +## 7.0.1 (2020-11-16) + + +#### Bug Fixes + +* **igx-ts:** add local storage to spec ([3056a97](https://github.com/IgniteUI/igniteui-cli/commit/3056a97d99c492c04f2bbf19a7bd09c418294dbf)) +* **igx,custom-grid:** assign allowFiltering when selected as option ([7534c5f](https://github.com/IgniteUI/igniteui-cli/commit/7534c5f51736587b87217042b98c1be753cd76a8)) +* ssr breaks because of localStorage ref ([dc9410f](https://github.com/IgniteUI/igniteui-cli/commit/dc9410ff7c333bdece6ba25212f6c763afe64601)) + + + +# 7.0.0 (2020-11-13) + + +#### Bug Fixes + +* **igx-ts:** update build-angular ([082869c](https://github.com/IgniteUI/igniteui-cli/commit/082869cf27b52cb26695b6f90f4980ea85e67574)) + + + +# 7.0.0-rc.2 (2020-11-12) + + +#### Bug Fixes + +* **igx-ts:** crm grid with new toolbar ([a387742](https://github.com/IgniteUI/igniteui-cli/commit/a387742493b73f2c2f5e2cbacaf1bbe5a4d9345f)) +* **igx-ts:** fix toolbar according to latest changes ([93323c8](https://github.com/IgniteUI/igniteui-cli/commit/93323c81a3e388ae46e1dabcca13261312f92ade)) +* **igx-ts:** fix toolbar for grid fintech ([edc2057](https://github.com/IgniteUI/igniteui-cli/commit/edc20571657d5177c7a82ccae32d86f430970185)) +* **igx-ts:** tree-grid toolbar update ([2c985d7](https://github.com/IgniteUI/igniteui-cli/commit/2c985d78902d90439cbef733e6252f8c1eae37e3)) +* **igx-ts:** update HGrid Batch demo ([890a02d](https://github.com/IgniteUI/igniteui-cli/commit/890a02d54be89358aff76f9b07b3d8630df4f79c)) + + + +## 6.2.1 (2020-11-11) + + +#### Bug Fixes + +* **igx, side-auth:** add SSR-friendly local storage service ([8db27be](https://github.com/IgniteUI/igniteui-cli/commit/8db27be4739d396bbd34c389d9227aabdd01b970)) +* **igx,side-auth:** add proper wrapper class so layout is 100% ([508df9d](https://github.com/IgniteUI/igniteui-cli/commit/508df9d2255ec1a908ecd4054a841360c1827933)) + + + +# 7.0.0-rc.1 (2020-11-10) + + +#### Bug Fixes + +* **igx-ts:** fix package.json for auth project ([00b9cd9](https://github.com/IgniteUI/igniteui-cli/commit/00b9cd942ec154c76da1ac0e810e366cf373b64f)) +* **igx-ts:** remove base.json for auth project ([019535b](https://github.com/IgniteUI/igniteui-cli/commit/019535be27bac30b065b27a6facde53578a08456)) +* **igx-ts:** revert deleted packages ([acede53](https://github.com/IgniteUI/igniteui-cli/commit/acede5371f24b10be2314de0118ff1976cfb8c35)) + + + +# 7.0.0-rc.0 (2020-11-10) + + +#### Bug Fixes + +* **dock-manager:** remove unnecessary quotes ([cd9c16c](https://github.com/IgniteUI/igniteui-cli/commit/cd9c16cea9f4d120e7b6e0dd9112e907c5f2228b)) + + + +# 7.0.0-alpha.0 (2020-11-10) + + +#### Bug Fixes + +* **dock-manager:** Use correct module name in app.module import [#792](https://github.com/IgniteUI/igniteui-cli/issues/792) ([53691b5](https://github.com/IgniteUI/igniteui-cli/commit/53691b54af896c410a0b2b0c3e91751f76341dbd)) + + + +# 6.2.0 (2020-10-20) + + + +# 6.2.0 (2020-10-20) + + + +# 6.2.0-rc.0 (2020-10-16) + + +#### Bug Fixes + +* **templates, crm grid, grid batch editing:** Fixing issues in the two templates. ([2dc2859](https://github.com/IgniteUI/igniteui-cli/commit/2dc2859dd10f41f9b0b8a05072fa6d12de5c9c00)) +* **templates, crm-grid, grid batchediting:** Addressing the comments. ([09955ea](https://github.com/IgniteUI/igniteui-cli/commit/09955ea47cbe58546a6d117611a705c86c058b6e)) + + + +# 6.2.0-beta.0 (2020-10-14) + + +#### Bug Fixes + +* **deployment:** Fix environment check 793 ([3f3946a](https://github.com/IgniteUI/igniteui-cli/commit/3f3946a474840d38a763149230d743b3e845bf47)) +* update map to 10.1.3 ([3926b77](https://github.com/IgniteUI/igniteui-cli/commit/3926b77d575e2051b210232be2b8b1f76b681fab)) + + + +# 6.1.0 (2020-08-12) + + + +# 6.1.0-beta.0 (2020-08-07) + + + +# 6.1.0-alpha.0 (2020-07-09) + + + +# 6.0.0 (2020-06-25) + + + +## 5.2.1 (2020-06-25) + + + +# 6.0.0-rc.0 (2020-06-25) + + +#### Bug Fixes + +* **igx,dock-manager:** resolve package name from project ([ac66d8e](https://github.com/IgniteUI/igniteui-cli/commit/ac66d8e0fadf643530a5f3aa53ee3fe851cc1a33)) +* use group.json for step by step groups [#707](https://github.com/IgniteUI/igniteui-cli/issues/707) ([adf562c](https://github.com/IgniteUI/igniteui-cli/commit/adf562c639725fb6a8008ef682f5fbdd66e65b55)) + + +#### Features + +* Adding a Map template for Angular ([7cbddeb](https://github.com/IgniteUI/igniteui-cli/commit/7cbddeb907db8277f6db43db47f19f06591a7c7f)) +* **packages:** Bump packages to Angular 10 [#767](https://github.com/IgniteUI/igniteui-cli/issues/767) ([f7e104e](https://github.com/IgniteUI/igniteui-cli/commit/f7e104e8ccee1692ff886259a7b7cf653de46573)) +* **packages:** remove deprecated option [#767](https://github.com/IgniteUI/igniteui-cli/issues/767) ([602111e](https://github.com/IgniteUI/igniteui-cli/commit/602111eefdcf390e832275c428e86f9ef5aa547f)) +* **packages:** Update igx-ts projects [#767](https://github.com/IgniteUI/igniteui-cli/issues/767) ([71df154](https://github.com/IgniteUI/igniteui-cli/commit/71df1546f4765699bf0600ef07062cad85b69d99)) + + + +# 5.2.0 (2020-06-11) + + +#### Features + +* **igx-ts:** add Dock Manager template for Angular ([#763](https://github.com/IgniteUI/igniteui-cli/issues/763)) ([63acfdf](https://github.com/IgniteUI/igniteui-cli/commit/63acfdf6b9c511c0c8be18374f470ee8a0ca375c)) +* **igx,side-nav:** move content padding so views can override ([36f9964](https://github.com/IgniteUI/igniteui-cli/commit/36f9964bbe2d21920f99f5815f346ec117a61724)) + + + +## 5.1.1 (2020-06-03) + + +#### Bug Fixes + +* **igx,upgrade:** ignore projects without sourceRoot ([6d64d30](https://github.com/IgniteUI/igniteui-cli/commit/6d64d30efa3aedcfd7d32eb9e7e1c29c90c7ea6e)) +* **upgrade:** Logging a message that licensed package is already installed ([63df30d](https://github.com/IgniteUI/igniteui-cli/commit/63df30d67c7d46fed0b6e4411e5b097dcd7f11f2)) + + + +# 5.1.0 (2020-06-01) + + + +# 5.1.0-beta.4 (2020-06-01) + + + +# 5.1.0-beta.3 (2020-05-29) + + + +# 5.1.0-beta.2 (2020-05-28) + + + +# 5.1.0-beta.1 (2020-05-28) + + + +# 5.1.0-beta.0 (2020-05-27) + + +#### Bug Fixes + +* **igx,templates:** correct empty project template id ([2d0b385](https://github.com/IgniteUI/igniteui-cli/commit/2d0b385a4ce3f8483e4f5f048bc94111ecb7db31)) +* **templates:** fix upgrade to get correct config ([a3021ef](https://github.com/IgniteUI/igniteui-cli/commit/a3021efc9baac77348a6e91a53f7b8b214fdb719)) +* **templates:** upgrade command properly replaces strings in ALL .ts files ([2d2c9b3](https://github.com/IgniteUI/igniteui-cli/commit/2d2c9b3dc02da3f7633642d9b3b4a02d7f0bb119)) +* **upgrade:** sort packages.json dependencies when adding licensed package ([62bb652](https://github.com/IgniteUI/igniteui-cli/commit/62bb652857e8e8cd6e368ef71ac2bf4ef8ea6749)) + + +#### Features + +* **schematics:** update-package logic added ([197b94e](https://github.com/IgniteUI/igniteui-cli/commit/197b94e367d5e9a359c989beef01c6f35d7b54b5)) +* **upgrade:** handle multiple licensed packages, [#741](https://github.com/IgniteUI/igniteui-cli/issues/741) ([ef02f5b](https://github.com/IgniteUI/igniteui-cli/commit/ef02f5b089d3616bbb24ba4ba8e2f0a4c7045374)) + + + +# 5.1.0-alpha.0 (2020-05-20) + + +#### Features + +* **igx,multi-pacakge:** templates resolve lib package from project ([7bb4670](https://github.com/IgniteUI/igniteui-cli/commit/7bb4670e1f7832321c3373e07c967d3d13d83777)) + + + +## 5.0.3 (2020-05-18) + + +#### Bug Fixes + +* **igx:** proj template error handler log instead throw, register only in prod ([270addd](https://github.com/IgniteUI/igniteui-cli/commit/270adddfdee8bb84892e768971e976e70550b2c2)) + + + +## 5.0.2 (2020-05-05) + + + +# 5.0.0 (2020-02-11) + + + +# 5.0.0-rc.4 (2020-02-11) + + +#### Bug Fixes + +* **carousel:** Add noop animations module ([c696124](https://github.com/IgniteUI/igniteui-cli/commit/c6961249ccbfe186e1f369b23420584b908b5787)) + + + +# 5.0.0-rc.3 (2020-02-07) + + + +# 5.0.0-rc.2 (2020-02-07) + + +#### Bug Fixes + +* **igx-ts:** change tsconfig module for spec files to avoid errors, [#660](https://github.com/IgniteUI/igniteui-cli/issues/660) ([3d6b987](https://github.com/IgniteUI/igniteui-cli/commit/3d6b987e4e2c72a9b73453af112465b7234aa9c3)) +* **igx-ts:** update auth providers tests, [#660](https://github.com/IgniteUI/igniteui-cli/issues/660) ([4c15c8b](https://github.com/IgniteUI/igniteui-cli/commit/4c15c8bc00ffd5543e676ce07ea4718ea234b62b)) +* **templates, igx:** add chart packages [#679](https://github.com/IgniteUI/igniteui-cli/issues/679) ([75f4dcd](https://github.com/IgniteUI/igniteui-cli/commit/75f4dcd3bf585d38b3f86ef85cfecc6b8ddcfabc)) +* **templates, igx:** add chart packages [#684](https://github.com/IgniteUI/igniteui-cli/issues/684) ([dd7bfb7](https://github.com/IgniteUI/igniteui-cli/commit/dd7bfb75923ebe4d644239774899c26cf6bf7564)) + + +#### Features + +* **igx-ts:** Update projects [#647](https://github.com/IgniteUI/igniteui-cli/issues/647) ([e0a738a](https://github.com/IgniteUI/igniteui-cli/commit/e0a738aea9b0345386fb2611bc28168ca99390f0)) + + + +# 5.0.0-rc.0 (2020-01-31) + + +#### Bug Fixes + +* **ig-add:** only take into account 'extraConfig' in generateConfig [#618](https://github.com/IgniteUI/igniteui-cli/issues/618) ([#621](https://github.com/IgniteUI/igniteui-cli/issues/621)) ([d8d7db8](https://github.com/IgniteUI/igniteui-cli/commit/d8d7db823f1c6c717063ce678695be4d8db084d6)) +* **igx-ts:** update scenario templates [#628](https://github.com/IgniteUI/igniteui-cli/issues/628) ([#643](https://github.com/IgniteUI/igniteui-cli/issues/643)) ([ecda4d7](https://github.com/IgniteUI/igniteui-cli/commit/ecda4d779d3a196c16c13f87e2787ff7fdcbc167)) +* **templates:** update angular charts packages to v8.2.12 ([3ed3013](https://github.com/IgniteUI/igniteui-cli/commit/3ed301379a765d4ad0614e1d51cd5dec2227494d)) + + + +# 5.0.0-beta.3 (2019-12-13) + + + +# 5.0.0-beta.2 (2019-12-06) + + +#### Bug Fixes + +* **schematics:** set virtual FS in proper stage ([2102464](https://github.com/IgniteUI/igniteui-cli/commit/2102464698a493f97f4739bd14068b218b985d95)) + + + +# 5.0.0-beta.1 (2019-11-28) + + +#### Bug Fixes + +* **igx-templates:** fix side-auth template tsconfig.app.json, [#597](https://github.com/IgniteUI/igniteui-cli/issues/597) ([1ffe4ba](https://github.com/IgniteUI/igniteui-cli/commit/1ffe4ba77b30c4eaab2a176ec30470cf32cf7980)) +* **igx-ts:** update autocomplete templates to import FormsModule [#581](https://github.com/IgniteUI/igniteui-cli/issues/581) ([#584](https://github.com/IgniteUI/igniteui-cli/issues/584)) ([b91a1e8](https://github.com/IgniteUI/igniteui-cli/commit/b91a1e8efe1c3e78482abff524b69c48e64f9094)) +* **templating, igx-ts:** add dot path variable for prefixed files that glob ignores ([486a0da](https://github.com/IgniteUI/igniteui-cli/commit/486a0da0ee6190f16544ee46ae360b822c057b53)) + + + +# 5.0.0-alpha.1 (2019-10-02) + + +#### Features + +* **ng-schematics:** add component generate schematic ([a0e86c2](https://github.com/IgniteUI/igniteui-cli/commit/a0e86c29d72c52727a13aee4ded2acd0ef6ddc44)) + +## igniteui/angular-schematics@21.1.14100-alpha.4 (2026-03-27) + + + +# 14.10.0-alpha.3 (2026-03-25) + + + +# 14.10.0-alpha.1 (2026-03-25) + + +#### Bug Fixes + +* **eslint:** correct config ignores and resolve lint errors ([68d01ac](https://github.com/IgniteUI/igniteui-cli/commit/68d01ac6102e4e3d660dff9d229e826ea64943db)) +* **igx-ts-legacy:** update igx ts legacy templates ([#1517](https://github.com/IgniteUI/igniteui-cli/issues/1517)) ([c26c8ff](https://github.com/IgniteUI/igniteui-cli/commit/c26c8ff298092c21b2aa6ca77a75cd2a5fdedc79)) + + + +## 14.9.2 (2026-03-11) + + +#### Bug Fixes + +* **schematics:** fs writeFile create check ([#1526](https://github.com/IgniteUI/igniteui-cli/issues/1526)) ([f8e4b59](https://github.com/IgniteUI/igniteui-cli/commit/f8e4b59bd951ff1b702f3d24cf61ebc33115dc89)) + + + +## 14.9.1 (2026-02-25) + + + +# 14.9.0 (2026-02-25) + + +#### Features + +* **ng:** update igniteui-angular to 21.1.0 ([#1495](https://github.com/IgniteUI/igniteui-cli/issues/1495)) ([399f83e](https://github.com/IgniteUI/igniteui-cli/commit/399f83e4278dafdf9a3832fa013840f05ba586e6)) + + + +## 14.8.5-beta.3 (2026-02-11) + + + +## 14.8.5-beta.0 (2026-02-10) + + + +## 14.8.4 (2026-02-05) + + + +## 14.8.3 (2026-01-19) + + + +## 14.8.2 (2026-01-13) + + + +## 14.8.2-beta.4 (2026-01-12) + + + +## 14.8.2-beta.3 (2026-01-12) + + + +## 14.8.2-beta.2 (2026-01-12) + + + +## 14.8.2-beta.0 (2026-01-12) + + + +# 14.8.0 (2025-12-03) + + + +# 14.8.0-beta.2 (2025-12-01) + + + +# 14.8.0-beta.1 (2025-12-01) + + + +## 14.7.1 (2025-11-20) + + + +# 14.7.0 (2025-11-17) + + +#### Features + +* **ng:** use ng lint schematic ([#1439](https://github.com/IgniteUI/igniteui-cli/issues/1439)) ([fa917cd](https://github.com/IgniteUI/igniteui-cli/commit/fa917cd7c974db05061f9442d8c5cdcc74853928)) + + + +## 14.6.4 (2025-10-14) + + + +## 14.6.3 (2025-10-09) + + + +## 14.6.2 (2025-10-07) + + + +## 14.6.1 (2025-10-06) + + + +# 14.6.0 (2025-10-02) + + +#### Features + +* **ng:** update ig, ng and other libs ([#1427](https://github.com/IgniteUI/igniteui-cli/issues/1427)) ([93fbbcc](https://github.com/IgniteUI/igniteui-cli/commit/93fbbcce2668084dcc958736f7167e36e9cbed47)) + + + +## 14.5.8 (2025-09-25) + + + +## 14.5.7 (2025-09-23) + + + +## 14.5.6 (2025-09-18) + + + +## 14.5.4 (2025-07-01) + + + +## 14.5.3 (2025-06-28) + + + +## 14.5.1 (2025-06-24) + + + +# 14.5.0 (2025-06-05) + + + +## 14.4.4 (2025-05-21) + + +#### Features + +* add azure pipelines yaml files for angular, react and wc templates ([#1396](https://github.com/IgniteUI/igniteui-cli/issues/1396)) ([6a3e39d](https://github.com/IgniteUI/igniteui-cli/commit/6a3e39d41f50abe51fa7fd819961412304a31343)) + + + +## 14.4.3 (2025-04-25) + + + +## 14.4.2 (2025-04-24) + + + +## 14.4.1 (2025-04-23) + + + +# 14.4.0 (2025-04-17) + + + +## 14.3.18 (2025-04-11) + + +#### Bug Fixes + +* add missing static css files for WC ([#1385](https://github.com/IgniteUI/igniteui-cli/issues/1385)) ([95018f9](https://github.com/IgniteUI/igniteui-cli/commit/95018f93704f62af70b9c4a2e07b46554e6331a4)) + + + +## 14.3.17 (2025-04-09) + + + +## 14.3.16 (2025-03-31) + + + +## 14.3.14 (2025-02-24) + + +#### Bug Fixes + +* update eslint and fix warnings ([#1378](https://github.com/IgniteUI/igniteui-cli/issues/1378)) ([aa84345](https://github.com/IgniteUI/igniteui-cli/commit/aa84345ff21fc0fccde94063099e4c713862cde8)) + + + +## 14.3.12-beta.0 (2025-01-27) + + + +## 14.3.11 (2025-01-24) + + +#### Bug Fixes + +* static data paths when deploy to github pages ([#1371](https://github.com/IgniteUI/igniteui-cli/issues/1371)) ([4b40231](https://github.com/IgniteUI/igniteui-cli/commit/4b402313f4d2a2cfd80115d274514d9e5507334c)) + + + +## 14.3.10 (2025-01-23) + + + +## 14.3.9 (2025-01-23) + + + +## 14.3.8 (2025-01-23) + + + +## 14.3.7 (2025-01-22) + + + +## 14.3.6 (2024-12-12) + + +#### Bug Fixes + +* **migrations:** enable encapsulation for migrations ([#1361](https://github.com/IgniteUI/igniteui-cli/issues/1361)) ([9561a16](https://github.com/IgniteUI/igniteui-cli/commit/9561a1604a746b8a4b771627de2af4d14927e7c2)) + + + +## 14.3.5 (2024-12-06) + + +#### Bug Fixes + +* **web-components:** fix the step for updating the router navigation in github pages workflow ([#1358](https://github.com/IgniteUI/igniteui-cli/issues/1358)) ([3e0f42c](https://github.com/IgniteUI/igniteui-cli/commit/3e0f42c4fc7a75f6819f8ba85f760ac6a6d854f1)) + + + +## 14.3.4 (2024-12-04) + + + +## 14.3.3 (2024-12-02) + + + +## 14.3.2 (2024-11-28) + + +#### Features + +* Add pages deployment variable logic and fixes in github pages yaml files ([#1337](https://github.com/IgniteUI/igniteui-cli/issues/1337)) ([c75d9c7](https://github.com/IgniteUI/igniteui-cli/commit/c75d9c7a9d7a9244e7a9a814770809f06280529a)) + + + +## 14.2.3 (2024-11-15) + + + +## 14.2.2 (2024-11-08) + + + +## 14.2.1 (2024-10-28) + + + +# 14.2.0 (2024-10-25) + + + +# 14.2.0-beta.4 (2024-10-23) + + + +# 14.1.0 (2024-10-11) + + + +## 14.0.2 (2024-09-20) + + + +## 14.0.1 (2024-09-05) + + + +# 14.0.0 (2024-08-23) + + + +# 14.0.0-beta.2 (2024-07-24) + + +#### Features + +* **igx-templates:** add AngularTypeScriptFileUpdate ([e7f6ed3](https://github.com/IgniteUI/igniteui-cli/commit/e7f6ed3d339bb444dcdbaec4cabe5dcbff27b5ac)) + + + +## 13.3.3 (2024-07-16) + + + +## 13.3.2 (2024-07-04) + + + +## 13.3.1 (2024-06-28) + + + +# 13.3.0-rc.0 (2024-05-31) + + + +## 13.2.1 (2024-05-09) + + + +# 13.2.0 (2024-04-29) + + + +# 13.2.0-rc.0 (2024-04-29) + + + +## 13.1.16 (2024-04-28) + + + +## 13.1.15 (2024-04-12) + + +#### Bug Fixes + +* include js files in ng-schematics/scripts w/ newer npm version ([727f2f6](https://github.com/IgniteUI/igniteui-cli/commit/727f2f670d303ddb585b78d68a2c42f907a4786f)) + + + +## 13.1.13 (2024-04-11) + + + +## 13.1.12 (2024-03-21) + + +#### Features + +* **cli:** upgrade packages for React and WC ([#1198](https://github.com/IgniteUI/igniteui-cli/issues/1198)) ([16c9b8d](https://github.com/IgniteUI/igniteui-cli/commit/16c9b8dda219ebacd473a2fad5e0c0ea70d5f320)) + + + +## 13.1.11 (2024-03-12) + + + +## 13.1.10 (2024-03-11) + + + +## 13.1.9 (2024-03-05) + + + +## 13.1.8 (2024-02-29) + + + +## 13.1.7 (2024-02-28) + + + +## 13.1.6 (2024-02-26) + + +#### Features + +* **ng-add:** add setup config provideAnimations ([2f47676](https://github.com/IgniteUI/igniteui-cli/commit/2f476762ac772039228fe10565d49a6ced76b72d)) + + + +## 13.1.5 (2024-01-31) + + + +## 13.1.3 (2024-01-17) + + + +## 13.1.1 (2023-12-14) + + +#### Features + +* **igr-ts:** add igr-ts proj type ([#1146](https://github.com/IgniteUI/igniteui-cli/issues/1146)) ([4609525](https://github.com/IgniteUI/igniteui-cli/commit/460952505758fcf1ab9b559ed6809015f3c5d3a5)), closes [#1147](https://github.com/IgniteUI/igniteui-cli/issues/1147) [#1153](https://github.com/IgniteUI/igniteui-cli/issues/1153) + + + +## 13.0.1 (2023-11-15) + + + +# 13.0.0 (2023-11-09) + + + +# 13.0.0-rc.0 (2023-11-09) + + + +## 12.0.6-beta.2 (2023-10-02) + + + +## 12.0.5 (2023-07-18) + + + +## 12.0.4 (2023-07-18) + + + +## 12.0.3 (2023-06-28) + + + +## 12.0.3-beta.0 (2023-06-02) + + + +## 12.0.1 (2023-05-26) + + + +# 12.0.0 (2023-05-15) + + + +# 12.0.0-rc.0 (2023-05-15) + + +#### Features + +* **igx:** add base_with_home proj to igx-templates ([#1118](https://github.com/IgniteUI/igniteui-cli/issues/1118)) ([d84c431](https://github.com/IgniteUI/igniteui-cli/commit/d84c4310a03e35588626c57148091c6b224c7bc3)) +* **igx:** update to 16 ([#1120](https://github.com/IgniteUI/igniteui-cli/issues/1120)) ([e6efa40](https://github.com/IgniteUI/igniteui-cli/commit/e6efa40c2c748d2679b6be66252bc7732e51de29)) + + + +## 11.1.1 (2023-04-11) + + + +# 11.1.0 (2023-03-28) + + + +# 11.1.0-rc.0 (2023-03-24) + + + +## 11.0.2 (2023-02-17) + + + +# 11.0.0 (2022-11-23) + + + +# 10.1.0-beta.13 (2022-10-27) + + + +# 10.1.0-beta.12 (2022-10-27) + + + +# 10.1.0-beta.11 (2022-10-25) + + + +# 10.1.0-beta.10 (2022-10-25) + + + +# 10.1.0-beta.8 (2022-10-23) + + + +# 10.1.0-beta.7 (2022-10-19) + + + +# 10.1.0-beta.5 (2022-10-18) + + + +# 10.1.0-beta.4 (2022-10-18) + + + +# 10.1.0-beta.3 (2022-10-17) + + + +# 10.1.0-beta.2 (2022-10-14) + + + +# 10.1.0-beta.1 (2022-10-14) + + + +# 10.1.0-beta.0 (2022-10-07) + + + +## 10.0.5 (2022-09-19) + + + +## 10.0.4-beta.1 (2022-07-15) + + + +## 10.0.4-beta.0 (2022-06-30) + + + +## 10.0.2 (2022-06-29) + + + +## 10.0.1 (2022-06-17) + + + +# 9.2.0 (2022-05-26) + + + +## 9.1.4 (2022-05-20) + + + +## 9.1.3 (2022-05-19) + + + +## 9.1.2 (2022-05-16) + + + +## 9.1.1 (2022-03-18) + + + +## 9.1.1-rc.0 (2022-03-17) + + + +# 9.1.0 (2022-03-02) + + + +# 9.1.0-rc.1 (2022-02-25) + + + +# 9.1.0-beta.0 (2022-02-22) + + +#### Bug Fixes + +* **angular:** change more igx- ([f9ade5e](https://github.com/IgniteUI/igniteui-cli/commit/f9ade5e176444ce3c2a80f60baf43d239b8788fe)) + + + +## 9.0.6 (2022-02-04) + + + +## 9.0.5 (2022-02-04) + + + +## 9.0.5-beta.2 (2022-02-03) + + + +## 9.0.5-beta.1 (2022-01-28) + + + +## 9.0.5-beta.0 (2021-12-20) + + + +## 9.0.4 (2021-12-15) + + + +## 9.0.3 (2021-12-13) + + +#### Features + +* **typescript:** Add support for typescript 4.5.2 ([055ca5b](https://github.com/IgniteUI/igniteui-cli/commit/055ca5b7f8e54acdd8f3f1d6b6d7517916d852f3)) + + + +## 9.0.1 (2021-11-25) + + + +# 9.0.0 (2021-11-22) + + + +# 9.0.0-rc.3 (2021-11-22) + + + +# 9.0.0-rc.2 (2021-11-19) + + +#### Bug Fixes + +* add igx-scrollbar class to body, [#14033](https://github.com/IgniteUI/igniteui-cli/issues/14033) ([b02ac58](https://github.com/IgniteUI/igniteui-cli/commit/b02ac5822015c6b1b1fdd4684a52a2eecb3eadd9)) + + + +# 9.0.0-rc.1 (2021-11-17) + + + +# 9.0.0-rc.0 (2021-11-17) + + +#### Features + +* **angular:** update to Angular 13 [#895](https://github.com/IgniteUI/igniteui-cli/issues/895) ([#896](https://github.com/IgniteUI/igniteui-cli/issues/896)) ([32f1721](https://github.com/IgniteUI/igniteui-cli/commit/32f17215290af3372b554f0e440e39b9b9b5040a)) + + + +# 8.3.0-rc.0 (2021-11-11) + + + +# 8.3.0-beta.6 (2021-11-09) + + + +# 8.3.0-beta.5 (2021-11-09) + + + +# 8.3.0-beta.4 (2021-11-09) + + + +# 8.3.0-beta.3 (2021-11-08) + + + +# 8.3.0-beta.2 (2021-11-08) + + + +# 8.3.0-beta.1 (2021-11-04) + + + +# 8.3.0-beta.0 (2021-11-04) + + + +## 8.2.1 (2021-10-08) + + + +## 8.2.1-rc.0 (2021-10-07) + + + +# 8.2.0 (2021-10-04) + + + +# 8.2.0-alpha.0 (2021-09-30) + + + +## 8.1.2 (2021-09-28) + + + +## 8.1.1 (2021-09-02) + + + +## 8.0.4 (2021-08-02) + + +#### Bug Fixes + +* **schematics:** resolve schema id deprecation warning ([#870](https://github.com/IgniteUI/igniteui-cli/issues/870)) ([17d7016](https://github.com/IgniteUI/igniteui-cli/commit/17d70164de93a5162ba4a02b44b571de318a37c7)) + + + +# 8.1.0-rc.0 (2021-07-30) + + + +# 8.1.0-beta.1 (2021-07-30) + + + +# 8.1.0-beta.0 (2021-07-28) + + +#### Features + +* update angular to v12.1 [#856](https://github.com/IgniteUI/igniteui-cli/issues/856) ([#857](https://github.com/IgniteUI/igniteui-cli/issues/857)) ([971822e](https://github.com/IgniteUI/igniteui-cli/commit/971822e343158bd107ef5b07bf60773509bd928c)) + + + +## 8.0.3 (2021-07-14) + + + +## 8.0.2 (2021-07-07) + + + +## 8.0.2-beta.1 (2021-07-06) + + + +## 8.0.2-beta.0 (2021-07-02) + + + +## 8.0.1 (2021-07-01) + + + +# 8.0.0 (2021-05-14) + + + +# 8.0.0-rc.0 (2021-05-13) + + + +# 8.0.0-alpha.1 (2021-05-13) + + + +## 7.1.1 (2021-03-15) + + + +## 7.1.1-beta.0 (2021-03-12) + + + +# 7.1.0 (2021-02-22) + + + +# 7.1.0-beta.0 (2021-02-18) + + + +## 7.0.1 (2020-11-16) + + + +# 7.0.0 (2020-11-13) + + + +# 7.0.0-rc.2 (2020-11-12) + + + +# 7.0.0-rc.1 (2020-11-10) + + + +# 7.0.0-rc.0 (2020-11-10) + + + +# 7.0.0-alpha.0 (2020-11-10) + + + +# 6.2.0 (2020-10-20) + + + +# 6.2.0-rc.0 (2020-10-16) + + + +# 6.2.0-beta.0 (2020-10-14) + + + +# 6.1.0 (2020-08-12) + + + +# 6.1.0-beta.0 (2020-08-07) + + + +# 6.1.0-alpha.0 (2020-07-09) + + + +# 6.0.0 (2020-06-25) + + + +# 6.0.0-rc.0 (2020-06-25) + + +#### Bug Fixes + +* **igx,dock-manager:** resolve package name from project ([ac66d8e](https://github.com/IgniteUI/igniteui-cli/commit/ac66d8e0fadf643530a5f3aa53ee3fe851cc1a33)) + + + +# 5.2.0 (2020-06-11) + + + +## 5.1.1 (2020-06-03) + + + +# 5.1.0 (2020-06-01) + + + +# 5.1.0-beta.4 (2020-06-01) + + + +# 5.1.0-beta.3 (2020-05-29) + + + +# 5.1.0-beta.2 (2020-05-28) + + + +# 5.1.0-beta.1 (2020-05-28) + + +#### Bug Fixes + +* **schematics:** include upgrade-packages schema ([77aa13d](https://github.com/IgniteUI/igniteui-cli/commit/77aa13db7442b24d787029af4d6a860a0bd85d3b)) +* **schematics:** remove log for unsupported custom templates ([97e3bb3](https://github.com/IgniteUI/igniteui-cli/commit/97e3bb3813cf25603a97177a5ec5d87b2db94206)) +* **upgrade:** provide default fallback for incorrect package template ([9dd4d80](https://github.com/IgniteUI/igniteui-cli/commit/9dd4d80db6cf13d3fd7594790bcaaeec9a383b49)) + + + +# 5.1.0-beta.0 (2020-05-27) + + +#### Features + +* **schematics:** update-package logic added ([197b94e](https://github.com/IgniteUI/igniteui-cli/commit/197b94e367d5e9a359c989beef01c6f35d7b54b5)) +* **step-by-step:** add prompt to upgrade to private feed packages, [#724](https://github.com/IgniteUI/igniteui-cli/issues/724) ([63c0c85](https://github.com/IgniteUI/igniteui-cli/commit/63c0c85639c1e5e5415c82f96a6b5cb5bbad4b99)) + + + +# 5.1.0-alpha.0 (2020-05-20) + + + +## 5.0.3 (2020-05-18) + + + +## 5.0.2 (2020-05-05) + + + +# 5.0.0 (2020-02-11) + + + +# 5.0.0-rc.4 (2020-02-11) + + +#### Bug Fixes + +* **schematics:** ensure component prompt installs packages [#695](https://github.com/IgniteUI/igniteui-cli/issues/695) ([16e55d4](https://github.com/IgniteUI/igniteui-cli/commit/16e55d446c3d18fddb7ec7040a266ef498d83060)) + + + +# 5.0.0-rc.3 (2020-02-07) + + + +# 5.0.0-rc.2 (2020-02-07) + + + +# 5.0.0-rc.0 (2020-01-31) + + +#### Bug Fixes + +* new project accepts lower case theme name [#600](https://github.com/IgniteUI/igniteui-cli/issues/600) ([#619](https://github.com/IgniteUI/igniteui-cli/issues/619)) ([d6eedea](https://github.com/IgniteUI/igniteui-cli/commit/d6eedea8998b07aa6312dea6fdbab66acd88303a)) +* prompt for template and theme if no name provided [#622](https://github.com/IgniteUI/igniteui-cli/issues/622) ([#626](https://github.com/IgniteUI/igniteui-cli/issues/626)) ([44621e9](https://github.com/IgniteUI/igniteui-cli/commit/44621e9040f29da4819e6758e8316e6c7048e38d)) + + + +# 5.0.0-beta.3 (2019-12-13) + + +#### Bug Fixes + +* **cli, schematics:** check for fileSystem on post install [#612](https://github.com/IgniteUI/igniteui-cli/issues/612) ([#613](https://github.com/IgniteUI/igniteui-cli/issues/613)) ([0a6a878](https://github.com/IgniteUI/igniteui-cli/commit/0a6a87877bfe42fb9d665ac7b7e4be3d5e72511f)) +* **new, schematics:** no prompts when "name" is provided [#595](https://github.com/IgniteUI/igniteui-cli/issues/595) ([#609](https://github.com/IgniteUI/igniteui-cli/issues/609)) ([0ed45ba](https://github.com/IgniteUI/igniteui-cli/commit/0ed45ba0ed2147a0255d5df2a44e82b665c90c99)) + + + +# 5.0.0-beta.2 (2019-12-06) + + +#### Bug Fixes + +* **schematics:** set virtual FS in proper stage ([2102464](https://github.com/IgniteUI/igniteui-cli/commit/2102464698a493f97f4739bd14068b218b985d95)) +* **schematics:** skip start task if skipInstall === true ([#603](https://github.com/IgniteUI/igniteui-cli/issues/603)) ([fc38d65](https://github.com/IgniteUI/igniteui-cli/commit/fc38d651ecfa47f95921fa72f7be5ff68d8b586e)) + + +#### Features + +* **schematics:** adding a name for schematics projects [#587](https://github.com/IgniteUI/igniteui-cli/issues/587) ([#602](https://github.com/IgniteUI/igniteui-cli/issues/602)) ([19409d0](https://github.com/IgniteUI/igniteui-cli/commit/19409d0b7018c518c64c7ff161a6ec4a3438f834)) + + + +# 5.0.0-beta.1 (2019-11-28) + + +#### Bug Fixes + +* **schematics:** component schematics checks for available names [#576](https://github.com/IgniteUI/igniteui-cli/issues/576) ([#586](https://github.com/IgniteUI/igniteui-cli/issues/586)) ([bccd6c1](https://github.com/IgniteUI/igniteui-cli/commit/bccd6c131c4ab9bc197cfa29e1b792494270720f)) +* **schematics:** this package is a dep in new project instead of ignteui-cli ([c04a13c](https://github.com/IgniteUI/igniteui-cli/commit/c04a13c1c82c1d4a9a627503086f86d9040c6778)) +* **schematics:** use project config instead of hard-coded paths ([#592](https://github.com/IgniteUI/igniteui-cli/issues/592)) ([43240b6](https://github.com/IgniteUI/igniteui-cli/commit/43240b610d878186aa4b50959c37822e1f54eaf6)) + + +#### Features + +* **schematics:** add prompt session to component schematic, [#566](https://github.com/IgniteUI/igniteui-cli/issues/566) ([#571](https://github.com/IgniteUI/igniteui-cli/issues/571)) ([e25c1ce](https://github.com/IgniteUI/igniteui-cli/commit/e25c1ceab6fbff58a89e8712d3eda31da7c1af65)) +* **schematics:** adding ng-new schematic missing options [#596](https://github.com/IgniteUI/igniteui-cli/issues/596) ([#598](https://github.com/IgniteUI/igniteui-cli/issues/598)) ([8b51541](https://github.com/IgniteUI/igniteui-cli/commit/8b5154133bfe3fc6ef1c9958879cd835e36b001e)) + + + +# 5.0.0-alpha.1 (2019-10-02) + + +#### Bug Fixes + +* rename gitignore manually ([beb06a9](https://github.com/IgniteUI/igniteui-cli/commit/beb06a9de2511654797d75737a2e0bd5da968d8c)) + + +#### Features + +* **ng-schematics:** add component generate schematic ([a0e86c2](https://github.com/IgniteUI/igniteui-cli/commit/a0e86c29d72c52727a13aee4ded2acd0ef6ddc44)) +* **schematics:** add start schematic, enable npm and git init tasks ([2a329b1](https://github.com/IgniteUI/igniteui-cli/commit/2a329b18c5e2d6d0f852a72c842c3bab4022a9f2)) + +## igniteui-cli@14.10.0-alpha.4 (2026-03-27) + + + +# 14.10.0-alpha.3 (2026-03-25) + + +#### Features + +* Updated VS Code MCP configuration to align with new naming conventions. ([4fdb8e0](https://github.com/IgniteUI/igniteui-cli/commit/4fdb8e091b87c960c9cbbb35c126b6b7a32475fc)) + + + +# 14.10.0-alpha.1 (2026-03-25) + + +#### Bug Fixes + +* **eslint:** correct config ignores and resolve lint errors ([68d01ac](https://github.com/IgniteUI/igniteui-cli/commit/68d01ac6102e4e3d660dff9d229e826ea64943db)) +* **igx-ts-legacy:** update igx ts legacy templates ([#1517](https://github.com/IgniteUI/igniteui-cli/issues/1517)) ([c26c8ff](https://github.com/IgniteUI/igniteui-cli/commit/c26c8ff298092c21b2aa6ca77a75cd2a5fdedc79)) + + +#### Features + +* add copilot instructions for AI agents in multiple templates ([73921a7](https://github.com/IgniteUI/igniteui-cli/commit/73921a738efcc0a3e2a7df24bdf509f9f694da8a)) +* **claude:** add CLAUDE.md files for AI agent instructions across multiple templates ([5a96a33](https://github.com/IgniteUI/igniteui-cli/commit/5a96a33eac3f2fcbaf1444ac7778f7c8c2c89952)) +* make @igniteui/mcp-server a workspace package ([cf48369](https://github.com/IgniteUI/igniteui-cli/commit/cf483695e01afeac2ee6d7da193c2ee2d2af375a)) +* **templates:** add AGENTS.md and mcp.json files for React and Web Components and Angular project templates ([d867f44](https://github.com/IgniteUI/igniteui-cli/commit/d867f44e17d01be82ec6853c6b0c22910a652b73)) + + + +## 14.9.2 (2026-03-11) + + +#### Bug Fixes + +* **igx-ts:** update igniteui-angular versions and remove overrides ([#1508](https://github.com/IgniteUI/igniteui-cli/issues/1508)) ([6b4e1c8](https://github.com/IgniteUI/igniteui-cli/commit/6b4e1c87e8e7a94a5212a7037072088b7eec8a1a)) +* **upgrade-packages:** correctly glob files on windows ([#1511](https://github.com/IgniteUI/igniteui-cli/issues/1511)) ([64f2735](https://github.com/IgniteUI/igniteui-cli/commit/64f2735963f269fb4b60dd7479566baae33119c8)) + + +#### Reverts + +* partially revert changes swapping exec with spawn ([3a64b67](https://github.com/IgniteUI/igniteui-cli/commit/3a64b67bc43df42f72363e63192b90fea38b111f)) + + + +## 14.9.1 (2026-02-25) + + + +# 14.9.0 (2026-02-25) + + +#### Bug Fixes + +* **commands,list:** do not use `this` in handler ([#1494](https://github.com/IgniteUI/igniteui-cli/issues/1494)) ([b8f5b53](https://github.com/IgniteUI/igniteui-cli/commit/b8f5b53599cb20374acee53195395213060b51d3)) +* **react:** remove setupTests and update test with it's logic ([#1489](https://github.com/IgniteUI/igniteui-cli/issues/1489)) ([bd1f0ba](https://github.com/IgniteUI/igniteui-cli/commit/bd1f0ba0bccfd6768ccae44ab10568be5ecb1828)) + + +#### Features + +* **ng:** update igniteui-angular to 21.1.0 ([#1495](https://github.com/IgniteUI/igniteui-cli/issues/1495)) ([399f83e](https://github.com/IgniteUI/igniteui-cli/commit/399f83e4278dafdf9a3832fa013840f05ba586e6)) + + + +## 14.8.5-beta.3 (2026-02-11) + + + +## 14.8.5-beta.0 (2026-02-10) + + + +## 14.8.4 (2026-02-05) + + +#### Bug Fixes + +* **angular:** increase maximum error budget ([#1485](https://github.com/IgniteUI/igniteui-cli/issues/1485)) ([63a03bd](https://github.com/IgniteUI/igniteui-cli/commit/63a03bddb3459797bc5a0121f2d601823fd3cd35)) + + + +## 14.8.3 (2026-01-19) + + + +## 14.8.2 (2026-01-13) + + + +## 14.8.2-beta.4 (2026-01-12) + + + +## 14.8.2-beta.3 (2026-01-12) + + +#### Bug Fixes + +* add vitest/browser package ([e283ed2](https://github.com/IgniteUI/igniteui-cli/commit/e283ed29b99d794bd67f3bcab7a9dbfd391045ec)) +* add vitest/browser package ([5c29f50](https://github.com/IgniteUI/igniteui-cli/commit/5c29f5054febc0d656732886d08237528d6f6e40)) + + + +## 14.8.2-beta.2 (2026-01-12) + + +#### Bug Fixes + +* add playwright to the yaml files for wc ([6432111](https://github.com/IgniteUI/igniteui-cli/commit/643211110ad858f84b9ed23b3602f80218f23cbd)) +* resolve missed merge conflict ([ba42d4f](https://github.com/IgniteUI/igniteui-cli/commit/ba42d4f378a3e8334f51381ac1ff85799134ce3e)) + + + +## 14.8.2-beta.0 (2026-01-12) + + + +# 14.8.0 (2025-12-03) + + + +# 14.8.0-beta.2 (2025-12-01) + + + +# 14.8.0-beta.1 (2025-12-01) + + + +## 14.7.1 (2025-11-20) + + +#### Features + +* update tests to use Playwright ([517ea99](https://github.com/IgniteUI/igniteui-cli/commit/517ea9901372d7a42b516f5e9114a82880038e7e)) + + + +# 14.7.0 (2025-11-17) + + +#### Bug Fixes + +* command injection vulnerabilities in PackageManager and start command ([#1438](https://github.com/IgniteUI/igniteui-cli/issues/1438)) ([1f86df3](https://github.com/IgniteUI/igniteui-cli/commit/1f86df3d6e660b93db047415e9c53af1ef4f0a30)) + + +#### Features + +* **ng:** use ng lint schematic ([#1439](https://github.com/IgniteUI/igniteui-cli/issues/1439)) ([fa917cd](https://github.com/IgniteUI/igniteui-cli/commit/fa917cd7c974db05061f9442d8c5cdcc74853928)) + + + +## 14.6.4 (2025-10-14) + + + +## 14.6.3 (2025-10-09) + + + +## 14.6.2 (2025-10-07) + + +#### Features + +* **react:** add playwright and adjust tests; update packages; ([#1430](https://github.com/IgniteUI/igniteui-cli/issues/1430)) ([32b41dc](https://github.com/IgniteUI/igniteui-cli/commit/32b41dcf3f53de76fbafce39a36a1e8d51876b93)) + + + +## 14.6.1 (2025-10-06) + + + +# 14.6.0 (2025-10-02) + + +#### Features + +* **ng:** update ig, ng and other libs ([#1427](https://github.com/IgniteUI/igniteui-cli/issues/1427)) ([93fbbcc](https://github.com/IgniteUI/igniteui-cli/commit/93fbbcce2668084dcc958736f7167e36e9cbed47)) + + + +## 14.5.8 (2025-09-25) + + + +## 14.5.7 (2025-09-23) + + + +## 14.5.6 (2025-09-18) + + +#### Bug Fixes + +* Add missing igniteui-react-core dependency to React grid templates ([fb429bb](https://github.com/IgniteUI/igniteui-cli/commit/fb429bbd3634e0cf86a617672f857be4bb8b2f0d)) +* Remove --legacy-peer-deps flag to allow automatic peer dependency installation ([fe0ea3d](https://github.com/IgniteUI/igniteui-cli/commit/fe0ea3df94614b10dc494e241b070309e283c0b6)) +* set default route ([#1422](https://github.com/IgniteUI/igniteui-cli/issues/1422)) ([768d0d0](https://github.com/IgniteUI/igniteui-cli/commit/768d0d0a2873d2efc81c426ce35b5e42e92508a9)) +* update react templates ([93d132f](https://github.com/IgniteUI/igniteui-cli/commit/93d132fa229f0dba963cd5f21b89d5274e346910)) +* use only grid with defined columns ([faeb25a](https://github.com/IgniteUI/igniteui-cli/commit/faeb25a64effeba39e24dafe6e93e5a26a07c5bc)) + + +#### Features + +* Update Ignite UI product versions in template files ([964dda1](https://github.com/IgniteUI/igniteui-cli/commit/964dda13da00ca0c9d4bf1a42d6d98d2aa1d7b88)) + + + +## 14.5.4 (2025-07-01) + + + +## 14.5.3 (2025-06-28) + + +#### Bug Fixes + +* **react:** add missing argument and fix incorrect types ([#1403](https://github.com/IgniteUI/igniteui-cli/issues/1403)) ([fb006b3](https://github.com/IgniteUI/igniteui-cli/commit/fb006b38e6b4f3a2e61326b018787f67bd32b640)) + + + +## 14.5.1 (2025-06-24) + + + +# 14.5.0 (2025-06-05) + + + +## 14.4.4 (2025-05-21) + + +#### Features + +* add azure pipelines yaml files for angular, react and wc templates ([#1396](https://github.com/IgniteUI/igniteui-cli/issues/1396)) ([6a3e39d](https://github.com/IgniteUI/igniteui-cli/commit/6a3e39d41f50abe51fa7fd819961412304a31343)) + + + +## 14.4.3 (2025-04-25) + + + +## 14.4.2 (2025-04-24) + + + +## 14.4.1 (2025-04-23) + + + +# 14.4.0 (2025-04-17) + + + +## 14.3.18 (2025-04-11) + + +#### Bug Fixes + +* add missing static css files for WC ([#1385](https://github.com/IgniteUI/igniteui-cli/issues/1385)) ([95018f9](https://github.com/IgniteUI/igniteui-cli/commit/95018f93704f62af70b9c4a2e07b46554e6331a4)) + + + +## 14.3.17 (2025-04-09) + + + +## 14.3.16 (2025-03-31) + + + +## 14.3.14 (2025-02-24) + + +#### Bug Fixes + +* update eslint and fix warnings ([#1378](https://github.com/IgniteUI/igniteui-cli/issues/1378)) ([aa84345](https://github.com/IgniteUI/igniteui-cli/commit/aa84345ff21fc0fccde94063099e4c713862cde8)) + + + +## 14.3.12-beta.0 (2025-01-27) + + +#### Bug Fixes + +* **wc:** add seperate update for single or double quotes ([79ed105](https://github.com/IgniteUI/igniteui-cli/commit/79ed105cd67baf99f15e327d5f9840c3103d8018)) +* **wc:** fix iteration ([83583db](https://github.com/IgniteUI/igniteui-cli/commit/83583dbae937824e1b1f4d3f8d1ce8cc8e5589ec)) +* **wc:** fix paths in web components workflow ([6ff5999](https://github.com/IgniteUI/igniteui-cli/commit/6ff5999b782af24f09c29d4c60befb32a84fc5e0)) + + + +## 14.3.11 (2025-01-24) + + +#### Bug Fixes + +* static data paths when deploy to github pages ([#1371](https://github.com/IgniteUI/igniteui-cli/issues/1371)) ([4b40231](https://github.com/IgniteUI/igniteui-cli/commit/4b402313f4d2a2cfd80115d274514d9e5507334c)) + + + +## 14.3.10 (2025-01-23) + + +#### Features + +* increase maximum file size to cache in webComponents's vite configuration to 10 MB ([#1370](https://github.com/IgniteUI/igniteui-cli/issues/1370)) ([0a1385e](https://github.com/IgniteUI/igniteui-cli/commit/0a1385e5d1f98c8fcdf020d144f048b112b251d5)) + + + +## 14.3.9 (2025-01-23) + + +#### Features + +* enable silent mode in Vite configuration for improved build output ([#1369](https://github.com/IgniteUI/igniteui-cli/issues/1369)) ([7728300](https://github.com/IgniteUI/igniteui-cli/commit/7728300cbba7c5b15261ff2a82820432bd4b12b7)) + + + +## 14.3.8 (2025-01-23) + + +#### Features + +* replace rollup with vite configuration for wc ([#1364](https://github.com/IgniteUI/igniteui-cli/issues/1364)) ([024ee5f](https://github.com/IgniteUI/igniteui-cli/commit/024ee5f048427c5406013f1e4d051403ae255fca)) + + + +## 14.3.7 (2025-01-22) + + +#### Bug Fixes + +* **github-pages:** upgrade github pages deploy and artefact versions ([#1366](https://github.com/IgniteUI/igniteui-cli/issues/1366)) ([db6d0ea](https://github.com/IgniteUI/igniteui-cli/commit/db6d0eaef44c189cb80f10925d25595d97b7da4b)) + + + +## 14.3.6 (2024-12-12) + + +#### Bug Fixes + +* **migrations:** enable encapsulation for migrations ([#1361](https://github.com/IgniteUI/igniteui-cli/issues/1361)) ([9561a16](https://github.com/IgniteUI/igniteui-cli/commit/9561a1604a746b8a4b771627de2af4d14927e7c2)) + + + +## 14.3.5 (2024-12-06) + + +#### Bug Fixes + +* **web-components:** fix the step for updating the router navigation in github pages workflow ([#1358](https://github.com/IgniteUI/igniteui-cli/issues/1358)) ([3e0f42c](https://github.com/IgniteUI/igniteui-cli/commit/3e0f42c4fc7a75f6819f8ba85f760ac6a6d854f1)) + + + +## 14.3.4 (2024-12-04) + + +#### Bug Fixes + +* **web-components:** add step in github pages workflow to fix navigation ([#1355](https://github.com/IgniteUI/igniteui-cli/issues/1355)) ([0ca7277](https://github.com/IgniteUI/igniteui-cli/commit/0ca7277be8eaf1218af8a47f1ed7f51273499737)) + + + +## 14.3.3 (2024-12-02) + + + +## 14.3.2 (2024-11-28) + + + +# 14.3.0 (2024-11-25) + + +#### Features + +* Add pages deployment variable logic and fixes in github pages yaml files ([#1337](https://github.com/IgniteUI/igniteui-cli/issues/1337)) ([c75d9c7](https://github.com/IgniteUI/igniteui-cli/commit/c75d9c7a9d7a9244e7a9a814770809f06280529a)) +* allow reordering of array literal expressions ([#1323](https://github.com/IgniteUI/igniteui-cli/issues/1323)) ([412a2a5](https://github.com/IgniteUI/igniteui-cli/commit/412a2a585fa16fda53eb643c74af7fb4037c1412)) + + + +## 14.2.3 (2024-11-15) + + + +## 14.2.2 (2024-11-08) + + +#### Bug Fixes + +* **cli:** replace coveralls with coveralls-next ([#1336](https://github.com/IgniteUI/igniteui-cli/issues/1336)) ([4028e28](https://github.com/IgniteUI/igniteui-cli/commit/4028e28bc62da3f2232f79b60e26b9d13c93c8f9)) + + + +## 14.2.1 (2024-10-28) + + + +# 14.2.0 (2024-10-25) + + + +# 14.2.0-beta.4 (2024-10-23) + + +#### Bug Fixes + +* **cli:** add fixes in react and wc templates ([#1326](https://github.com/IgniteUI/igniteui-cli/issues/1326)) ([0430547](https://github.com/IgniteUI/igniteui-cli/commit/0430547a733c98b76aa94499516934547049b117)) + + + +# 14.1.0 (2024-10-11) + + + +## 14.0.2 (2024-09-20) + + + +## 14.0.1 (2024-09-05) + + + +# 14.0.0 (2024-08-23) + + +#### Bug Fixes + +* **eslint:** turn off no-explicit-any rule for wc ([#1288](https://github.com/IgniteUI/igniteui-cli/issues/1288)) ([1ee5b0f](https://github.com/IgniteUI/igniteui-cli/commit/1ee5b0f4ecc97a93f60b95e1615bb2a75fce9238)) + + + +# 14.0.0-beta.2 (2024-07-24) + + +#### Bug Fixes + +* **igr-ts:** add new lines in base app routes file ([#1284](https://github.com/IgniteUI/igniteui-cli/issues/1284)) ([92a14ef](https://github.com/IgniteUI/igniteui-cli/commit/92a14ef05f174bb5e5bc09978c986eb8f27e57e1)) + + +#### Features + +* **igx-templates:** add AngularTypeScriptFileUpdate ([e7f6ed3](https://github.com/IgniteUI/igniteui-cli/commit/e7f6ed3d339bb444dcdbaec4cabe5dcbff27b5ac)) + + + +## 13.3.3 (2024-07-16) + + + +## 13.3.2 (2024-07-04) + + + +## 13.3.1 (2024-06-28) + + + +# 13.3.0-rc.0 (2024-05-31) + + + +## 13.2.1 (2024-05-09) + + + +# 13.2.0 (2024-04-29) + + + +# 13.2.0-rc.0 (2024-04-29) + + + +## 13.1.16 (2024-04-28) + + +#### Bug Fixes + +* **react:** fix null type build error in main.tsx ([#1242](https://github.com/IgniteUI/igniteui-cli/issues/1242)) ([2d0b579](https://github.com/IgniteUI/igniteui-cli/commit/2d0b57999b6a22445c2e7ff494310f9e94c421ea)) + + + +## 13.1.15 (2024-04-12) + + + +## 13.1.13 (2024-04-11) + + +#### Bug Fixes + +* **cli-templetes:** Replaced index.html <title> to ApplicationTitle as placeholder ([#1237](https://github.com/IgniteUI/igniteui-cli/issues/1237)) ([d622d54](https://github.com/IgniteUI/igniteui-cli/commit/d622d54fbd3becbc514bfc971eac4c97b3346255)) +* **igr-ts:** lint ignore unused vars prefix; ts strict ([#1232](https://github.com/IgniteUI/igniteui-cli/issues/1232)) ([91e35b3](https://github.com/IgniteUI/igniteui-cli/commit/91e35b3eb060f079ff6e30bdead75af7d6b98add)) + + + +## 13.1.13-beta.4 (2024-04-04) + + + +## 13.1.13-beta.3 (2024-04-04) + + +#### Features + +* **react:** remove igniteui deps from package.json and bump versions ([841a19d](https://github.com/IgniteUI/igniteui-cli/commit/841a19d2779f4f156c48368b4fa7a20b1a181eb4)) +* **react:** turn off no-explicit-any in eslint ([ef50011](https://github.com/IgniteUI/igniteui-cli/commit/ef500113afe214e8e64dea926d6937c5e5f827df)) + + + +## 13.1.12 (2024-03-21) + + +#### Features + +* **cli:** upgrade packages for React and WC ([#1198](https://github.com/IgniteUI/igniteui-cli/issues/1198)) ([16c9b8d](https://github.com/IgniteUI/igniteui-cli/commit/16c9b8dda219ebacd473a2fad5e0c0ea70d5f320)) + + + +# 13.2.0-beta.0 (2024-03-15) + + +#### Bug Fixes + +* add elements internal polyfill to base template ([c7d2396](https://github.com/IgniteUI/igniteui-cli/commit/c7d2396572a9cd77205b8727ed81089f460403e2)) +* **Imports:** Fixed class import path in .test.ts ([#1224](https://github.com/IgniteUI/igniteui-cli/issues/1224)) ([6b3a2ef](https://github.com/IgniteUI/igniteui-cli/commit/6b3a2effef4951f0fc59e5393186eb2e69f2972b)) +* **Lint:** Fixed styles typing in style-utils ([#1222](https://github.com/IgniteUI/igniteui-cli/issues/1222)) ([6ad842a](https://github.com/IgniteUI/igniteui-cli/commit/6ad842a2bc16d50c8b29ddbca5907b80e40fd798)) + + + +## 13.1.11 (2024-03-12) + + +#### Bug Fixes + +* **react:** add editorconfig and vite-env.d.ts ([555300c](https://github.com/IgniteUI/igniteui-cli/commit/555300c38df56246cb7cc08f6b25e8ae5fd316f0)) + + + +## 13.1.10 (2024-03-11) + + + +## 13.1.9 (2024-03-05) + + + +## 13.1.8 (2024-02-29) + + + +## 13.1.7 (2024-02-28) + + +#### Bug Fixes + +* **WebComponents:** Removing an unnecessary ` from package.json ([3420292](https://github.com/IgniteUI/igniteui-cli/commit/3420292eb5752eaf76cfee1e12927d8d2749b8be)) + + + +## 13.1.6 (2024-02-26) + + +#### Bug Fixes + +* **React:** Add styles to support dark themes [#29410](https://github.com/IgniteUI/igniteui-cli/issues/29410) ([#1205](https://github.com/IgniteUI/igniteui-cli/issues/1205)) ([a191348](https://github.com/IgniteUI/igniteui-cli/commit/a191348d07317cdaac43db7bd52ee3958784ae55)) + + + +## 13.1.5 (2024-01-31) + + +#### Features + +* add style-utils file to base project ([#1195](https://github.com/IgniteUI/igniteui-cli/issues/1195)) ([112f27d](https://github.com/IgniteUI/igniteui-cli/commit/112f27ddc49d9106a182c8c7768543aa1b913164)) + + + +## 13.1.3 (2024-01-17) + + +#### Bug Fixes + +* **igr-ts:** add github workflows folder ([#1192](https://github.com/IgniteUI/igniteui-cli/issues/1192)) ([2369c55](https://github.com/IgniteUI/igniteui-cli/commit/2369c556b8f84ce6a575c73b617c7581cedf5c0f)) +* open browser on app start ([#1187](https://github.com/IgniteUI/igniteui-cli/issues/1187)) ([c4e1f5c](https://github.com/IgniteUI/igniteui-cli/commit/c4e1f5c8d65dd8729083377973a40450b4899d63)) + + +#### Features + +* **igc-ts:** bump the version to 4.7.0 and add new components ([#1189](https://github.com/IgniteUI/igniteui-cli/issues/1189)) ([e9dbfd7](https://github.com/IgniteUI/igniteui-cli/commit/e9dbfd7d6212f1b8535de6a142f6140e3848f6ef)) + + + +## 13.1.1 (2023-12-14) + + +#### Features + +* **igr-ts:** add igr-ts proj type ([#1146](https://github.com/IgniteUI/igniteui-cli/issues/1146)) ([4609525](https://github.com/IgniteUI/igniteui-cli/commit/460952505758fcf1ab9b559ed6809015f3c5d3a5)), closes [#1147](https://github.com/IgniteUI/igniteui-cli/issues/1147) [#1153](https://github.com/IgniteUI/igniteui-cli/issues/1153) + + + +## 13.0.1 (2023-11-15) + + + +# 13.0.0 (2023-11-09) + + + +# 13.0.0-rc.0 (2023-11-09) + + + +## 12.0.6-beta.2 (2023-10-02) + + + +## 12.0.5 (2023-07-18) + + +#### Bug Fixes + +* memory allocation issue during build of webComponent app that uses igc-category-chart ([ee188bf](https://github.com/IgniteUI/igniteui-cli/commit/ee188bf4672b8ee96ac1b891cf8e334f44bb4929)) + + + +## 12.0.4 (2023-07-18) + + + +## 12.0.3 (2023-06-28) + + + +## 12.0.3-beta.0 (2023-06-02) + + +#### Bug Fixes + +* **igx:** replace DataGridSelectionMode with GridSelectionMode ([fc61052](https://github.com/IgniteUI/igniteui-cli/commit/fc61052d68f5fffbaf96c0f7c71220c39c7d5ef2)) + + + +## 12.0.1 (2023-05-26) + + + +# 12.0.0 (2023-05-15) + + + +# 12.0.0-rc.0 (2023-05-15) + + +#### Bug Fixes + +* **grid:** Adding missing packages to the grid template [#1109](https://github.com/IgniteUI/igniteui-cli/issues/1109) ([9c65afe](https://github.com/IgniteUI/igniteui-cli/commit/9c65afe228f182918c6e3f50e7cfec0466d7f7d2)) +* **web-components:** Adding packages in each template. ([674f55c](https://github.com/IgniteUI/igniteui-cli/commit/674f55c66bfa3308696cee3da1dd1d0e3ae64c0c)) + + +#### Features + +* **igx:** add base_with_home proj to igx-templates ([#1118](https://github.com/IgniteUI/igniteui-cli/issues/1118)) ([d84c431](https://github.com/IgniteUI/igniteui-cli/commit/d84c4310a03e35588626c57148091c6b224c7bc3)) +* **igx:** update to 16 ([#1120](https://github.com/IgniteUI/igniteui-cli/issues/1120)) ([e6efa40](https://github.com/IgniteUI/igniteui-cli/commit/e6efa40c2c748d2679b6be66252bc7732e51de29)) + + + +## 11.1.1 (2023-04-11) + + +#### Bug Fixes + +* **wc:** changing the function call [#1110](https://github.com/IgniteUI/igniteui-cli/issues/1110) ([#1113](https://github.com/IgniteUI/igniteui-cli/issues/1113)) ([5e4d1db](https://github.com/IgniteUI/igniteui-cli/commit/5e4d1dbdeeaa498278a7669b08031c51bfa2f367)) + + + +# 11.1.0 (2023-03-28) + + + +# 11.1.0-rc.0 (2023-03-24) + + + +## 11.0.2 (2023-02-17) + + + +# 11.0.0 (2022-11-23) + + +#### Features + +* add lint file for web components ([#1085](https://github.com/IgniteUI/igniteui-cli/issues/1085)) ([25498c0](https://github.com/IgniteUI/igniteui-cli/commit/25498c09b2bc4e5bc30c67c36008d97b342e3526)) + + + +# 10.1.0-beta.13 (2022-10-27) + + + +# 10.1.0-beta.12 (2022-10-27) + + +#### Features + +* **wc:** add npmrc to proj template ([#1079](https://github.com/IgniteUI/igniteui-cli/issues/1079)) ([af233e5](https://github.com/IgniteUI/igniteui-cli/commit/af233e53d72b615ce11e16a65ddf358645329ffb)) + + + +# 10.1.0-beta.11 (2022-10-25) + + + +# 10.1.0-beta.10 (2022-10-25) + + + +# 10.1.0-beta9 (2022-10-25) + + + +# 10.1.0-beta.8 (2022-10-23) + + + +# 10.1.0-beta.7 (2022-10-19) + + + +# 10.1.0-beta.6 (2022-10-19) + + + +# 10.1.0-beta.5 (2022-10-18) + + + +# 10.1.0-beta.4 (2022-10-18) + + +#### Features + +* provide default options when adding a template ([#1070](https://github.com/IgniteUI/igniteui-cli/issues/1070)) ([73e5c2c](https://github.com/IgniteUI/igniteui-cli/commit/73e5c2c0cc62b81384d6b4928103adf5ccf16153)) + + + +# 10.1.0-beta.3 (2022-10-17) + + + +# 10.1.0-beta.2 (2022-10-14) + + + +# 10.1.0-beta.1 (2022-10-14) + + + +# 10.1.0-beta.0 (2022-10-07) + + +#### Bug Fixes + +* **webcomponents:** set background and color to body ([b41a8b6](https://github.com/IgniteUI/igniteui-cli/commit/b41a8b66834ed46206cb14aa8bff0d6e3b99ef18)) +* **webcomponents:** set correct fallback for background color ([#1065](https://github.com/IgniteUI/igniteui-cli/issues/1065)) ([a976831](https://github.com/IgniteUI/igniteui-cli/commit/a976831228c204b015bd49773af4b5fc9767873a)) +* **webcomponents:** update app-root markup ([c717c37](https://github.com/IgniteUI/igniteui-cli/commit/c717c370cae66218eb4a7d5daaf0137da8c12d23)) + + +#### Features + +* **wc:** add base template for Web Components [#988](https://github.com/IgniteUI/igniteui-cli/issues/988) ([#1058](https://github.com/IgniteUI/igniteui-cli/issues/1058)) ([7574ab2](https://github.com/IgniteUI/igniteui-cli/commit/7574ab2b0221687a6ace6f627ec55caa3945236f)) + + + +## 10.0.5 (2022-09-19) + + +#### Features + +* **wc:** add accordion, tab & date-time-editor templates ([#1055](https://github.com/IgniteUI/igniteui-cli/issues/1055)) ([f2a631f](https://github.com/IgniteUI/igniteui-cli/commit/f2a631fcd18f529172af8e038929bf7f542e71ff)) + + + +## 10.0.4-beta.0 (2022-06-30) + + + +## 10.0.2 (2022-06-29) + + + +## 10.0.1 (2022-06-17) + + + +# 9.2.0 (2022-05-26) + + + +## 9.1.4 (2022-05-20) + + + +## 9.1.3 (2022-05-19) + + + +## 9.1.2 (2022-05-16) + + + +## 9.1.1 (2022-03-18) + + + +## 9.1.1-rc.0 (2022-03-17) + + +#### Bug Fixes + +* **wc:** address comments ([e1f804d](https://github.com/IgniteUI/igniteui-cli/commit/e1f804deada9f5fdf628ba25e122278cb9118507)) + + +#### Features + +* **ng:** update to 13.3.0 ([17553b0](https://github.com/IgniteUI/igniteui-cli/commit/17553b0da7586d14d91778417161f2a77864fd16)) +* **wc:** add new 2.1.0 components ([526da0c](https://github.com/IgniteUI/igniteui-cli/commit/526da0ce167659c9cfd3b21caf21efdcbc47e18d)) + + + +# 9.1.0 (2022-03-02) + + + +# 9.1.0-rc.1 (2022-02-25) + + + +# 9.1.0-beta.0 (2022-02-22) + + +#### Bug Fixes + +* **start:** pass in options for wc child process ([2df9e33](https://github.com/IgniteUI/igniteui-cli/commit/2df9e337e86e353d6d3dde6b53001af7af36fe12)) + + +#### Features + +* **wc:** adding empty view and refactor proj structure [#967](https://github.com/IgniteUI/igniteui-cli/issues/967) ([#979](https://github.com/IgniteUI/igniteui-cli/issues/979)) ([622a014](https://github.com/IgniteUI/igniteui-cli/commit/622a0143be1583cfb97d7b80cabbfe21e03c20eb)) +* **web-components:** use LitElement in the templates [#989](https://github.com/IgniteUI/igniteui-cli/issues/989) ([#1001](https://github.com/IgniteUI/igniteui-cli/issues/1001)) ([5d828bc](https://github.com/IgniteUI/igniteui-cli/commit/5d828bc6062e6971d82f588ebf59a6e489d87257)) + + + +## 9.0.6 (2022-02-04) + + + +## 9.0.5 (2022-02-04) + + + +## 9.0.5-beta.2 (2022-02-03) + + + +## 9.0.5-beta.1 (2022-01-28) + + + +## 9.0.5-beta.0 (2021-12-20) + + + +## 9.0.4 (2021-12-15) + + + +## 9.0.3 (2021-12-13) + + +#### Features + +* **typescript:** Add support for typescript 4.5.2 ([055ca5b](https://github.com/IgniteUI/igniteui-cli/commit/055ca5b7f8e54acdd8f3f1d6b6d7517916d852f3)) +* Update [@use](https://github.com/use) [@forward](https://github.com/forward) and hsla ([#961](https://github.com/IgniteUI/igniteui-cli/issues/961)) ([2ef8435](https://github.com/IgniteUI/igniteui-cli/commit/2ef8435816f8ff4f60c7e0cd4ed497a11fc815da)) + + + +## 9.0.1 (2021-11-25) + + + +# 9.0.0 (2021-11-22) + + + +# 9.0.0-rc.3 (2021-11-22) + + + +# 9.0.0-rc.2 (2021-11-19) + + +#### Bug Fixes + +* add igx-scrollbar class to body, [#14033](https://github.com/IgniteUI/igniteui-cli/issues/14033) ([b02ac58](https://github.com/IgniteUI/igniteui-cli/commit/b02ac5822015c6b1b1fdd4684a52a2eecb3eadd9)) + + + +# 9.0.0-rc.1 (2021-11-17) + + + +# 9.0.0-rc.0 (2021-11-17) + + +#### Features + +* **angular:** update to Angular 13 [#895](https://github.com/IgniteUI/igniteui-cli/issues/895) ([#896](https://github.com/IgniteUI/igniteui-cli/issues/896)) ([32f1721](https://github.com/IgniteUI/igniteui-cli/commit/32f17215290af3372b554f0e440e39b9b9b5040a)) + + + +# 8.3.0-rc.0 (2021-11-11) + + + +# 8.3.0-beta.7 (2021-11-09) + + + +# 8.3.0-beta.6 (2021-11-09) + + + +# 8.3.0-beta.5 (2021-11-09) + + + +# 8.3.0-beta.4 (2021-11-09) + + + +# 8.3.0-beta.3 (2021-11-08) + + + +# 8.3.0-beta.2 (2021-11-08) + + + +# 8.3.0-beta.1 (2021-11-04) + + + +# 8.3.0-beta.0 (2021-11-04) + + + +## 8.2.1 (2021-10-08) + + + +## 8.2.1-rc.0 (2021-10-07) + + + +# 8.2.0 (2021-10-04) + + + +# 8.2.0-alpha.0 (2021-09-30) + + + +## 8.1.2 (2021-09-28) + + +#### Bug Fixes + +* **igr-es6:** Underscore dot ([a0ce582](https://github.com/IgniteUI/igniteui-cli/commit/a0ce582e112a31c2c59d5532791ef07ab988335b)) + + + +## 8.1.1 (2021-09-02) + + +#### Bug Fixes + +* **custom-templates:** Refactor samples, ([1f50907](https://github.com/IgniteUI/igniteui-cli/commit/1f509070a9409c4100d3d9c6a5de2f443d04c556)) +* **ig-ts:** Free version path contains no /en ([e96c7f6](https://github.com/IgniteUI/igniteui-cli/commit/e96c7f673729a034eeb3d89f5adfe3061d6e9f0b)) +* **ig-ts:** Make use of all visible height ([ebfe5ed](https://github.com/IgniteUI/igniteui-cli/commit/ebfe5edada1fcd9d4f8e25f868f916ad2d862121)) +* **ig-ts:** Temp fix - add static FormsModule ([9341753](https://github.com/IgniteUI/igniteui-cli/commit/9341753ab6fed9597c6f30f9fb1383ad132282ab)) +* **ig-ts:** Update prod budgets ([4edd971](https://github.com/IgniteUI/igniteui-cli/commit/4edd97100f0ab2cdd7a00176992ca1da57de47ff)) +* **lint:** Fix all lint errors. ([659cc29](https://github.com/IgniteUI/igniteui-cli/commit/659cc2913f20092bd9ffc3f5a1a1f549db005912)) +* **lint:** Fix dum line lenght ([570accb](https://github.com/IgniteUI/igniteui-cli/commit/570accbaef8f74d01cecbeda0046edb1a8423ef1)) +* **lint:** Fix lint errors ([84394b9](https://github.com/IgniteUI/igniteui-cli/commit/84394b9c4c24ed9727c8719bd9e463cea09d482b)) +* **lint:** Fix lint errors. ([0477e7d](https://github.com/IgniteUI/igniteui-cli/commit/0477e7dd3d9b4731e1b3176316581d3e0339ca5e)) +* **templates:** Add file-saver package ([8c7a59d](https://github.com/IgniteUI/igniteui-cli/commit/8c7a59db381a32719cdadbf1534a387c90bb05d5)) + + +#### Features + +* **ig-ts:** Empty project is now angular project. ([83e5c6f](https://github.com/IgniteUI/igniteui-cli/commit/83e5c6f8370b0d10a349751d9b90f3f284d9ae69)) + + + +# 8.1.0-rc.0 (2021-07-30) + + + +# 8.1.0-beta.1 (2021-07-30) + + + +# 8.1.0-beta.0 (2021-07-28) + + +#### Features + +* update angular to v12.1 [#856](https://github.com/IgniteUI/igniteui-cli/issues/856) ([#857](https://github.com/IgniteUI/igniteui-cli/issues/857)) ([971822e](https://github.com/IgniteUI/igniteui-cli/commit/971822e343158bd107ef5b07bf60773509bd928c)) + + + +## 8.0.3 (2021-07-14) + + + +## 8.0.2 (2021-07-07) + + + +## 8.0.2-beta.1 (2021-07-06) + + + +## 8.0.2-beta.0 (2021-07-02) + + + +## 8.0.1 (2021-07-01) + + + +# 8.0.0 (2021-05-14) + + + +# 8.0.0-rc.0 (2021-05-13) + + + +# 8.0.0-alpha.1 (2021-05-13) + + + +## 7.1.1 (2021-03-15) + + + +## 7.1.1-beta.0 (2021-03-12) + + + +# 7.1.0 (2021-02-22) + + + +# 7.1.0-beta.0 (2021-02-18) + + + +## 7.0.1 (2020-11-16) + + + +# 7.0.0 (2020-11-13) + + + +# 7.0.0-rc.2 (2020-11-12) + + + +# 7.0.0-rc.1 (2020-11-10) + + + +# 7.0.0-rc.0 (2020-11-10) + + + +# 7.0.0-alpha.0 (2020-11-10) + + + +# 6.2.0 (2020-10-20) + + + +# 6.2.0-rc.0 (2020-10-16) + + + +# 6.2.0-beta.0 (2020-10-14) + + +#### Bug Fixes + +* **react-grid:** Add missing module [#791](https://github.com/IgniteUI/igniteui-cli/issues/791) ([#798](https://github.com/IgniteUI/igniteui-cli/issues/798)) ([68e2b81](https://github.com/IgniteUI/igniteui-cli/commit/68e2b81e297a5b4279f53e5bb9dff80126cc08b6)) + + + +# 6.1.0 (2020-08-12) + + + +# 6.1.0-beta.0 (2020-08-07) + + + +# 6.1.0-alpha.0 (2020-07-09) + + + +# 6.0.0 (2020-06-25) + + + +## 5.2.1 (2020-06-25) + + + +# 6.0.0-rc.0 (2020-06-25) + + +#### Features + +* **packages:** Bump packages to Angular 10 [#767](https://github.com/IgniteUI/igniteui-cli/issues/767) ([73a5670](https://github.com/IgniteUI/igniteui-cli/commit/73a56703ff4f4f0cc23d1da3c65cb4fbe114c9b4)) +* **packages:** Bump packages to Angular 10 [#767](https://github.com/IgniteUI/igniteui-cli/issues/767) ([f7e104e](https://github.com/IgniteUI/igniteui-cli/commit/f7e104e8ccee1692ff886259a7b7cf653de46573)) + + + +# 5.2.0 (2020-06-11) + + + +## 5.1.1 (2020-06-03) + + + +# 5.1.0 (2020-06-01) + + + +# 5.1.0-beta.4 (2020-06-01) + + + +# 5.1.0-beta.3 (2020-05-29) + + + +# 5.1.0-beta.2 (2020-05-28) + + + +# 5.1.0-beta.1 (2020-05-28) + + +#### Bug Fixes + +* **upgrade:** provide default fallback for incorrect package template ([9dd4d80](https://github.com/IgniteUI/igniteui-cli/commit/9dd4d80db6cf13d3fd7594790bcaaeec9a383b49)) + + + +# 5.1.0-beta.0 (2020-05-27) + + +#### Features + +* **commands:** Add 'upgrade-packages' command ([25db37d](https://github.com/IgniteUI/igniteui-cli/commit/25db37d0df1fa52d81501b74ab328330e7a60744)) +* **schematics:** update-package logic added ([197b94e](https://github.com/IgniteUI/igniteui-cli/commit/197b94e367d5e9a359c989beef01c6f35d7b54b5)) +* **step-by-step:** add prompt to upgrade to private feed packages, [#724](https://github.com/IgniteUI/igniteui-cli/issues/724) ([63c0c85](https://github.com/IgniteUI/igniteui-cli/commit/63c0c85639c1e5e5415c82f96a6b5cb5bbad4b99)) + + + +# 5.1.0-alpha.0 (2020-05-20) + + + +## 5.0.3 (2020-05-18) + + +#### Bug Fixes + +* **igx:** proj template error handler log instead throw, register only in prod ([270addd](https://github.com/IgniteUI/igniteui-cli/commit/270adddfdee8bb84892e768971e976e70550b2c2)) + + + +## 5.0.2 (2020-05-05) + + +#### Bug Fixes + +* **ig-ts:** correct grid features template variable [#702](https://github.com/IgniteUI/igniteui-cli/issues/702) ([3f09bd9](https://github.com/IgniteUI/igniteui-cli/commit/3f09bd9af64177162e4e450df2148e1b13b2f87f)) +* **start:** inherit all stdio, not just input [#699](https://github.com/IgniteUI/igniteui-cli/issues/699) ([1c03891](https://github.com/IgniteUI/igniteui-cli/commit/1c03891227bcdcff6dbff2005939e631737d8b7f)) + + + +# 5.0.0 (2020-02-11) + + + +# 5.0.0-rc.4 (2020-02-11) + + + +# 5.0.0-rc.3 (2020-02-07) + + + +# 5.0.0-rc.2 (2020-02-07) + + +#### Features + +* **ix-ts:** Update ig-ts projects [#647](https://github.com/IgniteUI/igniteui-cli/issues/647) ([a6204d8](https://github.com/IgniteUI/igniteui-cli/commit/a6204d80f50e885459306276f3584fac0488460b)) + + + +# 5.0.0-rc.0 (2020-01-31) + + +#### Bug Fixes + +* new project accepts lower case theme name [#600](https://github.com/IgniteUI/igniteui-cli/issues/600) ([#619](https://github.com/IgniteUI/igniteui-cli/issues/619)) ([d6eedea](https://github.com/IgniteUI/igniteui-cli/commit/d6eedea8998b07aa6312dea6fdbab66acd88303a)) + + + +# 5.0.0-beta.3 (2019-12-13) + + +#### Bug Fixes + +* **cli, schematics:** check for fileSystem on post install [#612](https://github.com/IgniteUI/igniteui-cli/issues/612) ([#613](https://github.com/IgniteUI/igniteui-cli/issues/613)) ([0a6a878](https://github.com/IgniteUI/igniteui-cli/commit/0a6a87877bfe42fb9d665ac7b7e4be3d5e72511f)) + + + +# 5.0.0-beta.2 (2019-12-06) + + + +# 5.0.0-beta.1 (2019-11-28) + + + +# 5.0.0-alpha.1 (2019-10-02) + + # 14.10.0-alpha.3 ## igniteui/cli-core@14.10.0-alpha.3 (2026-03-25) diff --git a/packages/cli/package.json b/packages/cli/package.json index d6aebedd8..607d7c253 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "igniteui-cli", - "version": "14.10.0-alpha.3", + "version": "14.10.0-alpha.4", "description": "CLI tool for creating Ignite UI projects", "keywords": [ "CLI", @@ -66,9 +66,9 @@ "all": true }, "dependencies": { - "@igniteui/angular-templates": "^21.1.14100-alpha.3", - "@igniteui/cli-core": "^14.10.0-alpha.3", - "@igniteui/mcp-server": "^14.10.0-alpha.3", + "@igniteui/angular-templates": "^21.1.14100-alpha.4", + "@igniteui/cli-core": "^14.10.0-alpha.4", + "@igniteui/mcp-server": "^14.10.0-alpha.4", "@inquirer/prompts": "^7.9.0", "@types/yargs": "^17.0.33", "chalk": "^5.3.0", diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/SKILL.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/SKILL.md new file mode 100644 index 000000000..46c99815f --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/SKILL.md @@ -0,0 +1,161 @@ +--- +name: igniteui-react-components +description: This skill identifies the right Ignite UI for React components for any UI pattern and covers installing, importing, and using them — including JSX patterns, event handling, refs, forms, and TypeScript. Use this when choosing components, setting up a React project, writing component JSX, handling events, or integrating with React state and form libraries. +user-invocable: true +--- + +# Ignite UI for React Components + +This skill covers everything from identifying the right component for a UI requirement to installing, setting up, and using Ignite UI for React components — including JSX patterns, event handling, refs, controlled/uncontrolled form components, and TypeScript. + +## Example Usage + +- "What component should I use to display a list of items with actions?" +- "I need a date picker for a booking form in React" +- "Build a dashboard layout with cards and a data grid" +- "What's the best component for a navigation sidebar?" +- "I need a searchable dropdown with multi-select" +- "How do I install Ignite UI for React?" +- "Set up igniteui-react in my project" +- "How do I handle events on IgrCombo?" +- "How do I use IgrInput with React Hook Form?" +- "Show me how to use refs with IgrDialog" +- "What TypeScript types should I use for IgrButton props?" +- "How do I pass children vs slots to Ignite UI components?" + +## Related Skills + +- [igniteui-react-customize-theme](../igniteui-react-customize-theme/SKILL.md) — Theme and style components +- [igniteui-react-optimize-bundle-size](../igniteui-react-optimize-bundle-size/SKILL.md) — Reduce bundle size + +## When to Use + +- Deciding which component fits a UI requirement +- User describes a UI pattern and needs a matching component name +- User wants to explore what components are available +- Setting up Ignite UI for React in a new or existing project +- Writing JSX that uses Ignite UI components +- Handling events from Ignite UI components +- Integrating components with React state or form libraries +- Using refs to call imperative methods on components +- Working with TypeScript prop types + +--- + +## Content Guide + +This skill is organized into focused reference files. Load the appropriate file for the situation: + +| Topic | File | When to Use | +|---|---|---| +| Component Catalogue | [COMPONENT-CATALOGUE.md](./reference/COMPONENT-CATALOGUE.md) | Mapping UI patterns to components, available packages, common UI scenarios | +| Installation & Setup | [INSTALLATION.md](./reference/INSTALLATION.md) | Setting up packages, importing theme CSS, Next.js setup | +| JSX Patterns | [JSX-PATTERNS.md](./reference/JSX-PATTERNS.md) | Props, children, slots, IgrTabs content vs navigation | +| Event Handling | [EVENT-HANDLING.md](./reference/EVENT-HANDLING.md) | Event props, CustomEvent types, common events | +| Refs & Forms | [REFS-FORMS.md](./reference/REFS-FORMS.md) | useRef, controlled/uncontrolled forms, React Hook Form | +| Charts, Gauges, Maps & Grid Lite | [CHARTS-GRIDS.md](./reference/CHARTS-GRIDS.md) | Module registration, container sizing | +| Reveal SDK | [REVEAL-SDK.md](./reference/REVEAL-SDK.md) | Embedded BI dashboards, theme sync | +| Troubleshooting | [TROUBLESHOOTING.md](./reference/TROUBLESHOOTING.md) | Common issues and solutions | + +--- + +## Quick Start + +### 1. Install + +```bash +npm install igniteui-react +``` + +### 2. Import Theme CSS (REQUIRED) + +```tsx +// main.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +> **CRITICAL:** Without the theme CSS, components will render without styles and icons will be broken. See [INSTALLATION.md](./reference/INSTALLATION.md) for all available themes and setup. + +### 3. Use Components + +```tsx +import { IgrButton, IgrInput } from 'igniteui-react'; + +function App() { + return ( + <div> + <IgrInput label="Name" /> + <IgrButton><span>Submit</span></IgrButton> + </div> + ); +} +``` + +> **No `defineComponents()` needed.** React wrappers auto-register. See [CHARTS-GRIDS.md](./reference/CHARTS-GRIDS.md) for exceptions (charts, gauges, maps). + +--- + +## Key Concepts + +### Choosing the Right Component + +Use [COMPONENT-CATALOGUE.md](./reference/COMPONENT-CATALOGUE.md) to map any UI need to the right `Igr*` component and package. For quick guidance: + +- **MIT package** (`igniteui-react`) — inputs, buttons, layout, navigation, notifications, scheduling, AI chat +- **Lightweight grid** (MIT) — `IgrGridLite` from `igniteui-react/grid-lite` (requires both `igniteui-react` and `igniteui-grid-lite`) +- **Commercial** — `igniteui-react-grids` (advanced grids), `igniteui-react-charts`, `igniteui-react-gauges`, `igniteui-react-maps` + +### Theme CSS Import + +- **Always import theme CSS** before using components. **For grids**, also import `igniteui-react-grids/grids/themes/...` +- see [INSTALLATION.md](./reference/INSTALLATION.md) + +### JSX Patterns + +- Use props just like any React component +- Use `slot` attribute for named slots: `<span slot="icon">📊</span>` +- See [JSX-PATTERNS.md](./reference/JSX-PATTERNS.md) + +### IgrTabs: Content vs Navigation + +- **Content panels**: Use `IgrTab` with inline content (label via `label` prop or `slot="label"`) +- **Navigation (router)**: Use **only `IgrTab`** with label-only (no inline content) +- See [JSX-PATTERNS.md](./reference/JSX-PATTERNS.md) + +### Events + +- Events are `CustomEvent` objects, not React `SyntheticEvent` +- Access data via `e.target` or `e.detail` +- See [EVENT-HANDLING.md](./reference/EVENT-HANDLING.md) + +### Refs + +- Use `useRef<IgrDialog>(null)` with the component type: +- See [REFS-FORMS.md](./reference/REFS-FORMS.md) + +### Charts, Gauges, Maps & Grid Lite + +- **Charts/Gauges/Maps require explicit registration**: `IgrCategoryChartModule.register()` +- **All require sized container**: `min-width`, `min-height`, or `flex-grow` +- **Grid Lite** requires both `igniteui-react` and `igniteui-grid-lite` packages, import from `igniteui-react/grid-lite` +- See [CHARTS-GRIDS.md](./reference/CHARTS-GRIDS.md) + +--- + +## Best Practices + +1. **Start with the MIT package** (`igniteui-react`) — it covers most common UI needs +2. **Import theme CSS first** — components need it to render correctly +3. **Register chart/gauge/map modules** — call `.register()` at module level +4. **Wrap charts/gauges/maps in sized containers** — they need explicit dimensions +5. **Use named imports** — enables tree-shaking +6. **Handle events as `CustomEvent`** — not `React.SyntheticEvent` +7. **Use refs sparingly** — prefer declarative props +8. **Check slot names** in the docs + +## Additional Resources + +- [Ignite UI for React — Getting Started](https://www.infragistics.com/products/ignite-ui-react/react/components/general-getting-started) +- [React Examples Repository](https://github.com/IgniteUI/igniteui-react-examples) +- [npm: igniteui-react](https://www.npmjs.com/package/igniteui-react) +- [@lit/react Documentation](https://lit.dev/docs/frameworks/react/) diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/CHARTS-GRIDS.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/CHARTS-GRIDS.md new file mode 100644 index 000000000..d89896e5b --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/CHARTS-GRIDS.md @@ -0,0 +1,127 @@ +# Charts, Gauges, Maps & Grid Lite + +## Module Registration + +> **⚠️ IMPORTANT:** Unlike core UI components (from `igniteui-react`), chart, gauge, and map components from `igniteui-react-charts`, `igniteui-react-gauges`, and `igniteui-react-maps` **require explicit module registration** before use. You must import the corresponding `*Module` class and call `.register()` at the module level (outside the component function). +> +> **Grid Lite** (`IgrGridLite` from `igniteui-react/grid-lite`) is a React wrapper component that works like any other React component — no `.register()` needed, but requires both `igniteui-react` and `igniteui-grid-lite` packages installed. + +### Registration Syntax + +```tsx +import { IgrCategoryChart, IgrCategoryChartModule } from 'igniteui-react-charts'; + +// ⚠️ REQUIRED — register the module before using the component +IgrCategoryChartModule.register(); +``` + +### Common Module Registrations + +| Component | Module Import | Registration | +|---|---|---| +| `IgrCategoryChart` | `IgrCategoryChartModule` | `IgrCategoryChartModule.register()` | +| `IgrPieChart` | `IgrPieChartModule` | `IgrPieChartModule.register()` | +| `IgrFinancialChart` | `IgrFinancialChartModule` | `IgrFinancialChartModule.register()` | +| `IgrRadialGauge` | `IgrRadialGaugeModule` | `IgrRadialGaugeModule.register()` | +| `IgrLinearGauge` | `IgrLinearGaugeModule` | `IgrLinearGaugeModule.register()` | +| `IgrGeographicMap` | `IgrGeographicMapModule` | `IgrGeographicMapModule.register()` | +| `IgrGridLite` | (no registration needed) | N/A — works like standard React component | + +## Container Sizing (REQUIRED) + +> **⚠️ CRITICAL:** Charts, gauges, maps, and Grid Lite **require an explicit-sized container** to render. They inherit their dimensions from the parent element — if the parent has no height/width, the component will not be visible. Always wrap these components in a container with explicit `min-width`, `min-height`, or `flex-grow` styling. + +```css +/* Chart container CSS */ +.chart-container { + min-width: 400px; + min-height: 300px; + flex-grow: 1; + flex-basis: 0; +} + +/* Ensure the chart fills its container */ +.chart-container > * { + height: 100%; + width: 100%; +} +``` + +## Complete Chart Example + +```tsx +import { IgrCategoryChart, IgrCategoryChartModule } from 'igniteui-react-charts'; +import styles from './dashboard-view.module.css'; + +// Register the chart module (required, called once at module level) +IgrCategoryChartModule.register(); + +export default function DashboardView() { + const salesData = [ + { month: 'Jan', revenue: 12500 }, + { month: 'Feb', revenue: 18200 }, + { month: 'Mar', revenue: 15800 }, + ]; + + return ( + <div className={styles['chart-container']}> + <IgrCategoryChart + dataSource={salesData} + chartType="column" + xAxisTitle="Month" + yAxisTitle="Revenue ($)" + /> + </div> + ); +} +``` + +```css +/* dashboard-view.module.css */ +.chart-container { + min-width: 400px; + min-height: 300px; + flex-grow: 1; + flex-basis: 0; +} +.chart-container > * { + height: 100%; + width: 100%; +} +``` + +## Complete Grid Lite Example + +> **⚠️ IMPORTANT:** Grid Lite (`IgrGridLite` from `igniteui-react/grid-lite`) requires installing both `igniteui-react` and `igniteui-grid-lite` packages. It's a React wrapper component (uses `Igr` prefix) and works like any standard React component — no `.register()` needed. + +**Installation:** +```bash +npm install igniteui-react igniteui-grid-lite +``` + +**Usage:** +```tsx +import { IgrGridLite } from 'igniteui-react/grid-lite'; +import { useGetCustomers } from '../hooks/northwind-hooks'; +import styles from './master-view.module.css'; + +export default function MasterView() { + const { northwindCustomers } = useGetCustomers(); + + return ( + <div className={styles['grid-lite']}> + <IgrGridLite data={northwindCustomers} /> + </div> + ); +} +``` + +```css +/* master-view.module.css */ +.grid-lite { + min-width: 400px; + min-height: 220px; + flex-grow: 1; + flex-basis: 0; +} +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md new file mode 100644 index 000000000..8590c40ee --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md @@ -0,0 +1,301 @@ +# Component Catalogue + +## Available Packages + +Ignite UI for React is distributed across several packages depending on your needs: + +| Package | License | Install | Best For | +|---|---|---|---| +| [`igniteui-react`](https://www.npmjs.com/package/igniteui-react) | MIT | `npm install igniteui-react` | General UI components (inputs, layouts, notifications, scheduling) | +| [`igniteui-grid-lite`](https://www.npmjs.com/package/igniteui-grid-lite) | MIT | `npm install igniteui-react igniteui-grid-lite` | Lightweight grid (Grid Lite) — requires both packages, import from `igniteui-react/grid-lite` | +| [`igniteui-react-grids`](https://www.npmjs.com/package/igniteui-react-grids) | Commercial | `npm install igniteui-react-grids` (trial) | Advanced data grids (Data Grid, Tree Grid, Hierarchical Grid, Pivot Grid) | +| [`igniteui-react-charts`](https://www.npmjs.com/package/igniteui-react-charts) | Commercial | `npm install igniteui-react-charts` (trial) | Charts (Category, Financial, Pie, Scatter, etc.) | +| [`igniteui-react-maps`](https://www.npmjs.com/package/igniteui-react-maps) | Commercial | `npm install igniteui-react-maps` (trial) | Geographic maps | +| [`igniteui-react-gauges`](https://www.npmjs.com/package/igniteui-react-gauges) | Commercial | `npm install igniteui-react-gauges` (trial) | Radial and linear gauges | +| [`reveal-sdk-wrappers-react`](https://www.npmjs.com/package/reveal-sdk-wrappers-react) | Commercial | `npm install reveal-sdk-wrappers-react` | Embedded BI dashboards (Reveal SDK) | + +> **Note:** The lightweight Grid Lite (`IgrGridLite` from `igniteui-react/grid-lite`) requires installing both `igniteui-react` and `igniteui-grid-lite` packages. It's a React wrapper component (uses `Igr` prefix) that works like any other React component — no `.register()` needed. See [CHARTS-GRIDS.md](./CHARTS-GRIDS.md) for setup details. + +--- + +## Component Catalogue by UI Pattern + +Use the tables below to map a UI need to the right React component. All components use the **`Igr`** prefix. + +### Inputs & Forms + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Text field / text input | `IgrInput` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/input) | +| Multi-line text | `IgrTextarea` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/text-area) | +| Checkbox | `IgrCheckbox` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/checkbox) | +| On/off toggle | `IgrSwitch` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/switch) | +| Single choice from a list | `IgrRadio` / `IgrRadioGroup` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/radio) | +| Star / score rating | `IgrRating` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/rating) | +| Formatted / masked text input | `IgrMaskInput` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/mask-input) | +| Date and time input | `IgrDateTimeInput` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/date-time-input) | +| File upload | `IgrFileInput` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/file-input) | +| Simple dropdown / select | `IgrSelect` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/select) | +| Searchable dropdown, single or multi-select | `IgrCombo` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/combo/overview) | +| Grouped toggle buttons | `IgrButtonGroup` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/button-group) | +| Range / numeric slider | `IgrSlider` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/slider) | +| Range slider (two handles) | `IgrRangeSlider` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/slider) | + +### Buttons & Actions + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Standard clickable button | `IgrButton` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/button) | +| Icon-only button | `IgrIconButton` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/icon-button) | +| Click ripple effect | `IgrRipple` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/ripple) | +| Removable tag / filter chip | `IgrChip` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/chip) | + +### Scheduling & Date Pickers + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Full calendar view | `IgrCalendar` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/scheduling/calendar) | +| Date picker (popup calendar) | `IgrDatepicker` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/scheduling/date-picker) | +| Date range selection | `IgrDateRangePicker` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/scheduling/date-range-picker) | + +### Notifications & Feedback + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Brief auto-dismiss notification | `IgrToast` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/notifications/toast) | +| Actionable dismissible notification bar | `IgrSnackbar` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/notifications/snackbar) | +| Persistent status banner | `IgrBanner` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/notifications/banner) | +| Modal confirmation or content dialog | `IgrDialog` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/notifications/dialog) | +| Tooltip on hover | `IgrTooltip` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/tooltip) | +| Small count / status indicator | `IgrBadge` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/badge) | + +### Progress Indicators + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Horizontal progress bar | `IgrLinearProgress` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/linear-progress) | +| Circular / spinner progress | `IgrCircularProgress` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/circular-progress) | + +### Layouts & Containers + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Generic content card | `IgrCard` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/card) | +| User avatar / profile image | `IgrAvatar` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/avatar) | +| Icon display | `IgrIcon` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/icon) | +| Horizontal or vertical divider | `IgrDivider` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/divider) | +| Collapsible section | `IgrExpansionPanel` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/expansion-panel) | +| Multiple collapsible sections | `IgrAccordion` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/accordion) | +| Tabbed content panels (with inline content) | `IgrTabs` (content in `IgrTab`) | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/tabs) | +| Image / content slideshow | `IgrCarousel` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/carousel) | +| Multi-step wizard / onboarding flow | `IgrStepper` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/stepper) | +| Resizable, draggable dashboard tiles | `IgrTileManager` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/tile-manager) | + +### Navigation + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Top application bar / toolbar | `IgrNavbar` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/menus/navbar) | +| Side navigation drawer | `IgrNavDrawer` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/menus/navigation-drawer) | +| Tab-based navigation (with router) | `IgrTabs` (label-only, no content) | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/tabs) | +| Context menu / actions dropdown | `IgrDropdown` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/inputs/dropdown) | + +### Lists & Data Display + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Simple scrollable list | `IgrList` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/list) | +| Hierarchical / tree data | `IgrTree` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/tree) | +| Tabular data (MIT, lightweight) | `IgrGridLite` | `igniteui-react/grid-lite` (requires both `igniteui-react` and `igniteui-grid-lite` packages) | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grid-lite/overview) | +| Full-featured tabular data grid | `IgrDataGrid` | `igniteui-react-grids` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/grid/overview) | +| Nested / master-detail grid | `IgrHierarchicalGrid` | `igniteui-react-grids` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/hierarchical-grid/overview) | +| Parent-child relational tree grid | `IgrTreeGrid` | `igniteui-react-grids` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/tree-grid/overview) | +| Cross-tabulation / BI pivot table | `IgrPivotGrid` | `igniteui-react-grids` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/grids/pivot-grid/overview) | + +### Charts & Data Visualization + +> **⚠️ IMPORTANT:** Chart, gauge, and map components require **explicit module registration** and a **sized container**. Import the `*Module` class and call `.register()` at module level, and wrap the component in a container with explicit `min-width`/`min-height` or `flex-grow`. See [CHARTS-GRIDS.md](./CHARTS-GRIDS.md) for details. + +| UI Need | Component | Module Registration | Import | Docs | +|---|---|---|---|---| +| Category / bar / line chart | `IgrCategoryChart` | `IgrCategoryChartModule.register()` | `igniteui-react-charts` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/charts/chart-overview) | +| Pie / doughnut chart | `IgrPieChart` | `IgrPieChartModule.register()` | `igniteui-react-charts` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/charts/chart-overview) | +| Financial / stock chart | `IgrFinancialChart` | `IgrFinancialChartModule.register()` | `igniteui-react-charts` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/charts/chart-overview) | +| Radial gauge | `IgrRadialGauge` | `IgrRadialGaugeModule.register()` | `igniteui-react-gauges` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/gauges/radial-gauge) | +| Linear gauge | `IgrLinearGauge` | `IgrLinearGaugeModule.register()` | `igniteui-react-gauges` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/gauges/linear-gauge) | +| Geographic map | `IgrGeographicMap` | `IgrGeographicMapModule.register()` | `igniteui-react-maps` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/maps/geographic-map) | + +### Conversational / AI + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Chat / AI assistant message thread | `IgrChat` | `igniteui-react` | [Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/interactivity/chat) | + +### Embedded Analytics / BI Dashboards (Reveal SDK) + +| UI Need | Component | Import | Docs | +|---|---|---|---| +| Embedded BI dashboard viewer | `RvRevealView` | `reveal-sdk-wrappers-react` | [Docs](https://help.revealbi.io/web/getting-started-react/) | + +> **Note:** Reveal SDK is a companion product for embedding interactive dashboards and data visualizations. It uses separate packages (`reveal-sdk-wrappers-react`, `reveal-sdk-wrappers`) and requires a backend Reveal server URL. See [REVEAL-SDK.md](./REVEAL-SDK.md) for setup instructions and [../igniteui-react-customize-theme/SKILL.md](../igniteui-react-customize-theme/SKILL.md) for syncing Reveal's theme with Ignite UI theming tokens. + +--- + +## Step-by-Step: Choosing Components for a UI + +Follow these steps when a user describes a UI requirement: + +### Step 1 — Identify UI patterns + +Break the described UI into atomic patterns. Examples: +- "A booking form" → date input, text inputs, button, maybe a calendar picker +- "An admin dashboard" → navbar, nav drawer, cards, data grid, charts +- "A notification center" → snackbar or toast, badge, list +- "A settings page" → tabs or accordion, switch, input, select, button + +### Step 2 — Map patterns to components + +Use the **Component Catalogue** tables above to find matching components. When in doubt: + +| If the user needs… | Prefer… | Over… | +|---|---|---| +| Simple static list | `IgrList` | Data Grid | +| Basic dropdown | `IgrSelect` | `IgrCombo` | +| Searchable or multi-select dropdown | `IgrCombo` | `IgrSelect` | +| Tabular data with basic display | `IgrGridLite` (grid-lite) | `IgrDataGrid` (commercial) | +| Tabular data, advanced features needed | `IgrDataGrid` | `IgrGridLite` (grid-lite) | +| Single dismissible message | `IgrToast` | `IgrSnackbar` | +| Message requiring user action | `IgrSnackbar` | `IgrToast` | +| Collapsible single section | `IgrExpansionPanel` | `IgrAccordion` | +| Multiple collapsible sections | `IgrAccordion` | `IgrExpansionPanel` | +| Stepped wizard UI | `IgrStepper` | `IgrTabs` | +| Content tabs / view switching (inline content) | `IgrTabs` (content in `IgrTab`) | `IgrStepper` | +| Tab-based navigation (with React Router) | `IgrTabs` (label-only) | `IgrTabs` (with content) | + +### Step 3 — Check the package + +Confirm which package provides the component: + +- **MIT components** (inputs, layout, notifications, scheduling, chat) → `igniteui-react` +- **Lightweight grid** (Grid Lite) → `igniteui-react/grid-lite` *(MIT, requires both `igniteui-react` and `igniteui-grid-lite` packages)* +- **Advanced grids** (Data Grid, Tree Grid, Hierarchical Grid, Pivot Grid) → `igniteui-react-grids` *(commercial)* +- **Charts** → `igniteui-react-charts` *(commercial)* +- **Maps** → `igniteui-react-maps` *(commercial)* +- **Gauges** → `igniteui-react-gauges` *(commercial)* + +### Step 4 — Link to official resources + +Always direct the user to the official documentation linked in the tables above. Key entry points: + +- **Getting started**: [Ignite UI for React Docs](https://www.infragistics.com/products/ignite-ui-react/react/components/general-getting-started) +- **React examples**: [https://github.com/IgniteUI/igniteui-react-examples](https://github.com/IgniteUI/igniteui-react-examples) +- **npm package**: [https://www.npmjs.com/package/igniteui-react](https://www.npmjs.com/package/igniteui-react) +- **GitHub repository**: [https://github.com/IgniteUI/igniteui-react](https://github.com/IgniteUI/igniteui-react) + +### Step 5 — Provide a starter code snippet + +Once components are identified, give the user a minimal working React snippet. Example for an admin dashboard shell: + +```tsx +import { IgrNavbar, IgrNavDrawer, IgrNavDrawerItem, IgrCard, IgrCardHeader, IgrCardContent } from 'igniteui-react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; + +function Dashboard() { + return ( + <> + <IgrNavbar> + <h1>My Dashboard</h1> + </IgrNavbar> + + <IgrNavDrawer open> + <IgrNavDrawerItem> + <span slot="icon">🏠</span> + <span slot="content">Home</span> + </IgrNavDrawerItem> + <IgrNavDrawerItem> + <span slot="icon">⚙️</span> + <span slot="content">Settings</span> + </IgrNavDrawerItem> + </IgrNavDrawer> + + <main> + <IgrCard> + <IgrCardHeader> + <h3 slot="title">Summary</h3> + </IgrCardHeader> + <IgrCardContent>Dashboard content here</IgrCardContent> + </IgrCard> + </main> + </> + ); +} +``` + +--- + +## Common UI Scenarios → Recommended Component Sets + +### Login / Authentication Form + +- `IgrInput` — email and password fields +- `IgrCheckbox` — "Remember me" +- `IgrButton` — submit +- `IgrSnackbar` — error/success feedback + +### User Profile / Settings Page + +- `IgrAvatar` — profile picture +- `IgrTabs` — section navigation (Profile, Security, Notifications) +- `IgrInput` / `IgrTextarea` — editable fields +- `IgrSwitch` — feature toggles +- `IgrSelect` — preference dropdowns +- `IgrButton` — save/cancel actions + +### Data Table / Admin List View + +- `IgrInput` — search bar +- `IgrCombo` — filter dropdowns +- `IgrGridLite` (grid-lite) or `IgrDataGrid` — tabular data +- `IgrButton` / `IgrIconButton` — actions +- `IgrDialog` — confirm delete modal +- `IgrBadge` — status indicators + +### Booking / Reservation Form + +- `IgrDateRangePicker` — check-in / check-out +- `IgrInput` — guest details +- `IgrSelect` — room type +- `IgrStepper` — multi-step booking flow +- `IgrButton` — next / confirm +- `IgrToast` — booking confirmation + +### Analytics / Reporting Dashboard + +- `IgrNavbar` — top bar +- `IgrNavDrawer` — side navigation +- `IgrCard` — KPI summary cards +- `IgrTabs` or `IgrTileManager` — section layout +- `IgrDataGrid` or `IgrPivotGrid` — detailed data tables +- `IgrCategoryChart` — charts (from `igniteui-react-charts`) +- `IgrLinearProgress` / `IgrCircularProgress` — loading indicators + +### Master-Detail with Tab Navigation (React Router) + +- `IgrNavbar` — top bar +- `IgrTabs` — **navigation only** (label-only, no inline content); each `IgrTab` triggers a route change +- React Router `<Outlet />` — renders the routed child view below the tabs +- Active tab synced to the current route via `selected` prop + +> **⚠️ Important — Tabs for navigation vs. tabs for content:** +> - **Tabs as content panels** (`IgrTabs` with content in `IgrTab`): Content is rendered inside each tab. Use when the tab content is inline and does not require routing. +> - **Tabs as navigation** (`IgrTabs` with label-only tabs): Tabs act as route links. The routing outlet (`<Outlet />`) renders the content. **Do NOT add inline content in `IgrTab` in this case** — use only the `label` prop or `slot="label"`. See [JSX-PATTERNS.md](./JSX-PATTERNS.md) for a full React Router example. + +--- + +## Searching the Documentation + +If you are unsure about a component or need more information: + +1. **Browse the docs** at `https://www.infragistics.com/products/ignite-ui-react/react/components/` — the left sidebar groups components by category +2. **Use the naming convention**: React components use the `Igr` prefix followed by PascalCase name (e.g., `IgrDateRangePicker`, `IgrNavDrawer`). The docs URL typically uses kebab-case: `components/scheduling/date-range-picker` +3. **Check the examples repo** at [igniteui-react-examples](https://github.com/IgniteUI/igniteui-react-examples) for working sample applications diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/EVENT-HANDLING.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/EVENT-HANDLING.md new file mode 100644 index 000000000..60d0e6595 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/EVENT-HANDLING.md @@ -0,0 +1,70 @@ +# Event Handling + +## How Events Work + +Ignite UI React wrappers map web component custom events to React-style `onXxx` callback props. The event name is converted from the web component event name to a camelCase `on`-prefixed prop. + +```tsx +import { IgrButton, IgrInput, IgrCheckbox } from 'igniteui-react'; + +function MyForm() { + const handleClick = (event: CustomEvent) => { + console.log('Button clicked'); + }; + + const handleInput = (event: CustomEvent) => { + // event.target is the underlying web component element (e.g., igc-input) + console.log('Input value:', (event.target as any).value); + }; + + const handleChange = (event: CustomEvent) => { + console.log('Checkbox changed:', event.detail); + }; + + return ( + <> + <IgrButton onClick={handleClick}> + <span>Submit</span> + </IgrButton> + <IgrInput label="Name" onInput={handleInput} /> + <IgrCheckbox onChange={handleChange}>Accept terms</IgrCheckbox> + </> + ); +} +``` + +## Common Event Props + +| Component | Event Prop | Fires When | +|---|---|---| +| `IgrButton` | `onClick` | Button is clicked | +| `IgrInput` | `onInput` | Value changes (each keystroke) | +| `IgrInput` | `onChange` | Value committed (blur / Enter) | +| `IgrCheckbox` | `onChange` | Checked state changes | +| `IgrSwitch` | `onChange` | Toggle state changes | +| `IgrSelect` | `onChange` | Selection changes | +| `IgrCombo` | `onChange` | Selection changes | +| `IgrSlider` | `onInput` | Slider value changes (live) | +| `IgrSlider` | `onChange` | Slider value committed | +| `IgrDialog` | `onClosing` | Dialog is about to close | +| `IgrDialog` | `onClosed` | Dialog has closed | +| `IgrTabs` | `onChange` | Active tab changes | +| `IgrCalendar` | `onChange` | Selected date changes | +| `IgrDatepicker` | `onChange` | Selected date changes | + +## TypeScript Event Types + +When using TypeScript, event handlers receive the underlying `CustomEvent`: + +```tsx +import { IgrInput } from 'igniteui-react'; + +function SearchBar() { + const handleInput = (e: CustomEvent) => { + const value = (e.target as HTMLInputElement).value; + console.log('Search:', value); + }; + + return <IgrInput label="Search" onInput={handleInput} />; +} +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/INSTALLATION.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/INSTALLATION.md new file mode 100644 index 000000000..bfa70d97a --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/INSTALLATION.md @@ -0,0 +1,139 @@ +# Installation & Setup + +## Install the Package + +```bash +# Core UI components (MIT) +npm install igniteui-react + +# If you need the lightweight grid (MIT) +# Requires BOTH packages - igniteui-react and igniteui-grid-lite +npm install igniteui-react igniteui-grid-lite + +# If you need advanced grids (commercial) +npm install igniteui-react-grids + +# If you need charts (commercial) +npm install igniteui-react-charts + +# If you need gauges (commercial) +npm install igniteui-react-gauges + +# If you need maps (commercial) +npm install igniteui-react-maps +``` + +## Peer Dependencies + +`igniteui-react` requires `react` and `react-dom` (v18+ or v19+). These are typically already in your project: + +```bash +npm install react react-dom +``` + +## Import a Theme (REQUIRED) + +> **CRITICAL:** Components will render without styles, with broken icons and missing visuals if the theme CSS is not imported. **Always import the theme CSS before using any Ignite UI component.** + +Import one theme CSS file in your entry point (`main.tsx`, `index.tsx`, or `App.tsx`). The theme CSS must be imported **in every file that uses Ignite UI components** if your framework does not have a single global entry point (e.g., Next.js — see below). + +```tsx +// main.tsx or index.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +Available themes: + +| Import | Theme | +|---|---| +| `igniteui-webcomponents/themes/light/bootstrap.css` | Bootstrap Light | +| `igniteui-webcomponents/themes/dark/bootstrap.css` | Bootstrap Dark | +| `igniteui-webcomponents/themes/light/material.css` | Material Light | +| `igniteui-webcomponents/themes/dark/material.css` | Material Dark | +| `igniteui-webcomponents/themes/light/fluent.css` | Fluent Light | +| `igniteui-webcomponents/themes/dark/fluent.css` | Fluent Dark | +| `igniteui-webcomponents/themes/light/indigo.css` | Indigo Light | +| `igniteui-webcomponents/themes/dark/indigo.css` | Indigo Dark | + +Grid theme CSS files follow the same pattern under `igniteui-react-grids/grids/themes/`. + +**For grids**, you **must also** import the grid theme CSS. Without it, the grid will be missing styles and icons will show as placeholders: + +```tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; +``` + +## Next.js Setup + +In Next.js, there is no single `main.tsx` entry point. Import the theme CSS **in each client component file** that uses Ignite UI components, or in a shared layout component: + +```tsx +// app/components/DataTable.tsx +'use client'; + +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; + +import { IgrGrid, IgrColumn, IgrPaginator } from 'igniteui-react-grids'; + +export default function DataTable({ data }: { data: any[] }) { + return ( + <IgrGrid data={data} autoGenerate={false}> + <IgrColumn field="name" header="Name" /> + <IgrColumn field="email" header="Email" /> + <IgrPaginator perPage={10} /> + </IgrGrid> + ); +} +``` + +Alternatively, import themes once in a root layout: + +```tsx +// app/layout.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + <html lang="en"> + <body>{children}</body> + </html> + ); +} +``` + +## Minimal App Example (Vite / CRA) + +```tsx +// main.tsx +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import App from './App'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + <React.StrictMode> + <App /> + </React.StrictMode> +); +``` + +```tsx +// App.tsx +import { IgrButton, IgrInput } from 'igniteui-react'; + +function App() { + return ( + <div> + <IgrInput label="Name" /> + <IgrButton><span>Submit</span></IgrButton> + </div> + ); +} + +export default App; +``` + +> **No `defineComponents()` needed.** React wrappers auto-register. See [CHARTS-GRIDS.md](./reference/CHARTS-GRIDS.md) for exceptions (charts, gauges, maps). diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/JSX-PATTERNS.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/JSX-PATTERNS.md new file mode 100644 index 000000000..801632db0 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/JSX-PATTERNS.md @@ -0,0 +1,187 @@ +# JSX Usage Patterns + +## Props vs HTML Attributes + +Ignite UI React components accept props just like any React component. Use JSX expression syntax for dynamic values: + +```tsx +// ✅ Correct — JSX expression +<IgrInput label="Email" placeholder="you@example.com" type="email" /> +<IgrSlider value={50} min={0} max={100} /> +<IgrButton disabled={isLoading}>Submit</IgrButton> + +// ❌ Wrong — string for numeric/boolean values +<IgrSlider value="50" /> +``` + +## Children vs Slots + +Ignite UI components use the web component **slot** mechanism under the hood. In JSX, pass children to the default slot and use the `slot` attribute to target named slots: + +```tsx +<IgrButton> + {/* Default slot — button label */} + <span>Click Me</span> +</IgrButton> + +<IgrCard> + <IgrCardHeader> + <h3 slot="title">Card Title</h3> + <p slot="subtitle">Card subtitle</p> + </IgrCardHeader> + <IgrCardContent> + <p>Default slot content inside the card body.</p> + </IgrCardContent> + <IgrCardActions> + <IgrButton slot="start">Cancel</IgrButton> + <IgrButton slot="end">Confirm</IgrButton> + </IgrCardActions> +</IgrCard> + +<IgrNavDrawerItem> + <span slot="icon">📊</span> + <span slot="content">Dashboard</span> +</IgrNavDrawerItem> +``` + +> **Tip:** Check the component documentation for available slot names. Common slots include `start`, `end`, `prefix`, `suffix`, `header`, `content`, `icon`, `title`, `subtitle`. + +## Render Props (Grids & Complex Components) + +Some components like the Data Grid support **render props** for custom cell rendering: + +```tsx +import { IgrGrid, IgrColumn } from 'igniteui-react-grids'; + +function UserGrid({ users }: { users: User[] }) { + return ( + <IgrGrid data={users} autoGenerate={false}> + <IgrColumn field="name" header="Name" /> + <IgrColumn field="email" header="Email" /> + <IgrColumn + field="status" + header="Status" + bodyTemplate={(ctx) => ( + <IgrBadge>{ctx.cell.value}</IgrBadge> + )} + /> + </IgrGrid> + ); +} +``` + +## IgrTabs — Content Panels vs Navigation + +`IgrTabs` supports two distinct usage patterns. Choosing the wrong one is a common mistake. + +### Pattern 1: Tabs with Content Panels (inline content) + +Use `IgrTab` with inline content when the tabbed content is rendered inline — no routing involved. The tab label can be set via a `label` prop or via a `slot="label"` element: + +```tsx +import { IgrTabs, IgrTab } from 'igniteui-react'; + +// Simple text labels using the label prop +function SettingsPage() { + return ( + <IgrTabs> + <IgrTab label="Profile" selected> + <p>Profile settings content here</p> + </IgrTab> + <IgrTab label="Security"> + <p>Security settings content here</p> + </IgrTab> + <IgrTab label="Notifications"> + <p>Notification preferences content here</p> + </IgrTab> + </IgrTabs> + ); +} +``` + +**Alternative: Using slot="label" for complex headers (e.g., with icons):** + +```tsx +import { IgrTabs, IgrTab, IgrIcon } from 'igniteui-react'; + +function SettingsPage() { + return ( + <IgrTabs> + <IgrTab selected> + <span slot="label"> + <IgrIcon name="home" collection="material" /> + Profile + </span> + <p>Profile settings content here</p> + </IgrTab> + <IgrTab> + <span slot="label"> + <IgrIcon name="security" collection="material" /> + Security + </span> + <p>Security settings content here</p> + </IgrTab> + <IgrTab> + <span slot="label"> + <IgrIcon name="notifications" collection="material" /> + Notifications + </span> + <p>Notification preferences content here</p> + </IgrTab> + </IgrTabs> + ); +} +``` + +### Pattern 2: Tabs as Navigation (with React Router — NO inline content) + +> **⚠️ CRITICAL:** When using `IgrTabs` for navigation with React Router (or any router), **do NOT include inline content in `IgrTab`**. Only render tab labels (via `label` prop or `slot="label"`), and let the router's `<Outlet />` handle the content below the tabs. + +```tsx +import { IgrTabs, IgrTab } from 'igniteui-react'; +import { useNavigate, useLocation, Outlet } from 'react-router-dom'; + +const tabs = [ + { path: '/dashboard', label: 'Dashboard' }, + { path: '/orders', label: 'Orders' }, + { path: '/customers', label: 'Customers' }, +]; + +function MainLayout() { + const navigate = useNavigate(); + const location = useLocation(); + + const handleTabChange = (e: CustomEvent) => { + const selectedIndex = (e.target as any).selectedIndex; + if (selectedIndex !== undefined && tabs[selectedIndex]) { + navigate(tabs[selectedIndex].path); + } + }; + + return ( + <div> + {/* Tabs for navigation — label prop only, no inline content */} + <IgrTabs onChange={handleTabChange}> + {tabs.map((tab) => ( + <IgrTab + key={tab.path} + label={tab.label} + selected={location.pathname === tab.path} + /> + ))} + </IgrTabs> + + {/* Router outlet renders the routed view */} + <main> + <Outlet /> + </main> + </div> + ); +} +``` + +**Key rules for tabs-as-navigation:** +- ✅ Use only `IgrTab` with label prop or `slot="label"` — no inline content +- ✅ Sync the active tab to the current route using the `selected` prop +- ✅ Handle `onChange` to call `navigate()` for route changes +- ✅ Use `<Outlet />` (or the equivalent in your router) for content rendering diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REFS-FORMS.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REFS-FORMS.md new file mode 100644 index 000000000..639b83113 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REFS-FORMS.md @@ -0,0 +1,229 @@ +# Refs & Forms + +## Refs & Imperative API + +Use `useRef` to access the underlying web component element and call imperative methods (e.g., showing/hiding a dialog, focusing an input). +Components from `igniteui-react`, `igniteui-react-grids` and `igniteui-react-dockmanager` are React Function Components forward the native element to `useRef` and expose alias with the same name for accessing the custom element API: + +```tsx +import { useRef } from 'react'; +import { IgrDialog, IgrButton, IgrInput } from 'igniteui-react'; + +function MyPage() { + const dialogRef = useRef<IgrDialog>(null); + const inputRef = useRef<IgrInput>(null); + + const openDialog = () => { + // Access the underlying web component and call its methods + dialogRef.current?.show(); + }; + + const focusInput = () => { + inputRef.current?.focus(); + }; + + return ( + <> + <IgrButton onClick={openDialog}> + <span>Open Dialog</span> + </IgrButton> + + <IgrDialog ref={dialogRef} title="Confirmation"> + <p>Are you sure?</p> + <IgrButton slot="footer" onClick={() => dialogRef.current?.hide()}> + <span>Close</span> + </IgrButton> + </IgrDialog> + + <IgrButton onClick={focusInput}> + <span>Focus Input</span> + </IgrButton> + <IgrInput ref={inputRef} label="Name" /> + </> + ); +} +``` + +> **Tip:** The ref gives you direct access to the web component's DOM element. You can call any method documented in the web component API. + + +## Uncontrolled Components + +`igniteui-react` Inputs integrate with the native form handling through Element internals, allowing to take advantage of the native state management adn validation to create intuitive, straight-forward forms: + +```tsx +import { useRef } from 'react'; +import { IgrInput, IgrButton } from 'igniteui-react'; + +function SimpleForm() { + const nameRef = useRef<IgrInput>(null); + + const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { + // e.preventDefault(); // optionally prevent default submit form custom handling + const formData = new FormData(e.target); + }; + + return ( + <form onSubmit={handleSubmit}> + <IgrInput name="name" label="Name" required={true} /> + <IgrInput name="description" label="description" minLength={0}> + <IgrButton type="submit"> + <span>Submit</span> + </IgrButton> + </form> + ); +} +``` + +## Controlled Components with `useState` + +Wire up Ignite UI form components with React state for controlled behavior: + +```tsx +import { useState } from 'react'; +import { IgrInput, IgrCheckbox, IgrSelect, IgrSelectItem } from 'igniteui-react'; + +function ProfileForm() { + const [name, setName] = useState(''); + const [newsletter, setNewsletter] = useState(false); + const [role, setRole] = useState('user'); + + return ( + <form> + <IgrInput + label="Name" + value={name} + onInput={(e: CustomEvent<string>) => setName(e.detail) } + /> + + <IgrCheckbox + checked={newsletter} + onChange={(e: CustomEvent<IgcCheckboxChangeEventArgs>) => + setNewsletter(e.detail.checked) + } + > + Subscribe to newsletter + </IgrCheckbox> + + <IgrSelect + label="Role" + value={role} + onChange={(e: CustomEvent<IgcSelectItemComponent>) => + setRole(e.detail.value) + } + > + <IgrSelectItem value="user">User</IgrSelectItem> + <IgrSelectItem value="admin">Admin</IgrSelectItem> + <IgrSelectItem value="editor">Editor</IgrSelectItem> + </IgrSelect> + </form> + ); +} +``` + +## React Hook Form Integration + +Ignite UI components are form-associated web components. You can integrate them with React Hook Form using `Controller`: + +```tsx +import { useForm, Controller } from 'react-hook-form'; +import { IgrInput, IgrCheckbox, IgrButton } from 'igniteui-react'; + +interface FormData { + email: string; + acceptTerms: boolean; +} + +function SignUpForm() { + const { control, handleSubmit, formState: { errors } } = useForm<FormData>(); + + const onSubmit = (data: FormData) => { + console.log(data); + }; + + return ( + <form onSubmit={handleSubmit(onSubmit)}> + <Controller + name="email" + control={control} + rules={{ required: 'Email is required' }} + render={({ field }) => ( + <IgrInput + label="Email" + type="email" + value={field.value || ''} + onInput={(e: CustomEvent<string>) => + field.onChange(e.detail) + } + onBlur={() => field.onBlur()} + invalid={!!errors.email} + /> + )} + /> + {errors.email && <span>{errors.email.message}</span>} + + <Controller + name="acceptTerms" + control={control} + rules={{ required: 'You must accept the terms' }} + render={({ field }) => ( + <IgrCheckbox + checked={field.value || false} + onChange={(e: CustomEvent<IgcCheckboxChangeEventArgs>) => + field.onChange(e.detail.checked) + } + > + I accept the terms and conditions + </IgrCheckbox> + )} + /> + + <IgrButton type="submit"> + <span>Sign Up</span> + </IgrButton> + </form> + ); +} +``` + +## TypeScript + +### Importing Component Types + +Each component exports its props interface. Import and use them for type-safe code: + +```tsx +import { IgrButton, IgrInput } from 'igniteui-react'; +import type { ComponentProps } from 'react'; + +// Get the props type for a component +type ButtonProps = ComponentProps<typeof IgrButton>; +type InputProps = ComponentProps<typeof IgrInput>; + +// Use in your own components +interface FormFieldProps { + label: string; + inputProps?: Partial<InputProps>; +} + +function FormField({ label, inputProps }: FormFieldProps) { + return ( + <div> + <IgrInput label={label} {...inputProps} /> + </div> + ); +} +``` + +### Auto-complete + +IDEs with TypeScript support will provide auto-complete for all `Igr*` component props. Make sure your `tsconfig.json` includes: + +```json +{ + "compilerOptions": { + "jsx": "react-jsx", + "moduleResolution": "bundler" + } +} +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REVEAL-SDK.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REVEAL-SDK.md new file mode 100644 index 000000000..d9babd349 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/REVEAL-SDK.md @@ -0,0 +1,198 @@ +# Reveal SDK Integration + +Reveal SDK is a companion product for embedding interactive BI dashboards and data visualizations inside your React application. It requires client-side runtime dependencies, a backend Reveal server, and proper initialization. + +> **⚠️ IMPORTANT:** `RvRevealView` is NOT self-sufficient. You must load the Reveal client runtime, configure the backend URL, and initialize Reveal properly using `useEffect` after mount — never in the render phase. + +## Step 1: Install Dependencies + +```bash +npm install reveal-sdk-wrappers-react reveal-sdk-wrappers +``` + +## Step 2: Load Reveal Client Runtime + +Reveal SDK requires these client-side scripts to be loaded **before** using any Reveal components. Add them to your `index.html` or load them dynamically: + +```html +<!-- In public/index.html (or equivalent) --> +<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> +<script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.5/dayjs.min.js"></script> +<script src="https://dl.revealbi.io/reveal/libs/1.6.4/infragistics.reveal.js"></script> +``` + +Replace `1.6.4` with your Reveal SDK version. + +> **Note:** The Reveal SDK exposes its API through the `$.ig` global namespace. If TypeScript reports that `$` is not defined, add this declaration: +> ```tsx +> declare const $: any; +> ``` + +## Step 3: Container Sizing (REQUIRED) + +Reveal views require a **properly sized container**. Without explicit dimensions, the dashboard will not render: + +```css +/* dashboard.module.css */ +.reveal-container { + width: 100%; + height: 100%; + min-width: 400px; + min-height: 400px; +} +``` + +## Step 4: Basic Integration Pattern + +> **⚠️ CRITICAL:** Always initialize Reveal in `useEffect` after the component mounts — never during render. Add guards for missing `$` and `$.ig` to prevent errors if scripts haven't loaded. + +```tsx +import { useEffect, useRef } from 'react'; +import styles from './dashboard.module.css'; + +declare const $: any; + +export default function DashboardView() { + const containerRef = useRef<HTMLDivElement>(null); + const revealViewRef = useRef<any>(null); + + useEffect(() => { + // Guard: Ensure Reveal runtime is loaded + if (typeof $ === 'undefined' || !$.ig) { + console.error('Reveal SDK runtime not loaded. Ensure jQuery, Day.js, and infragistics.reveal.js are included.'); + return; + } + + // Guard: Prevent double initialization + if (revealViewRef.current) { + return; + } + + // Guard: Ensure container exists + if (!containerRef.current) { + return; + } + + // Configure Reveal SDK backend URL (REQUIRED) + $.ig.RevealSdkSettings.setBaseUrl('https://your-reveal-server/reveal-api/'); + + // Initialize RevealView with the container element + revealViewRef.current = new $.ig.RevealView(containerRef.current); + + // Optional: Load a specific dashboard + // $.ig.RVDashboard.loadDashboard('your-dashboard-id').then((dashboard: any) => { + // revealViewRef.current.dashboard = dashboard; + // }); + + // Cleanup on unmount + return () => { + if (revealViewRef.current) { + revealViewRef.current = null; + } + }; + }, []); + + return <div ref={containerRef} className={styles['reveal-container']} />; +} +``` + +## Using RvRevealView Wrapper (Alternative) + +The `RvRevealView` wrapper simplifies some boilerplate but still requires proper runtime setup and `useEffect` initialization: + +```tsx +import { useEffect } from 'react'; +import { RvRevealView } from 'reveal-sdk-wrappers-react'; +import { RevealViewOptions } from 'reveal-sdk-wrappers'; +import styles from './dashboard.module.css'; + +declare const $: any; + +export default function DashboardView() { + useEffect(() => { + // Guard: Ensure Reveal runtime is loaded + if (typeof $ === 'undefined' || !$.ig) { + console.error('Reveal SDK runtime not loaded.'); + return; + } + + // Configure backend URL (REQUIRED) — must be done before render + $.ig.RevealSdkSettings.setBaseUrl('https://your-reveal-server/reveal-api/'); + + // Optional: Apply theme sync with Ignite UI + setRevealTheme(); + }, []); + + const options: RevealViewOptions = { + visualizations: { + menu: { + copy: false, + duplicate: false + } + } + }; + + return ( + <div className={styles['reveal-container']}> + <RvRevealView options={options} /> + </div> + ); +} + +function setRevealTheme() { + // Guard: Ensure $.ig exists + if (typeof $ === 'undefined' || !$.ig) return; + + const style = window.getComputedStyle(document.body); + const theme = new $.ig.RevealTheme(); + + // Sync fonts with Ignite UI + theme.regularFont = style.getPropertyValue('--ig-font-family').trim() || 'sans-serif'; + theme.mediumFont = theme.regularFont; + theme.boldFont = theme.regularFont; + + // Auto-detect light/dark mode + const color = style.getPropertyValue('--ig-surface-500').trim() || '#fff'; + const [r, g, b] = [1, 3, 5].map(i => parseInt(color.substring(i, i + 2), 16)); + const brightness = (r * 299 + g * 587 + b * 114) / 1000; + + theme.isDark = brightness < 128; + theme.fontColor = theme.isDark ? 'white' : 'black'; + theme.dashboardBackgroundColor = style.getPropertyValue('--ig-gray-100').trim(); + theme.visualizationBackgroundColor = style.getPropertyValue('--ig-surface-500').trim(); + + $.ig.RevealSdkSettings.theme = theme; +} +``` + +## Token Mapping Reference (Theme Sync) + +| Reveal Theme Property | Ignite UI CSS Token | Purpose | +|---|---|---| +| `regularFont`, `mediumFont`, `boldFont` | `--ig-font-family` | Font family | +| `isDark` | Computed from `--ig-surface-500` brightness | Light/dark mode detection | +| `fontColor` | Derived from `isDark` | Text color (white for dark, black for light) | +| `dashboardBackgroundColor` | `--ig-gray-100` | Dashboard background | +| `visualizationBackgroundColor` | `--ig-surface-500` | Individual visualization card background | + +## Common Issues + +### Reveal view is blank or throws errors +- **Cause:** Reveal runtime scripts not loaded (jQuery, Day.js, infragistics.reveal.js) +- **Solution:** Add the required scripts to `index.html` before your React app loads + +### `$` or `$.ig` is undefined +- **Cause:** Scripts not loaded or loaded after React component renders +- **Solution:** Ensure scripts are in `<head>` or loaded before React mounts; add guards in `useEffect` + +### Dashboard not visible +- **Cause:** Container has no dimensions +- **Solution:** Add explicit `width`, `height`, `min-width`, `min-height` to the container + +### Double initialization errors +- **Cause:** `useEffect` running multiple times (Strict Mode) without cleanup +- **Solution:** Use a ref to track initialization state and prevent re-initialization + +> **Tip:** When switching between light and dark Ignite UI themes, call `setRevealTheme()` again after the theme change so Reveal dashboards stay in sync. + +See the [customize-theme skill](../../igniteui-react-customize-theme/SKILL.md) for more details on Ignite UI CSS custom properties and theme switching. diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/TROUBLESHOOTING.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/TROUBLESHOOTING.md new file mode 100644 index 000000000..9bc5c6a85 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-components/reference/TROUBLESHOOTING.md @@ -0,0 +1,147 @@ +# Troubleshooting + +## Issue: Components render without styles + +**Cause:** Missing theme CSS import. Without the theme CSS, components will render with broken layouts, missing icons (showing placeholders), and no visual styling. + +**Solution:** Add the theme CSS import **before** any component usage. In Vite/CRA apps, add it to your entry point. In Next.js, add it to each client component file or the root layout: + +```tsx +// Always required for core components +import 'igniteui-webcomponents/themes/light/bootstrap.css'; + +// Also required when using grids (IgrGrid, IgrTreeGrid, etc.) +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; +``` + +**Next.js example:** + +```tsx +'use client'; + +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; + +import { IgrNavbar, IgrButton } from 'igniteui-react'; +import { IgrGrid, IgrColumn, IgrPaginator } from 'igniteui-react-grids'; +``` + +## Issue: Grid renders but icons show as placeholders and styles are missing + +**Cause:** The grid theme CSS (`igniteui-react-grids/grids/themes/...`) is not imported. The base theme CSS alone is not enough for grids. + +**Solution:** Import **both** theme CSS files: + +```tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; // Base theme +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; // Grid theme +``` + +## Issue: Grid Lite does not render or compilation error + +**Cause:** `IgrGridLite` is a React wrapper component from `igniteui-react/grid-lite`. It requires **both** `igniteui-react` and `igniteui-grid-lite` packages to be installed. It uses the `Igr` prefix (like all other Ignite UI React wrappers) and does **not** require any `.register()` call. + +**Solution:** + +1. Install both required packages: `npm install igniteui-react igniteui-grid-lite` +2. Import `IgrGridLite` from `igniteui-react/grid-lite` +3. Wrap in a sized container (see [CHARTS-GRIDS.md](./CHARTS-GRIDS.md) for a full example) + +## Issue: `IgrGridLite` is confused with `IgrGrid` from `igniteui-react-grids` + +**Solution:** These are different components: +- `igniteui-react/grid-lite` → lightweight MIT grid (`IgrGridLite`, React wrapper — no `.register()` needed, requires both `igniteui-react` and `igniteui-grid-lite` packages) +- `igniteui-react-grids` → full-featured commercial grids (`IgrGrid`, `IgrTreeGrid`, etc. — React wrappers) + +Import from the correct package for your needs: + +```tsx +// Lightweight grid (MIT, React wrapper, no registration needed) +import { IgrGridLite } from 'igniteui-react/grid-lite'; + +// Full-featured grid (commercial, React wrapper) +import { IgrGrid } from 'igniteui-react-grids'; +``` + +## Issue: Events fire but have unexpected shape + +**Cause:** Ignite UI events are `CustomEvent` objects from the underlying web component, not React `SyntheticEvent` objects. + +**Solution:** Type the handler parameter as `CustomEvent` and access `.detail` for event-specific data or `.target` for the element: + +```tsx +const handleChange = (e: CustomEvent) => { + const target = e.target as HTMLElement; + const detail = e.detail; + // Use target or detail as appropriate +}; +``` + +## Issue: Component methods not accessible + +**Solution:** Use `useRef` with the component type: + +```tsx +const dialogRef = useRef<IgrDialog>(null); + +// Call imperative method +dialogRef.current?.show(); +``` + +## Issue: Chart / gauge / map does not render or is invisible + +**Cause:** Two common causes: +1. The corresponding module was not registered (e.g., `IgrCategoryChartModule.register()` was not called) +2. The parent container has no explicit dimensions — these components inherit size from their container and will be invisible if the container has zero height/width + +**Solution:** + +1. **Register the module** at the top level of the file (outside the component): + +```tsx +import { IgrCategoryChart, IgrCategoryChartModule } from 'igniteui-react-charts'; +IgrCategoryChartModule.register(); +``` + +2. **Wrap the chart in a sized container** with explicit dimensions: + +```css +.chart-container { + min-width: 400px; + min-height: 300px; + flex-grow: 1; + flex-basis: 0; +} +.chart-container > * { height: 100%; width: 100%; } +``` + +```tsx +<div className={styles['chart-container']}> + <IgrCategoryChart dataSource={data} /> +</div> +``` + +## Issue: IgrTabs used for navigation fills the entire view with content + +**Cause:** Inline content was included in `IgrTab` elements when using tabs for navigation with React Router. The tab content areas take up space and push the routed content out of view. + +**Solution:** When using `IgrTabs` for navigation, use **only the label** (via `label` prop or `slot="label"`) — do NOT include inline content. Let the router's `<Outlet />` render the content: + +```tsx +// ✅ Correct — navigation tabs with label-only (no inline content) +<IgrTabs onChange={handleTabChange}> + <IgrTab label="Dashboard" selected={location.pathname === '/dashboard'} /> + <IgrTab label="Orders" selected={location.pathname === '/orders'} /> +</IgrTabs> +<Outlet /> + +// ❌ Wrong — inline content creates unwanted space when used for navigation +<IgrTabs> + <IgrTab label="Dashboard"> + <p>This content will show and take up space!</p> {/* Don't do this for navigation */} + </IgrTab> + <IgrTab label="Orders"> + <p>This content will show and take up space!</p> {/* Don't do this for navigation */} + </IgrTab> +</IgrTabs> +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/SKILL.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/SKILL.md new file mode 100644 index 000000000..cc1f16745 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/SKILL.md @@ -0,0 +1,182 @@ +--- +name: igniteui-react-customize-theme +description: This skill customizes Ignite UI for React component styling using CSS custom properties, Sass, and the full theming system and should be used when applying brand colors, dark mode, component-level overrides, or scoped themes in a React application +user-invocable: true +--- + +# Ignite UI for React — Theming Skill + +## Description + +This skill teaches AI agents how to theme Ignite UI for React applications. Two approaches are supported: + +- **CSS custom properties** — works in any project without additional build tooling +- **Sass** — available when the project has Sass configured; provides the full palette/typography/elevation API + +The skill also covers component-level theming, layout controls (spacing, sizing, roundness), and how to use the **Ignite UI Theming MCP server** for AI-assisted code generation — all in a React application context. + +## Example Usage + +- "How do I change the primary color in my Ignite UI React app?" +- "Apply a dark theme to my React app" +- "Customize the grid header colors" +- "How do I scope a theme to a specific section of my React app?" +- "Set up Material Design theming for Ignite UI components" + +## Prerequisites + +- A React project with `igniteui-react` installed +- A theme CSS file imported in your entry point (see [igniteui-react-components](../igniteui-react-components/SKILL.md)) +- **Optional**: Sass configured in the project (enables the Sass-based theming API) +- **Optional**: The **Ignite UI Theming MCP server** (`igniteui-theming`) for AI-assisted code generation + +## Related Skills + +- [igniteui-react-components](../igniteui-react-components/SKILL.md) — Choose the right components and set up your React project +- [igniteui-react-optimize-bundle-size](../igniteui-react-optimize-bundle-size/SKILL.md) — Optimize after theming + +## When to Use + +- Applying custom brand colors or a dark theme to an Ignite UI React app +- Overriding individual component styles (e.g., grid header color, button appearance) +- Switching between light and dark mode in a React app +- Scoping different themes to different sections of a React app +- Setting up the Ignite UI Theming MCP server for AI-assisted theming + +--- + +## Content Guide + +This skill is organized into focused sections. Refer to the appropriate file for detailed instructions: + +| Topic | File | When to Use | +|---|---|---| +| CSS Theming | [CSS-THEMING.md](./reference/CSS-THEMING.md) | Pre-built themes, CSS custom properties, scoped overrides, layout controls, light/dark switching | +| Sass Theming | [SASS-THEMING.md](./reference/SASS-THEMING.md) | Sass-based theming with palette(), component theme functions | +| MCP Server | [MCP-SERVER.md](./reference/MCP-SERVER.md) | AI-assisted theming code generation | +| Reveal Theme Sync | [REVEAL-THEME.md](./reference/REVEAL-THEME.md) | Syncing Reveal SDK dashboards with Ignite UI theme | +| Troubleshooting | [TROUBLESHOOTING.md](./reference/TROUBLESHOOTING.md) | Common issues and solutions | + +--- + +## Quick Start + +### 1. Import a Pre-built Theme (REQUIRED) + +```tsx +// main.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +**For grids**, also import: + +```tsx +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; +``` + +### 2. Override with CSS Custom Properties + +```css +/* src/index.css */ +:root { + --ig-primary-h: 211deg; + --ig-primary-s: 100%; + --ig-primary-l: 50%; +} +``` + +```tsx +// main.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; // Theme first +import './index.css'; // Overrides second +``` + +--- + +## Theming Architecture + +The Ignite UI theming system is built on four pillars: + +| Concept | Purpose | +|---|---| +| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families | +| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | +| **Elevations** | Box-shadow levels 0–24 for visual depth | +| **Schema** | Per-component recipes mapping palette colors to component tokens | + +### Design Systems + +- **Bootstrap** (default), **Material**, **Fluent**, **Indigo** +- Each has light and dark variants + +--- + +## Key Concepts + +### CSS Custom Properties + +Override tokens in your CSS: + +```css +:root { --ig-primary-h: 211deg; } +.admin-panel { --ig-primary-h: 260deg; } +``` + +### Component-Level Theming + +Target web component tag names in CSS: + +```css +igc-button { --ig-button-foreground: var(--ig-secondary-500); } +``` + +### CSS `::part()` Selectors + +```css +igc-input::part(input) { font-size: 1.1rem; } +``` + +### Layout Controls + +```css +:root { + --ig-size: 2; /* 1=small, 2=medium, 3=large */ + --ig-spacing: 1; /* 0.5=compact, 1=default, 2=spacious */ + --ig-radius-factor: 1; /* 0=square, 1=max radius */ +} +``` + +### Light/Dark Switching + +See [CSS-THEMING.md](./reference/CSS-THEMING.md) for approaches: class toggle, media query, or stylesheet swap. + +--- + +## Best Practices + +1. **Import theme CSS first**, then your custom overrides +2. **Use palette tokens** (`var(--ig-primary-500)`) for all colors — never hardcode hex values +3. **Use CSS custom properties on `:root`** for global theme adjustments +4. **Scope overrides with CSS classes** for different sections +5. **Use `::part()` selectors** to style shadow DOM internals +6. **In CSS selectors, use web component tag names** (`igc-button`), not React names (`IgrButton`) +7. **Test both light and dark themes** +8. **Use the MCP server** for AI-assisted theme generation when available + +## Key Rules + +1. **Never overwrite existing files directly** — propose theme code as an update for user review +2. **Always call `detect_platform` first** when using MCP tools +3. **Always call `get_component_design_tokens` before `create_component_theme`** +4. **Palette shades**: 50 = lightest, 900 = darkest +5. **Surface color must match variant** — light color for `light`, dark for `dark` +6. **Sass**: Use `@use 'igniteui-theming'` — not `igniteui-angular/theming` +7. **Sass**: Component themes use `@include tokens($theme)` inside a selector +8. **Never hardcode colors after palette generation** + +## Additional Resources + +- [Ignite UI for React — Themes Overview](https://www.infragistics.com/products/ignite-ui-react/react/components/themes/overview) +- [igniteui-theming npm package](https://www.npmjs.com/package/igniteui-theming) +- [CSS Custom Properties on MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) +- [CSS ::part() on MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/::part) diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md new file mode 100644 index 000000000..02fce342e --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md @@ -0,0 +1,265 @@ +# CSS Theming + +This guide covers theming Ignite UI for React using CSS custom properties — works in any project without additional build tooling. + +## Pre-built Themes + +Import a pre-built CSS file in your React entry point: + +```tsx +// main.tsx or index.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +> **CRITICAL:** Theme CSS imports are **required** for components to render correctly. + +**For grids**, you **must also** import the grid theme CSS: + +```tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; +``` + +### Available Pre-built CSS Files + +| Import path | Theme | +|---|---| +| `igniteui-webcomponents/themes/light/bootstrap.css` | Bootstrap Light | +| `igniteui-webcomponents/themes/dark/bootstrap.css` | Bootstrap Dark | +| `igniteui-webcomponents/themes/light/material.css` | Material Light | +| `igniteui-webcomponents/themes/dark/material.css` | Material Dark | +| `igniteui-webcomponents/themes/light/fluent.css` | Fluent Light | +| `igniteui-webcomponents/themes/dark/fluent.css` | Fluent Dark | +| `igniteui-webcomponents/themes/light/indigo.css` | Indigo Light | +| `igniteui-webcomponents/themes/dark/indigo.css` | Indigo Dark | + +Grid theme CSS files follow the same pattern under `igniteui-react-grids/grids/themes/`. + +### Next.js + +In Next.js, import the theme CSS in each client component file or in a shared root layout: + +```tsx +// app/layout.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + <html lang="en"> + <body>{children}</body> + </html> + ); +} +``` + +## Custom Theme via CSS Custom Properties + +After importing a pre-built theme, override individual design tokens with CSS custom properties. + +### Global Overrides (in your CSS file) + +```css +/* src/index.css */ +:root { + --ig-primary-h: 211deg; + --ig-primary-s: 100%; + --ig-primary-l: 50%; + + --ig-secondary-h: 33deg; + --ig-secondary-s: 100%; + --ig-secondary-l: 50%; +} +``` + +Import it in your entry point: + +```tsx +// main.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; // Theme first +import './index.css'; // Overrides — must come after the theme import +``` + +### Scoped Overrides + +Use a CSS class to scope theme overrides to a specific container: + +```css +/* src/AdminPanel.css */ +.admin-panel { + --ig-primary-h: 260deg; + --ig-primary-s: 60%; + --ig-primary-l: 45%; +} +``` + +```tsx +// AdminPanel.tsx +import './AdminPanel.css'; +import { IgrButton, IgrInput } from 'igniteui-react'; + +function AdminPanel() { + return ( + <div className="admin-panel"> + <IgrInput label="Admin Search" /> + <IgrButton>Save</IgrButton> + </div> + ); +} +``` + +### CSS Modules + +```css +/* AdminPanel.module.css */ +.panel { + --ig-primary-h: 260deg; + --ig-primary-s: 60%; + --ig-primary-l: 45%; +} +``` + +```tsx +import styles from './AdminPanel.module.css'; +import { IgrButton } from 'igniteui-react'; + +function AdminPanel() { + return ( + <div className={styles.panel}> + <IgrButton>Save</IgrButton> + </div> + ); +} +``` + +### Inline Styles on a Wrapper + +For truly dynamic one-off overrides: + +```tsx +<div style={{ '--ig-primary-h': '260deg', '--ig-primary-s': '60%', '--ig-primary-l': '45%' } as React.CSSProperties}> + <IgrButton>Custom Color Button</IgrButton> +</div> +``` + +> **Note:** TypeScript requires the `as React.CSSProperties` cast. Prefer CSS classes when possible. + +## Component-Level Theming + +Override individual component appearance using CSS custom properties. + +```css +/* Target the Ignite UI web component tag name */ +igc-avatar { + --ig-avatar-background: var(--ig-primary-500); + --ig-avatar-color: var(--ig-primary-500-contrast); +} + +igc-button { + --ig-button-foreground: var(--ig-secondary-500); +} +``` + +> **IMPORTANT — No Hardcoded Colors** +> +> ✅ **Right:** `--ig-avatar-background: var(--ig-primary-500);` +> ❌ **Wrong:** `--ig-avatar-background: #E91E63;` + +### CSS `::part()` Selectors + +Use `::part()` selectors to style shadow DOM internal elements: + +```css +igc-input::part(input) { + font-size: 1.1rem; +} + +igc-card::part(header) { + padding: 1rem; +} +``` + +> **Note:** In CSS, use web component tag names (`igc-input`), not React component names (`IgrInput`). + +## Layout Controls + +### Sizing + +```css +:root { --ig-size: 2; } /* 1 = small, 2 = medium, 3 = large */ +igc-button { --ig-size: 1; } +``` + +### Spacing + +```css +:root { --ig-spacing: 1; } /* 0.5 = compact, 1 = default, 2 = spacious */ +.compact-section { --ig-spacing: 0.75; } +``` + +### Roundness + +```css +:root { --ig-radius-factor: 1; } /* 0 = square, 1 = maximum radius */ +igc-avatar { --ig-radius-factor: 0.5; } +``` + +## Switching Between Light and Dark Themes + +### Approach 1: CSS class toggle + +```tsx +import { useState } from 'react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +import './theme-overrides.css'; + +function App() { + const [isDark, setIsDark] = useState(false); + + return ( + <div className={isDark ? 'dark-theme' : ''}> + <button onClick={() => setIsDark(!isDark)}>Toggle Theme</button> + </div> + ); +} +``` + +```css +/* theme-overrides.css */ +.dark-theme { + --ig-surface-h: 0deg; + --ig-surface-s: 0%; + --ig-surface-l: 7%; + + --ig-gray-h: 0deg; + --ig-gray-s: 0%; + --ig-gray-l: 100%; +} +``` + +### Approach 2: CSS media query + +```css +@media (prefers-color-scheme: dark) { + :root { + --ig-surface-h: 0deg; + --ig-surface-s: 0%; + --ig-surface-l: 7%; + } +} +``` + +### Approach 3: Dynamically swap theme stylesheet + +```tsx +import { useEffect } from 'react'; + +function useTheme(variant: 'light' | 'dark', design = 'bootstrap') { + useEffect(() => { + const link = document.getElementById('igc-theme') as HTMLLinkElement; + if (link) { + link.href = `node_modules/igniteui-webcomponents/themes/${variant}/${design}.css`; + } + }, [variant, design]); +} +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md new file mode 100644 index 000000000..ecc05fd03 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md @@ -0,0 +1,75 @@ +# Ignite UI Theming MCP Server + +The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in your editor before the theming tools become available. + +> **AGENT INSTRUCTION — MCP Server Setup (REQUIRED)** +> +> Before using any theming tools, you MUST verify the MCP server is available +> by calling `detect_platform`. If the tool is not available or the call fails, +> configure it by following the setup steps below. + +## VS Code Setup + +Create or edit `.vscode/mcp.json` in your project: + +```json +{ + "servers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +## Cursor Setup + +Create or edit `.cursor/mcp.json`: + +```json +{ + "mcpServers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +## Claude Desktop Setup + +Edit the Claude Desktop config file: +- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` +- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` + +```json +{ + "mcpServers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +## WebStorm / JetBrains IDEs Setup + +1. Go to **Settings → Tools → AI Assistant → MCP Servers** +2. Click **+ Add MCP Server** +3. Set Command to `npx` and Arguments to `igniteui-theming igniteui-theming-mcp` +4. Click OK and restart the AI Assistant + +## MCP Server Workflow + +1. **Detect platform**: Call `detect_platform` — it will detect `webcomponents` from `package.json` +2. **Generate a theme**: Call `create_theme` with your desired colors and design system +3. **Customize components**: Call `get_component_design_tokens` first, then `create_component_theme` with palette token values +4. **Get color references**: Call `get_color` to get the correct CSS custom property for any palette shade +5. **Adjust layout**: Call `set_size`, `set_spacing`, or `set_roundness` + +## File Safety Rule + +> **IMPORTANT — File Safety Rule**: When generating theme code, **never overwrite existing style files directly**. Always propose changes as an update and let the user review before writing to disk. diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/REVEAL-THEME.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/REVEAL-THEME.md new file mode 100644 index 000000000..77e2333b7 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/REVEAL-THEME.md @@ -0,0 +1,86 @@ +# Reveal SDK Theme Sync + +When the project includes Reveal SDK (`reveal-sdk-wrappers-react`) alongside Ignite UI for React, the Reveal dashboard theme should be synced with the active Ignite UI theme. + +> **⚠️ IMPORTANT:** Reveal SDK requires client runtime scripts (jQuery, Day.js, infragistics.reveal.js) to be loaded and initialization must happen in `useEffect` after mount. See [REVEAL-SDK.md](../../igniteui-react-components/reference/REVEAL-SDK.md) for full setup instructions. + +## How It Works + +Ignite UI themes expose CSS custom properties (`--ig-font-family`, `--ig-surface-500`, `--ig-gray-100`, etc.) on the page. The Reveal SDK has its own `$.ig.RevealTheme` object that controls dashboard appearance. The sync function reads the Ignite UI tokens from computed styles and maps them to Reveal's theme properties. + +## Reveal Theme Sync Function + +Call this function in `useEffect` when initializing a component that uses Reveal. Always guard against missing `$` and `$.ig`: + +```tsx +import { useEffect } from 'react'; + +declare const $: any; + +function setRevealTheme() { + // Guard: Ensure Reveal runtime is loaded + if (typeof $ === 'undefined' || !$.ig) { + console.error('Reveal SDK runtime not loaded.'); + return; + } + + const style = window.getComputedStyle(document.body); + const theme = new $.ig.RevealTheme(); + + // 1. Sync fonts with the Ignite UI --ig-font-family token + theme.regularFont = style.getPropertyValue('--ig-font-family')?.trim() || 'sans-serif'; + theme.mediumFont = theme.regularFont; + theme.boldFont = theme.regularFont; + + // 2. Auto-detect light/dark from surface color brightness + const color = style.getPropertyValue('--ig-surface-500').trim() || '#fff'; + const [r, g, b] = [1, 3, 5].map(i => parseInt(color.substring(i, i + 2), 16)); + const brightness = (r * 299 + g * 587 + b * 114) / 1000; + + theme.isDark = brightness < 128; + theme.fontColor = theme.isDark ? 'white' : 'black'; + + // 3. Sync background colors with Ignite UI palette tokens + theme.dashboardBackgroundColor = style.getPropertyValue('--ig-gray-100').trim(); + theme.visualizationBackgroundColor = style.getPropertyValue('--ig-surface-500').trim(); + + $.ig.RevealSdkSettings.theme = theme; +} + +// Example usage in a component +function DashboardView() { + useEffect(() => { + // Initialize theme sync after mount + setRevealTheme(); + }, []); + + // ... component implementation +} +``` + +## Token Mapping Reference + +| Reveal Theme Property | Ignite UI CSS Token | Purpose | +|---|---|---| +| `regularFont`, `mediumFont`, `boldFont` | `--ig-font-family` | Font family | +| `isDark` | Computed from `--ig-surface-500` brightness | Light/dark mode detection | +| `fontColor` | Derived from `isDark` | Text color (white for dark, black for light) | +| `dashboardBackgroundColor` | `--ig-gray-100` | Dashboard background | +| `visualizationBackgroundColor` | `--ig-surface-500` | Individual visualization card background | + +## Re-syncing After Theme Switch + +When the user switches between light and dark Ignite UI themes, call `setRevealTheme()` again to update the Reveal dashboard: + +```tsx +function handleThemeToggle() { + // ... toggle Ignite UI theme (e.g., swap CSS imports) + + // Re-sync Reveal theme after DOM updates + requestAnimationFrame(() => { + setRevealTheme(); + }); +} +``` + +See the [components skill](../../igniteui-react-components/reference/REVEAL-SDK.md) for full Reveal SDK setup instructions including installation, runtime scripts, and `$.ig.RevealView` initialization. diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/SASS-THEMING.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/SASS-THEMING.md new file mode 100644 index 000000000..2ce76fdf4 --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/SASS-THEMING.md @@ -0,0 +1,125 @@ +# Sass Theming + +> Requires Sass configured in the project (e.g., `sass` in `devDependencies` and Vite/webpack configured to handle `.scss` files). + +## Basic Setup + +```scss +// src/styles.scss +@use 'igniteui-theming' as *; + +// 1. Define a palette +$my-palette: palette( + $primary: #1976D2, + $secondary: #FF9800, + $surface: #FAFAFA +); + +// 2. Apply the palette +@include palette($my-palette); + +// 3. Optional: Typography +@include typography($font-family: "'Roboto', sans-serif"); + +// 4. Optional: Elevations +@include elevations(); + +// 5. Optional: Spacing +@include spacing(); +``` + +Import in your React entry point: + +```tsx +// main.tsx +import './styles.scss'; +``` + +## Dark Theme + +For dark themes, use a dark surface color and a dark schema: + +```scss +@use 'igniteui-theming' as *; + +$dark-palette: palette( + $primary: #90CAF9, + $secondary: #FFB74D, + $surface: #121212 +); + +@include palette($dark-palette, $schema: $dark-material-schema); +``` + +> **Important:** Use `@use 'igniteui-theming'` — not `igniteui-angular/theming` or Angular-specific `core()` / `theme()` mixins. + +## Component-Level Theming with Sass + +When Sass is configured, use component theme functions and the `tokens` mixin: + +```scss +@use 'igniteui-theming' as *; + +$custom-avatar: avatar-theme( + $schema: $light-material-schema, + $background: var(--ig-primary-500), + $color: var(--ig-primary-500-contrast) +); + +igc-avatar { + @include tokens($custom-avatar); +} +``` + +## Light/Dark Toggle with Sass + +```scss +@use 'igniteui-theming' as *; + +$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA); +$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212); + +@include typography($font-family: "'Roboto', sans-serif"); +@include elevations(); + +// Light is default +@include palette($light-palette, $schema: $light-material-schema); + +// Dark via class on a container or <body> +.dark-theme { + @include palette($dark-palette, $schema: $dark-material-schema); +} +``` + +## Theming Architecture + +The Ignite UI theming system is built on four pillars: + +| Concept | Purpose | +|---|---| +| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families, each with shades 50–900 + accents A100–A700 | +| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | +| **Elevations** | Box-shadow levels 0–24 for visual depth | +| **Schema** | Per-component recipes mapping palette colors to component tokens | + +### Design Systems + +Four built-in design systems are available: + +- **Material** (default) — Material Design 3 +- **Bootstrap** — Bootstrap-inspired +- **Fluent** — Microsoft Fluent Design +- **Indigo** — Infragistics Indigo Design + +Each has light and dark variants (e.g., `$light-material-schema`, `$dark-fluent-schema`). + +### Palette Shades + +- Shades 50 = lightest, 900 = darkest for all chromatic colors +- Surface color must match the variant — light color for `light`, dark color for `dark` + +## Key Rules + +1. **Sass**: Use `@use 'igniteui-theming'` — not `igniteui-angular/theming` +2. **Sass**: Component themes use `@include tokens($theme)` inside a selector +3. **Never hardcode colors after palette generation** — use `var(--ig-<family>-<shade>)` palette tokens everywhere diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/TROUBLESHOOTING.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/TROUBLESHOOTING.md new file mode 100644 index 000000000..5faef71ca --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-customize-theme/reference/TROUBLESHOOTING.md @@ -0,0 +1,35 @@ +# Theming Troubleshooting + +## Issue: Theme overrides not taking effect + +**Cause:** Override CSS is loaded before the theme CSS. + +**Solution:** Make sure your custom CSS is imported *after* the theme: + +```tsx +// main.tsx +import 'igniteui-webcomponents/themes/light/bootstrap.css'; // Theme first +import './custom-overrides.css'; // Overrides second +``` + +## Issue: CSS custom properties not recognized by TypeScript in inline styles + +**Solution:** Cast to `React.CSSProperties`: + +```tsx +<div style={{ '--ig-primary-h': '260deg' } as React.CSSProperties}> +``` + +## Issue: Component-level CSS selectors don't match + +**Cause:** Using React component name instead of web component tag name in CSS. + +**Solution:** Use the underlying web component tag name in CSS selectors: + +```css +/* ✅ Correct — web component tag */ +igc-button { --ig-size: 1; } + +/* ❌ Wrong — React wrapper name */ +IgrButton { --ig-size: 1; } +``` diff --git a/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-optimize-bundle-size/SKILL.md b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-optimize-bundle-size/SKILL.md new file mode 100644 index 000000000..cad2d537d --- /dev/null +++ b/packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/skills/igniteui-react-optimize-bundle-size/SKILL.md @@ -0,0 +1,439 @@ +--- +name: igniteui-react-optimize-bundle-size +description: This skill optimizes application bundle size when using Ignite UI for React and should be used when the bundle is too large, when setting up tree-shaking, or when lazy loading heavy components like grids and charts +user-invocable: true +--- + +# Optimize Bundle Size + +This skill helps users minimize their React application's bundle size when using Ignite UI for React by importing only the components they need, leveraging tree-shaking, and applying lazy loading strategies. + +## Example Usage + +- "My bundle size is too large" +- "How do I reduce the size of igniteui-react?" +- "Import only the components I need" +- "Tree-shake unused components" +- "Optimize imports for production" +- "How do I lazy load the data grid?" + +## Related Skills + +- [igniteui-react-components](../igniteui-react-components/SKILL.md) — Choose only the components you need and set up your React project +- [igniteui-react-customize-theme](../igniteui-react-customize-theme/SKILL.md) — Theming after optimization + +## When to Use + +- Application bundle size is too large +- User wants to optimize for production +- User is importing more components than needed +- User asks about tree-shaking or optimization +- User wants to improve load times +- User wants to code-split heavy components like grids or charts + +--- + +## Key Principles + +1. **Install only the packages you need** — don't install `igniteui-react-grids` if you only use core UI components +2. **Use named imports** — enable tree-shaking by importing specific components +3. **Lazy load heavy components** — use `React.lazy` + `Suspense` for grids, charts, and other large components +4. **Analyze your bundle** — use tools to identify what's being included + +--- + +## Granular Package Imports + +Only install the packages you actually use: + +| Package | Contains | Install only if you need… | +|---|---|---| +| `igniteui-react` | Buttons, inputs, dialogs, calendars, lists, etc. | Core UI components | +| `igniteui-react` + `igniteui-grid-lite` | Lightweight grid (`IgrGridLite` from `igniteui-react/grid-lite`) | Simple tabular data (MIT, requires both packages) | +| `igniteui-react-grids` | DataGrid, TreeGrid, PivotGrid, HierarchicalGrid | Advanced data grids (commercial) | +| `igniteui-react-charts` | Category, Pie, Financial, Scatter charts | Charts and data visualization (commercial) | +| `igniteui-react-maps` | Geographic maps | Map visualizations (commercial) | +| `igniteui-react-gauges` | Radial and linear gauges | Gauge indicators (commercial) | + +```bash +# Only install what you need: +npm install igniteui-react # Core UI only +npm install igniteui-react-grids # Only if you need advanced grids +npm install igniteui-react-charts # Only if you need charts +``` + +--- + +## Import Strategies + +### ❌ Bad: Wildcard / Barrel Imports + +```tsx +// DON'T DO THIS — imports everything from the package +import * as IgniteUI from 'igniteui-react'; + +function App() { + return <IgniteUI.IgrButton>Click</IgniteUI.IgrButton>; +} +``` + +**Impact:** Tree-shaking cannot eliminate unused components. + +### ✅ Good: Named Imports + +```tsx +// DO THIS — import only what you use +import { IgrButton, IgrInput, IgrCard } from 'igniteui-react'; + +function App() { + return ( + <div> + <IgrInput label="Name" /> + <IgrButton><span>Submit</span></IgrButton> + <IgrCard>Content</IgrCard> + </div> + ); +} +``` + +**Impact:** Bundle includes only the three components and their dependencies. Tree-shaking removes everything else. + +--- + +## Lazy Loading with `React.lazy` + `Suspense` + +Code-split heavy components behind lazy imports to reduce initial bundle size. + +### Lazy Loading a Single Component + +```tsx +import { lazy, Suspense, useState } from 'react'; + +// Lazy load the dialog component +const IgrDialog = lazy(() => + import('igniteui-react').then(module => ({ default: module.IgrDialog })) +); + +function App() { + const [showDialog, setShowDialog] = useState(false); + + return ( + <> + <button onClick={() => setShowDialog(true)}>Open Dialog</button> + {showDialog && ( + <Suspense fallback={<div>Loading...</div>}> + <IgrDialog open title="Hello"> + <p>Lazy loaded dialog content</p> + </IgrDialog> + </Suspense> + )} + </> + ); +} +``` + +### Lazy Loading a Heavy Page Component + +This is the recommended approach for code-splitting: wrap entire page components that use heavy Ignite UI components. + +```tsx +// App.tsx +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import { lazy, Suspense } from 'react'; + +const HomePage = lazy(() => import('./pages/Home')); +const DashboardPage = lazy(() => import('./pages/Dashboard')); +const AnalyticsPage = lazy(() => import('./pages/Analytics')); + +function App() { + return ( + <BrowserRouter> + <Suspense fallback={<div>Loading...</div>}> + <Routes> + <Route path="/" element={<HomePage />} /> + <Route path="/dashboard" element={<DashboardPage />} /> + <Route path="/analytics" element={<AnalyticsPage />} /> + </Routes> + </Suspense> + </BrowserRouter> + ); +} +``` + +```tsx +// pages/Dashboard.tsx — only loaded when navigating to /dashboard +import { IgrGrid, IgrColumn } from 'igniteui-react-grids'; +import 'igniteui-react-grids/grids/themes/light/bootstrap.css'; + +export default function Dashboard() { + return ( + <IgrGrid data={data} autoGenerate={false}> + <IgrColumn field="name" header="Name" /> + <IgrColumn field="value" header="Value" /> + </IgrGrid> + ); +} +``` + +```tsx +// pages/Analytics.tsx — only loaded when navigating to /analytics +import { IgrCategoryChart, IgrCategoryChartModule } from 'igniteui-react-charts'; + +IgrCategoryChartModule.register(); + +export default function Analytics() { + return <IgrCategoryChart dataSource={data} width="100%" height="500px" />; +} +``` + +**Result:** The grid and chart bundles are only downloaded when the user navigates to those routes. + +--- + +## Analyzing Your Bundle + +### Using Vite's Rollup Visualizer + +```bash +npm install --save-dev rollup-plugin-visualizer +``` + +```typescript +// vite.config.ts +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { visualizer } from 'rollup-plugin-visualizer'; + +export default defineConfig({ + plugins: [ + react(), + visualizer({ + open: true, + gzipSize: true, + brotliSize: true, + }) + ] +}); +``` + +```bash +npm run build +# Opens stats.html automatically — inspect which igniteui-react modules are included +``` + +### Using Webpack Bundle Analyzer + +```bash +npm install --save-dev webpack-bundle-analyzer +``` + +```javascript +// webpack.config.js (or CRA with react-app-rewired) +const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); + +module.exports = { + plugins: [ + new BundleAnalyzerPlugin({ + analyzerMode: 'static', + openAnalyzer: false, + reportFilename: 'bundle-report.html' + }) + ] +}; +``` + +### Using source-map-explorer + +```bash +npm install --save-dev source-map-explorer +``` + +```json +{ + "scripts": { + "analyze": "source-map-explorer 'dist/**/*.js'" + } +} +``` + +```bash +npm run build +npm run analyze +``` + +**What to look for:** Check if `igniteui-react-grids` or `igniteui-react-charts` appear in the initial bundle even though they're only used on specific routes. + +--- + +## Audit Your Component Usage + +### 1. Find What Components You're Actually Using + +```bash +# Search for Igr component usage in your source files +grep -roh "Igr[A-Z][a-zA-Z]*" src/ --include="*.tsx" --include="*.ts" | sort | uniq + +# Example output: +# IgrButton +# IgrCard +# IgrInput +``` + +### 2. Compare with Your Imports + +```bash +# Find all import statements from igniteui-react packages +grep -r "from 'igniteui-react" src/ --include="*.tsx" --include="*.ts" +``` + +### 3. Remove Unused Imports + +```tsx +// Before: 5 components imported +import { IgrButton, IgrInput, IgrCard, IgrSelect, IgrCombo } from 'igniteui-react'; + +// After audit: only 3 are actually used in JSX +import { IgrButton, IgrInput, IgrCard } from 'igniteui-react'; +``` + +--- + +## Build Configuration Optimizations + +### Vite Configuration + +```typescript +// vite.config.ts +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + build: { + minify: 'terser', + terserOptions: { + compress: { + drop_console: true, + drop_debugger: true + } + }, + rollupOptions: { + output: { + manualChunks: { + 'igniteui-core': ['igniteui-react'], + // Only include if you use these packages: + // 'igniteui-grids': ['igniteui-react-grids'], + // 'igniteui-charts': ['igniteui-react-charts'], + } + } + }, + chunkSizeWarningLimit: 600, + }, + optimizeDeps: { + include: ['igniteui-react'] + } +}); +``` + +### Webpack Configuration + +```javascript +// webpack.config.js +module.exports = { + optimization: { + splitChunks: { + chunks: 'all', + cacheGroups: { + igniteui: { + test: /[\\/]node_modules[\\/]igniteui-react[\\/]/, + name: 'igniteui', + priority: 20, + }, + igniteuiGrids: { + test: /[\\/]node_modules[\\/]igniteui-react-grids[\\/]/, + name: 'igniteui-grids', + priority: 20, + } + } + }, + minimize: true, + }, + mode: 'production', +}; +``` + +--- + +## Best Practices Checklist + +- [ ] **Install only the packages you need** — don't install `igniteui-react-grids` if you only use buttons and inputs +- [ ] **Use named imports** — `import { IgrButton } from 'igniteui-react'`, not `import * as` +- [ ] **Don't import from `igniteui-webcomponents` directly** — use the `igniteui-react` wrappers +- [ ] **Lazy load heavy components** — use `React.lazy` + `Suspense` for grids, charts, and dialogs +- [ ] **Split by routes** — load component-heavy pages only when navigated to +- [ ] **Audit your imports regularly** — remove unused components +- [ ] **Analyze your bundle** — use bundle analyzer tools to verify tree-shaking is working +- [ ] **Minify in production** — ensure build tool minification is enabled +- [ ] **Use compression** — enable gzip/brotli on your server + +--- + +## Common Issues & Solutions + +### Issue: Bundle still large after using named imports + +**Investigate:** +1. Check if you're importing from `igniteui-webcomponents` instead of `igniteui-react` +2. Verify tree-shaking is working (check build output with a bundle analyzer) +3. Look for barrel imports (`import * as`) +4. Check if large packages like `igniteui-react-grids` are in the initial bundle instead of being lazy loaded + +### Issue: Lazy loaded component flashes or shows fallback too long + +**Solution:** Preload the component on hover or route prefetch: + +```tsx +const DashboardPage = lazy(() => import('./pages/Dashboard')); + +// Preload on hover +function NavLink() { + const preload = () => { import('./pages/Dashboard'); }; + return <a href="/dashboard" onMouseEnter={preload}>Dashboard</a>; +} +``` + +### Issue: Tree-shaking not working + +**Cause:** Using `require()` instead of `import`, or a build tool that doesn't support ES module tree-shaking. + +**Solution:** Ensure your project uses ES modules: + +```json +// tsconfig.json +{ + "compilerOptions": { + "module": "esnext", + "moduleResolution": "bundler" + } +} +``` + +--- + +## Expected Results + +After optimization, you should see: + +- **Initial load time reduced** by 40–60% +- **Bundle size reduced** by 50–80% (compared to importing everything) +- **Better Core Web Vitals** scores +- **Faster time to interactive** +- **Lower bandwidth usage** for users + +## Additional Resources + +- [Vite Build Optimizations](https://vitejs.dev/guide/build.html) +- [React.lazy Documentation](https://react.dev/reference/react/lazy) +- [Webpack Tree Shaking](https://webpack.js.org/guides/tree-shaking/) +- [Web Performance Optimization](https://web.dev/fast/) +- [Bundle Size Analysis Tools](https://bundlephobia.com/) diff --git a/packages/core/package.json b/packages/core/package.json index 4bd5b5314..3ca9b5971 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@igniteui/cli-core", - "version": "14.10.0-alpha.3", + "version": "14.10.0-alpha.4", "description": "Base types and functionality for Ignite UI CLI", "repository": { "type": "git", diff --git a/packages/igniteui-mcp/igniteui-doc-mcp/CHANGELOG.md b/packages/igniteui-mcp/igniteui-doc-mcp/CHANGELOG.md index f96790b4b..bdfa6447c 100644 --- a/packages/igniteui-mcp/igniteui-doc-mcp/CHANGELOG.md +++ b/packages/igniteui-mcp/igniteui-doc-mcp/CHANGELOG.md @@ -3,6 +3,61 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 14.10.0-alpha.4 (2026-03-27) + + +### Features + +* add upgrade instructions for licensed packages in Angular, React, and Web Components setup guides ([be609b2](https://github.com/IgniteUI/igniteui-cli/commit/be609b266d6d97f8cf2cdd6f83fdc05aac08ce08)) + + + +# 14.10.0-alpha.3 (2026-03-25) + + +### Features + +* Api ref documantation added to the repo ([ce819a7](https://github.com/IgniteUI/igniteui-cli/commit/ce819a7eaf033f68405ebd157af24dc9f8f46f47)) +* update MCP configuration to use 'igniteui-cli@next' for command execution ([1c612ef](https://github.com/IgniteUI/igniteui-cli/commit/1c612ef14fba0e1ec899c568bac1ee9bd513874b)) + + + +# 14.10.0-alpha.1 (2026-03-25) + + +### Bug Fixes + +* add missing template option for React and Web Components setup commands ([d12545b](https://github.com/IgniteUI/igniteui-cli/commit/d12545b5293ea4a1528f31e90415f448b7dea798)) +* improve searchDocs error handling and sanitize query terms ([5b312cc](https://github.com/IgniteUI/igniteui-cli/commit/5b312cc21866dcbd14abfc6fc7451732c7677feb)) +* remove outdated requirements for Ignite UI CLI and build tool in React setup instructions ([331c47f](https://github.com/IgniteUI/igniteui-cli/commit/331c47f02f565f524787cc1ed69732bac8461922)) +* update command references in setup instructions for consistency ([f299af3](https://github.com/IgniteUI/igniteui-cli/commit/f299af3781fb783130139a12f2a0195fd22d5aa9)) + + +### Features + +* add api-mcp and related files ([2cc8239](https://github.com/IgniteUI/igniteui-cli/commit/2cc8239c9f8a3779ba794da24ab46fd0b90efe23)) +* add project setup guide and update tool descriptions ([8205645](https://github.com/IgniteUI/igniteui-cli/commit/82056451f1d326d92df7a60915fd2251e09f74da)) +* add publishConfig for public access in package.json ([7cf9f2e](https://github.com/IgniteUI/igniteui-cli/commit/7cf9f2e6ede2a5b438c41884c3acd5fb4397e4c7)) +* add setup guides for Angular, React, and Web Components; enhance build script for copying setup files ([307cf1d](https://github.com/IgniteUI/igniteui-cli/commit/307cf1d562d9b55cbe004c73f00c88b7634c7366)) +* add tool prefixes and titles, remove non-existent tool ([d54cc18](https://github.com/IgniteUI/igniteui-cli/commit/d54cc1894ebce50bf7885df176bd2d4973bc6b78)) +* Added igniteui-mcp project ([2f30b82](https://github.com/IgniteUI/igniteui-cli/commit/2f30b824702db94f9c17054d4ae180891e7cf7a5)) +* Enhance sorting documentation for WebComponents and add theming MCP guide ([1638527](https://github.com/IgniteUI/igniteui-cli/commit/163852717ba5d33c2982a22722ddfdd0fcb831e7)) +* include markdown files in package distribution ([a808c81](https://github.com/IgniteUI/igniteui-cli/commit/a808c8186d908f872edec6a64bc138a7f817ffa9)) +* make @igniteui/mcp-server a workspace package ([cf48369](https://github.com/IgniteUI/igniteui-cli/commit/cf483695e01afeac2ee6d7da193c2ee2d2af375a)) +* make framework input optional in project setup guide; add prompt for user input if not specified ([a2b268a](https://github.com/IgniteUI/igniteui-cli/commit/a2b268a6ec6dc48f58be8b2a00d64b89fcab41a2)) +* **mcp:** extracting build script ([ac22c9b](https://github.com/IgniteUI/igniteui-cli/commit/ac22c9bbddb3680ce7d38926960f18c70ae4de5b)) +* update MCP configuration instructions for global and local setups ([95fa3f5](https://github.com/IgniteUI/igniteui-cli/commit/95fa3f533c4d2e638e4f1ed268f35648975b8980)) +* update project setup guide description for clarity ([abb418e](https://github.com/IgniteUI/igniteui-cli/commit/abb418e5c6ffd4429870bca21896995773b5a595)) + + +### Reverts + +* Revert "chore: address copilot comments" ([9fe5a3a](https://github.com/IgniteUI/igniteui-cli/commit/9fe5a3ac65590d739796c4e9dcb474130bf52418)) + + + + + # 14.10.0-alpha.3 (2026-03-25) diff --git a/packages/igniteui-mcp/igniteui-doc-mcp/package.json b/packages/igniteui-mcp/igniteui-doc-mcp/package.json index 2b7f8cac5..c46106e45 100644 --- a/packages/igniteui-mcp/igniteui-doc-mcp/package.json +++ b/packages/igniteui-mcp/igniteui-doc-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@igniteui/mcp-server", - "version": "14.10.0-alpha.3", + "version": "14.10.0-alpha.4", "description": "Unified MCP server for Ignite UI — documentation, GitHub API, and CLI scaffolding", "type": "module", "main": "dist/index.js", diff --git a/packages/igniteui-mcp/igniteui-doc-mcp/src/index.ts b/packages/igniteui-mcp/igniteui-doc-mcp/src/index.ts index 28a1ef183..689e2e28d 100644 --- a/packages/igniteui-mcp/igniteui-doc-mcp/src/index.ts +++ b/packages/igniteui-mcp/igniteui-doc-mcp/src/index.ts @@ -6,12 +6,13 @@ import { appendFileSync, mkdirSync } from "fs"; import { join, dirname } from "path"; import { fileURLToPath } from "url"; import dotenv from "dotenv"; -import { TOOL_DESCRIPTIONS, SETUP_DOCS, SETUP_MD, BLAZOR_DOTNET_GUIDE, USAGE_GUIDE } from "./tools/constants.js"; +import { TOOL_DESCRIPTIONS, USAGE_GUIDE } from "./tools/constants.js"; import type { DocsProvider } from "./providers/DocsProvider.js"; import { RemoteDocsProvider } from "./providers/RemoteDocsProvider.js"; import { LocalDocsProvider } from "./providers/LocalDocsProvider.js"; import { getApiReferenceSchema, searchApiSchema } from "./tools/schemas.js"; import { createGetApiReferenceHandler, createSearchApiHandler } from "./tools/handlers.js"; +import { buildProjectSetupGuide, sanitizeSearchDocsQuery } from "./tools/doc-tools.js"; import { ApiDocLoader } from "./lib/api-doc-loader.js"; import { getPlatforms } from "./config/platforms.js"; @@ -170,30 +171,7 @@ function registerDocTools(server: McpServer, docsProvider: DocsProvider) { return { content: [{ type: "text" as const, text: "Empty query." }] }; } - // Sanitize user input for FTS4 MATCH syntax. - // Strip characters that are FTS4 operators or cause syntax errors: - // " (phrase delimiter), ( ) (grouping), : (column filter), @ (internal) - // Preserve hyphens — the porter tokenizer handles them consistently - // at both index and query time (e.g. "grid-editing" stays as one phrase). - // Preserve trailing * — FTS4 prefix queries (e.g. grid*) rely on it, - // and the DB is built with prefix="2,3" indexes to support this. - const sanitized = queryText - .replace(/["(){}[\]:@]/g, " ") - .split(/\s+/) - .filter(Boolean) - .map((term) => { - // Terms ending with * are prefix queries — don't quote them - // because FTS4 treats "grid*" as a literal match for the - // asterisk character, while unquoted grid* does prefix expansion. - // Drop terms that are only asterisks (e.g. *, **) — they have - // no actual prefix and would cause an FTS4 syntax error. - if (term.endsWith("*")) { - return /[^*]/.test(term) ? term : null; - } - return `"${term}"`; - }) - .filter(Boolean) - .join(" OR "); + const sanitized = sanitizeSearchDocsQuery(queryText); if (!sanitized) { log("search_docs", { query: queryText, framework }, "Empty query after sanitization.", 0); @@ -223,27 +201,7 @@ function registerDocTools(server: McpServer, docsProvider: DocsProvider) { async ({ framework }) => { const start = performance.now(); - if (!framework) { - const msg = "Which framework are you using? Please specify one of: angular, react, blazor, or webcomponents."; - log("get_project_setup_guide", {}, msg, 0); - return { content: [{ type: "text" as const, text: msg }] }; - } - - let result: string; - - if (framework === "blazor") { - const docNames = SETUP_DOCS["blazor"] || []; - const sections: string[] = [BLAZOR_DOTNET_GUIDE]; - for (const name of docNames) { - const { text, found } = await docsProvider.getDoc(framework, name); - if (found) { - sections.push(text); - } - } - result = sections.join("\n\n---\n\n"); - } else { - result = SETUP_MD[framework] ?? `No setup guide available for framework: ${framework}`; - } + const result = await buildProjectSetupGuide(docsProvider, framework); log("get_project_setup_guide", { framework }, result, Math.round(performance.now() - start)); return { content: [{ type: "text" as const, text: result }] }; diff --git a/packages/igniteui-mcp/igniteui-doc-mcp/src/tools/doc-tools.ts b/packages/igniteui-mcp/igniteui-doc-mcp/src/tools/doc-tools.ts new file mode 100644 index 000000000..942debd9b --- /dev/null +++ b/packages/igniteui-mcp/igniteui-doc-mcp/src/tools/doc-tools.ts @@ -0,0 +1,69 @@ +import type { DocsProvider } from '../providers/DocsProvider.js'; +import { BLAZOR_DOTNET_GUIDE, SETUP_DOCS, SETUP_MD } from './constants.js'; + +export const MISSING_FRAMEWORK_MESSAGE = + 'Which framework are you using? Please specify one of: angular, react, blazor, or webcomponents.'; + +// Sanitize user input for FTS4 MATCH syntax. +// Strip characters that are FTS4 operators or commonly cause syntax issues: +// " (phrase delimiter), ( ) (grouping), { } [ ] (extra grouping/bracketing), +// : (column filter), @ (internal) +// Preserve hyphens — the porter tokenizer handles them consistently +// at both index and query time (e.g. "grid-editing" stays as one phrase). +// Preserve trailing * — FTS4 prefix queries (e.g. grid*) rely on it, +// and the DB is built with prefix="2,3" indexes to support this. +export function sanitizeSearchDocsQuery(queryText: string): string | null { + const sanitized = queryText + .replace(/["(){}[\]:@]/g, ' ') + .split(/\s+/) + .filter(Boolean) + .map((term) => { + // Terms ending with * are prefix queries — don't quote them + // because FTS4 treats "grid*" as a literal match for the + // asterisk character, while unquoted grid* does prefix expansion. + // Drop terms that are only asterisks (e.g. *, **) — they have + // no actual prefix and would cause an FTS4 syntax error. + if (term.endsWith('*')) { + return /[^*]/.test(term) ? term : null; + } + + return `"${term}"`; + }) + .filter((term): term is string => Boolean(term)) + .join(' OR '); + + return sanitized || null; +} + +// Build the setup-guide response for the requested framework. +// For Blazor, combine the base .NET guide with any MCP-fetched docs +// that are available for the configured setup document names. +// For other frameworks, return the static setup markdown when present, +// otherwise fall back to a simple "not available" message. +export async function buildProjectSetupGuide( + docsProvider: DocsProvider, + framework?: string, +): Promise<string> { + if (!framework) { + return MISSING_FRAMEWORK_MESSAGE; + } + + if (framework === 'blazor') { + const docNames = SETUP_DOCS.blazor || []; + const sections: string[] = [BLAZOR_DOTNET_GUIDE]; + + for (const name of docNames) { + const { text, found } = await docsProvider.getDoc(framework, name); + if (found) { + sections.push(text); + } + } + + return sections.join('\n\n---\n\n'); + } + + return ( + SETUP_MD[framework] ?? + `No setup guide available for framework: ${framework}` + ); +} \ No newline at end of file diff --git a/packages/igx-templates/package.json b/packages/igx-templates/package.json index 4c450c7c4..054e36361 100644 --- a/packages/igx-templates/package.json +++ b/packages/igx-templates/package.json @@ -1,6 +1,6 @@ { "name": "@igniteui/angular-templates", - "version": "21.1.14100-alpha.3", + "version": "21.1.14100-alpha.4", "description": "Templates for Ignite UI for Angular projects and components", "repository": { "type": "git", @@ -12,7 +12,7 @@ "author": "Infragistics", "license": "MIT", "dependencies": { - "@igniteui/cli-core": "^14.10.0-alpha.3", + "@igniteui/cli-core": "^14.10.0-alpha.4", "typescript": "~5.5.4" } } diff --git a/packages/ng-schematics/package.json b/packages/ng-schematics/package.json index aae66894c..294f22bb4 100644 --- a/packages/ng-schematics/package.json +++ b/packages/ng-schematics/package.json @@ -1,6 +1,6 @@ { "name": "@igniteui/angular-schematics", - "version": "21.1.14100-alpha.3", + "version": "21.1.14100-alpha.4", "description": "Ignite UI for Angular Schematics for ng new and ng generate", "repository": { "type": "git", @@ -20,8 +20,8 @@ "dependencies": { "@angular-devkit/core": "^21.0.0", "@angular-devkit/schematics": "^21.0.0", - "@igniteui/angular-templates": "^21.1.14100-alpha.3", - "@igniteui/cli-core": "^14.10.0-alpha.3", + "@igniteui/angular-templates": "^21.1.14100-alpha.4", + "@igniteui/cli-core": "^14.10.0-alpha.4", "@schematics/angular": "^21.0.0", "minimatch": "^10.0.1", "rxjs": "~7.8.1" diff --git a/spec/unit/mcp-cli-spec.ts b/spec/unit/mcp-cli-spec.ts new file mode 100644 index 000000000..bd988b396 --- /dev/null +++ b/spec/unit/mcp-cli-spec.ts @@ -0,0 +1,193 @@ +import child_process from "child_process"; +import { EventEmitter } from "events"; +import fs = require("fs"); +import * as path from "path"; +import yargs from "yargs"; +import mcp from "../../packages/cli/lib/commands/mcp"; + +function createFakeChildProcess(): EventEmitter { + return new EventEmitter(); +} + +describe("Unit - MCP CLI command", () => { + const mcpPackageJson = path.join(process.cwd(), "node_modules", "@igniteui", "mcp-server", "package.json"); + const mcpEntry = path.resolve(path.dirname(mcpPackageJson), "dist", "index.js"); + + let stderrWriteSpy: jasmine.Spy; + let spawnSpy: jasmine.Spy; + + beforeEach(() => { + process.exitCode = undefined; + stderrWriteSpy = spyOn(process.stderr, "write").and.returnValue(true); + spawnSpy = spyOn(child_process, "spawn"); + }); + + afterEach(() => { + process.exitCode = undefined; + }); + + function mockMcpPackageResolution(resolvedPath?: string, shouldThrow = false): void { + const moduleApi = require("module"); + const originalResolveFilename = moduleApi._resolveFilename; + + spyOn(moduleApi, "_resolveFilename").and.callFake((request: string, ...args: any[]) => { + if (request === "@igniteui/mcp-server/package.json") { + if (shouldThrow) { + throw new Error("Cannot find module"); + } + return resolvedPath; + } + + return originalResolveFilename.call(moduleApi, request, ...args); + }); + } + + function mockInstalledMcp(entryExists: boolean, child?: EventEmitter): EventEmitter { + const spawnedChild = child ?? createFakeChildProcess(); + mockMcpPackageResolution(mcpPackageJson); + spyOn(fs, "existsSync").and.returnValue(entryExists); + spawnSpy.and.returnValue(spawnedChild as any); + return spawnedChild; + } + + describe("metadata", () => { + it("registers the MCP command with the expected description", () => { + expect(mcp.command).toBe("mcp"); + expect(mcp.describe).toBe("Starts the Ignite UI MCP server for AI assistant integration"); + }); + + it("configures the debug and remote options", () => { + const buildParser = mcp.builder as any; + const parser = buildParser(yargs([])); + const argv = parser.parseSync(["--remote", "https://docs.example.test", "--debug"]); + const defaults = buildParser(yargs([])).parseSync([]); + + expect(argv.remote).toBe("https://docs.example.test"); + expect(argv.debug).toBeTrue(); + expect(defaults.debug).toBeFalse(); + }); + }); + + describe("preflight checks", () => { + it("shows an install message when the MCP server package cannot be resolved", async () => { + const existsSyncSpy = spyOn(fs, "existsSync"); + mockMcpPackageResolution(undefined, true); + + await mcp.handler({ _: ["mcp"], $0: "ig" } as any); + + expect(process.exitCode).toBe(1); + expect(existsSyncSpy).not.toHaveBeenCalled(); + expect(spawnSpy).not.toHaveBeenCalled(); + + expect(stderrWriteSpy).toHaveBeenCalled(); + const message = stderrWriteSpy.calls.allArgs().map(args => args[0]).join(""); + expect(message).toContain("MCP server package not found"); + expect(message).toContain("yarn install"); + }); + + it("shows a build message when the MCP server entry does not exist", async () => { + mockMcpPackageResolution(mcpPackageJson); + spyOn(fs, "existsSync").and.returnValue(false); + + await mcp.handler({ _: ["mcp"], $0: "ig" } as any); + + expect(fs.existsSync).toHaveBeenCalledWith(mcpEntry); + expect(process.exitCode).toBe(1); + expect(spawnSpy).not.toHaveBeenCalled(); + + expect(stderrWriteSpy).toHaveBeenCalled(); + const message = stderrWriteSpy.calls.allArgs().map(args => args[0]).join(""); + expect(message).toContain("MCP server not built"); + expect(message).toContain("build:mcp"); + }); + }); + + describe("runtime behavior", () => { + it("starts the installed MCP server with stdio inheritance", async () => { + const child = mockInstalledMcp(true); + const result = mcp.handler({ _: ["mcp"], $0: "ig" } as any) as Promise<void>; + + expect(spawnSpy).toHaveBeenCalledWith( + process.execPath, + [mcpEntry], + { stdio: "inherit" } + ); + + child.emit("exit", 0); + await result; + }); + + it("forwards remote and debug flags to the installed MCP server", async () => { + const remoteUrl = "https://docs.example.test"; + const child = mockInstalledMcp(true); + const result = mcp.handler({ + remote: remoteUrl, + debug: true, + _: ["mcp"], + $0: "ig" + } as any) as Promise<void>; + + expect(spawnSpy).toHaveBeenCalledWith( + process.execPath, + [mcpEntry, "--remote", remoteUrl, "--debug"], + { stdio: "inherit" } + ); + + child.emit("exit", 0); + await result; + }); + + it("forwards only the debug flag when remote mode is not used", async () => { + const child = mockInstalledMcp(true); + const result = mcp.handler({ + debug: true, + _: ["mcp"], + $0: "ig" + } as any) as Promise<void>; + + expect(spawnSpy).toHaveBeenCalledWith( + process.execPath, + [mcpEntry, "--debug"], + { stdio: "inherit" } + ); + + child.emit("exit", 0); + await result; + }); + + it("propagates the child process exit code", async () => { + const child = mockInstalledMcp(true); + const result = mcp.handler({ _: ["mcp"], $0: "ig" } as any) as Promise<void>; + + child.emit("exit", 7); + await result; + + expect(process.exitCode).toBe(7); + }); + + it("defaults the process exit code to 0 when the child exits without one", async () => { + const child = mockInstalledMcp(true); + const result = mcp.handler({ _: ["mcp"], $0: "ig" } as any) as Promise<void>; + + child.emit("exit", null); + await result; + + expect(process.exitCode).toBe(0); + }); + + it("reports child process startup errors", async () => { + const child = mockInstalledMcp(true); + const error = new Error("boom"); + const result = mcp.handler({ _: ["mcp"], $0: "ig" } as any) as Promise<void>; + + child.emit("error", error); + + await expectAsync(result).toBeRejectedWith(error); + + expect(stderrWriteSpy).toHaveBeenCalled(); + const message = stderrWriteSpy.calls.allArgs().map(args => args[0]).join(""); + expect(message).toContain("Failed to start MCP server"); + expect(message).toContain("boom"); + }); + }); +}); diff --git a/spec/unit/mcp-runtime-spec.ts b/spec/unit/mcp-runtime-spec.ts new file mode 100644 index 000000000..ceaf7df31 --- /dev/null +++ b/spec/unit/mcp-runtime-spec.ts @@ -0,0 +1,836 @@ +import * as path from "path"; +import * as fs from "fs"; + +// Import from built dist/ because the MCP package is ESM and this Jasmine test setup runs through CJS/ts-node. Run build:mcp first. +describe("Unit - MCP runtime", () => { + const mcpRoot = path.resolve("packages/igniteui-mcp/igniteui-doc-mcp"); + + let createGetApiReferenceHandler: any; + let createSearchApiHandler: any; + let extractSection: any; + let searchApiDocs: any; + let RemoteDocsProvider: any; + let buildProjectSetupGuide: any; + let sanitizeSearchDocsQuery: any; + let ApiDocLoader: any; + let ReactJsonParser: any; + let LocalDocsProvider: any; + let SETUP_DOCS: any; + + beforeAll(async () => { + ({ createGetApiReferenceHandler, createSearchApiHandler } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/tools/handlers.js")); + ({ extractSection, searchApiDocs } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/lib/api-doc-search.js")); + ({ RemoteDocsProvider } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/providers/RemoteDocsProvider.js")); + ({ buildProjectSetupGuide, sanitizeSearchDocsQuery } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/tools/doc-tools.js")); + ({ ApiDocLoader } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/lib/api-doc-loader.js")); + ({ ReactJsonParser } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/lib/react-json-parser.js")); + ({ LocalDocsProvider } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/providers/LocalDocsProvider.js")); + ({ SETUP_DOCS } = + await import("../../packages/igniteui-mcp/igniteui-doc-mcp/dist/tools/constants.js")); + }); + + afterAll(() => { + fs.rmSync(path.join(mcpRoot, "test-fixtures"), { recursive: true, force: true }); + }); + + describe("API helper functions", () => { + it("extracts a named section from markdown content", () => { + const markdown = [ + "# IgcGridComponent", + "", + "## Properties", + "- width: string", + "", + "## Methods", + "- selectRow(): void", + "", + "## Events", + "- rowSelectionChanging" + ].join("\n"); + + const result = extractSection(markdown, "methods"); + + expect(result).toBe("## Methods\n- selectRow(): void"); + }); + + it("finds and ranks API docs by actual matching terms", () => { + const docs = [ + { + component: "IgcGridComponent", + type: "class", + platform: "webcomponents", + keywords: ["selection", "grid"], + summary: "Grid component", + content: "The grid supports row selection and keyboard navigation." + }, + { + component: "IgcComboComponent", + type: "class", + platform: "webcomponents", + keywords: ["filtering"], + summary: "Combo component", + content: "The combo supports filtering." + } + ]; + + const result = searchApiDocs(docs, "grid selection", 10); + + expect(result.length).toBe(1); + expect(result[0].entry.component).toBe("IgcGridComponent"); + expect(result[0].matches).toBe(2); + expect(result[0].excerpt).toContain("row selection"); + }); + + it("resolves heading aliases when extracting sections", () => { + const markdown = [ + "# IgxGridComponent", + "", + "## Accessors", + "- get width(): string", + "", + "## Methods", + "- selectRow(): void" + ].join("\n"); + + expect(extractSection(markdown, "properties")).toBe("## Accessors\n- get width(): string"); + }); + + it("resolves the 'outputs' alias when extracting events", () => { + const markdown = [ + "# IgxGridComponent", + "", + "## Outputs", + "- rowSelectionChanging", + "", + "## Methods", + "- selectRow(): void" + ].join("\n"); + + expect(extractSection(markdown, "events")).toBe("## Outputs\n- rowSelectionChanging"); + }); + + it("extracts a section at the end of the document with no trailing heading", () => { + const markdown = [ + "# IgcComboComponent", + "", + "## Properties", + "- value: string", + "", + "## Events", + "- selectionChanging", + "- closed" + ].join("\n"); + + expect(extractSection(markdown, "events")).toBe("## Events\n- selectionChanging\n- closed"); + }); + + it("returns null for an unknown section name", () => { + const markdown = "# Component\n\n## Properties\n- x: number"; + + expect(extractSection(markdown, "slots")).toBeNull(); + }); + + it("ranks multiple matching entries by descending match count", () => { + const docs = [ + { + component: "IgcTreeComponent", + type: "class", + platform: "webcomponents", + keywords: ["tree"], + summary: "Tree component", + content: "A tree with nodes." + }, + { + component: "IgcTreeGridComponent", + type: "class", + platform: "webcomponents", + keywords: ["tree", "grid", "selection"], + summary: "Tree grid component", + content: "The tree grid supports selection and row expansion." + }, + { + component: "IgcGridComponent", + type: "class", + platform: "webcomponents", + keywords: ["grid", "selection"], + summary: "Grid component", + content: "The grid supports selection." + } + ]; + + const result = searchApiDocs(docs, "tree grid selection", 10); + + expect(result.length).toBe(3); + expect(result[0].entry.component).toBe("IgcTreeGridComponent"); + expect(result[0].matches).toBe(3); + expect(result[1].matches).toBeGreaterThanOrEqual(1); + expect(result[1].matches).toBeLessThanOrEqual(2); + expect(result[0].matches).toBeGreaterThan(result[1].matches); + }); + + it("respects the limit parameter when truncating results", () => { + const docs = Array.from({ length: 15 }, (_, i) => ({ + component: `IgcComponent${i}`, + type: "class", + platform: "webcomponents" as const, + keywords: ["grid"], + summary: `Component ${i}`, + content: `This component involves grid features.` + })); + + const result = searchApiDocs(docs, "grid", 5); + + expect(result.length).toBe(5); + }); + + it("uses summary as excerpt when only keywords match and content does not", () => { + const docs = [ + { + component: "IgcSomeComponent", + type: "class", + platform: "webcomponents", + keywords: ["virtualization"], + summary: "Supports virtualization", + content: "No relevant text here." + } + ]; + + const result = searchApiDocs(docs, "virtualization", 10); + + expect(result.length).toBe(1); + expect(result[0].excerpt).toContain("virtualization"); + }); + }); + + describe("tool handlers", () => { + it("returns formatted structured API content when available", async () => { + const formatted = "# IgrGrid\n\n## Properties\n- height: string"; + const docLoader = { + get: jasmine.createSpy().and.returnValue({ + component: "IgrGrid", + platform: "react", + content: "fallback content" + }), + formatStructuredComponent: jasmine.createSpy().and.returnValue(formatted), + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "react", + component: "IgrGrid", + section: "all" + }); + + expect(result.isError).toBeUndefined(); + expect(result.content[0].text).toBe(formatted); + }); + + it("falls back to case-insensitive component matching", async () => { + const docLoader = { + get: jasmine.createSpy().and.returnValue(undefined), + formatStructuredComponent: jasmine.createSpy().and.returnValue("# IgcGridComponent"), + search: jasmine.createSpy().and.returnValue([ + { component: "IgcGridComponent", platform: "webcomponents", content: "content" } + ]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "webcomponents", + component: "igcgridcomponent", + section: "all" + }); + + expect(docLoader.search).toHaveBeenCalledWith({ platform: "webcomponents", filter: "igcgridcomponent" }); + expect(docLoader.formatStructuredComponent).toHaveBeenCalledWith("webcomponents", "IgcGridComponent", "all"); + expect(result.isError).toBeUndefined(); + }); + + it("returns an error when an API reference is not found", async () => { + const docLoader = { + get: jasmine.createSpy().and.returnValue(undefined), + formatStructuredComponent: jasmine.createSpy(), + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "react", + component: "MissingGrid", + section: "all" + }); + + expect(result.isError).toBeTrue(); + expect(result.content[0].text).toContain('API reference for "MissingGrid" not found in React.'); + }); + + it("returns an error when API content is not available in memory", async () => { + const docLoader = { + get: jasmine.createSpy().and.returnValue({ + component: "IgcGridComponent", + platform: "webcomponents", + content: "" + }), + formatStructuredComponent: jasmine.createSpy().and.returnValue(null), + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "webcomponents", + component: "IgcGridComponent", + section: "all" + }); + + expect(result.isError).toBeTrue(); + expect(result.content[0].text).toContain('API content for "IgcGridComponent" is not available in memory.'); + }); + + it("returns a requested markdown section when structured formatting is not available", async () => { + const docLoader = { + get: jasmine.createSpy().and.returnValue({ + component: "IgcGridComponent", + platform: "webcomponents", + content: [ + "# IgcGridComponent", + "", + "## Properties", + "- width: string", + "", + "## Methods", + "- selectRow(): void", + "", + "## Events", + "- rowSelectionChanging" + ].join("\n") + }), + formatStructuredComponent: jasmine.createSpy().and.returnValue(null), + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "webcomponents", + component: "IgcGridComponent", + section: "methods" + }); + + expect(result.isError).toBeUndefined(); + expect(result.content[0].text).toContain("# IgcGridComponent (webcomponents) - methods"); + expect(result.content[0].text).toContain("## Methods"); + expect(result.content[0].text).toContain("selectRow(): void"); + }); + + it("formats successful API search results", async () => { + const docLoader = { + search: jasmine.createSpy().and.returnValue([ + { + component: "IgcGridComponent", + type: "class", + platform: "webcomponents", + keywords: ["selection", "grid"], + summary: "Grid component", + content: "The grid supports row selection and keyboard navigation." + } + ]) + }; + + const handler = createSearchApiHandler(docLoader); + const result = await handler({ + query: "grid selection", + platform: "webcomponents" + }); + + expect(result.isError).toBeUndefined(); + expect(result.content[0].text).toContain("**IgcGridComponent** [webcomponents] [class]"); + expect(result.content[0].text).toContain("Keywords: selection, grid"); + expect(result.content[0].text).toContain("row selection"); + }); + + it("returns a no-results response when API search finds nothing", async () => { + const docLoader = { + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createSearchApiHandler(docLoader); + const result = await handler({ + query: "notfound", + platform: "webcomponents" + }); + + expect(result.isError).toBeUndefined(); + expect(result.content[0].text).toContain("No results found"); + expect(result.content[0].text).toContain("notfound"); + expect(result.content[0].text).toContain("Web Components"); + }); + + it("returns full content when section is requested but extractSection finds no match", async () => { + const fullContent = "# IgcButtonComponent\n\nButton component docs with no standard sections."; + const docLoader = { + get: jasmine.createSpy().and.returnValue({ + component: "IgcButtonComponent", + platform: "webcomponents", + content: fullContent + }), + formatStructuredComponent: jasmine.createSpy().and.returnValue(null), + search: jasmine.createSpy().and.returnValue([]) + }; + + const handler = createGetApiReferenceHandler(docLoader); + const result = await handler({ + platform: "webcomponents", + component: "IgcButtonComponent", + section: "events" + }); + + expect(result.isError).toBeUndefined(); + expect(result.content[0].text).toBe(fullContent); + }); + }); + + describe("remote docs provider", () => { + it("requests filtered component lists from the remote docs backend", async () => { + const fetchSpy = spyOn(globalThis, "fetch").and.resolveTo(new Response("grid docs", { status: 200 })); + const provider = new RemoteDocsProvider("https://docs.example.test/base/"); + + const result = await provider.listComponents("angular", "grid"); + const requestUrl = fetchSpy.calls.mostRecent().args[0] as URL; + + expect(result).toBe("grid docs"); + expect(requestUrl.toString()).toBe("https://docs.example.test/api/docs?framework=angular&filter=grid"); + }); + + it("returns remote docs successfully when a document exists", async () => { + spyOn(globalThis, "fetch").and.resolveTo(new Response("# Grid Doc", { status: 200 })); + const provider = new RemoteDocsProvider("https://docs.example.test/"); + + const result = await provider.getDoc("react", "grid"); + + expect(result).toEqual({ text: "# Grid Doc", found: true }); + }); + + it("returns search results successfully from the remote docs backend", async () => { + const fetchSpy = spyOn(globalThis, "fetch").and.resolveTo(new Response("matching docs", { status: 200 })); + const provider = new RemoteDocsProvider("https://docs.example.test/base/"); + + const result = await provider.searchDocs("angular", '"grid" OR tree*'); + const requestUrl = fetchSpy.calls.mostRecent().args[0] as URL; + + expect(result).toBe("matching docs"); + expect(requestUrl.toString()).toBe( + "https://docs.example.test/api/docs/search?framework=angular&query=%22grid%22+OR+tree*" + ); + }); + + it("returns a structured not-found result for missing remote docs", async () => { + spyOn(globalThis, "fetch").and.resolveTo(new Response("missing", { status: 404 })); + const provider = new RemoteDocsProvider("https://docs.example.test/"); + + const result = await provider.getDoc("react", "missing-grid"); + + expect(result.found).toBeFalse(); + expect(result.text).toContain("missing-grid"); + expect(result.text).toContain("react"); + expect(result.text).toContain("not found"); + expect(result.text).toContain("list_components"); + }); + + it("throws for generic non-OK getDoc responses", async () => { + spyOn(globalThis, "fetch").and.resolveTo(new Response("server error", { status: 500 })); + const provider = new RemoteDocsProvider("https://docs.example.test/"); + + await expectAsync(provider.getDoc("react", "grid")).toBeRejectedWithError( + 'Backend returned 500: server error' + ); + }); + + it("throws for generic non-OK searchDocs responses", async () => { + spyOn(globalThis, "fetch").and.resolveTo(new Response("bad search", { status: 500 })); + const provider = new RemoteDocsProvider("https://docs.example.test/"); + + await expectAsync(provider.searchDocs("angular", '"grid"')).toBeRejectedWithError( + 'Backend returned 500: bad search' + ); + }); + }); + + describe("documentation tool helpers", () => { + it("sanitizes search_docs queries while preserving hyphens and valid prefix operators", () => { + const result = sanitizeSearchDocsQuery('grid-editing @"row" tree*'); + + expect(result).toBe('"grid-editing" OR "row" OR tree*'); + }); + + it("drops invalid all-asterisk terms and returns null when no search terms remain", () => { + const result = sanitizeSearchDocsQuery("***"); + + expect(result).toBeNull(); + }); + + it("returns null for an empty string", () => { + expect(sanitizeSearchDocsQuery("")).toBeNull(); + }); + + it("wraps plain space-separated terms in quotes joined by OR", () => { + const result = sanitizeSearchDocsQuery("column pinning"); + + expect(result).toContain('"column"'); + expect(result).toContain('"pinning"'); + expect(result).toContain("OR"); + }); + + it("returns the framework prompt when no project setup framework is provided", async () => { + const docsProvider = { + getDoc: jasmine.createSpy("getDoc") + }; + + const result = await buildProjectSetupGuide(docsProvider); + + expect(result).toContain("angular"); + expect(result).toContain("react"); + expect(result).toContain("blazor"); + expect(result).toContain("webcomponents"); + expect(docsProvider.getDoc).not.toHaveBeenCalled(); + }); + + it("returns the static setup guide for a known SPA framework", async () => { + const docsProvider = { + getDoc: jasmine.createSpy("getDoc") + }; + + const result = await buildProjectSetupGuide(docsProvider, "angular"); + + expect(typeof result).toBe("string"); + expect(result.length).toBeGreaterThan(0); + expect(docsProvider.getDoc).not.toHaveBeenCalled(); + }); + + it("returns a fallback message for an unknown framework", async () => { + const docsProvider = { + getDoc: jasmine.createSpy("getDoc") + }; + + const result = await buildProjectSetupGuide(docsProvider, "flutter"); + + expect(result).toContain("flutter"); + expect(result).toContain("No setup guide available"); + expect(docsProvider.getDoc).not.toHaveBeenCalled(); + }); + + it("builds the Blazor setup guide by joining the base guide with found remote docs", async () => { + const docsProvider = { + getDoc: jasmine.createSpy("getDoc").and.callFake(async (_framework: string, name: string) => { + if (name === "general-installing-blazor") { + return { text: "Install Blazor package guide", found: true }; + } + + return { text: "missing", found: false }; + }) + }; + + const result = await buildProjectSetupGuide(docsProvider, "blazor"); + + expect(result).toContain("# Creating a Blazor Application"); + expect(result).toContain("Install Blazor package guide"); + expect(result).not.toContain("missing"); + const expectedDocArgs = SETUP_DOCS.blazor.map((name: string) => ["blazor", name]); + expect(docsProvider.getDoc.calls.allArgs()).toEqual(expectedDocArgs); + }); + }); + + describe("ApiDocLoader", () => { + const fixtureDir = path.join(mcpRoot, "test-fixtures", "api-test"); + + beforeAll(() => { + fs.mkdirSync(fixtureDir, { recursive: true }); + fs.writeFileSync(path.join(fixtureDir, "index.json"), JSON.stringify({ + IgcTestGrid: { + file: "grid.md", + title: "Class: IgcTestGrid", + component: "IgcTestGrid", + type: "class", + keywords: ["grid", "data"], + summary: "Test grid component" + }, + IgcTestCombo: { + file: "combo.md", + title: "Class: IgcTestCombo", + component: "IgcTestCombo", + type: "class", + keywords: ["combo", "filtering"], + summary: "Test combo component" + } + })); + fs.writeFileSync(path.join(fixtureDir, "grid.md"), + "# IgcTestGrid\n\n## Properties\n- width: string\n\n## Methods\n- selectRow(): void" + ); + fs.writeFileSync(path.join(fixtureDir, "combo.md"), + "# IgcTestCombo\n\n## Properties\n- value: string" + ); + }); + + function createLoader(): any { + const loader = new ApiDocLoader([{ + key: "webcomponents", + displayName: "Test WC", + submodulePath: "test", + docsPath: "test-fixtures/api-test", + apiSource: { kind: "markdown-index" } + }]); + spyOn(console, "error"); + loader.load(); + return loader; + } + + it("loads entries and retrieves them by platform:name key", () => { + const loader = createLoader(); + const entry = loader.get("webcomponents", "IgcTestGrid"); + + expect(entry).toBeDefined(); + expect(entry.component).toBe("IgcTestGrid"); + expect(entry.platform).toBe("webcomponents"); + expect(entry.content).toContain("## Properties"); + }); + + it("returns undefined for a missing entry or wrong platform", () => { + const loader = createLoader(); + + expect(loader.get("webcomponents", "NonExistent")).toBeUndefined(); + expect(loader.get("react", "IgcTestGrid")).toBeUndefined(); + }); + + it("search() filters entries by platform and keyword", () => { + const loader = createLoader(); + + const all = loader.search({ platform: "webcomponents" }); + expect(all.length).toBe(2); + + const filtered = loader.search({ platform: "webcomponents", filter: "grid" }); + expect(filtered.length).toBe(1); + expect(filtered[0].component).toBe("IgcTestGrid"); + }); + + it("search() filters entries by type", () => { + const loader = createLoader(); + + const classes = loader.search({ platform: "webcomponents", type: "class" }); + expect(classes.length).toBe(2); + + const interfaces = loader.search({ platform: "webcomponents", type: "interface" }); + expect(interfaces.length).toBe(0); + }); + + it("formatStructuredComponent() returns null for markdown-index platforms", () => { + const loader = createLoader(); + + expect(loader.formatStructuredComponent("webcomponents", "IgcTestGrid")).toBeNull(); + }); + }); + + describe("ReactJsonParser", () => { + const fixtureDir = path.join(mcpRoot, "test-fixtures", "json-test"); + const jsonPath = path.join(fixtureDir, "react-test.json"); + + beforeAll(() => { + fs.mkdirSync(fixtureDir, { recursive: true }); + fs.writeFileSync(jsonPath, JSON.stringify({ + id: 0, name: "test-project", kind: 1, + children: [ + { + id: 1, name: "IgrTestGrid", kind: 128, + comment: { summary: [{ text: "A test grid component" }] }, + children: [ + { + id: 2, name: "width", kind: 1024, + type: { type: "intrinsic", name: "string" }, + comment: { summary: [{ text: "The width" }] } + }, + { + id: 3, name: "selectAll", kind: 2048, + signatures: [{ parameters: [], type: { type: "intrinsic", name: "void" } }], + comment: { summary: [{ text: "Selects all rows" }] } + } + ], + categories: [ + { title: "Properties", children: [2] }, + { title: "Methods", children: [3] } + ] + }, + { + id: 4, name: "IgrTestCombo", kind: 128, + children: [], categories: [] + }, + { + id: 5, name: "HelperUtil", kind: 128, + children: [], categories: [] + } + ] + })); + }); + + it("discovers only Igr-prefixed components", () => { + const parser = new ReactJsonParser(jsonPath); + const components = parser.getAllComponents(); + + expect(components).toContain("IgrTestGrid"); + expect(components).toContain("IgrTestCombo"); + expect(components).not.toContain("HelperUtil"); + }); + + it("extracts structured component data with properties and methods", () => { + const parser = new ReactJsonParser(jsonPath); + const entry = parser.getComponent("IgrTestGrid"); + + expect(entry).not.toBeNull(); + expect(entry.name).toBe("IgrTestGrid"); + expect(entry.summary).toBe("A test grid component"); + expect(entry.properties.length).toBe(1); + expect(entry.properties[0].name).toBe("width"); + expect(entry.methods.length).toBe(1); + expect(entry.methods[0].name).toBe("selectAll"); + }); + + it("returns null for a non-existent component", () => { + const parser = new ReactJsonParser(jsonPath); + + expect(parser.getComponent("NonExistent")).toBeNull(); + }); + + it("formats component as markdown with all sections", () => { + const parser = new ReactJsonParser(jsonPath); + const entry = parser.getComponent("IgrTestGrid"); + const md = parser.formatAsMarkdown(entry, "all"); + + expect(md).toContain("# class: IgrTestGrid"); + expect(md).toContain("## Properties"); + expect(md).toContain("### width"); + expect(md).toContain("## Methods"); + expect(md).toContain("selectAll"); + }); + + it("formats only the requested section", () => { + const parser = new ReactJsonParser(jsonPath); + const entry = parser.getComponent("IgrTestGrid"); + const md = parser.formatAsMarkdown(entry, "properties"); + + expect(md).toContain("## Properties"); + expect(md).not.toContain("## Methods"); + }); + }); + + describe("LocalDocsProvider", () => { + const dbFixtureDir = path.join(mcpRoot, "test-fixtures", "local-db-test"); + const dbFixturePath = path.join(dbFixtureDir, "test.db"); + + beforeAll(() => { + fs.mkdirSync(dbFixtureDir, { recursive: true }); + + // Use better-sqlite3 (dev dep) to build a tiny fixture DB with the real schema + const Database = require("better-sqlite3"); + const db = new Database(dbFixturePath); + db.exec(` + CREATE TABLE docs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + framework TEXT NOT NULL, + filename TEXT NOT NULL, + component TEXT NOT NULL, + toc_name TEXT, + premium INTEGER DEFAULT 0, + keywords TEXT, + summary TEXT, + content TEXT NOT NULL, + UNIQUE(framework, filename) + ); + CREATE VIRTUAL TABLE docs_fts USING fts4( + component, toc_name, keywords, summary, content, + content='docs', tokenize=porter, prefix="2,3" + ); + INSERT INTO docs (framework, filename, component, toc_name, keywords, summary, content) + VALUES ('angular', 'grid-editing.md', 'IgxGridComponent', 'Grid Editing', 'grid,editing', 'Cell and row editing', '# Grid Editing\nEdit cells and rows.'); + INSERT INTO docs (framework, filename, component, toc_name, keywords, summary, content) + VALUES ('angular', 'combo-overview.md', 'IgxComboComponent', 'Combo Overview', 'combo,filtering', 'Combo component overview', '# Combo\nDropdown with filtering.'); + INSERT INTO docs_fts (rowid, component, toc_name, keywords, summary, content) + SELECT id, component, toc_name, keywords, summary, content FROM docs; + `); + db.close(); + }); + + it("throws when calling methods before initialization", async () => { + const provider = new LocalDocsProvider("/nonexistent/path.db"); + + await expectAsync(provider.listComponents("angular")).toBeRejectedWithError( + "LocalDocsProvider not initialized. Call init() first." + ); + await expectAsync(provider.getDoc("angular", "grid")).toBeRejectedWithError( + "LocalDocsProvider not initialized. Call init() first." + ); + await expectAsync(provider.searchDocs("angular", "grid")).toBeRejectedWithError( + "LocalDocsProvider not initialized. Call init() first." + ); + }); + + it("throws when the database file does not exist", async () => { + const provider = new LocalDocsProvider("/nonexistent/path.db"); + + await expectAsync(provider.init()).toBeRejectedWithError(/Database not found/); + }); + + it("filters components by keyword", async () => { + const provider = new LocalDocsProvider(dbFixturePath); + await provider.init(); + + const result = await provider.listComponents("angular", "grid"); + + expect(result).toContain("Grid Editing"); + expect(result).not.toContain("Combo Overview"); + }); + + it("retrieves a document with frontmatter and content", async () => { + const provider = new LocalDocsProvider(dbFixturePath); + await provider.init(); + + const result = await provider.getDoc("angular", "grid-editing"); + + expect(result.found).toBeTrue(); + expect(result.text).toContain("component: IgxGridComponent"); + expect(result.text).toContain("# Grid Editing"); + }); + + it("returns not-found for a missing document", async () => { + const provider = new LocalDocsProvider(dbFixturePath); + await provider.init(); + + const result = await provider.getDoc("angular", "nonexistent"); + + expect(result.found).toBeFalse(); + expect(result.text).toContain("nonexistent"); + }); + + it("performs full-text search across documents", async () => { + const provider = new LocalDocsProvider(dbFixturePath); + await provider.init(); + + const result = await provider.searchDocs("angular", "editing"); + + expect(result).toContain("Grid Editing"); + expect(result).toContain("1 results"); + }); + + it("returns empty results for unmatched search queries", async () => { + const provider = new LocalDocsProvider(dbFixturePath); + await provider.init(); + + const result = await provider.searchDocs("angular", "xyznonexistent"); + + expect(result).toContain("No results found"); + }); + }); +});