Skip to content

Commit 1b1e3f6

Browse files
authored
[fluent] Update to Compose 1.10 and Kotlin 2.3.0 (#150)
* Refactor: Migrate desktop target to jvm and update kotlin to 2.3.0 This commit migrates the desktop target to jvm, which involves renaming `desktopMain` to `jvmMain` in source sets and file paths. The following changes were made: - Renamed `desktopMain` to `jvmMain` in `gallery/build.gradle.kts` and updated relevant file paths. - Removed platform-specific `defaultFontFamily` implementations for Android, Apple, desktop, and web, consolidating into a single common implementation that returns null. - Updated Kotlin and KSP versions in `gradle/libs.versions.toml`. - Commented out `kotlin.js.yarn=false` in `gradle.properties`. * [gallery] feat(macos): Add support for macOS Tahoe style icons This commit introduces support for macOS Tahoe style icons by: - Adding the necessary icon assets (`Assets.car`, individual PNG layers, and `icon.json` configuration). - Updating the `gallery/build.gradle.kts` to configure macOS packaging tasks to use the new `Assets.car` file. This includes: - Injecting `CFBundleIconName` into the `Info.plist` if not present. - Copying the `Assets.car` file to the app bundle's Resources directory. - Applying this configuration to both native executable packaging and distributable creation tasks for macOS. - Adding a `build_mac_icon.md` file with instructions and credits for compiling the `Assets.car` file. * Refactor: commonize fluent them configuration * Bump compose to 1.10 * Refactor: Migrate Compose dependencies to version catalog This commit migrates Compose dependencies from the `compose` convention plugin to the `libs` version catalog. - Adds `compose-foundation`, `compose-ui`, `compose-ui-util`, `compose-components-resources`, and `compose-ui-tooling-preview` to `gradle/libs.versions.toml`. - Updates `build.gradle.kts` files in `fluent`, `fluent-icons-core`, `fluent-icons-extended`, `gallery`, and `source-generated` modules to use the new version catalog aliases. - Removes an unused resource copying block for macOS packaging in `gallery/build.gradle.kts`. * Refactor: Use SubcomposeLayout's `compose` instead of deprecated `measure` This commit updates the `OverflowRow` composable to adapt to changes in the `SubcomposeLayout` API. The deprecated `measure` function has been replaced with the new `compose` function, which returns a list of measurables that are then measured individually. This change affects the measurement logic within the start, end, start and end, and none overflow scenarios, ensuring compatibility with the updated API. * Refactor: Modularize gallery app and update resource package name This commit restructures the `gallery` module into a multi-module setup to improve separation of concerns and build efficiency. The core logic and UI are now in a `sharedApp` module, with platform-specific application modules (`androidApp`, `jvmApp`, `macosApp`, `webApp`). Key changes include: - **Created `sharedApp` module**: Extracted all common source sets (`commonMain`, `jvmMain`, `iosMain`, etc.) and resources from the old `gallery` module into `gallery/sharedApp`. - **Created platform-specific app modules**: - `gallery/androidApp` for the Android application. - `gallery/jvmApp` for the JVM desktop application. - `gallery/macosApp` for the macOS native application. - `gallery/webApp` for the JS and WasmJs browser applications. - **Updated build scripts**: - Deleted the monolithic `gallery/build.gradle.kts`. - Added new `build.gradle.kts` files for each new module (`sharedApp`, `androidApp`, `jvmApp`, `macosApp`, `webApp`), defining their specific dependencies and configurations. - The `sharedApp` build script now contains the common multiplatform configuration, dependencies, and `buildkonfig` setup. - Platform-specific app modules now depend on the `sharedApp` module. - **Updated `settings.gradle.kts`**: Replaced the single `gallery` inclusion with includes for the new modules: `gallery:sharedApp`, `gallery:androidApp`, `gallery:jvmApp`, `gallery:webApp`, and `gallery:macosApp`. - **Relocated files**: Moved all source code, resources, and configuration files from `gallery/` to their corresponding new modules (e.g., `gallery/src/androidMain` to `gallery/androidApp/src/main`). - **Updated resource package name**: - Changed the package name for Compose resources from `fluentdesign.gallery.generated.resources` to `io.github.composefluent.gallery.resources` in `sharedApp/build.gradle.kts`. - Updated all resource imports across the codebase to reflect this change. - **Removed test dependency**: Deleted the `androidx-test-junit` dependency from `gradle/libs.versions.toml` as the corresponding test file was removed. * include missing files * [fix] Use getBoundsInWindow for layer hit testing The `isInBounds` method was removed in a recent Compose version. This commit updates the layer hit testing logic to use the `getBoundsInWindow` method instead, ensuring compatibility. * feat(gallery): Refactor navigation to use Navigation 3 This commit refactors the gallery's navigation logic to use the `navigation3` library. Key changes include: * Integrating `navigation3-ui` and `navigationevent-compose`. * Replacing `AnimatedContent` with `NavDisplay` for handling screen transitions. * Making `ComponentItem` a serializable `NavKey` to support state restoration. * Updating `ComponentNavigator` to manage the navigation backstack with `rememberSerializable`. * Adding a custom `GallerySceneStrategy` to control how content is displayed. * Upgrading the Android Gradle Plugin and adding the Kotlin serialization plugin. * Refactor: Simplify `ComponentItem` serialization for navigation This commit streamlines the serialization process for `ComponentItem` within the navigation logic. - **Removed polymorphic serializer:** The custom `SerializersModule` that registered `ComponentItem` as a polymorphic subclass of `NavKey` has been removed from `ComponentNavigator`. - **Simplified `rememberSerializable`:** The `rememberSerializable` call in `rememberComponentNavigator` now uses `SavedStateConfiguration.DEFAULT` instead of a custom configuration, as the polymorphic mapping is no longer needed. - **Exposed `ItemSerializer`:** The custom `ComponentItem.ItemSerializer` is now public to allow `NavBackStackSerializer` to access it directly. * Fix: Add workaround for macOS Compose resources in debug builds This commit introduces a workaround for an issue where Compose resources are not correctly included in debug builds for macOS targets, as tracked in issue CMP-9568. A new `Sync` task, `syncComposeResourceForDebug`, has been added to manually copy the aggregated Compose resources to the debug executable's output directory. This task is now a dependency for the `runDebugExecutable` and `linkDebugExecutable` tasks, ensuring resources are available when running or building the app in debug mode. * downgrade kotlin to 2.2.20, see https://youtrack.jetbrains.com/projects/CMP/issues/CMP-9456 * Fix: Add workaround for TextField `decorationBox` crash This commit introduces a temporary workaround to prevent a crash in `TextField` and `OutlinedTextField` composables, related to an issue with the `decorationBox` parameter. - A `decorationBoxWorkaround` function has been created to wrap the `DecorationBox` implementation, addressing the crash described in JetBrains YouTrack issue CMP-9456. - All instances of `TextField` and `OutlinedTextField` have been updated to use this workaround. - The Kotlin version has been bumped from 2.2.20 to 2.3.0. * [gallery] update web app html style * [chore](ci) Refactor multiplatform build workflow - Introduce a `module` variable in the build matrix to specify the Gradle module for each platform (e.g., `jvmApp`, `macosApp`, `webApp`). - Update build and artifact upload steps to use the new `module` variable, making the paths dynamic. - Add `deps/compose_1.10` branch to the push triggers for the snapshot build workflow. - Adjust the `deploy-gh-pages` workflow to use the new `webApp` module path for building and deploying the WasmJs target. * Fix: Update iOS build script path after modularization This commit updates the Xcode project file for the `iosApp` to correct the path for the `embedAndSignAppleFrameworkForXcode` Gradle task. The path was changed from `:gallery:embedAndSignAppleFrameworkForXcode` to `:gallery:sharedApp:embedAndSignAppleFrameworkForXcode` to reflect the recent modularization of the gallery app. * feat: Set android framework name and update dependencies Sets the base name for the android framework to "gallery.shared". - Updates Android dependencies by adding `compose.foundation` and moving the `coreLibraryDesugaring` dependency. - Simplifies `MainActivity` by removing the component navigator and back handler logic. * Build: Add workaround for KSP execution in common-only modules This commit adds a workaround to the build scripts for the `fluent`, `fluent-icons-core`, and `fluent-icons-extended` modules to address an issue with KSP task dependencies. When KSP is configured only for the `commonMain` source set, other compilation tasks do not automatically depend on the `kspCommonMainKotlinMetadata` task. This change explicitly adds this dependency to all Kotlin compilation tasks, ensuring that KSP runs before them. * ci: Add macosArm64 and macosX64 to build matrix This commit updates the `multiplatform_snapshot_build.yml` workflow to: - Add `macosArm64` and `macosX64` to the build matrix. - Set `fail-fast` to `false` for the build strategy. - Configure a unique `GRADLE_USER_HOME` for each matrix job type. * ci: Remove test branch * Fix: Use unique content keys for navigation to prevent recomposition issues This commit changes the `contentKey` for `NavEntry` from a static string (`"${it.group}/${it.name}"`) to a unique identifier generated by `Uuid.generateV4().toString()`. This ensures that each navigation entry has a unique key, preventing incorrect recomposition behavior when navigating between items, which previously caused content to not update correctly. The `ExperimentalUuidApi` annotation has been added to support this change.
1 parent c63ea50 commit 1b1e3f6

183 files changed

Lines changed: 946 additions & 605 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy-gh-pages.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ jobs:
3636
- name: Build wasm target
3737
env:
3838
PROJECT_BUILD_TYPE: release
39-
run: ./gradlew :gallery:wasmJsBrowserDistribution
39+
run: ./gradlew :gallery:webApp:wasmJsBrowserDistribution
4040
- name: Setup Pages
4141
uses: actions/configure-pages@v5
4242
- name: Upload artifact
4343
uses: actions/upload-pages-artifact@v3
4444
with:
4545
# Upload dist
46-
path: ./gallery/build/dist/wasmJs/productionExecutable
46+
path: ./gallery/webApp/build/dist/wasmJs/productionExecutable
4747

4848
# Single deploy job since we're just deploying
4949
deploy:

.github/workflows/multiplatform_snapshot_build.yml

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,67 @@ on:
2323
jobs:
2424
build:
2525
strategy:
26+
fail-fast: false
2627
matrix:
27-
type: [PublishLibrary, Android, Windows, Linux, macOS, iOS, WasmJs, Js]
28+
type: [PublishLibrary, Android, Windows, Linux, macOS, macosArm64, macosX64, iOS, WasmJs, Js]
2829
include:
2930
- type: PublishLibrary
3031
publish: release
3132
os: macos-latest
33+
3234
- type: Android
3335
android: apk
3436
os: ubuntu-latest
37+
module: androidApp
38+
3539
- type: Windows
3640
desktop: msi
3741
os: windows-latest
42+
module: jvmApp
43+
3844
- type: Linux
3945
desktop: deb
4046
os: ubuntu-latest
47+
module: jvmApp
48+
4149
- type: macOS
4250
desktop: dmg
4351
os: macos-latest
52+
module: jvmApp
53+
4454
- type: macosArm64
4555
native: dmg
4656
os: macos-latest
57+
module: macosApp
58+
4759
- type: macosX64
4860
native: dmg
4961
os: macos-15-intel
62+
module: macosApp
63+
5064
- type: iOS
5165
iOS: ipa
5266
# workaround runner version for iPhoneOS sdk 18.2
5367
os: macos-15
68+
module: iosApp
69+
5470
- type: WasmJs
5571
js: wasmJs
5672
os: windows-latest
73+
module: webApp
74+
5775
- type: Js
5876
js: js
5977
os: ubuntu-latest
78+
module: webApp
6079

6180
runs-on: ${{ matrix.os }}
6281
if: ${{ github.event_name != 'pull_request_review' || github.event.review.state == 'approved' }}
6382
permissions:
6483
contents: read
6584
packages: write
85+
env:
86+
GRADLE_USER_HOME: ${{ github.workspace }}/.gradle-${{ matrix.type }}
6687

6788
steps:
6889
- uses: actions/checkout@v4
@@ -105,7 +126,7 @@ jobs:
105126
if: ${{ matrix.android }}
106127
run: |
107128
echo "$ANDROID_KEYSTORE" | base64 --decode > ${{ github.workspace }}/android_sign_key.jks
108-
./gradlew :gallery:assembleRelease
129+
./gradlew :gallery:${{ matrix.module }}:assembleRelease
109130
env:
110131
ANDROID_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }}
111132
ANDROID_SIGNING_FILE: ${{ github.workspace }}/android_sign_key.jks
@@ -118,32 +139,32 @@ jobs:
118139
uses: actions/upload-artifact@v4
119140
with:
120141
name: Gallery-${{ matrix.type }}-${{ github.run_id }}
121-
path: ${{github.workspace}}/gallery/build/outputs/**/*.${{ matrix.android }}
142+
path: ${{github.workspace}}/gallery/${{ matrix.module }}/build/outputs/**/*.${{ matrix.android }}
122143

