From 9659f05d3e11d94dc39485f250a09f4332a7fa83 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 27 Mar 2026 16:59:08 +0000
Subject: [PATCH 01/10] feat(igr-ts): add avatar, badge, and button React
component templates
Add new React component templates for Avatar, Badge, and Button
in the igr-ts project type. Each includes component-level and
template-level index.ts, a .tsx component file, test file, and
style.module.css. Update groups.json with Layouts and Data Entry
& Display groups.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/avatar/default/index.ts | 16 ++++++++++++++++
.../cli/templates/react/igr-ts/avatar/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/badge/default/index.ts | 16 ++++++++++++++++
.../cli/templates/react/igr-ts/badge/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/button/default/index.ts | 16 ++++++++++++++++
.../cli/templates/react/igr-ts/button/index.ts | 11 +++++++++++
packages/cli/templates/react/igr-ts/groups.json | 4 +++-
16 files changed, 196 insertions(+), 1 deletion(-)
create mode 100644 packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/avatar/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/avatar/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/badge/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/badge/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/button/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/button/index.ts
diff --git a/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..9f966c8bf
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrAvatar } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/avatar/default/index.ts b/packages/cli/templates/react/igr-ts/avatar/default/index.ts
new file mode 100644
index 000000000..caa4c29e6
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/avatar/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrAvatarTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Avatar"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "avatar";
+ this.projectType = "igr-ts";
+ this.name = "Avatar";
+ this.description = "displays an avatar with customizable shape, size, and initials.";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrAvatarTemplate();
diff --git a/packages/cli/templates/react/igr-ts/avatar/index.ts b/packages/cli/templates/react/igr-ts/avatar/index.ts
new file mode 100644
index 000000000..6029bc1d7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/avatar/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrAvatarComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Avatar";
+ this.group = "Layouts";
+ this.description = `displays an avatar with customizable shape, size, and initials.`;
+ }
+}
+module.exports = new IgrAvatarComponent();
diff --git a/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..020719a74
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrBadge } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Badge
+
+ Awaiting test
+ Critical issue
+ Verified
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/badge/default/index.ts b/packages/cli/templates/react/igr-ts/badge/default/index.ts
new file mode 100644
index 000000000..8270e5abd
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/badge/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrBadgeTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Badge"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "badge";
+ this.projectType = "igr-ts";
+ this.name = "Badge";
+ this.description = "displays a badge with customizable variants and styles.";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrBadgeTemplate();
diff --git a/packages/cli/templates/react/igr-ts/badge/index.ts b/packages/cli/templates/react/igr-ts/badge/index.ts
new file mode 100644
index 000000000..c3d23cf9c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/badge/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrBadgeComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Badge";
+ this.group = "Data Entry & Display";
+ this.description = `displays a badge with customizable variants and styles.`;
+ }
+}
+module.exports = new IgrBadgeComponent();
diff --git a/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..bbc49403c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Button
+
+ Large button
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/button/default/index.ts b/packages/cli/templates/react/igr-ts/button/default/index.ts
new file mode 100644
index 000000000..a6a6553ee
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrButtonTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Button"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "button";
+ this.projectType = "igr-ts";
+ this.name = "Button";
+ this.description = "displays a button with customizable size and content.";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrButtonTemplate();
diff --git a/packages/cli/templates/react/igr-ts/button/index.ts b/packages/cli/templates/react/igr-ts/button/index.ts
new file mode 100644
index 000000000..5c9926a66
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrButtonComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Button";
+ this.group = "Data Entry & Display";
+ this.description = `displays a button with customizable size and content.`;
+ }
+}
+module.exports = new IgrButtonComponent();
diff --git a/packages/cli/templates/react/igr-ts/groups.json b/packages/cli/templates/react/igr-ts/groups.json
index f55a8a30b..6743ba612 100644
--- a/packages/cli/templates/react/igr-ts/groups.json
+++ b/packages/cli/templates/react/igr-ts/groups.json
@@ -1,5 +1,7 @@
{
- "Gauges": "scale measure Controls including Linear and Radial Gauge and Bullet Graph.",
+ "Data Entry & Display": "",
+ "Layouts": "",
"Charts": "high-performance data visualization for category and financial data.",
+ "Gauges": "scale measure Controls including Linear and Radial Gauge and Bullet Graph.",
"Grids": "bind and display data sets with little coding or configuration."
}
From 7ee84fb8ae838161b7eb55c71e6f4efc7cb078f5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 27 Mar 2026 17:15:18 +0000
Subject: [PATCH 02/10] Add React component templates for button-group,
checkbox, and chip
Add IgrButtonGroup, IgrCheckbox, and IgrChip component templates to
the igr-ts React template collection, each with component registration,
template configuration, TSX component, test file, and CSS module styles.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 18 ++++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/button-group/default/index.ts | 16 ++++++++++++++++
.../react/igr-ts/button-group/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/checkbox/default/index.ts | 16 ++++++++++++++++
.../templates/react/igr-ts/checkbox/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/chip/default/index.ts | 16 ++++++++++++++++
.../cli/templates/react/igr-ts/chip/index.ts | 11 +++++++++++
15 files changed, 193 insertions(+)
create mode 100644 packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/button-group/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/button-group/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/checkbox/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/checkbox/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/chip/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/chip/index.ts
diff --git a/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..fd32ac8dc
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,18 @@
+import style from './style.module.css';
+import { IgrButtonGroup, IgrToggleButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Button Group
+
+
+ Left
+ Center
+ Right
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/button-group/default/index.ts b/packages/cli/templates/react/igr-ts/button-group/default/index.ts
new file mode 100644
index 000000000..c561ed7da
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button-group/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrButtonGroupTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Button group"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "button-group";
+ this.projectType = "igr-ts";
+ this.name = "Button group";
+ this.description = "basic IgrButtonGroup";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrButtonGroupTemplate();
diff --git a/packages/cli/templates/react/igr-ts/button-group/index.ts b/packages/cli/templates/react/igr-ts/button-group/index.ts
new file mode 100644
index 000000000..8222bd170
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/button-group/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrButtonGroupComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Button group";
+ this.group = "Data Entry & Display";
+ this.description = `displays a group of buttons with toggle functionality.`;
+ }
+}
+module.exports = new IgrButtonGroupComponent();
diff --git a/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..d4d844b40
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrCheckbox } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/checkbox/default/index.ts b/packages/cli/templates/react/igr-ts/checkbox/default/index.ts
new file mode 100644
index 000000000..6e4c84569
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/checkbox/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrCheckboxTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Checkbox"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "checkbox";
+ this.projectType = "igr-ts";
+ this.name = "Checkbox";
+ this.description = "basic IgrCheckbox";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrCheckboxTemplate();
diff --git a/packages/cli/templates/react/igr-ts/checkbox/index.ts b/packages/cli/templates/react/igr-ts/checkbox/index.ts
new file mode 100644
index 000000000..bbab581b7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/checkbox/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrCheckboxComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Checkbox";
+ this.group = "Data Entry & Display";
+ this.description = `displays a checkbox with customizable label and state.`;
+ }
+}
+module.exports = new IgrCheckboxComponent();
diff --git a/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..f545b07e4
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrChip } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Chip
+
+ Chip Content
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/chip/default/index.ts b/packages/cli/templates/react/igr-ts/chip/default/index.ts
new file mode 100644
index 000000000..4692f5ec1
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chip/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrChipTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Chip"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "chip";
+ this.projectType = "igr-ts";
+ this.name = "Chip";
+ this.description = "basic IgrChip";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrChipTemplate();
diff --git a/packages/cli/templates/react/igr-ts/chip/index.ts b/packages/cli/templates/react/igr-ts/chip/index.ts
new file mode 100644
index 000000000..b7e591e2d
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chip/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrChipComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Chip";
+ this.group = "Data Entry & Display";
+ this.description = `displays a chip with selectable and removable options.`;
+ }
+}
+module.exports = new IgrChipComponent();
From 85f7a5d64d5a682943a26460e099ada08827e9e7 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 27 Mar 2026 17:21:04 +0000
Subject: [PATCH 03/10] feat: add React component templates for icon,
icon-button, input, radio-group
Add igr-ts templates for four new components in the Data Entry & Display group:
- Icon: displays IgrIcon with home and search icons
- Icon Button: displays IgrIconButton with contained variant
- Input: displays IgrInput with label, placeholder, and helper text
- Radio Group: displays IgrRadioGroup with IgrRadio options
Each component includes index.ts, default template config, tsx component,
test file, and CSS module following existing template patterns.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 +++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++++
.../react/igr-ts/icon-button/default/index.ts | 16 ++++++++++++++
.../react/igr-ts/icon-button/index.ts | 11 ++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 21 +++++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++++
.../react/igr-ts/icon/default/index.ts | 16 ++++++++++++++
.../cli/templates/react/igr-ts/icon/index.ts | 11 ++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++++
.../react/igr-ts/input/default/index.ts | 16 ++++++++++++++
.../cli/templates/react/igr-ts/input/index.ts | 11 ++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 18 ++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++++
.../react/igr-ts/radio-group/default/index.ts | 16 ++++++++++++++
.../react/igr-ts/radio-group/index.ts | 11 ++++++++++
20 files changed, 265 insertions(+)
create mode 100644 packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/icon-button/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/icon-button/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/icon/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/icon/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/input/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/input/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/radio-group/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/radio-group/index.ts
diff --git a/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..ddf35d53f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrIconButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/icon-button/default/index.ts b/packages/cli/templates/react/igr-ts/icon-button/default/index.ts
new file mode 100644
index 000000000..b14994c78
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon-button/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrIconButtonTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Icon button"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "icon-button";
+ this.projectType = "igr-ts";
+ this.name = "Icon button";
+ this.description = "basic IgrIconButton";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrIconButtonTemplate();
diff --git a/packages/cli/templates/react/igr-ts/icon-button/index.ts b/packages/cli/templates/react/igr-ts/icon-button/index.ts
new file mode 100644
index 000000000..98aac3399
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon-button/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrIconButtonComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Icon button";
+ this.group = "Data Entry & Display";
+ this.description = `displays an icon button.`;
+ }
+}
+module.exports = new IgrIconButtonComponent();
diff --git a/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..a86263d4d
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,21 @@
+import style from './style.module.css';
+import { IgrIcon } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Icon
+
+
+ Home icon:
+
+
+
+ Search icon:
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/icon/default/index.ts b/packages/cli/templates/react/igr-ts/icon/default/index.ts
new file mode 100644
index 000000000..3fe799a2f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrIconTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Icon"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "icon";
+ this.projectType = "igr-ts";
+ this.name = "Icon";
+ this.description = "basic IgrIcon";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrIconTemplate();
diff --git a/packages/cli/templates/react/igr-ts/icon/index.ts b/packages/cli/templates/react/igr-ts/icon/index.ts
new file mode 100644
index 000000000..79e27a892
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/icon/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrIconComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Icon";
+ this.group = "Data Entry & Display";
+ this.description = `displays an icon.`;
+ }
+}
+module.exports = new IgrIconComponent();
diff --git a/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..371075047
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrInput } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Input
+
+
+ This is some helper text
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/input/default/index.ts b/packages/cli/templates/react/igr-ts/input/default/index.ts
new file mode 100644
index 000000000..8aad8b8d2
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/input/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrInputTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Input"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "input";
+ this.projectType = "igr-ts";
+ this.name = "Input";
+ this.description = "basic IgrInput";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrInputTemplate();
diff --git a/packages/cli/templates/react/igr-ts/input/index.ts b/packages/cli/templates/react/igr-ts/input/index.ts
new file mode 100644
index 000000000..c72d0c2ac
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/input/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrInputComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Input";
+ this.group = "Data Entry & Display";
+ this.description = `displays an input field.`;
+ }
+}
+module.exports = new IgrInputComponent();
diff --git a/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..f1bd5d8a0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,18 @@
+import style from './style.module.css';
+import { IgrRadioGroup, IgrRadio } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Radio Group
+
+
+ Banana
+ Orange
+ Mango
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/radio-group/default/index.ts b/packages/cli/templates/react/igr-ts/radio-group/default/index.ts
new file mode 100644
index 000000000..6c53e7e82
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/radio-group/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrRadioGroupTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Radio Group"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "radio-group";
+ this.projectType = "igr-ts";
+ this.name = "Radio Group";
+ this.description = "basic IgrRadioGroup";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrRadioGroupTemplate();
diff --git a/packages/cli/templates/react/igr-ts/radio-group/index.ts b/packages/cli/templates/react/igr-ts/radio-group/index.ts
new file mode 100644
index 000000000..dee4124d9
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/radio-group/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrRadioGroupComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Radio Group";
+ this.group = "Data Entry & Display";
+ this.description = `displays a radio group.`;
+ }
+}
+module.exports = new IgrRadioGroupComponent();
From 6107f2a3d070d4180071b669c60fee2d34c76c16 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 27 Mar 2026 17:23:38 +0000
Subject: [PATCH 04/10] Add React component templates for rating, switch,
text-area, and dropdown
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 19 +++++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/dropdown/default/index.ts | 16 ++++++++++++++++
.../templates/react/igr-ts/dropdown/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/rating/default/index.ts | 16 ++++++++++++++++
.../templates/react/igr-ts/rating/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/switch/default/index.ts | 16 ++++++++++++++++
.../templates/react/igr-ts/switch/index.ts | 11 +++++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 +++++++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/text-area/default/index.ts | 16 ++++++++++++++++
.../templates/react/igr-ts/text-area/index.ts | 11 +++++++++++
20 files changed, 257 insertions(+)
create mode 100644 packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/dropdown/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/dropdown/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/rating/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/rating/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/switch/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/switch/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/text-area/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/text-area/index.ts
diff --git a/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..ea5724d8b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,19 @@
+import style from './style.module.css';
+import { IgrDropdown, IgrDropdownItem, IgrButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Dropdown
+
+
+ Options
+ Option 1
+ Option 2
+ Option 3
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/dropdown/default/index.ts b/packages/cli/templates/react/igr-ts/dropdown/default/index.ts
new file mode 100644
index 000000000..657f355cf
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dropdown/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrDropdownTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Dropdown"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "dropdown";
+ this.projectType = "igr-ts";
+ this.name = "Dropdown";
+ this.description = "basic IgrDropdown";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrDropdownTemplate();
diff --git a/packages/cli/templates/react/igr-ts/dropdown/index.ts b/packages/cli/templates/react/igr-ts/dropdown/index.ts
new file mode 100644
index 000000000..379d12147
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dropdown/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDropdownComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Dropdown";
+ this.group = "Data Entry & Display";
+ this.description = `represents a dropdown component`;
+ }
+}
+module.exports = new IgrDropdownComponent();
diff --git a/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..b1a695eda
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrRating } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/rating/default/index.ts b/packages/cli/templates/react/igr-ts/rating/default/index.ts
new file mode 100644
index 000000000..114d08909
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/rating/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrRatingTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Rating"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "rating";
+ this.projectType = "igr-ts";
+ this.name = "Rating";
+ this.description = "basic IgrRating";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrRatingTemplate();
diff --git a/packages/cli/templates/react/igr-ts/rating/index.ts b/packages/cli/templates/react/igr-ts/rating/index.ts
new file mode 100644
index 000000000..841b5a2d3
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/rating/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrRatingComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Rating";
+ this.group = "Data Entry & Display";
+ this.description = `represents a rating component`;
+ }
+}
+module.exports = new IgrRatingComponent();
diff --git a/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..2c9336c32
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrSwitch } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/switch/default/index.ts b/packages/cli/templates/react/igr-ts/switch/default/index.ts
new file mode 100644
index 000000000..0c466e11e
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/switch/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrSwitchTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Switch"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "switch";
+ this.projectType = "igr-ts";
+ this.name = "Switch";
+ this.description = "basic IgrSwitch";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrSwitchTemplate();
diff --git a/packages/cli/templates/react/igr-ts/switch/index.ts b/packages/cli/templates/react/igr-ts/switch/index.ts
new file mode 100644
index 000000000..eb2f03a41
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/switch/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrSwitchComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Switch";
+ this.group = "Data Entry & Display";
+ this.description = `represents a switch component`;
+ }
+}
+module.exports = new IgrSwitchComponent();
diff --git a/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..a388cce71
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrTextarea } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/text-area/default/index.ts b/packages/cli/templates/react/igr-ts/text-area/default/index.ts
new file mode 100644
index 000000000..a427628c5
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/text-area/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrTextAreaTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Text area"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "text-area";
+ this.projectType = "igr-ts";
+ this.name = "Text area";
+ this.description = "basic IgrTextarea";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrTextAreaTemplate();
diff --git a/packages/cli/templates/react/igr-ts/text-area/index.ts b/packages/cli/templates/react/igr-ts/text-area/index.ts
new file mode 100644
index 000000000..47f26766b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/text-area/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrTextAreaComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Text area";
+ this.group = "Data Entry & Display";
+ this.description = `represents a text area component`;
+ }
+}
+module.exports = new IgrTextAreaComponent();
From 65cbaea3d54b9f2b91e07a788c5a2ff5992800cd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 27 Mar 2026 17:29:53 +0000
Subject: [PATCH 05/10] Add React component templates for tabs, calendar,
date-picker, list, tree, banner, navbar, form, linear-progress,
circular-progress, slider, ripple, and subscription-form
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 27 ++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/accordion/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/accordion/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/banner/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/banner/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/calendar/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/calendar/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 26 +++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/card/default/index.ts | 16 ++++++++++
.../cli/templates/react/igr-ts/card/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../igr-ts/circular-progress/default/index.ts | 16 ++++++++++
.../react/igr-ts/circular-progress/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 32 +++++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../subscription-form/index.ts | 15 +++++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/date-picker/default/index.ts | 16 ++++++++++
.../react/igr-ts/date-picker/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 18 +++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/divider/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/divider/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 17 ++++++++++
.../igr-ts/expansion-panel/default/index.ts | 16 ++++++++++
.../react/igr-ts/expansion-panel/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 24 ++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/form/default/index.ts | 16 ++++++++++
.../cli/templates/react/igr-ts/form/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../igr-ts/linear-progress/default/index.ts | 16 ++++++++++
.../react/igr-ts/linear-progress/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 31 ++++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/list/default/index.ts | 16 ++++++++++
.../cli/templates/react/igr-ts/list/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 16 ++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/navbar/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/navbar/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 17 ++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/ripple/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/ripple/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 14 ++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/slider/default/index.ts | 16 ++++++++++
.../templates/react/igr-ts/slider/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 20 ++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/tabs/default/index.ts | 16 ++++++++++
.../cli/templates/react/igr-ts/tabs/index.ts | 11 +++++++
.../src/app/__path__/__filePrefix__.test.tsx | 13 ++++++++
.../files/src/app/__path__/__filePrefix__.tsx | 29 +++++++++++++++++
.../files/src/app/__path__/style.module.css | 9 ++++++
.../react/igr-ts/tree/default/index.ts | 16 ++++++++++
.../cli/templates/react/igr-ts/tree/index.ts | 11 +++++++
83 files changed, 1157 insertions(+)
create mode 100644 packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/accordion/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/accordion/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/banner/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/banner/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/calendar/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/calendar/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/card/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/card/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/circular-progress/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/custom-templates/subscription-form/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/date-picker/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/date-picker/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/divider/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/divider/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/expansion-panel/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/form/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/form/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/linear-progress/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/list/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/list/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/navbar/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/navbar/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/ripple/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/ripple/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/slider/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/slider/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/tabs/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/tabs/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.test.tsx
create mode 100644 packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
create mode 100644 packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/style.module.css
create mode 100644 packages/cli/templates/react/igr-ts/tree/default/index.ts
create mode 100644 packages/cli/templates/react/igr-ts/tree/index.ts
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..a61ac0835
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,27 @@
+import style from './style.module.css';
+import { IgrAccordion, IgrExpansionPanel } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Accordion
+
+
+
+ Ignite UI for React
+ Ignite UI for React is a complete library of UI components, giving you the ability to build modern web applications using encapsulation and the concept of reusable components in a dependency-free approach.
+
+
+ Ignite UI for Angular
+ Ignite UI for Angular is a complete set of Material-based UI Widgets, Components and Sketch UI kits by Infragistics.
+
+
+ Ignite UI for Web Components
+ Ignite UI for Web Components is a complete library of UI components, giving you the ability to build modern web applications.
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/index.ts b/packages/cli/templates/react/igr-ts/accordion/default/index.ts
new file mode 100644
index 000000000..5e318da87
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/accordion/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrAccordionTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["IgrAccordion"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "accordion";
+ this.projectType = "igr-ts";
+ this.name = "Accordion";
+ this.description = "basic IgrAccordion";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrAccordionTemplate();
diff --git a/packages/cli/templates/react/igr-ts/accordion/index.ts b/packages/cli/templates/react/igr-ts/accordion/index.ts
new file mode 100644
index 000000000..1e260063f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/accordion/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrAccordionComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Accordion";
+ this.group = "Layouts";
+ this.description = `enables displaying of content in a vertically collapsible fashion.`;
+ }
+}
+module.exports = new IgrAccordionComponent();
diff --git a/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..f8c092024
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrBanner } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Banner
+
+
+ You are currently not logged in! Please, log into your account first.
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/banner/default/index.ts b/packages/cli/templates/react/igr-ts/banner/default/index.ts
new file mode 100644
index 000000000..9318e8330
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/banner/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrBannerTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Banner"];
+this.controlGroup = "Notifications";
+this.listInComponentTemplates = true;
+this.id = "banner";
+this.projectType = "igr-ts";
+this.name = "Banner";
+this.description = "basic IgrBanner";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrBannerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/banner/index.ts b/packages/cli/templates/react/igr-ts/banner/index.ts
new file mode 100644
index 000000000..1ccb7c13a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/banner/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrBannerComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Banner";
+this.group = "Notifications";
+this.description = `displays banner component`;
+}
+}
+module.exports = new IgrBannerComponent();
diff --git a/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..a3560a1a0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrCalendar } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/calendar/default/index.ts b/packages/cli/templates/react/igr-ts/calendar/default/index.ts
new file mode 100644
index 000000000..bcf4170c7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/calendar/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrCalendarTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Calendar"];
+this.controlGroup = "Scheduling";
+this.listInComponentTemplates = true;
+this.id = "calendar";
+this.projectType = "igr-ts";
+this.name = "Calendar";
+this.description = "basic IgrCalendar";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrCalendarTemplate();
diff --git a/packages/cli/templates/react/igr-ts/calendar/index.ts b/packages/cli/templates/react/igr-ts/calendar/index.ts
new file mode 100644
index 000000000..cee8bef01
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/calendar/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrCalendarComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Calendar";
+this.group = "Scheduling";
+this.description = `displays calendar component`;
+}
+}
+module.exports = new IgrCalendarComponent();
diff --git a/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..d414c852f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,26 @@
+import style from './style.module.css';
+import { IgrCard, IgrCardHeader, IgrCardContent, IgrCardActions, IgrButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Card
+
+
+
+ New York City
+ City Guide
+
+
+ New York City comprises 5 boroughs sitting where the Hudson River meets the Atlantic Ocean. At its core is Manhattan, a densely populated borough that's among the world's major commercial, financial and cultural centers.
+
+
+ Like
+ Learn More
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/card/default/index.ts b/packages/cli/templates/react/igr-ts/card/default/index.ts
new file mode 100644
index 000000000..2e8ca9aff
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/card/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrCardTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["IgrCard"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "card";
+ this.projectType = "igr-ts";
+ this.name = "Card";
+ this.description = "basic IgrCard";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrCardTemplate();
diff --git a/packages/cli/templates/react/igr-ts/card/index.ts b/packages/cli/templates/react/igr-ts/card/index.ts
new file mode 100644
index 000000000..0a868d008
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/card/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrCardComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Card";
+ this.group = "Layouts";
+ this.description = `displays organized content and actions about a single subject.`;
+ }
+}
+module.exports = new IgrCardComponent();
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..4a79b4a76
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrCircularProgress } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Circular Progress
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts b/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
new file mode 100644
index 000000000..8c70781e0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrCircularProgressTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["CircularProgress"];
+this.controlGroup = "Data Entry & Display";
+this.listInComponentTemplates = true;
+this.id = "circular-progress";
+this.projectType = "igr-ts";
+this.name = "Circular Progress";
+this.description = "basic IgrCircularProgress";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrCircularProgressTemplate();
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/index.ts b/packages/cli/templates/react/igr-ts/circular-progress/index.ts
new file mode 100644
index 000000000..0e4a7c5d8
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/circular-progress/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrCircularProgressComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Circular Progress";
+this.group = "Data Entry & Display";
+this.description = `displays circular progress component`;
+}
+}
+module.exports = new IgrCircularProgressComponent();
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..1571ab67d
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,32 @@
+import style from './style.module.css';
+import { IgrInput, IgrCheckbox, IgrButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ const handleSubmit = (event: React.FormEvent) => {
+ event.preventDefault();
+ const formData = new FormData(event.currentTarget);
+ const entries = Array.from(formData.entries());
+ const result = entries.map(([key, value]) => `${key}=${value}`).join('; ');
+ alert(result);
+ };
+
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/index.ts b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/index.ts
new file mode 100644
index 000000000..0a9c73063
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/index.ts
@@ -0,0 +1,15 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrSubscriptionFormTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.listInComponentTemplates = false;
+this.listInCustomTemplates = true;
+this.id = "subscription-form";
+this.projectType = "igr-ts";
+this.name = "Subscription Form";
+this.description = "Subscription form with inputs, buttons and a checkbox inside";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrSubscriptionFormTemplate();
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..c05866ee5
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrDatePicker } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/index.ts b/packages/cli/templates/react/igr-ts/date-picker/default/index.ts
new file mode 100644
index 000000000..cb38aec51
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrDatePickerTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["DatePicker"];
+this.controlGroup = "Scheduling";
+this.listInComponentTemplates = true;
+this.id = "date-picker";
+this.projectType = "igr-ts";
+this.name = "Date Picker";
+this.description = "basic IgrDatePicker";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrDatePickerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/date-picker/index.ts b/packages/cli/templates/react/igr-ts/date-picker/index.ts
new file mode 100644
index 000000000..d4616ec23
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-picker/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDatePickerComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Date Picker";
+this.group = "Scheduling";
+this.description = `displays date picker component`;
+}
+}
+module.exports = new IgrDatePickerComponent();
diff --git a/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..34bb228f9
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,18 @@
+import style from './style.module.css';
+import { IgrDivider } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Divider
+
+
+
Content above
+
+
Content below
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/divider/default/index.ts b/packages/cli/templates/react/igr-ts/divider/default/index.ts
new file mode 100644
index 000000000..9966f5723
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/divider/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrDividerTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["IgrDivider"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "divider";
+ this.projectType = "igr-ts";
+ this.name = "Divider";
+ this.description = "basic IgrDivider";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrDividerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/divider/index.ts b/packages/cli/templates/react/igr-ts/divider/index.ts
new file mode 100644
index 000000000..057233bdd
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/divider/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDividerComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Divider";
+ this.group = "Layouts";
+ this.description = `provides a thin, lightweight separator.`;
+ }
+}
+module.exports = new IgrDividerComponent();
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..df21f848a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,17 @@
+import style from './style.module.css';
+import { IgrExpansionPanel } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Expansion Panel
+
+
+ Expansion Panel Title
+ This is the content of the expansion panel. Click the header to expand or collapse this section.
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts b/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
new file mode 100644
index 000000000..4e0e0a44d
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrExpansionPanelTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["IgrExpansionPanel"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "expansion-panel";
+ this.projectType = "igr-ts";
+ this.name = "Expansion Panel";
+ this.description = "basic IgrExpansionPanel";
+ this.packages = ["igniteui-react@~19.5.2"];
+ }
+}
+module.exports = new IgrExpansionPanelTemplate();
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/index.ts b/packages/cli/templates/react/igr-ts/expansion-panel/index.ts
new file mode 100644
index 000000000..fdc2a1404
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrExpansionPanelComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Expansion Panel";
+ this.group = "Layouts";
+ this.description = `provides a collapsible content section with a header.`;
+ }
+}
+module.exports = new IgrExpansionPanelComponent();
diff --git a/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..f06435d48
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,24 @@
+import style from './style.module.css';
+import { IgrInput, IgrRadioGroup, IgrRadio } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/form/default/index.ts b/packages/cli/templates/react/igr-ts/form/default/index.ts
new file mode 100644
index 000000000..3f6b31d56
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/form/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrFormTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Form"];
+this.controlGroup = "Data Entry & Display";
+this.listInComponentTemplates = true;
+this.id = "form";
+this.projectType = "igr-ts";
+this.name = "Form";
+this.description = "basic IgrForm";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrFormTemplate();
diff --git a/packages/cli/templates/react/igr-ts/form/index.ts b/packages/cli/templates/react/igr-ts/form/index.ts
new file mode 100644
index 000000000..bbd2c7110
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/form/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrFormComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Form";
+this.group = "Data Entry & Display";
+this.description = `displays form component`;
+}
+}
+module.exports = new IgrFormComponent();
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..ac72e3406
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrLinearProgress } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts b/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
new file mode 100644
index 000000000..d5961ea21
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrLinearProgressTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["LinearProgress"];
+this.controlGroup = "Data Entry & Display";
+this.listInComponentTemplates = true;
+this.id = "linear-progress";
+this.projectType = "igr-ts";
+this.name = "Linear Progress";
+this.description = "basic IgrLinearProgress";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrLinearProgressTemplate();
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/index.ts b/packages/cli/templates/react/igr-ts/linear-progress/index.ts
new file mode 100644
index 000000000..4250c82a8
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/linear-progress/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrLinearProgressComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Linear Progress";
+this.group = "Data Entry & Display";
+this.description = `displays linear progress component`;
+}
+}
+module.exports = new IgrLinearProgressComponent();
diff --git a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..33cfcaf69
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,31 @@
+import style from './style.module.css';
+import { IgrList, IgrListItem, IgrListHeader, IgrAvatar, IgrButton } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
List
+
+
+ Job Positions
+
+
+ Abraham Lee
+ Software Developer
+
+
+
+ John Smith
+ Team Lead
+
+
+
+ Jonathan Deberkow
+ UX Designer
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/list/default/index.ts b/packages/cli/templates/react/igr-ts/list/default/index.ts
new file mode 100644
index 000000000..f14ae344c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/list/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrListTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["List"];
+this.controlGroup = "Grids & Lists";
+this.listInComponentTemplates = true;
+this.id = "list";
+this.projectType = "igr-ts";
+this.name = "List";
+this.description = "basic IgrList";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrListTemplate();
diff --git a/packages/cli/templates/react/igr-ts/list/index.ts b/packages/cli/templates/react/igr-ts/list/index.ts
new file mode 100644
index 000000000..53961a74f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/list/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrListComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "List";
+this.group = "Grids & Lists";
+this.description = `displays list component`;
+}
+}
+module.exports = new IgrListComponent();
diff --git a/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..fc90e0a28
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrNavbar } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Navbar
+
+
+ Home
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/navbar/default/index.ts b/packages/cli/templates/react/igr-ts/navbar/default/index.ts
new file mode 100644
index 000000000..944354fd7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/navbar/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrNavbarTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Navbar"];
+this.controlGroup = "Menus";
+this.listInComponentTemplates = true;
+this.id = "navbar";
+this.projectType = "igr-ts";
+this.name = "Navbar";
+this.description = "basic IgrNavbar";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrNavbarTemplate();
diff --git a/packages/cli/templates/react/igr-ts/navbar/index.ts b/packages/cli/templates/react/igr-ts/navbar/index.ts
new file mode 100644
index 000000000..112b8c078
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/navbar/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrNavbarComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Navbar";
+this.group = "Menus";
+this.description = `displays navbar component`;
+}
+}
+module.exports = new IgrNavbarComponent();
diff --git a/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..5cb65f865
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,17 @@
+import style from './style.module.css';
+import { IgrButton, IgrRipple } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Ripple
+
+
+
+ Button with ripple
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/ripple/default/index.ts b/packages/cli/templates/react/igr-ts/ripple/default/index.ts
new file mode 100644
index 000000000..8afdb6fe4
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/ripple/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrRippleTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Ripple"];
+this.controlGroup = "Interactions";
+this.listInComponentTemplates = true;
+this.id = "ripple";
+this.projectType = "igr-ts";
+this.name = "Ripple";
+this.description = "basic IgrRipple";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrRippleTemplate();
diff --git a/packages/cli/templates/react/igr-ts/ripple/index.ts b/packages/cli/templates/react/igr-ts/ripple/index.ts
new file mode 100644
index 000000000..217781d00
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/ripple/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrRippleComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Ripple";
+this.group = "Interactions";
+this.description = `displays ripple component`;
+}
+}
+module.exports = new IgrRippleComponent();
diff --git a/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..47cf24ba4
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrSlider } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/slider/default/index.ts b/packages/cli/templates/react/igr-ts/slider/default/index.ts
new file mode 100644
index 000000000..6dd4fca5c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/slider/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrSliderTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Slider"];
+this.controlGroup = "Interactions";
+this.listInComponentTemplates = true;
+this.id = "slider";
+this.projectType = "igr-ts";
+this.name = "Slider";
+this.description = "basic IgrSlider";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrSliderTemplate();
diff --git a/packages/cli/templates/react/igr-ts/slider/index.ts b/packages/cli/templates/react/igr-ts/slider/index.ts
new file mode 100644
index 000000000..3843da395
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/slider/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrSliderComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Slider";
+this.group = "Interactions";
+this.description = `displays slider component`;
+}
+}
+module.exports = new IgrSliderComponent();
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..24b92d986
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,20 @@
+import style from './style.module.css';
+import { IgrTabs, IgrTab, IgrTabPanel } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Tabs
+
+
+ Albums
+ Favourites
+ Info
+ Sgt. Peppers Lonely Hearts Club Band
The Dark Side of the Moon
Thriller
+ The Dark Side of the Moon
Led Zeppelin IV
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/index.ts b/packages/cli/templates/react/igr-ts/tabs/default/index.ts
new file mode 100644
index 000000000..a06e811cd
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tabs/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrTabsTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Tabs"];
+this.controlGroup = "Layouts";
+this.listInComponentTemplates = true;
+this.id = "tabs";
+this.projectType = "igr-ts";
+this.name = "Tabs";
+this.description = "basic IgrTabs";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrTabsTemplate();
diff --git a/packages/cli/templates/react/igr-ts/tabs/index.ts b/packages/cli/templates/react/igr-ts/tabs/index.ts
new file mode 100644
index 000000000..a92040987
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tabs/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrTabsComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Tabs";
+this.group = "Layouts";
+this.description = `displays tabs component`;
+}
+}
+module.exports = new IgrTabsComponent();
diff --git a/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.test.tsx
@@ -0,0 +1,13 @@
+import { beforeAll, expect, test } from 'vitest';
+import { render } from '@testing-library/react';
+import $(ClassName) from './$(path)';
+import { setupTestMocks } from '../../setupTests';
+
+beforeAll(() => {
+ setupTestMocks();
+})
+
+test('renders $(ClassName) component', () => {
+ const wrapper = render(<$(ClassName) />);
+ expect(wrapper).toBeTruthy();
+});
diff --git a/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..6aeab81e0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,29 @@
+import style from './style.module.css';
+import { IgrTree, IgrTreeItem } from 'igniteui-react';
+import 'igniteui-react/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/tree/default/index.ts b/packages/cli/templates/react/igr-ts/tree/default/index.ts
new file mode 100644
index 000000000..23e567c27
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tree/default/index.ts
@@ -0,0 +1,16 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+
+class IgrTreeTemplate extends IgniteUIForReactTemplate {
+constructor() {
+super(__dirname);
+this.components = ["Tree"];
+this.controlGroup = "Grids & Lists";
+this.listInComponentTemplates = true;
+this.id = "tree";
+this.projectType = "igr-ts";
+this.name = "Tree";
+this.description = "basic IgrTree";
+this.packages = ["igniteui-react@~19.5.2"];
+}
+}
+module.exports = new IgrTreeTemplate();
diff --git a/packages/cli/templates/react/igr-ts/tree/index.ts b/packages/cli/templates/react/igr-ts/tree/index.ts
new file mode 100644
index 000000000..c7d74fedd
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tree/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrTreeComponent extends BaseComponent {
+constructor() {
+super(__dirname);
+this.name = "Tree";
+this.group = "Grids & Lists";
+this.description = `displays tree component`;
+}
+}
+module.exports = new IgrTreeComponent();
From 61d2f691bebbc604e0721ac181cf890e69cf9286 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 30 Mar 2026 06:33:13 +0000
Subject: [PATCH 06/10] Add descriptions to all groups in React igr-ts
groups.json
Agent-Logs-Url: https://github.com/IgniteUI/igniteui-cli/sessions/0942dde4-fc35-4382-893c-748eb6c4a830
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
packages/cli/templates/react/igr-ts/groups.json | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/packages/cli/templates/react/igr-ts/groups.json b/packages/cli/templates/react/igr-ts/groups.json
index 6743ba612..8a73cda4c 100644
--- a/packages/cli/templates/react/igr-ts/groups.json
+++ b/packages/cli/templates/react/igr-ts/groups.json
@@ -1,7 +1,12 @@
{
- "Data Entry & Display": "",
- "Layouts": "",
+ "Data Entry & Display": "user input and display controls including buttons, inputs, checkboxes and more.",
+ "Interactions": "interactive UI components including sliders and visual effects.",
+ "Menus": "navigation controls including navbar.",
+ "Grids & Lists": "components for displaying collections of data in list and tree views.",
+ "Scheduling": "date and time selection controls including calendar and date picker.",
+ "Layouts": "layout and structure controls including accordion, cards, tabs and panels.",
"Charts": "high-performance data visualization for category and financial data.",
"Gauges": "scale measure Controls including Linear and Radial Gauge and Bullet Graph.",
- "Grids": "bind and display data sets with little coding or configuration."
+ "Grids": "bind and display data sets with little coding or configuration.",
+ "Notifications": "informational components including banners and alerts."
}
From 87759d43fc035d520d0356da9111c3bbceb50833 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 30 Mar 2026 14:02:23 +0000
Subject: [PATCH 07/10] fix: use igniteui-webcomponents/themes instead of
igniteui-react/themes for all React component templates
Agent-Logs-Url: https://github.com/IgniteUI/igniteui-cli/sessions/7d42465f-2e0a-4fcc-b339-d251517bf700
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../accordion/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../avatar/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../badge/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../banner/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../button/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../calendar/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../card/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../checkbox/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../chip/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../subscription-form/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../divider/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../dropdown/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../form/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../icon/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../input/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../list/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../navbar/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../rating/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../ripple/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../slider/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../switch/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../tabs/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../text-area/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
.../tree/default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
31 files changed, 31 insertions(+), 31 deletions(-)
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
index a61ac0835..355e8f05b 100644
--- a/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/accordion/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrAccordion, IgrExpansionPanel } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
index 9f966c8bf..577e1e9a5 100644
--- a/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/avatar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrAvatar } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
index 020719a74..32d8f9ccb 100644
--- a/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/badge/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrBadge } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
index f8c092024..c8b0f7c4e 100644
--- a/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/banner/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrBanner } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
index fd32ac8dc..123cd1ade 100644
--- a/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/button-group/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrButtonGroup, IgrToggleButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
index bbc49403c..4503ef58c 100644
--- a/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/button/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
index a3560a1a0..b9138d355 100644
--- a/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/calendar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrCalendar } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
index d414c852f..61d0f4dd4 100644
--- a/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/card/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrCard, IgrCardHeader, IgrCardContent, IgrCardActions, IgrButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
index d4d844b40..efd15486a 100644
--- a/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/checkbox/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrCheckbox } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
index f545b07e4..9aaf5069c 100644
--- a/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/chip/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrChip } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
index 4a79b4a76..d7981ef56 100644
--- a/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrCircularProgress } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
index 1571ab67d..a0f55b77c 100644
--- a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrInput, IgrCheckbox, IgrButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
const handleSubmit = (event: React.FormEvent) => {
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
index c05866ee5..d55d2ed7f 100644
--- a/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrDatePicker } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
index 34bb228f9..4e1e2876a 100644
--- a/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/divider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrDivider } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
index ea5724d8b..082581368 100644
--- a/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/dropdown/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrDropdown, IgrDropdownItem, IgrButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
index df21f848a..6195b6bcb 100644
--- a/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrExpansionPanel } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
index f06435d48..8388a4773 100644
--- a/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/form/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrInput, IgrRadioGroup, IgrRadio } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
index ddf35d53f..d3049f52f 100644
--- a/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/icon-button/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrIconButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
index a86263d4d..4d7e04354 100644
--- a/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/icon/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrIcon } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
index 371075047..592f40622 100644
--- a/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/input/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrInput } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
index ac72e3406..1aa007661 100644
--- a/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrLinearProgress } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
index 33cfcaf69..d9ab008cc 100644
--- a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrList, IgrListItem, IgrListHeader, IgrAvatar, IgrButton } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
index fc90e0a28..119d668c2 100644
--- a/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/navbar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrNavbar } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
index f1bd5d8a0..23fe6182a 100644
--- a/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/radio-group/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrRadioGroup, IgrRadio } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
index b1a695eda..a07a1f6de 100644
--- a/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/rating/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrRating } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
index 5cb65f865..c18c3afc8 100644
--- a/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/ripple/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrButton, IgrRipple } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
index 47cf24ba4..b0ef7bc75 100644
--- a/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/slider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrSlider } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
index 2c9336c32..95f768bdf 100644
--- a/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/switch/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrSwitch } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
index 24b92d986..e8d6d7dcc 100644
--- a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrTabs, IgrTab, IgrTabPanel } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
index a388cce71..3b7fb68de 100644
--- a/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/text-area/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrTextarea } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
diff --git a/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
index 6aeab81e0..0fb7dc736 100644
--- a/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/tree/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,6 +1,6 @@
import style from './style.module.css';
import { IgrTree, IgrTreeItem } from 'igniteui-react';
-import 'igniteui-react/themes/light/bootstrap.css';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
return (
From 3aaed12a365ae13656bf1d3f4bde46a85b257937 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 31 Mar 2026 14:11:19 +0000
Subject: [PATCH 08/10] fix: update tabs template to use correct React API
(IgrTab with label prop, no IgrTabPanel)
Agent-Logs-Url: https://github.com/IgniteUI/igniteui-cli/sessions/f6fbe834-0e2e-424b-b785-98268e09e176
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../files/src/app/__path__/__filePrefix__.tsx | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
index e8d6d7dcc..26841969d 100644
--- a/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/tabs/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,5 +1,5 @@
import style from './style.module.css';
-import { IgrTabs, IgrTab, IgrTabPanel } from 'igniteui-react';
+import { IgrTabs, IgrTab } from 'igniteui-react';
import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
@@ -8,11 +8,18 @@ export default function $(ClassName)() {
Tabs
- Albums
- Favourites
- Info
- Sgt. Peppers Lonely Hearts Club Band
The Dark Side of the Moon
Thriller
- The Dark Side of the Moon
Led Zeppelin IV
+
+ Sgt. Peppers Lonely Hearts Club Band
+ The Dark Side of the Moon
+ Thriller
+
+
+ The Dark Side of the Moon
+ Led Zeppelin IV
+
+
+ No content available
+
From 4d3097c2e91b37c5ff96324d63f64a35212b1cce Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 31 Mar 2026 14:30:32 +0000
Subject: [PATCH 09/10] fix: address all unresolved review comments on React
igr-ts templates
Agent-Logs-Url: https://github.com/IgniteUI/igniteui-cli/sessions/2470cb9f-f7c6-4d85-8e9b-f5028c773415
Co-authored-by: damyanpetev <3198469+damyanpetev@users.noreply.github.com>
---
.../templates/react/igr-ts/accordion/default/index.ts | 2 +-
.../cli/templates/react/igr-ts/card/default/index.ts | 2 +-
.../react/igr-ts/circular-progress/default/index.ts | 2 +-
.../files/src/app/__path__/__filePrefix__.tsx | 5 +++--
.../templates/react/igr-ts/date-picker/default/index.ts | 2 +-
.../cli/templates/react/igr-ts/divider/default/index.ts | 4 ++--
packages/cli/templates/react/igr-ts/divider/index.ts | 2 +-
.../default/files/src/app/__path__/style.module.css | 9 +++++++++
.../react/igr-ts/expansion-panel/default/index.ts | 2 +-
.../react/igr-ts/linear-progress/default/index.ts | 2 +-
.../default/files/src/app/__path__/__filePrefix__.tsx | 2 +-
11 files changed, 22 insertions(+), 12 deletions(-)
create mode 100644 packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/style.module.css
diff --git a/packages/cli/templates/react/igr-ts/accordion/default/index.ts b/packages/cli/templates/react/igr-ts/accordion/default/index.ts
index 5e318da87..d87e3ac0c 100644
--- a/packages/cli/templates/react/igr-ts/accordion/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/accordion/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrAccordionTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
- this.components = ["IgrAccordion"];
+ this.components = ["Accordion"];
this.controlGroup = "Layouts";
this.listInComponentTemplates = true;
this.id = "accordion";
diff --git a/packages/cli/templates/react/igr-ts/card/default/index.ts b/packages/cli/templates/react/igr-ts/card/default/index.ts
index 2e8ca9aff..452f29ada 100644
--- a/packages/cli/templates/react/igr-ts/card/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/card/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrCardTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
- this.components = ["IgrCard"];
+ this.components = ["Card"];
this.controlGroup = "Layouts";
this.listInComponentTemplates = true;
this.id = "card";
diff --git a/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts b/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
index 8c70781e0..50d105fc0 100644
--- a/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/circular-progress/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrCircularProgressTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
-this.components = ["CircularProgress"];
+this.components = ["Circular Progress"];
this.controlGroup = "Data Entry & Display";
this.listInComponentTemplates = true;
this.id = "circular-progress";
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
index a0f55b77c..67e833885 100644
--- a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
@@ -3,9 +3,10 @@ import { IgrInput, IgrCheckbox, IgrButton } from 'igniteui-react';
import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
- const handleSubmit = (event: React.FormEvent) => {
+ const handleSubmit = (event: SubmitEvent) => {
event.preventDefault();
- const formData = new FormData(event.currentTarget);
+ const form = event.target as HTMLFormElement;
+ const formData = new FormData(form);
const entries = Array.from(formData.entries());
const result = entries.map(([key, value]) => `${key}=${value}`).join('; ');
alert(result);
diff --git a/packages/cli/templates/react/igr-ts/date-picker/default/index.ts b/packages/cli/templates/react/igr-ts/date-picker/default/index.ts
index cb38aec51..cbe37f48a 100644
--- a/packages/cli/templates/react/igr-ts/date-picker/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/date-picker/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrDatePickerTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
-this.components = ["DatePicker"];
+this.components = ["Date Picker"];
this.controlGroup = "Scheduling";
this.listInComponentTemplates = true;
this.id = "date-picker";
diff --git a/packages/cli/templates/react/igr-ts/divider/default/index.ts b/packages/cli/templates/react/igr-ts/divider/default/index.ts
index 9966f5723..0022a41e0 100644
--- a/packages/cli/templates/react/igr-ts/divider/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/divider/default/index.ts
@@ -3,8 +3,8 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrDividerTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
- this.components = ["IgrDivider"];
- this.controlGroup = "Layouts";
+ this.components = ["Divider"];
+ this.controlGroup = "Data Entry & Display";
this.listInComponentTemplates = true;
this.id = "divider";
this.projectType = "igr-ts";
diff --git a/packages/cli/templates/react/igr-ts/divider/index.ts b/packages/cli/templates/react/igr-ts/divider/index.ts
index 057233bdd..c7c155cac 100644
--- a/packages/cli/templates/react/igr-ts/divider/index.ts
+++ b/packages/cli/templates/react/igr-ts/divider/index.ts
@@ -4,7 +4,7 @@ class IgrDividerComponent extends BaseComponent {
constructor() {
super(__dirname);
this.name = "Divider";
- this.group = "Layouts";
+ this.group = "Data Entry & Display";
this.description = `provides a thin, lightweight separator.`;
}
}
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,9 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: space-around;
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts b/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
index 4e0e0a44d..126aedc30 100644
--- a/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/expansion-panel/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrExpansionPanelTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
- this.components = ["IgrExpansionPanel"];
+ this.components = ["Expansion Panel"];
this.controlGroup = "Layouts";
this.listInComponentTemplates = true;
this.id = "expansion-panel";
diff --git a/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts b/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
index d5961ea21..4b0982d33 100644
--- a/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
+++ b/packages/cli/templates/react/igr-ts/linear-progress/default/index.ts
@@ -3,7 +3,7 @@ import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIF
class IgrLinearProgressTemplate extends IgniteUIForReactTemplate {
constructor() {
super(__dirname);
-this.components = ["LinearProgress"];
+this.components = ["Linear Progress"];
this.controlGroup = "Data Entry & Display";
this.listInComponentTemplates = true;
this.id = "linear-progress";
diff --git a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
index d9ab008cc..69b37c934 100644
--- a/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/list/default/files/src/app/__path__/__filePrefix__.tsx
@@ -1,5 +1,5 @@
import style from './style.module.css';
-import { IgrList, IgrListItem, IgrListHeader, IgrAvatar, IgrButton } from 'igniteui-react';
+import { IgrList, IgrListItem, IgrListHeader, IgrAvatar } from 'igniteui-react';
import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
From 33a06306d3258eb9766c848e5235133bfbb4e902 Mon Sep 17 00:00:00 2001
From: Damyan Petev
Date: Tue, 31 Mar 2026 17:46:28 +0300
Subject: [PATCH 10/10] Apply suggestion from @damyanpetev
---
.../subscription-form/files/src/app/__path__/__filePrefix__.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
index 67e833885..45ccaf756 100644
--- a/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
+++ b/packages/cli/templates/react/igr-ts/custom-templates/subscription-form/files/src/app/__path__/__filePrefix__.tsx
@@ -3,7 +3,7 @@ import { IgrInput, IgrCheckbox, IgrButton } from 'igniteui-react';
import 'igniteui-webcomponents/themes/light/bootstrap.css';
export default function $(ClassName)() {
- const handleSubmit = (event: SubmitEvent) => {
+ const handleSubmit = (event: React.SubmitEvent) => {
event.preventDefault();
const form = event.target as HTMLFormElement;
const formData = new FormData(form);