Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions examples/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.compose.hot.reload)
}

configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("org.jetbrains.compose.storytale:compiler-plugin"))
.using(project(":modules:compiler-plugin"))
substitute(module("org.jetbrains.compose.storytale:runtime-api"))
.using(project(":modules:runtime-api"))
substitute(module("org.jetbrains.compose.storytale:gallery"))
.using(project(":modules:gallery"))
}
}

kotlin {
Expand Down
1 change: 0 additions & 1 deletion examples/gradle

This file was deleted.

1 change: 0 additions & 1 deletion examples/gradle.properties

This file was deleted.

42 changes: 0 additions & 42 deletions examples/settings.gradle.kts

This file was deleted.

2 changes: 1 addition & 1 deletion examples/src/androidMain/kotlin/Platform.android.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import android.os.Build

class AndroidPlatform : Platform {
override val name: String = "Android ${Build.VERSION.SDK_INT}"
override val name: String = "Android ${Build.VERSION.SDK_INT}"
}

actual fun getPlatform(): Platform = AndroidPlatform()
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
App()
setContent {
App()
}
}
}
}

@Preview
@Composable
private fun AppAndroidPreview() {
App()
App()
}
28 changes: 14 additions & 14 deletions examples/src/commonMain/kotlin/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ import androidx.compose.ui.unit.dp

@Composable
fun App(modifier: Modifier = Modifier) {
var showContent by remember { mutableStateOf(false) }
var showContent by remember { mutableStateOf(false) }

MaterialTheme {
Column(
modifier = modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
PrimaryButton(text = "Click Me", onClick = { showContent = !showContent })
AnimatedVisibility(showContent) {
val greeting = remember { Greeting().greet() }
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
ComposeLogo(Modifier.size(600.dp))
Text("Compose: $greeting")
MaterialTheme {
Column(
modifier = modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
PrimaryButton(text = "Click Me", onClick = { showContent = !showContent })
AnimatedVisibility(showContent) {
val greeting = remember { Greeting().greet() }
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
ComposeLogo(Modifier.size(600.dp))
Text("Compose: $greeting")
}
}
}
}
}
}
}
12 changes: 6 additions & 6 deletions examples/src/commonMain/kotlin/ComposeLogo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import org.jetbrains.compose.storytale.example.compose_multiplatform

@Composable
fun ComposeLogo(
modifier: Modifier = Modifier,
modifier: Modifier = Modifier,
) {
Image(
painter = painterResource(Res.drawable.compose_multiplatform),
contentDescription = "Compose Multiplatform Logo",
modifier = modifier,
)
Image(
painter = painterResource(Res.drawable.compose_multiplatform),
contentDescription = "Compose Multiplatform Logo",
modifier = modifier,
)
}
8 changes: 4 additions & 4 deletions examples/src/commonMain/kotlin/Greeting.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class Greeting {
private val platform = getPlatform()
private val platform = getPlatform()

fun greet(): String {
return "Hello, ${platform.name}!"
}
fun greet(): String {
return "Hello, ${platform.name}!"
}
}
2 changes: 1 addition & 1 deletion examples/src/commonMain/kotlin/Platform.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface Platform {
val name: String
val name: String
}

expect fun getPlatform(): Platform
5 changes: 3 additions & 2 deletions examples/src/commonMain/kotlin/PrimaryButton.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp

@Composable
Expand Down Expand Up @@ -30,5 +29,7 @@ fun PrimaryButton(
}

enum class PrimaryButtonSize {
Small, Medium, Large,
Small,
Medium,
Large,
}
2 changes: 1 addition & 1 deletion examples/src/desktopMain/kotlin/Platform.jvm.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class JVMPlatform : Platform {
override val name: String = "Java ${System.getProperty("java.version")}"
override val name: String = "Java ${System.getProperty("java.version")}"
}

actual fun getPlatform(): Platform = JVMPlatform()
12 changes: 6 additions & 6 deletions examples/src/desktopMain/kotlin/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application

fun main() = application {
Window(
onCloseRequest = ::exitApplication,
title = "example",
) {
App()
}
Window(
onCloseRequest = ::exitApplication,
title = "example",
) {
App()
}
}
2 changes: 1 addition & 1 deletion examples/src/iosMain/kotlin/Platform.ios.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import platform.UIKit.UIDevice

class IOSPlatform : Platform {
override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}

actual fun getPlatform(): Platform = IOSPlatform()
2 changes: 1 addition & 1 deletion examples/src/jsMain/kotlin/Platform.js.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class JsPlatform : Platform {
override val name: String = "Web with Kotlin/Js"
override val name: String = "Web with Kotlin/Js"
}

actual fun getPlatform(): Platform = JsPlatform()
2 changes: 1 addition & 1 deletion examples/src/wasmJsMain/kotlin/Platform.wasmJs.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class WasmPlatform : Platform {
override val name: String = "Web with Kotlin/Wasm"
override val name: String = "Web with Kotlin/Wasm"
}

