diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1102b6e4..0869ba14 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -28,6 +28,15 @@ kotlin {
}
binaries.executable()
}
+ wasmJs {
+ outputModuleName = "sample"
+ browser {
+ commonWebpackConfig {
+ outputFileName = "sample.js"
+ }
+ }
+ binaries.executable()
+ }
jvm()
@@ -56,6 +65,7 @@ kotlin {
iosMain.get().dependsOn(composeMain)
jsMain.get().dependsOn(composeMain)
jvmMain.get().dependsOn(composeMain)
+ wasmJsMain.get().dependsOn(composeMain)
val notJsMain by creating {
dependsOn(commonMain.get())
diff --git a/app/src/jsMain/kotlin/Main.kt b/app/src/jsMain/kotlin/StartComposeApp.js.kt
similarity index 56%
rename from app/src/jsMain/kotlin/Main.kt
rename to app/src/jsMain/kotlin/StartComposeApp.js.kt
index c286ce0a..59693f8e 100644
--- a/app/src/jsMain/kotlin/Main.kt
+++ b/app/src/jsMain/kotlin/StartComposeApp.js.kt
@@ -1,14 +1,12 @@
import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.window.CanvasBasedWindow
+import androidx.compose.ui.window.ComposeViewport
import com.juul.sensortag.App
-import com.juul.sensortag.configureLogging
import org.jetbrains.skiko.wasm.onWasmReady
@OptIn(ExperimentalComposeUiApi::class)
-fun main() {
- configureLogging()
+actual fun startComposeApp() {
onWasmReady {
- CanvasBasedWindow("SensorTag") {
+ ComposeViewport("ComposeTarget") {
App()
}
}
diff --git a/app/src/wasmJsMain/kotlin/StartComposeApp.wasm.kt b/app/src/wasmJsMain/kotlin/StartComposeApp.wasm.kt
new file mode 100644
index 00000000..b83ceb59
--- /dev/null
+++ b/app/src/wasmJsMain/kotlin/StartComposeApp.wasm.kt
@@ -0,0 +1,10 @@
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.window.ComposeViewport
+import com.juul.sensortag.App
+
+@OptIn(ExperimentalComposeUiApi::class)
+actual fun startComposeApp() {
+ ComposeViewport {
+ App()
+ }
+}
diff --git a/app/src/wasmJsMain/resources/index.html b/app/src/wasmJsMain/resources/index.html
new file mode 100644
index 00000000..0cd90abb
--- /dev/null
+++ b/app/src/wasmJsMain/resources/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ SensorTag
+
+
+
+
+
diff --git a/app/src/webMain/kotlin/Main.kt b/app/src/webMain/kotlin/Main.kt
new file mode 100644
index 00000000..542c4f00
--- /dev/null
+++ b/app/src/webMain/kotlin/Main.kt
@@ -0,0 +1,11 @@
+import androidx.compose.ui.ExperimentalComposeUiApi
+import com.juul.sensortag.App
+import com.juul.sensortag.configureLogging
+
+@OptIn(ExperimentalComposeUiApi::class)
+fun main() {
+ configureLogging()
+ startComposeApp()
+}
+
+expect fun startComposeApp()
diff --git a/app/src/jsMain/kotlin/features/scan/DeviceLocator.kt b/app/src/webMain/kotlin/features/scan/DeviceLocator.kt
similarity index 100%
rename from app/src/jsMain/kotlin/features/scan/DeviceLocator.kt
rename to app/src/webMain/kotlin/features/scan/DeviceLocator.kt
diff --git a/app/src/jsMain/kotlin/features/scan/OnLifecycleResumed.kt b/app/src/webMain/kotlin/features/scan/OnLifecycleResumed.kt
similarity index 100%
rename from app/src/jsMain/kotlin/features/scan/OnLifecycleResumed.kt
rename to app/src/webMain/kotlin/features/scan/OnLifecycleResumed.kt
diff --git a/app/src/jsMain/kotlin/features/scan/RequestDeviceLocator.kt b/app/src/webMain/kotlin/features/scan/RequestDeviceLocator.kt
similarity index 100%
rename from app/src/jsMain/kotlin/features/scan/RequestDeviceLocator.kt
rename to app/src/webMain/kotlin/features/scan/RequestDeviceLocator.kt
diff --git a/bluetooth/build.gradle.kts b/bluetooth/build.gradle.kts
index a08814d0..9ed19d0f 100644
--- a/bluetooth/build.gradle.kts
+++ b/bluetooth/build.gradle.kts
@@ -15,6 +15,7 @@ kotlin {
jvm()
macosX64()
macosArm64()
+ wasmJs().browser()
sourceSets {
commonMain.dependencies {
diff --git a/bluetooth/src/jsMain/kotlin/SystemControl.kt b/bluetooth/src/webMain/kotlin/SystemControl.kt
similarity index 100%
rename from bluetooth/src/jsMain/kotlin/SystemControl.kt
rename to bluetooth/src/webMain/kotlin/SystemControl.kt
diff --git a/bluetooth/src/jsMain/kotlin/requirements/BluetoothScanRequirementsFactory.kt b/bluetooth/src/webMain/kotlin/requirements/BluetoothScanRequirementsFactory.kt
similarity index 100%
rename from bluetooth/src/jsMain/kotlin/requirements/BluetoothScanRequirementsFactory.kt
rename to bluetooth/src/webMain/kotlin/requirements/BluetoothScanRequirementsFactory.kt
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 41d03b85..b49cb306 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,12 +3,12 @@ agp = "8.13.0"
android-compile = "35"
android-min = "21"
android-target = "33"
-compose = "1.8.2"
+compose = "1.10.0"
jvm = "17"
-kable = "0.39.2"
+kable = "0.42.0"
kotlin = "2.2.21"
kotlinx-coroutines = "1.10.2"
-krayon = "0.21.0"
+krayon = "0.23.0"
voyager = "1.1.0-beta03"
[libraries]
diff --git a/moko-permissions-bluetooth/build.gradle.kts b/moko-permissions-bluetooth/build.gradle.kts
index f6d94b33..0f8461d5 100644
--- a/moko-permissions-bluetooth/build.gradle.kts
+++ b/moko-permissions-bluetooth/build.gradle.kts
@@ -18,6 +18,7 @@ kotlin {
jvm()
macosX64()
macosArm64()
+ wasmJs().browser()
applyDefaultHierarchyTemplate()
@@ -28,6 +29,7 @@ kotlin {
macosMain.get().dependsOn(nopMain)
jsMain.get().dependsOn(nopMain)
jvmMain.get().dependsOn(nopMain)
+ wasmJsMain.get().dependsOn(nopMain)
commonMain.dependencies {
api(projects.mokoPermissions)
diff --git a/moko-permissions-compose/build.gradle.kts b/moko-permissions-compose/build.gradle.kts
index f53cb2c6..ec3d10bb 100644
--- a/moko-permissions-compose/build.gradle.kts
+++ b/moko-permissions-compose/build.gradle.kts
@@ -20,6 +20,7 @@ kotlin {
jvm()
macosX64()
macosArm64()
+ wasmJs().browser()
applyDefaultHierarchyTemplate()
@@ -30,6 +31,7 @@ kotlin {
macosMain.get().dependsOn(nopMain)
jsMain.get().dependsOn(nopMain)
jvmMain.get().dependsOn(nopMain)
+ wasmJsMain.get().dependsOn(nopMain)
commonMain.dependencies {
api(projects.mokoPermissions)
diff --git a/moko-permissions/build.gradle.kts b/moko-permissions/build.gradle.kts
index b97c4d90..26fcd5ad 100644
--- a/moko-permissions/build.gradle.kts
+++ b/moko-permissions/build.gradle.kts
@@ -14,6 +14,7 @@ kotlin {
jvm()
macosX64()
macosArm64()
+ wasmJs().browser()
applyDefaultHierarchyTemplate()
@@ -24,6 +25,7 @@ kotlin {
macosMain.get().dependsOn(nopMain)
jsMain.get().dependsOn(nopMain)
jvmMain.get().dependsOn(nopMain)
+ wasmJsMain.get().dependsOn(nopMain)
commonMain.dependencies {
implementation(libs.coroutines)