diff --git a/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/carousel/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/carousel/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..9d4d66f77
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,27 @@
+import style from './style.module.css';
+import { IgrCarousel, IgrCarouselSlide } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Carousel
+
+
+
+ London
+ The capital of the United Kingdom, known for its history and landmarks.
+
+
+ Paris
+ The capital of France, famous for the Eiffel Tower and its museums.
+
+
+ Tokyo
+ The capital of Japan, a bustling metropolis blending tradition and technology.
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/carousel/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/carousel/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/carousel/default/index.ts b/packages/cli/templates/react/igr-ts/carousel/default/index.ts
new file mode 100644
index 000000000..872465678
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/carousel/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrCarouselTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Carousel"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "carousel";
+ this.projectType = "igr-ts";
+ this.name = "Carousel";
+ this.description = "basic IgrCarousel";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrCarouselTemplate();
diff --git a/packages/cli/templates/react/igr-ts/carousel/index.ts b/packages/cli/templates/react/igr-ts/carousel/index.ts
new file mode 100644
index 000000000..3b43573ec
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/carousel/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrCarouselComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Carousel";
+ this.group = "Layouts";
+ this.description = `presents a set of slides by sequentially displaying one at a time`;
+ }
+}
+module.exports = new IgrCarouselComponent();
diff --git a/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chat/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/chat/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..9452ac9a7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,20 @@
+import style from './style.module.css';
+import { IgrChat } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+const messages = [
+ { id: '1', text: 'Hi! How can I help you today?', sender: 'assistant', timestamp: new Date().toISOString() },
+ { id: '2', text: 'Can you show me the Ignite UI for React chat component?', sender: 'user', timestamp: new Date().toISOString() },
+ { id: '3', text: 'Absolutely — this is it!', sender: 'assistant', timestamp: new Date().toISOString() },
+];
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..941734f6c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chat/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,21 @@
+:local(.page) {
+ flex: 1 1 auto;
+ width: 100%;
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 32px 24px 40px;
+ box-sizing: border-box;
+}
+:local(.container) {
+ width: 100%;
+}
+:local(.container) :global(igc-chat) {
+ display: block;
+ width: min(100%, 720px);
+ height: 560px;
+ margin: 0 auto;
+}
+:local(.title) {
+ margin: 0 0 20px;
+ color: rgb(0, 153, 255);
+}
diff --git a/packages/cli/templates/react/igr-ts/chat/default/index.ts b/packages/cli/templates/react/igr-ts/chat/default/index.ts
new file mode 100644
index 000000000..ce9ada744
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chat/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrChatTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Chat"];
+ this.controlGroup = "Interactions";
+ this.listInComponentTemplates = true;
+ this.id = "chat";
+ this.projectType = "igr-ts";
+ this.name = "Chat";
+ this.description = "basic IgrChat";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrChatTemplate();
diff --git a/packages/cli/templates/react/igr-ts/chat/index.ts b/packages/cli/templates/react/igr-ts/chat/index.ts
new file mode 100644
index 000000000..165374e12
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/chat/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrChatComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Chat";
+ this.group = "Data Entry & Display";
+ this.description = `a chat UI component for displaying messages, attachments and input interaction`;
+ }
+}
+module.exports = new IgrChatComponent();
diff --git a/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/combo/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/combo/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..061a42d17
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,30 @@
+import style from './style.module.css';
+import { IgrCombo } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+const cities = [
+ { id: 'london', name: 'London', country: 'United Kingdom' },
+ { id: 'paris', name: 'Paris', country: 'France' },
+ { id: 'new-york', name: 'New York', country: 'United States' },
+ { id: 'toronto', name: 'Toronto', country: 'Canada' },
+ { id: 'tokyo', name: 'Tokyo', country: 'Japan' },
+ { id: 'sydney', name: 'Sydney', country: 'Australia' },
+];
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/combo/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/combo/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/combo/default/index.ts b/packages/cli/templates/react/igr-ts/combo/default/index.ts
new file mode 100644
index 000000000..b5f3baa7b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/combo/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrComboTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Combo"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "combo";
+ this.projectType = "igr-ts";
+ this.name = "Combo";
+ this.description = "basic IgrCombo";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrComboTemplate();
diff --git a/packages/cli/templates/react/igr-ts/combo/index.ts b/packages/cli/templates/react/igr-ts/combo/index.ts
new file mode 100644
index 000000000..2c8a20742
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/combo/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrComboComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Combo";
+ this.group = "Data Entry & Display";
+ this.description = `a searchable, multi-select dropdown bound to a data source`;
+ }
+}
+module.exports = new IgrComboComponent();
diff --git a/packages/cli/templates/react/igr-ts/date-range-picker/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/date-range-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-range-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-range-picker/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/date-range-picker/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..a7461f78c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-range-picker/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrDateRangePicker } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Date Range Picker
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/date-range-picker/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/date-range-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-range-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-range-picker/default/index.ts b/packages/cli/templates/react/igr-ts/date-range-picker/default/index.ts
new file mode 100644
index 000000000..9ef57a2fd
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-range-picker/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrDateRangePickerTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Date Range Picker"];
+ this.controlGroup = "Scheduling";
+ this.listInComponentTemplates = true;
+ this.id = "date-range-picker";
+ this.projectType = "igr-ts";
+ this.name = "Date Range Picker";
+ this.description = "basic IgrDateRangePicker";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrDateRangePickerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/date-range-picker/index.ts b/packages/cli/templates/react/igr-ts/date-range-picker/index.ts
new file mode 100644
index 000000000..5f441f74e
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-range-picker/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDateRangePickerComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Date Range Picker";
+ this.group = "Scheduling";
+ this.description = `an input that allows the user to select a range of dates`;
+ }
+}
+module.exports = new IgrDateRangePickerComponent();
diff --git a/packages/cli/templates/react/igr-ts/date-time-input/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/date-time-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/date-time-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/date-time-input/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/date-time-input/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..851db4143
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-time-input/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrDateTimeInput } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Date Time Input
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/date-time-input/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/date-time-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/date-time-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/date-time-input/default/index.ts b/packages/cli/templates/react/igr-ts/date-time-input/default/index.ts
new file mode 100644
index 000000000..e37612bfe
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-time-input/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrDateTimeInputTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Date Time Input"];
+ this.controlGroup = "Scheduling";
+ this.listInComponentTemplates = true;
+ this.id = "date-time-input";
+ this.projectType = "igr-ts";
+ this.name = "Date Time Input";
+ this.description = "basic IgrDateTimeInput";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrDateTimeInputTemplate();
diff --git a/packages/cli/templates/react/igr-ts/date-time-input/index.ts b/packages/cli/templates/react/igr-ts/date-time-input/index.ts
new file mode 100644
index 000000000..a614442f5
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/date-time-input/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDateTimeInputComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Date Time Input";
+ this.group = "Scheduling";
+ this.description = `an input field for editing date and time values with a customizable format`;
+ }
+}
+module.exports = new IgrDateTimeInputComponent();
diff --git a/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dialog/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/dialog/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..33d3eacbf
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,20 @@
+import { useRef } from 'react';
+import style from './style.module.css';
+import { IgrDialog, IgrButton } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ const dialogRef = useRef(null);
+
+ return (
+
+
Dialog
+
+
dialogRef.current?.show()}>Open Dialog
+
+ Are you sure you want to proceed?
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/dialog/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dialog/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/dialog/default/index.ts b/packages/cli/templates/react/igr-ts/dialog/default/index.ts
new file mode 100644
index 000000000..84e79775a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dialog/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrDialogTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Dialog"];
+ this.controlGroup = "Notifications";
+ this.listInComponentTemplates = true;
+ this.id = "dialog";
+ this.projectType = "igr-ts";
+ this.name = "Dialog";
+ this.description = "basic IgrDialog";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrDialogTemplate();
diff --git a/packages/cli/templates/react/igr-ts/dialog/index.ts b/packages/cli/templates/react/igr-ts/dialog/index.ts
new file mode 100644
index 000000000..332f690c7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/dialog/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrDialogComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Dialog";
+ this.group = "Notifications";
+ this.description = `a modal dialog built on the native dialog element`;
+ }
+}
+module.exports = new IgrDialogComponent();
diff --git a/packages/cli/templates/react/igr-ts/file-input/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/file-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/file-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/file-input/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/file-input/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..5cec09ae6
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/file-input/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrFileInput } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/file-input/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/file-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/file-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/file-input/default/index.ts b/packages/cli/templates/react/igr-ts/file-input/default/index.ts
new file mode 100644
index 000000000..66b1c1c01
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/file-input/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrFileInputTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["File Input"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "file-input";
+ this.projectType = "igr-ts";
+ this.name = "File Input";
+ this.description = "basic IgrFileInput";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrFileInputTemplate();
diff --git a/packages/cli/templates/react/igr-ts/file-input/index.ts b/packages/cli/templates/react/igr-ts/file-input/index.ts
new file mode 100644
index 000000000..d61c3c613
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/file-input/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrFileInputComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "File Input";
+ this.group = "Data Entry & Display";
+ this.description = `an input field for selecting and uploading one or more files`;
+ }
+}
+module.exports = new IgrFileInputComponent();
diff --git a/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/highlight/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/highlight/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..cc78d3a15
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrHighlight } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Highlight
+
+
+ Hello, world! The world is a wonderful place.
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/highlight/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/highlight/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/highlight/default/index.ts b/packages/cli/templates/react/igr-ts/highlight/default/index.ts
new file mode 100644
index 000000000..bfbee1eb4
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/highlight/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrHighlightTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Highlight"];
+ this.controlGroup = "Interactions";
+ this.listInComponentTemplates = true;
+ this.id = "highlight";
+ this.projectType = "igr-ts";
+ this.name = "Highlight";
+ this.description = "basic IgrHighlight";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrHighlightTemplate();
diff --git a/packages/cli/templates/react/igr-ts/highlight/index.ts b/packages/cli/templates/react/igr-ts/highlight/index.ts
new file mode 100644
index 000000000..3318c8d29
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/highlight/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrHighlightComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Highlight";
+ this.group = "Interactions";
+ this.description = `highlights matches of a search text within its slotted content`;
+ }
+}
+module.exports = new IgrHighlightComponent();
diff --git a/packages/cli/templates/react/igr-ts/mask-input/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/mask-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/mask-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/mask-input/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/mask-input/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..46734aa54
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/mask-input/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrMaskInput } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/mask-input/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/mask-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/mask-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/mask-input/default/index.ts b/packages/cli/templates/react/igr-ts/mask-input/default/index.ts
new file mode 100644
index 000000000..a988da8b2
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/mask-input/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrMaskInputTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Mask Input"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "mask-input";
+ this.projectType = "igr-ts";
+ this.name = "Mask Input";
+ this.description = "basic IgrMaskInput";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrMaskInputTemplate();
diff --git a/packages/cli/templates/react/igr-ts/mask-input/index.ts b/packages/cli/templates/react/igr-ts/mask-input/index.ts
new file mode 100644
index 000000000..856d0c25e
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/mask-input/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrMaskInputComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Mask Input";
+ this.group = "Data Entry & Display";
+ this.description = `an input field that formats and validates user input based on a configurable mask`;
+ }
+}
+module.exports = new IgrMaskInputComponent();
diff --git a/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/nav-drawer/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/nav-drawer/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..740f9ba2e
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,27 @@
+import style from './style.module.css';
+import { IgrNavDrawer, IgrNavDrawerItem, IgrIcon } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Nav Drawer
+
+
+
+
+ Home
+
+
+
+ Search
+
+
+
+ Settings
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/nav-drawer/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/nav-drawer/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/nav-drawer/default/index.ts b/packages/cli/templates/react/igr-ts/nav-drawer/default/index.ts
new file mode 100644
index 000000000..6453b400f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/nav-drawer/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrNavDrawerTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Nav Drawer"];
+ this.controlGroup = "Menus";
+ this.listInComponentTemplates = true;
+ this.id = "nav-drawer";
+ this.projectType = "igr-ts";
+ this.name = "Nav Drawer";
+ this.description = "basic IgrNavDrawer";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrNavDrawerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/nav-drawer/index.ts b/packages/cli/templates/react/igr-ts/nav-drawer/index.ts
new file mode 100644
index 000000000..78979cad6
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/nav-drawer/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrNavDrawerComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Nav Drawer";
+ this.group = "Menus";
+ this.description = `a side navigation container for quick access between views within an application`;
+ }
+}
+module.exports = new IgrNavDrawerComponent();
diff --git a/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..0d7a94bc6
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/range-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();
+});
\ No newline at end of file
diff --git a/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..fd87e5042
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrRangeSlider } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..f2831061d
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/range-slider/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,14 @@
+:local(.container) {
+ padding-top: 24px;
+ display: flex;
+ flex-flow: row;
+ justify-content: center;
+ width: 100%;
+ box-sizing: border-box;
+}
+:local(.container) :global(igc-range-slider) {
+ width: min(100%, 480px);
+}
+:local(.title) {
+ color: rgb(0, 153, 255);
+}
\ No newline at end of file
diff --git a/packages/cli/templates/react/igr-ts/range-slider/default/index.ts b/packages/cli/templates/react/igr-ts/range-slider/default/index.ts
new file mode 100644
index 000000000..1d8191913
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/range-slider/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrRangeSliderTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Range Slider"];
+ this.controlGroup = "Interactions";
+ this.listInComponentTemplates = true;
+ this.id = "range-slider";
+ this.projectType = "igr-ts";
+ this.name = "Range Slider";
+ this.description = "basic IgrRangeSlider";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrRangeSliderTemplate();
diff --git a/packages/cli/templates/react/igr-ts/range-slider/index.ts b/packages/cli/templates/react/igr-ts/range-slider/index.ts
new file mode 100644
index 000000000..83b15c5e7
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/range-slider/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrRangeSliderComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Range Slider";
+ this.group = "Interactions";
+ this.description = `lets a user select two numeric values within a range`;
+ }
+}
+module.exports = new IgrRangeSliderComponent();
diff --git a/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/select/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/select/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..f9d2bf14b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,25 @@
+import style from './style.module.css';
+import { IgrSelect, IgrSelectGroup, IgrSelectItem } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Select
+
+
+
+ Europe
+ London
+ Paris
+
+
+ North America
+ New York
+ Toronto
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/select/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/select/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/select/default/index.ts b/packages/cli/templates/react/igr-ts/select/default/index.ts
new file mode 100644
index 000000000..2bb9fe9c0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/select/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrSelectTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Select"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "select";
+ this.projectType = "igr-ts";
+ this.name = "Select";
+ this.description = "basic IgrSelect";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrSelectTemplate();
diff --git a/packages/cli/templates/react/igr-ts/select/index.ts b/packages/cli/templates/react/igr-ts/select/index.ts
new file mode 100644
index 000000000..804acd503
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/select/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrSelectComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Select";
+ this.group = "Data Entry & Display";
+ this.description = `a control that provides a menu of options to choose from`;
+ }
+}
+module.exports = new IgrSelectComponent();
diff --git a/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/snackbar/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/snackbar/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..8c139bc49
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrSnackbar } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Snackbar
+
+ Message archived.
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/snackbar/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/snackbar/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/snackbar/default/index.ts b/packages/cli/templates/react/igr-ts/snackbar/default/index.ts
new file mode 100644
index 000000000..88c7bc0ca
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/snackbar/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrSnackbarTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Snackbar"];
+ this.controlGroup = "Notifications";
+ this.listInComponentTemplates = true;
+ this.id = "snackbar";
+ this.projectType = "igr-ts";
+ this.name = "Snackbar";
+ this.description = "basic IgrSnackbar";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrSnackbarTemplate();
diff --git a/packages/cli/templates/react/igr-ts/snackbar/index.ts b/packages/cli/templates/react/igr-ts/snackbar/index.ts
new file mode 100644
index 000000000..5b05d2cb9
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/snackbar/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrSnackbarComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Snackbar";
+ this.group = "Notifications";
+ this.description = `provides brief feedback about an operation with an optional action`;
+ }
+}
+module.exports = new IgrSnackbarComponent();
diff --git a/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/splitter/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/splitter/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..4a312dec5
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,21 @@
+import style from './style.module.css';
+import { IgrSplitter } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Splitter
+
+
+ Overview
+ Resize the panes to explore the layout.
+
+
+ Details
+ Content stays organized in independently sized regions.
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..90c245ac1
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/splitter/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,31 @@
+:local(.page) {
+ width: 100%;
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 32px 24px 40px;
+ box-sizing: border-box;
+}
+
+:local(.title) {
+ margin: 0 0 20px;
+ color: rgb(0, 153, 255);
+}
+
+:local(.splitter) {
+ display: block;
+ height: 420px;
+}
+
+:local(.pane) {
+ height: 100%;
+ padding: 24px;
+ box-sizing: border-box;
+}
+
+:local(.pane) h2 {
+ margin: 0 0 8px;
+}
+
+:local(.pane) p {
+ margin: 0;
+}
diff --git a/packages/cli/templates/react/igr-ts/splitter/default/index.ts b/packages/cli/templates/react/igr-ts/splitter/default/index.ts
new file mode 100644
index 000000000..64cfaa1e3
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/splitter/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrSplitterTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Splitter"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "splitter";
+ this.projectType = "igr-ts";
+ this.name = "Splitter";
+ this.description = "basic IgrSplitter";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrSplitterTemplate();
diff --git a/packages/cli/templates/react/igr-ts/splitter/index.ts b/packages/cli/templates/react/igr-ts/splitter/index.ts
new file mode 100644
index 000000000..a60aeef0b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/splitter/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrSplitterComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Splitter";
+ this.group = "Layouts";
+ this.description = `resizable split panes for arranging content`;
+ }
+}
+module.exports = new IgrSplitterComponent();
diff --git a/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/stepper/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/stepper/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..3c628d817
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,27 @@
+import style from './style.module.css';
+import { IgrStepper, IgrStep } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Stepper
+
+
+
+ Destination
+ Choose where you want to travel.
+
+
+ Travelers
+ Add the details for each traveler.
+
+
+ Payment
+ Review your trip and complete the payment.
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/stepper/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/stepper/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/stepper/default/index.ts b/packages/cli/templates/react/igr-ts/stepper/default/index.ts
new file mode 100644
index 000000000..737e1b123
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/stepper/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrStepperTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Stepper"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "stepper";
+ this.projectType = "igr-ts";
+ this.name = "Stepper";
+ this.description = "basic IgrStepper";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrStepperTemplate();
diff --git a/packages/cli/templates/react/igr-ts/stepper/index.ts b/packages/cli/templates/react/igr-ts/stepper/index.ts
new file mode 100644
index 000000000..678026f92
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/stepper/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrStepperComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Stepper";
+ this.group = "Layouts";
+ this.description = `divides content into logical steps within a wizard-like workflow`;
+ }
+}
+module.exports = new IgrStepperComponent();
diff --git a/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/theme-provider/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/theme-provider/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..e8ecb4773
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,18 @@
+import style from './style.module.css';
+import { IgrButton, IgrThemeProvider } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Theme Provider
+
+
+ Application theme
+ Descendant components inherit the theme from the provider.
+ Themed button
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..29ee89a18
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/theme-provider/default/files/src/app/__path__/style.module.css
@@ -0,0 +1,25 @@
+:local(.page) {
+ width: 100%;
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 32px 24px 40px;
+ box-sizing: border-box;
+}
+
+:local(.title) {
+ margin: 0 0 20px;
+ color: rgb(0, 153, 255);
+}
+
+:local(.example) {
+ padding: 24px;
+ border: 1px solid var(--ig-gray-300);
+}
+
+:local(.example) h2 {
+ margin: 0 0 8px;
+}
+
+:local(.example) p {
+ margin: 0 0 20px;
+}
diff --git a/packages/cli/templates/react/igr-ts/theme-provider/default/index.ts b/packages/cli/templates/react/igr-ts/theme-provider/default/index.ts
new file mode 100644
index 000000000..110407a3c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/theme-provider/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrThemeProviderTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Theme Provider"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "theme-provider";
+ this.projectType = "igr-ts";
+ this.name = "Theme Provider";
+ this.description = "basic IgrThemeProvider";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrThemeProviderTemplate();
diff --git a/packages/cli/templates/react/igr-ts/theme-provider/index.ts b/packages/cli/templates/react/igr-ts/theme-provider/index.ts
new file mode 100644
index 000000000..8a7474f79
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/theme-provider/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrThemeProviderComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Theme Provider";
+ this.group = "Layouts";
+ this.description = `provides theme and palette settings to descendant components`;
+ }
+}
+module.exports = new IgrThemeProviderComponent();
diff --git a/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tile-manager/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/tile-manager/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..36cfd471b
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,27 @@
+import style from './style.module.css';
+import { IgrTileManager, IgrTile } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Tile Manager
+
+
+
+ Revenue
+ $120,430
+
+
+ Active Users
+ 8,240
+
+
+ Support Tickets
+ 12
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/tile-manager/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tile-manager/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/tile-manager/default/index.ts b/packages/cli/templates/react/igr-ts/tile-manager/default/index.ts
new file mode 100644
index 000000000..b63cd9467
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tile-manager/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrTileManagerTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Tile Manager"];
+ this.controlGroup = "Layouts";
+ this.listInComponentTemplates = true;
+ this.id = "tile-manager";
+ this.projectType = "igr-ts";
+ this.name = "Tile Manager";
+ this.description = "basic IgrTileManager";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrTileManagerTemplate();
diff --git a/packages/cli/templates/react/igr-ts/tile-manager/index.ts b/packages/cli/templates/react/igr-ts/tile-manager/index.ts
new file mode 100644
index 000000000..2cbd63126
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tile-manager/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrTileManagerComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Tile Manager";
+ this.group = "Layouts";
+ this.description = `enables dynamic arrangement, resizing and interaction of dashboard-like tiles`;
+ }
+}
+module.exports = new IgrTileManagerComponent();
diff --git a/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toast/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/toast/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..7035b61c1
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,14 @@
+import style from './style.module.css';
+import { IgrToast } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Toast
+
+ File saved successfully.
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/toast/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toast/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/toast/default/index.ts b/packages/cli/templates/react/igr-ts/toast/default/index.ts
new file mode 100644
index 000000000..e14f83b86
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toast/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrToastTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Toast"];
+ this.controlGroup = "Notifications";
+ this.listInComponentTemplates = true;
+ this.id = "toast";
+ this.projectType = "igr-ts";
+ this.name = "Toast";
+ this.description = "basic IgrToast";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrToastTemplate();
diff --git a/packages/cli/templates/react/igr-ts/toast/index.ts b/packages/cli/templates/react/igr-ts/toast/index.ts
new file mode 100644
index 000000000..7b4e0c1a0
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toast/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrToastComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Toast";
+ this.group = "Notifications";
+ this.description = `displays a brief, non-interactive notification`;
+ }
+}
+module.exports = new IgrToastComponent();
diff --git a/packages/cli/templates/react/igr-ts/toggle-button/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/toggle-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/toggle-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/toggle-button/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/toggle-button/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..02e29be0f
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toggle-button/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,16 @@
+import style from './style.module.css';
+import { IgrToggleButton } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Toggle Button
+
+ Bold
+ Italic
+ Underline
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/toggle-button/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/toggle-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/toggle-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/toggle-button/default/index.ts b/packages/cli/templates/react/igr-ts/toggle-button/default/index.ts
new file mode 100644
index 000000000..d8ee6f302
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toggle-button/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrToggleButtonTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Toggle Button"];
+ this.controlGroup = "Data Entry & Display";
+ this.listInComponentTemplates = true;
+ this.id = "toggle-button";
+ this.projectType = "igr-ts";
+ this.name = "Toggle Button";
+ this.description = "basic IgrToggleButton";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrToggleButtonTemplate();
diff --git a/packages/cli/templates/react/igr-ts/toggle-button/index.ts b/packages/cli/templates/react/igr-ts/toggle-button/index.ts
new file mode 100644
index 000000000..22a66bb1c
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/toggle-button/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrToggleButtonComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Toggle Button";
+ this.group = "Data Entry & Display";
+ this.description = `a button that exposes selected state, usable standalone or within a button group`;
+ }
+}
+module.exports = new IgrToggleButtonComponent();
diff --git a/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/__filePrefix__.test.tsx b/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/__filePrefix__.test.tsx
new file mode 100644
index 000000000..854681a3a
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tooltip/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/tooltip/default/files/src/app/__path__/__filePrefix__.tsx b/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/__filePrefix__.tsx
new file mode 100644
index 000000000..b79c0b839
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/__filePrefix__.tsx
@@ -0,0 +1,15 @@
+import style from './style.module.css';
+import { IgrTooltip } from 'igniteui-react';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+
+export default function $(ClassName)() {
+ return (
+
+
Tooltip
+
+
+
+
+
+ );
+}
diff --git a/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/style.module.css b/packages/cli/templates/react/igr-ts/tooltip/default/files/src/app/__path__/style.module.css
new file mode 100644
index 000000000..1bcd0e328
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tooltip/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/tooltip/default/index.ts b/packages/cli/templates/react/igr-ts/tooltip/default/index.ts
new file mode 100644
index 000000000..ff3baf9e6
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tooltip/default/index.ts
@@ -0,0 +1,17 @@
+import { IgniteUIForReactTemplate } from "../../../../../lib/templates/IgniteUIForReactTemplate";
+import { IGNITEUI_REACT_PACKAGE } from "../../constants";
+
+class IgrTooltipTemplate extends IgniteUIForReactTemplate {
+ constructor() {
+ super(__dirname);
+ this.components = ["Tooltip"];
+ this.controlGroup = "Interactions";
+ this.listInComponentTemplates = true;
+ this.id = "tooltip";
+ this.projectType = "igr-ts";
+ this.name = "Tooltip";
+ this.description = "basic IgrTooltip";
+ this.packages = [IGNITEUI_REACT_PACKAGE];
+ }
+}
+module.exports = new IgrTooltipTemplate();
diff --git a/packages/cli/templates/react/igr-ts/tooltip/index.ts b/packages/cli/templates/react/igr-ts/tooltip/index.ts
new file mode 100644
index 000000000..c69e75edc
--- /dev/null
+++ b/packages/cli/templates/react/igr-ts/tooltip/index.ts
@@ -0,0 +1,11 @@
+import { BaseComponent } from "@igniteui/cli-core";
+
+class IgrTooltipComponent extends BaseComponent {
+ constructor() {
+ super(__dirname);
+ this.name = "Tooltip";
+ this.group = "Interactions";
+ this.description = `displays supplementary information for an element on hover or focus`;
+ }
+}
+module.exports = new IgrTooltipComponent();