actual fun getPlatform(): Platform = WasmPlatform()
4 changes: 2 additions & 2 deletions gallery-demo/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import org.jetbrains.compose.reload.ComposeHotRun
import org.jetbrains.compose.reload.gradle.ComposeHotRun
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
Expand All @@ -11,7 +11,7 @@ plugins {
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.serialization)
id("org.jetbrains.compose.hot-reload") version "1.0.0-alpha10"
alias(libs.plugins.compose.hot.reload)
}

class StorytaleCompilerPlugin : KotlinCompilerPluginSupportPlugin {
Expand Down
9 changes: 6 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
[versions]
agp = "8.7.1"
android-compileSdk = "35"
agp = "8.11.0"
android-targetSdk = "36"
android-compileSdk = "36"
android-minSdk = "26"
android-targetSdk = "35"
androidx-activityCompose = "1.9.3"
assertj = "3.27.2"
kotlinCompileTesting = "0.7.0"
junitVersion = "4.13.2"
storytale = "0.0.3+dev8"

compose-plugin = "1.8.1"
compose-hot-reload = "1.0.0-beta03"
compose-navigation = "2.9.0-alpha16"
kotlinx-serialization-json = "1.7.3"
kotlin = "2.1.21"
Expand All @@ -34,6 +35,7 @@ kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotl
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
compose-gradle-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "compose-plugin" }
compose-hot-reload-plugin = { module = "org.jetbrains.compose.hot-reload:hot-reload-gradle-plugin", version.ref = "compose-hot-reload" }
kotlin-compiler-embeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" }
kotlin-poet = { module = "com.squareup:kotlinpoet", version.ref = "kotlin-poet" }
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
Expand All @@ -59,6 +61,7 @@ serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
compose-hot-reload = { id = "org.jetbrains.compose.hot-reload", version.ref = "compose-hot-reload" }
buildTimeConfig = { id = "dev.limebeck.build-time-config", version.ref = "build-time-config" }
storytale = { id = "org.jetbrains.compose.storytale", version.ref = "storytale" }
kotlinDsl = { id = "kotlin-dsl" }
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Tue Oct 29 23:06:22 CST 2024
#Tue Jul 08 17:33:08 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
1 change: 1 addition & 0 deletions modules/gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ dependencies {
implementation(libs.android.gradle.plugin)
implementation(libs.kotlin.compiler.embeddable)
implementation(libs.compose.gradle.plugin)
implementation(libs.compose.hot.reload.plugin)
implementation(libs.kotlin.poet)
}

Expand Down
11 changes: 11 additions & 0 deletions modules/gradle-plugin/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
versionCatalogs {
create("libs") {
from(files("../../gradle/libs.versions.toml"))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import org.gradle.api.provider.Provider
import org.gradle.api.tasks.JavaExec
import org.gradle.jvm.toolchain.JavaLauncher
import org.gradle.jvm.toolchain.JavaToolchainService
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.task
import org.jetbrains.compose.reload.gradle.ComposeHotRun
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
Expand All @@ -20,6 +22,7 @@ fun Project.processJvmCompilation(extension: StorytaleExtension, target: KotlinJ

val runtimeClasspath = storytaleCompilation.output.allOutputs + storytaleCompilation.runtimeDependencyFiles
createJvmStorytaleExecTask(extension, storytaleCompilation, target, runtimeClasspath)
createJvmStorytaleHotReloadExecTask(compilation = storytaleCompilation, target = target)
}

private fun Project.createJvmStorytaleGenerateSourceTask(
Expand Down Expand Up @@ -96,6 +99,22 @@ private fun Project.createJvmStorytaleExecTask(
}
}

private fun Project.createJvmStorytaleHotReloadExecTask(
compilation: KotlinJvmCompilation,
target: KotlinJvmTarget,
) {
val taskName = "${target.name}${StorytaleGradlePlugin.STORYTALE_EXEC_SUFFIX}HotRun"
project.plugins.withId("org.jetbrains.compose.hot-reload") {
logger.info("Compose Hot Reload plugin found, configuring Storytale Hot Reload for ${target.name}")
tasks.register<ComposeHotRun>(taskName) {
this.compilation.set(compilation)
group = StorytaleGradlePlugin.STORYTALE_TASK_GROUP
description = "Execute storytale for '${target.name}' with hot reload"
mainClass.set("org.jetbrains.compose.storytale.generated.MainKt")
}
}
}

private fun Project.javaLauncherProvider(): Provider<JavaLauncher> = provider {
val toolchainService = extensions.findByType(JavaToolchainService::class.java) ?: return@provider null
val javaExtension = extensions.findByType(JavaPluginExtension::class.java) ?: return@provider null
Expand Down
Loading