123144
# Desktop Build Action
124145
- name: Build Gallery for ${{ matrix.type }}
125146
if: ${{ matrix.desktop }}
126147
run: |
127-
./gradlew :gallery:packageReleaseDistributionForCurrentOS
148+
./gradlew :gallery:${{ matrix.module }}:packageReleaseDistributionForCurrentOS
128149
129150
- name: Upload desktop build artifacts
130151
if: ${{ matrix.desktop }}
131152
uses: actions/upload-artifact@v4
132153
with:
133154
name: Gallery-${{ matrix.type }}-${{ github.run_id }}
134-
path: ${{github.workspace}}/gallery/build/compose/binaries/main-release/${{ matrix.desktop }}/*.${{ matrix.desktop }}
155+
path: ${{github.workspace}}/gallery/${{ matrix.module }}/build/compose/binaries/main-release/${{ matrix.desktop }}/*.${{ matrix.desktop }}
135156

136157
# Desktop Native Build Action
137158
- name: Build Gallery for ${{ matrix.type }}
138159
if: ${{ matrix.native }}
139160
run: |
140-
./gradlew :gallery:packageDistributionNativeReleaseForCurrentOS
161+
./gradlew :gallery:${{ matrix.module }}:packageDistributionNativeReleaseForCurrentOS
141162
- name: Upload desktop native build artifacts
142163
if: ${{ matrix.native }}
143164
uses: actions/upload-artifact@v4
144165
with:
145166
name: Gallery-${{ matrix.type }}-${{ github.run_id }}
146-
path: ${{github.workspace}}/gallery/build/compose/binaries/main/**/*.${{ matrix.native }}
167+
path: ${{github.workspace}}/gallery/${{ matrix.module }}/build/compose/binaries/main/**/*.${{ matrix.native }}
147168

