diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java
index 071c8ff3784..4e80cfc618a 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java
@@ -78,5 +78,6 @@ public interface KotlinIcons {
Icon MAC_OS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/macOS.svg");
Icon WINDOWS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/windows.svg");
Icon NODE_JS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/nodejs.svg");
+ Icon REACT_JS = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/wizard/react.svg");
}
}
diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt
index 1f7d2945cdb..6008c0b0768 100644
--- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt
+++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt
@@ -85,6 +85,7 @@ private val ProjectTemplate.icon: Icon
FullStackWebApplicationProjectTemplate -> KotlinIcons.Wizard.WEB
NativeApplicationProjectTemplate -> KotlinIcons.Wizard.NATIVE
FrontendApplicationProjectTemplate -> KotlinIcons.Wizard.JS
+ ReactApplicationProjectTemplate -> KotlinIcons.Wizard.REACT_JS
MultiplatformMobileApplicationProjectTemplate -> KotlinIcons.Wizard.MULTIPLATFORM_MOBILE
MultiplatformMobileLibraryProjectTemplate -> KotlinIcons.Wizard.MULTIPLATFORM_MOBILE_LIBRARY
NodeJsApplicationProjectTemplate -> KotlinIcons.Wizard.NODE_JS
diff --git a/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg b/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg
new file mode 100644
index 00000000000..223b071308d
--- /dev/null
+++ b/idea/resources/org/jetbrains/kotlin/idea/icons/wizard/react.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties
index 4da8fb2b0e9..43e324e2789 100644
--- a/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties
+++ b/libraries/tools/new-project-wizard/resources/messages/KotlinNewProjectWizardBundle.properties
@@ -129,6 +129,9 @@ project.template.native.console.description=Application with Kotlin/Native that
project.template.browser.title=Browser Application
project.template.browser.description=A blank application targeting the browser
+project.template.react.title=React Application
+project.template.react.description=React application targeting Browser
+
project.template.nodejs.title=Node.JS Application
project.template.nodejs.description=A blank application targeting Node.js
diff --git a/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/index.html.vm b/libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/jsClient/index.html.vm
similarity index 100%
rename from libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/simpleJsClient/index.html.vm
rename to libraries/tools/new-project-wizard/resources/org/jetbrains/kotlin/tools/projectWizard/templates/jsClient/index.html.vm
diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt
index 0ab91676b4f..c8e4de5e8e4 100644
--- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt
+++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt
@@ -77,6 +77,7 @@ sealed class ProjectTemplate : DisplayableSettingItem {
MultiplatformLibraryProjectTemplate,
NativeApplicationProjectTemplate,
FrontendApplicationProjectTemplate,
+ ReactApplicationProjectTemplate,
FullStackWebApplicationProjectTemplate,
NodeJsApplicationProjectTemplate
)
@@ -298,6 +299,31 @@ object FrontendApplicationProjectTemplate : ProjectTemplate() {
)
}
+object ReactApplicationProjectTemplate : ProjectTemplate() {
+ override val title = KotlinNewProjectWizardBundle.message("project.template.react.title")
+ override val description = KotlinNewProjectWizardBundle.message("project.template.react.description")
+ override val id = "reactApplication"
+
+ @NonNls
+ override val suggestedProjectName = "myKotlinJsApplication"
+ override val projectKind = ProjectKind.Js
+
+ override val setsPluginSettings: List>
+ get() = listOf(
+ KotlinPlugin.modules.reference withValue listOf(
+ Module(
+ "js",
+ BrowserJsSinglePlatformModuleConfigurator,
+ template = ReactJsClientTemplate(),
+ sourcesets = SourcesetType.ALL.map { type ->
+ Sourceset(type, dependencies = emptyList())
+ },
+ subModules = emptyList()
+ )
+ )
+ )
+}
+
object MultiplatformMobileApplicationProjectTemplate : ProjectTemplate() {
override val title = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.title")
override val description = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.description")
diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt
index abc6a4feb83..2460ee427d1 100644
--- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt
+++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/ReactJsClientTemplate.kt
@@ -52,7 +52,7 @@ class ReactJsClientTemplate : JsClientTemplate() {
buildList {
val hasKtorServNeighbourTarget = hasKtorServNeighbourTarget(module)
if (!hasKtorServNeighbourTarget) {
- +(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main)
+ +(FileTemplateDescriptor("jsClient/index.html.vm") asResourceOf SourcesetType.main)
}
+(FileTemplateDescriptor("$id/reactClient.kt.vm", "client.kt".asPath()) asSrcOf SourcesetType.main)
+(FileTemplateDescriptor("$id/reactComponent.kt.vm", "welcome.kt".asPath()) asSrcOf SourcesetType.main)
diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt
index b41d7256588..7ccbb7c7398 100644
--- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt
+++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt
@@ -57,7 +57,7 @@ class SimpleJsClientTemplate : JsClientTemplate() {
buildList {
val hasKtorServNeighbourTarget = hasKtorServNeighbourTarget(module)
if (!hasKtorServNeighbourTarget) {
- +(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main)
+ +(FileTemplateDescriptor("jsClient/index.html.vm") asResourceOf SourcesetType.main)
}
if (useKotlinxHtml.reference.settingValue()) {
+(FileTemplateDescriptor("$id/client.kt.vm") asSrcOf SourcesetType.main)