diff --git a/CHANGELOG.md b/CHANGELOG.md index 84cb2cf..8dca5bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,53 @@ -# Lets-Plot Skia Frontend Changelog +# Lets-Plot Compose Frontend Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). All scales should have the 'format' parameter. +## [3.0.0] - 2025-09-19 + +> [!NOTE] +> The GitHub repository was renamed from `lets-plot-skia` to `lets-plot-compose`. + +### Compatibility + +All artifacts were built with the following versions of dependencies: +- Compose Multiplatform: [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2) +- Lets-Plot Kotlin API: [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2) +- Lets-Plot Multiplatform: [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3) + +### Added + +- Multiplatform project example, see: [Lets-Plot Compose Demos](https://github.com/JetBrains/lets-plot-compose-demos/tree/main/compose-multiplatform) + +### Changed + +- [**BREAKING**] `PlotPanel` has been moved to package `org.jetbrains.letsPlot.compose` (from `org.jetbrains.letsPlot.skia.compose`). + +#### Android + +- Removed dependency on the Skiko library. \ + This eliminates Skiko compatibility issues, \ + ensures all library artifacts are built with the latest Compose Multiplatform version, \ + and simplifies integration of the Lets-Plot Compose Library in Android projects. + +#### Desktop + +- Pure compose implementation. +- The following artifacts are no longer provided: + - `platf-skia-awt` + - `lets-plot-swing-skia` + +### Fixed + +- When zooming the page with the mouse, a black layer appears when refreshing [[#12](https://github.com/JetBrains/lets-plot-compose/issues/12)] +- When using a dark theme, white lines appear on the sides of the plot [[#37](https://github.com/JetBrains/lets-plot-compose/issues/37)] +- Plot rendering issues when switching between tabs in the tabbed pane [[#38](https://github.com/JetBrains/lets-plot-compose/issues/38)] +- Display problem of lets-plot-skia when switching pages [[#42](https://github.com/JetBrains/lets-plot-compose/issues/42)] +- Markdown: missing bold and italic text style support [[#44](https://github.com/JetBrains/lets-plot-compose/issues/44)] + + ## [2.2.1] - 2025-06-11 ### Compatibility diff --git a/README.md b/README.md index 4c08189..677dbbd 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,74 @@ -# Lets-Plot Skia Frontend +# Lets-Plot Compose Frontend [![Experimental](https://kotl.in/badges/experimental.svg)](https://kotlinlang.org/docs/components-stability.html) [![JetBrains incubator project](https://jb.gg/badges/incubator.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) -[![License MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/JetBrains/lets-plot-skia/master/LICENSE) -[![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-skia)](https://github.com/JetBrains/lets-plot-skia/releases/latest) +[![License MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/JetBrains/lets-plot-compose/master/LICENSE) +[![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-compose)](https://github.com/JetBrains/lets-plot-compose/releases/latest) -**Lets-Plot Skia Frontend** is a Kotlin Multiplatform library that allows you to embed \ -[Lets-Plot](https://github.com/JetBrains/lets-plot) charts in a [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform), Java Swing or Android application. +**Lets-Plot Compose Frontend** is a Kotlin Multiplatform library that allows you to embed \ +[Lets-Plot](https://github.com/JetBrains/lets-plot) charts in a [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform) (Desktop, Android) application. ### Supported Targets -- **Compose Desktop** (macOS, Windows, Linux)\ - For more information see [Compose multiplatform compatibility and versioning overview](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compatibility-and-versioning.html). -- **Android** (`lets-plot-skia` <= v2.0.0. New versions temporarily don't support Android due to [SKIKO-761](https://youtrack.jetbrains.com/issue/SKIKO-761)) -- **Java Swing** + +- **Desktop** (macOS, Windows, Linux) +- **Android** + +For more details see [Compose multiplatform compatibility and versioning overview](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compatibility-and-versioning.html). + ![Splash](img-2.png) ## Dependencies -See release notes for the latest version of the dependencies: [v2.2.1](https://github.com/JetBrains/lets-plot-skia/blob/main/CHANGELOG.md#compatibility) +See release notes for the latest version of the dependencies: [v2.2.1](https://github.com/JetBrains/lets-plot-compose/blob/main/CHANGELOG.md#compatibility) -### Compose Desktop +### Compose Multiplatform for Desktop ```kotlin dependencies { - ... - - // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0") + // Lets-Plot Kotlin API + implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.11.2") - // Lets-Plot Multiplatform - implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2") - implementation("org.jetbrains.lets-plot:platf-awt:4.6.2") + // Lets-Plot Multiplatform + implementation("org.jetbrains.lets-plot:lets-plot-common:4.7.3") + // Lets-Plot 'image export' (optional - enables exporting to raster formats) + implementation("org.jetbrains.lets-plot:lets-plot-image-export:4.7.3") - // Lets-Plot Skia Frontend - implementation("org.jetbrains.lets-plot:lets-plot-compose:2.2.1") + // Lets-Plot Compose UI + implementation("org.jetbrains.lets-plot:lets-plot-compose:3.0.0") } ``` See example: [Compose desktop](https://github.com/JetBrains/lets-plot-compose-demos/blob/main/compose-desktop/build.gradle.kts) demo. -### Compose Android - -#### Note: the latest supported version is `lets-plot-skia` v2.0.0. The new versions temporarily don't support Android due to [SKIKO-761](https://youtrack.jetbrains.com/issue/SKIKO-761). +### Compose Multiplatform for Android ```kotlin dependencies { - ... - - implementation("org.jetbrains.skiko:skiko-android:0.8.4") + // Lets-Plot Kotlin API + implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.11.2") - // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0") + // Lets-Plot Multiplatform + implementation("org.jetbrains.lets-plot:lets-plot-common:4.7.3") + // Lets-Plot Multiplatform Android-specific dependencies + implementation("org.jetbrains.lets-plot:canvas:4.7.3") + implementation("org.jetbrains.lets-plot:plot-raster:4.7.3") - // Lets-Plot Multiplatform - implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2") - - // Lets-Plot Skia Frontend - implementation("org.jetbrains.lets-plot:lets-plot-compose:2.0.0") + // Lets-Plot Compose UI + implementation("org.jetbrains.lets-plot:lets-plot-compose:3.0.0") } ``` See example: [Android minimal](https://github.com/JetBrains/lets-plot-compose-demos/blob/main/compose-android-min/build.gradle.kts) demo. -### Java Swing - -```kotlin -dependencies { - ... - - implementation("org.jetbrains.skiko:skiko:0.8.4") - // The host OS and architecture should be specified explicitly. - implementation("org.jetbrains.skiko:skiko-awt-runtime-macos-x64:0.8.4") - - // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0") - - // Lets-Plot Multiplatform - implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2") - implementation("org.jetbrains.lets-plot:platf-awt:4.6.2") - - // Lets-Plot Skia Frontend - implementation("org.jetbrains.lets-plot:lets-plot-swing-skia:2.2.1") -} -``` ## Examples -You will find complete examples of using **Lets-Plot Kotlin API** with **Lets-Plot Skia Frontend** in the following\ +You will find complete examples of using **Lets-Plot Kotlin API** with **Lets-Plot Compose Frontend** in the following\ GitHub repository: [JetBrains/lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos). ## Change Log -See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-skia/blob/master/CHANGELOG.md). +See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-compose/blob/master/CHANGELOG.md). ## Code of Conduct @@ -102,5 +79,5 @@ Please make sure you read it. ## License Code and documentation released under -the [MIT license](https://github.com/JetBrains/lets-plot-skia/blob/master/LICENSE). -Copyright © 2023-2025, JetBrains s.r.o. +the [MIT license](https://github.com/JetBrains/lets-plot-compose/blob/master/LICENSE). +Copyright © 2023, JetBrains s.r.o. diff --git a/build.gradle.kts b/build.gradle.kts index e1193c8..6571010 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,7 +42,7 @@ if (project.file("local.properties").exists()) { allprojects { group = "org.jetbrains.lets-plot" - version = "3.0.0-SNAPSHOT" + version = "3.0.1-SNAPSHOT" // version = "0.0.0-SNAPSHOT" // for local publishing only tasks.withType().all { diff --git a/demo/plot/shared/src/main/kotlin/plotSpec/HyperlinkSpec.kt b/demo/plot/shared/src/main/kotlin/plotSpec/HyperlinkSpec.kt index d1e67b6..123d9cd 100644 --- a/demo/plot/shared/src/main/kotlin/plotSpec/HyperlinkSpec.kt +++ b/demo/plot/shared/src/main/kotlin/plotSpec/HyperlinkSpec.kt @@ -86,8 +86,8 @@ class HyperlinkSpec : PlotDemoFigure { ), Item( name = "Lets-Plot\nCompose Multiplatform", - documentationUrl = "https://github.com/JetBrains/lets-plot-skia", - sourcesUrl = "https://github.com/JetBrains/lets-plot-skia", + documentationUrl = "https://github.com/JetBrains/lets-plot-compose", + sourcesUrl = "https://github.com/JetBrains/lets-plot-compose", x = 80.0, y = 250.0, size = 7.0, shape = 15, angle = 30.0 ), Item( diff --git a/devdocs/DEVELOPMENT.md b/devdocs/DEVELOPMENT.md index d75c038..d1bdfeb 100644 --- a/devdocs/DEVELOPMENT.md +++ b/devdocs/DEVELOPMENT.md @@ -1,38 +1,3 @@ -### Skiko and Compose Multiplatform Versions - -| Compose Multiplatform | Skiko | -|--------------------------------------------------------------------------------------------------------|--------| -| [1.7.0](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.0/ui-desktop-1.7.0.pom) | 0.8.15 | -| [1.7.1](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.1/ui-desktop-1.7.1.pom) | 0.8.18 | -| [1.7.3](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.3/ui-desktop-1.7.3.pom) | 0.8.18 | -| [1.8.0](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.0/ui-desktop-1.8.0.pom) | 0.9.4 | -| [1.8.1](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.1/ui-desktop-1.8.1.pom) | 0.9.4.2 | -| [1.8.2](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.2/ui-desktop-1.8.2.pom) | 0.9.4.2 | - - -Changing the version of `Skiko` or `Compose Multiplatform` may lead to compatibility issues and runtime errors like `MethodNotFound` or `ClassNotFound`. - -The safest way to avoid these issues is to use the version of `Skiko` that was used to build your version of `Compose Multiplatform`. - -To find the correct `Skiko` version: - -1. Open the `.pom` file corresponding to your `Compose Multiplatform` version. -2. Search within the `.pom` file for the `Skiko` version. - -For example, if you're using `ui-desktop-1.6.10.pom`, the link will be: ->https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.6.10/ui-desktop-1.6.10.pom - -At the bottom of the file, you will find the `skiko` version used to build the library. -```xml - - org.jetbrains.skiko - skiko-awt - 0.8.4 - compile - -``` - - ### Configuring IntelliJ IDEA for Android Development - #### Android Plugin @@ -52,7 +17,6 @@ For example: ``` sdk.dir=/Users/john/Library/Android/sdk ``` - - #### Android Device From menu `Tools -> Android -> Device Manager` setup Android device. @@ -66,25 +30,17 @@ Make sure the Java 11 toolchain is installed. Otherwise, the following error may > >No locally installed toolchains match and toolchain download repositories have not been configured. - -### Running Android demos +### Running Android Demos -In `Run configurations` -- Select `demo-plot-compose-android-min` or `demo-plot-compose-android-median` application +In IDEA `Run Configurations` +- Select `demo-plot-compose-android-min`, `demo-plot-compose-android-median` or another _Android App Run Configuration_ - Select the `Android` device - Click `Run` + ### See also [Compose-multiplatform iOS/Android Template](https://github.com/JetBrains/compose-multiplatform-ios-android-template) [Compose-multiplatform Versioning](https://github.com/JetBrains/compose-multiplatform/blob/master/VERSIONING.md) -### Problems with updating tools and dependencies: - - -#### Compose Desktop: -Since JetBrains compose version `1.4.1`, `PlotComponentProvider` do not show plot if the `repaintDelay` value is grater than 0. -The reason is yet unknown. - - diff --git a/devdocs/RELEASE.md b/devdocs/RELEASE.md index 71ca11a..e4090fe 100644 --- a/devdocs/RELEASE.md +++ b/devdocs/RELEASE.md @@ -38,10 +38,10 @@ Check all artifacts were uploaded and validated, then push the "Publish" button. ### Add the GitHub Release: - * Open the link: https://github.com/JetBrains/lets-plot-skia/releases/new + * Open the link: https://github.com/JetBrains/lets-plot-compose/releases/new * Fill `Tag version` and `Release title` with the released version: "vX.X.X" * Fill the description field - copy from the CHANGELOG.md ### Update Dependant Projects -- Update the version of the `lets-plot-skia` dependency in the [lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos) project. +- Update the version of the `lets-plot-compose` dependency in the [lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos) project. diff --git a/future_changes.md b/future_changes.md index 6a8fe69..875b081 100644 --- a/future_changes.md +++ b/future_changes.md @@ -1,39 +1,15 @@ -## [3.0.0] - 2025-mm-dd - -> [!NOTE] -> The GitHub repository was renamed from `lets-plot-skia` to `lets-plot-compose`. +## [3.0.1] - 2025-mm-dd ### Compatibility - -All artifacts were built with the following versions of dependencies: -- Compose Multiplatform : [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2) -- Lets-Plot Kotlin API : [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2) -- Lets-Plot Multiplatform : [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3) +All artifacts were built with the following versions of dependencies: +- Compose Multiplatform: [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2) +- Lets-Plot Kotlin API: [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2) +- Lets-Plot Multiplatform: [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3) ### Added ### Changed -- [ **BREAKING** ] `PlotPanel` has been moved to package `org.jetbrains.letsPlot.compose` (from `org.jetbrains.letsPlot.skia.compose`). - - -#### Android - -- Removed dependency on the Skiko library. -- - -#### Desktop - -- Pure compose implementation. -- The following artifacts are no longer provided: - - `platf-skia-awt` - - `lets-plot-swing-skia` - ### Fixed - -- When zooming the page with the mouse, a black layer appears when refreshing [[#12](https://github.com/JetBrains/lets-plot-skia/issues/12)] -- When using a dark theme, white lines appear on the sides of the plot [[#37](https://github.com/JetBrains/lets-plot-skia/issues/37)] -- Plot rendering issues when switching between tabs in the tabbed pane [[#38](https://github.com/JetBrains/lets-plot-skia/issues/38)] -- Display problem of lets-plot-skia when switching pages [[#42](https://github.com/JetBrains/lets-plot-skia/issues/42)] -- Markdown: missing bold and italic text style support [[#44](https://github.com/JetBrains/lets-plot-skia/issues/44)] + diff --git a/gradle.properties b/gradle.properties index 5ee86d5..877843a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,6 @@ kotlin.mpp.androidSourceSetLayoutVersion=2 org.jetbrains.compose.experimental.uikit.enabled=true #Android -kotlin.android.version=2.1.0 agp.version=8.6.0 android.useAndroidX=true android.compileSdk=35 diff --git a/lets-plot-compose/build.gradle.kts b/lets-plot-compose/build.gradle.kts index b6c151e..ab5ec39 100644 --- a/lets-plot-compose/build.gradle.kts +++ b/lets-plot-compose/build.gradle.kts @@ -66,7 +66,7 @@ kotlin { } android { - namespace = "org.jetbrains.letsPlot.skia.compose" + namespace = "org.jetbrains.letsPlot.compose" compileSdk = (findProperty("android.compileSdk") as String).toInt() @@ -105,13 +105,13 @@ afterEvaluate { artifact(tasks.jarJavaDocs) pom { - name.set("Lets-Plot Skia Frontend") - description.set("Skia frontend for Lets-Plot multiplatform plotting library.") - url.set("https://github.com/JetBrains/lets-plot-skia") + name.set("Lets-Plot Compose Frontend") + description.set("Compose frontend for Lets-Plot multiplatform plotting library.") + url.set("https://github.com/JetBrains/lets-plot-compose") licenses { license { name.set("MIT") - url.set("https://raw.githubusercontent.com/JetBrains/lets-plot-skia/master/LICENSE") + url.set("https://raw.githubusercontent.com/JetBrains/lets-plot-compose/master/LICENSE") } } developers { @@ -122,7 +122,7 @@ afterEvaluate { } } scm { - url.set("https://github.com/JetBrains/lets-plot-skia") + url.set("https://github.com/JetBrains/lets-plot-compose") } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index fc58dcc..8acac97 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,7 +8,6 @@ pluginManagement { plugins { val kotlinVersion = extra["kotlin.version"] as String - val kotlinAndroidVersion = extra["kotlin.android.version"] as String val composeVersion = extra["compose.version"] as String val agpVersion = extra["agp.version"] as String val nexusStagingVersion = extra["nexusStaging.version"] as String @@ -20,7 +19,6 @@ pluginManagement { id("org.jetbrains.compose").version(composeVersion) kotlin("android").version(kotlinVersion) - id("org.jetbrains.kotlin.android") version kotlinAndroidVersion id("com.android.application").version(agpVersion) id("com.android.library").version(agpVersion)