148169
# iOS Build Action, Note: Due to the long build time, the iOS build only build the debug version.
149170
- name: Set up Xcode
@@ -155,24 +176,24 @@ jobs:
155176
- name: Build Gallery for iOS
156177
if: ${{ matrix.iOS }}
157178
run: |
158-
xcodebuild -scheme iosApp -configuration Debug -sdk iphoneos -archivePath gallery/iosApp/build/Gallery.xcarchive archive -workspace gallery/iosApp/iosApp.xcodeproj/project.xcworkspace CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
179+
xcodebuild -scheme iosApp -configuration Debug -sdk iphoneos -archivePath gallery/${{ matrix.module }}/build/Gallery.xcarchive archive -workspace gallery/${{ matrix.module }}/iosApp.xcodeproj/project.xcworkspace CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
159180
160181
- name: Upload iOS Artifact
161182
if: ${{ matrix.iOS }}
162183
uses: actions/upload-artifact@v4
163184
with:
164185
name: Gallery-${{ matrix.type }}-${{ github.run_id }}
165-
path: ${{ github.workspace }}/gallery/iosApp/build/
186+
path: ${{ github.workspace }}/gallery/${{ matrix.module }}/build/
166187

167188
# Js and WasmJs Build Action
168189
- name: Build Gallery for ${{ matrix.type }}
169190
if: ${{ matrix.js }}
170191
run: |
171-
./gradlew :gallery:${{ matrix.js }}BrowserDistribution
192+
./gradlew :gallery:${{ matrix.module }}:${{ matrix.js }}BrowserDistribution
172193
173194
- name: Upload ${{ matrix.type }} build artifacts
174195
if: ${{ matrix.js }}
175196
uses: actions/upload-artifact@v4
176197
with:
177198
name: Gallery-${{ matrix.type }}-${{ github.run_id }}
178-
path: ./gallery/build/dist/${{ matrix.js }}/productionExecutable
199+
path: ./gallery/${{ matrix.module }}/build/dist/${{ matrix.js }}/productionExecutable

