* Compose 1.2.1-rc01 * Fix Web build for Kotlin 1.7.20 * Use 1.3.2.1-rc02 in Gradle plugin * Fix Gradle Plugin tests * Fix Gradle Plugin tests * Compose 1.2.1-rc03 * Update CHANGELOG.md * Update CHANGELOG.md * Compose Compiler 1.3.2.1 * Compose 1.2.1 * Update VERSIONING.md * Update gradle.properties * Fix custom JDK tests on Linux * Remove JVM target version override (#2515) Previously, we were setting kotlin.jvmTarget version to 1.8 if it was null or < 1.8. As an unintended consequence we were also overriding a version set by the jvmToolchain property. So while users expected the jvmToolchain property to set both jdk home & jdk target, we were quietly overriding jdk target. At the same time, Kotlin 1.7 sets the minimum target version to 1.8 anyway, so our override does not make sense with Kotlin 1.7+. This commit removes overriding altogether. Fixes #2511 * Update CHANGELOG.md * Update CHANGELOG.md * Update CHANGELOG.md * Update Compose * Update default ProGuard rules with changes from main branch * Test Gradle plugin on relevant PRs (#2509) * Update Gradle used in tooling subprojects * Update Kotlin in Compose Gradle plugin * Decrease verbosity of Gradle plugin tests * Disable mac sign test * Add workflow to test Gradle plugin * Fix custom jdk tests on Linux * Make Compose Gradle plugin build compatible with Configuration cache * Print tests summary * Remove unused code * Refactor tests configuration * Turn off parallel execution * Try adding windows runner * Turn off fail fast * Fix Windows test issues #2368 * Adjust default proguard rules The following rule is needed to fix tests on Windows: ``` -dontwarn org.graalvm.compiler.core.aarch64.AArch64NodeMatchRules_MatchStatementSet* ``` Other rules are just to make builds less noisy. Kotlin's `*.internal` packages often contain bytecode, which triggers ProGuard's notes. However, these notes are not actionable for most users, so we can ignore notes by default. #2393 # Conflicts: # gradle-plugins/gradle/wrapper/gradle-wrapper.properties * Improve DSL for setting a custom Compose Plugin (#2527) * Improve DSL for setting a custom Compose Plugin Fixes https://github.com/JetBrains/compose-jb/issues/2459 Readme: https://github.com/JetBrains/compose-jb/pull/2526 1. Add `dependencies: Dependencies` extension that is accessible in `compose { }` block 2. Add `Dependencies.compiler` property that can return versions of Compose compiler used by the plugin: ``` compose { kotlinCompilerPlugin.set(dependencies.compiler.forKotlin("1.7.20")) //kotlinCompilerPlugin.set(dependencies.compiler.auto) // determined by applied version of Kotlin. It is a default. } ``` 3. Add ability to set arguments for Compose Compiler. Now we can write: ``` compose { kotlinCompilerPlugin.set(dependencies.compiler.forKotlin("1.7.20")) kotlinCompilerPluginArgs.add("suppressKotlinVersionCompatibilityCheck=1.7.21") } ``` 4. Remove checks for different targets We had a separate check for JS, when we released 1.2.0. It doesn't support Kotlin 1.7.20 at that moment. It is hard to refactor this feature in the new code, so I removed it. It is not needed now and it had an ugly code. When we will need it again, we'll write it again. 5. Remove the `compose.tests.androidx.compiler.version` property from gradle.properties and remove `defaultAndroidxCompilerEnvironment` Because they are used only in one test, and it seems there is no reason to use it in another place in the future * Discussions * Update ComposeCompilerCompatability.kt (#2557) * Update CHANGELOG.md * 1.2.2-rc01 * Update Compose * Update CHANGELOG.md * Compose 1.2.2 * Remove shared.podspec * Remove usages of deprecated Intellij APIs Co-authored-by: Alexey Tsvetkov <alexey.tsvetkov@jetbrains.com> Co-authored-by: Alexey Tsvetkov <654232+AlexeyTsvetkov@users.noreply.github.com> |
3 years ago | |
|---|---|---|
| .. | ||
| Building_UI | Removed misplaced comma in Web UI Building README (#2416) | 3 years ago |
| Controlled_Uncontrolled_Inputs | web: add tutorial about Controlled and Uncontrolled inputs (#1533) | 4 years ago |
| Events_Handling | Update README.md (#2163) | 4 years ago |
| Getting_Started | Release 1.2.2 (#2561) | 3 years ago |
| Style_Dsl | web: update Style DSL tutorial (#1567) | 4 years ago |
| Using_Effects | Update compose-web examples and readme about effects (#2395) | 3 years ago |
| Using_Test_Utils | web: add test-utils tutorial (#1475) | 4 years ago |
| README.md | Docs: Js only projects are now supported (#2154) | 4 years ago |
README.md
Compose for Web
Compose for Web allows you to build reactive user interfaces for the web in Kotlin, using the concepts and APIs of Jetpack Compose to express the state, behavior, and logic of your application.
Compose for Web provides multiple ways of declaring user interfaces in Kotlin code, allowing you to have full control over your website layout with a declarative DOM API.
Tutorials:
Getting Started With Compose for Web - create and configure a simple project
Building web UI - overview of the basic features Compose for Web provides to build web UIs
Handing Events - a short overview of Events handling with compose web
Controlled and Uncontrolled inputs - overview of Controlled and Uncontrolled inputs
Style DSL - about styling the composable components in web
Using test-utils - about unit testing for @Composable components based on HTML DOM
Integration with Ktor - this is actually not a Compose tutorial, but since integration of Kotlin/JS with Ktor is very popular scenario, we decided to add it here
Examples:
- Compose For Web landing page. Also have a look at source code
- Compose For Web and React integration - source code
- Bird game - source code
- TODO app. (MPP: android, desktop, web) - source code
- Falling Balls game (uses deprecated widgets API) - source code
What's included (modules):
Module compose.runtime
It provides fundamental building blocks of Compose's programming model and state management.
Compose for Web uses Compose's runtime implementation.
Dependency:
// it's assumed that plugin id("org.jetbrains.compose") is applied
dependencies {
implementation(compose.runtime)
}
Useful links:
Compose's runtime API reference and docs
Module compose.web.core
It provides:
- DSL for building Composable components based on HTML DOM
- Comprehensive CSS-in-Kotlin/JS API
Please have a look at tutorials to learn more about compose.web.core
Dependency:
// it's assumed that plugin id("org.jetbrains.compose") is applied
dependencies {
implementation(compose.web.core)
}
Module compose.web.svg
It provides a collection of Composable functions representing SVG elements. These functions can be used to build Composable web UI components based on SVG.
Experimental module: The API in this module is not stabilized yet and breaking changes can be expected.
Dependency:
// it's assumed that plugin id("org.jetbrains.compose") is applied
dependencies {
implementation(compose.web.svg)
}
Useful links:
Module compose.web.testUtils
It provides a few util functions to simplify the unit testing of Composable components based on HTML DOM.
Dependency:
// it's assumed that plugin id("org.jetbrains.compose") is applied
sourceSets {
val jsTest by getting {
implementation(kotlin("test-js"))
implementation(compose.web.testUtils)
}
}
Useful links:
- Using test-utils - tutorial
Module compose.web.widgets (Deprecated)
It provides a collection of Composable components (based on compose.web.core) which try to conform to the API and behaviour of some widgets from Jetpack Compose UI:
Column, Row, etc.