build-plugin/src/main/java/io/github/composefluent/plugin/build/BuildConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object BuildConfig {
2222
internal set
2323

2424
object Android {
25-
const val compileSdkVersion = 35
25+
const val compileSdkVersion = 36
2626

2727
const val minSdkVersion = 24
2828
}
Lines changed: 45 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
package io.github.composefluent.plugin.build
22

3-
import com.android.build.api.dsl.androidLibrary
3+
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
4+
import org.gradle.api.GradleException
5+
import org.gradle.kotlin.dsl.findByType
6+
import org.jetbrains.compose.desktop.application.dsl.AbstractDistributions
7+
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
48
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
59
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
610
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
11+
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
712
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree
813

914
@OptIn(ExperimentalWasmDsl::class, ExperimentalKotlinGradlePluginApi::class)
1015
fun KotlinMultiplatformExtension.applyTargets(namespaceModule: String = "") {
11-
jvm("desktop")
16+
jvm()
1217

13-
try {
14-
androidLibrary {
15-
compileSdk = 35
16-
namespace = "${BuildConfig.packageName}$namespaceModule"
17-
}
18-
} catch (_: IllegalStateException) {
19-
// handle exception when android library plugin was not applied
20-
androidTarget()
18+
extensions.findByType<KotlinMultiplatformAndroidLibraryTarget>()?.apply {
19+
compileSdk = BuildConfig.Android.compileSdkVersion
20+
namespace = "${BuildConfig.packageName}$namespaceModule"
21+
androidResources.enable = true
2122
}
2223

2324
jvmToolchain(BuildConfig.Jvm.jvmToolchainVersion)
@@ -29,78 +30,58 @@ fun KotlinMultiplatformExtension.applyTargets(namespaceModule: String = "") {
2930
macosArm64()
3031
macosX64()
3132

32-
applyHierarchyTemplate {
33+
applyDefaultHierarchyTemplate {
3334
sourceSetTrees(KotlinSourceSetTree.main, KotlinSourceSetTree.test)
3435

3536
common {
36-
group("skiko") {
37-
group("jvm")
38-
group("native")
39-
group("web")
40-
}
41-
42-
group("android") {
43-
withAndroidTarget()
44-
withCompilations { it.target.name == "android" }
37+
group("jvm") {
38+
withJvm()
4539
}
4640

47-
group("jvm") {
41+
group("skiko") {
4842
withJvm()
43+
group("native")
44+
group("web")
4945
}
5046

5147
group("jvmCommon") {
5248
group("jvm")
5349
group("android")
5450
}
5551

56-
group("web") {
57-
withJs()
58-
withWasmJs()
59-
}
60-
61-
group("native") {
62-
group("apple")
52+
group("desktop") {
53+
group("macos")
6354
group("mingw")
6455
group("linux")
56+
group("jvm")
6557
}
6658

67-
group("apple") {
68-
group("ios")
69-
group("macos")
70-
group("tvos")
71-
group("watchos")
72-
}
73-
74-
group("tvos") {
75-
withTvos()
76-
}
77-
78-
group("watchos") {
79-
withWatchos()
80-
}
81-
82-
group("ios") {
83-
withIos()
84-
}
85-
86-
group("macos") {
87-
withMacos()
59+
group("android") {
60+
withCompilations { it.platformType == KotlinPlatformType.androidJvm }
8861
}
62+
}
8963

90-
group("mingw") {
91-
withMingw()
92-
}
64+
}
65+
}
66+
67+
fun getTarget(): String {
68+
// 1. 动态确定当前平台对应的 Kotlin/Native 目标名称
69+
val os = System.getProperty("os.name")
70+
val arch = System.getProperty("os.arch")
71+
val currentTargetName = when {
72+
os.startsWith("Mac OS X") -> if (arch == "aarch64") "macosArm64" else "macosX64"
73+
os.startsWith("Windows") -> "windowsX64"
74+
os.startsWith("Linux") -> "linuxX64"
75+
else -> throw GradleException("Unsupported OS for native distribution: '$os'")
76+
}
77+
return currentTargetName
78+
}
9379

94-
group("linux") {
95-
withLinux()
96-
}
80+
fun AbstractDistributions.applyDistributions(
81+
vararg formats: TargetFormat = arrayOf(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
82+
) {
83+
targetFormats(formats = formats)
84+
packageName = "Compose Fluent Design Gallery"
85+
packageVersion = BuildConfig.integerVersionName
9786

98-
group("desktopCommon") {
99-
group("macos")
100-
group("mingw")
101-
group("linux")
102-
group("jvm")
103-
}
104-
}
105-
}
106-
}
87+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.github.composefluent.plugin.build.mac
2+
3+
import org.gradle.api.Task
4+
import org.gradle.api.file.DirectoryProperty
5+
import org.gradle.api.file.FileSystemOperations
6+
import org.gradle.api.file.RegularFileProperty
7+
import org.gradle.api.provider.Property
8+
import org.gradle.kotlin.dsl.newInstance
9+
import java.io.File
10+
import javax.inject.Inject
11+
12+
interface Injected {
13+
@get:Inject
14+
val fs: FileSystemOperations
15+
}
16+
17+
// apply the icon composer for macos distributable
18+
fun Task.configureMacOSPackageTask(
19+
packageName: Property<String>,
20+
iconFile: RegularFileProperty,
21+
destinationDir: DirectoryProperty,
22+
replaceIconFile: Boolean = false,
23+
assetsCarFile: File,
24+
doLast: (resourceDir: File, injected: Injected) -> Unit = { _, _ -> }
25+
) {
26+
inputs.file(assetsCarFile)
27+
val injected = project.objects.newInstance<Injected>()
28+
29+
doLast {
30+
val appContentDir = destinationDir.get().asFile.resolve("${packageName.get()}.app").resolve("Contents")
31+
val bundleResourceDir = appContentDir.resolve("Resources")
32+
val infoListFile = appContentDir.resolve("Info.plist")
33+
val infoListFileContent = infoListFile.readText()
34+
if (!infoListFileContent.contains("CFBundleIconName")) {
35+
infoListFile.writeText(
36+
text = infoListFileContent.replace(
37+
"<key>CFBundleIconFile</key>","<key>CFBundleIconName</key>\n<string>${iconFile.get().asFile.nameWithoutExtension}</string>\n<key>CFBundleIconFile</key>"
38+
)
39+
)
40+
41+
}
42+
injected.fs.copy {
43+
from(assetsCarFile)
44+
into(bundleResourceDir)
45+
}
46+
if (replaceIconFile) {
47+
val oldIconFile = bundleResourceDir.resolve("${packageName}.icns")
48+
oldIconFile.renameTo(bundleResourceDir.resolve(iconFile.get().asFile.name))
49+
}
50+
doLast(bundleResourceDir, injected)
51+
}
52+
}

build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import io.github.composefluent.plugin.build.BuildConfig
22

33
plugins {
44
alias(libs.plugins.kotlin.multiplatform) apply false
5-
alias(libs.plugins.kotlin.compose)
5+
alias(libs.plugins.kotlin.jvm) apply false
6+
alias(libs.plugins.kotlin.compose) apply false
7+
alias(libs.plugins.kotlin.serialization) apply false
68
alias(libs.plugins.compose.multiplatform) apply false
7-
alias(libs.plugins.compose.hotReload) apply false
89
alias(libs.plugins.android.kotlin.multiplatform.library) apply false
910
alias(libs.plugins.android.application) apply false
1011
alias(libs.plugins.kotlin.android) apply false

0 commit comments

Comments
 (0)