[JEWEL-1021] Write Jewel 0.31 release notes

This includes all changes scheduled to make it in the release, and a minor
fix to the extractor script to avoid empty bullet points.

closes https://github.com/JetBrains/intellij-community/pull/3249

(cherry picked from commit 6cf685298d2a7df9fc9b6d1211d4fda0b03b5b34)

GitOrigin-RevId: cc13194c22b1e7f6b0e27742a15a42035b61f4a9
This commit is contained in:
Sebastiano Poggi
2025-09-23 18:09:11 +02:00
committed by intellij-monorepo-bot
parent 225fcf7439
commit f9db8f90b6
2 changed files with 59 additions and 6 deletions

View File

@@ -1,5 +1,56 @@
# Jewel Release Notes
## v0.31 (ETA 2025-10-21)
| Min supported IJP versions | Compose Multiplatform version |
|----------------------------|-------------------------------|
| 2025.2.4, 2025.3 EAP | 1.9.0 |
### ⚠️ Important Changes
* **IJP 251 is no longer supported** as of this release. Jewel policy remains to support the current stable version and the upcoming IJP version.
* **JEWEL-996** Updated Compose Multiplatform version to 1.9.0 stable ([#3241](https://github.com/JetBrains/intellij-community/pull/3241))
### New features
* **JEWEL-146** Created `SpeedSearchArea` container to provide [speed search](https://www.jetbrains.com/help/idea/speed-search-in-the-tool-windows.html) functionality
* Speed search is implemented for `SelectableLazyColumn` (in ([#3214](https://github.com/JetBrains/intellij-community/pull/3214))) and `Tree` (in ([#3242](https://github.com/JetBrains/intellij-community/pull/3242))) components
* `ComboBox`es are not yet supported, but should be in 0.32
* By default, it does IDE-like "smart matching", implemented by `SpeedSearchMatcher.patternMatcher()`
* A more classical substring matching behaviour is also optionally available via `SpeedSearchMatcher.substringMatcher()`
* You can implement `SpeedSearchMatcher` to provide your own matching logic
* **JEWEL-964** Added a `PopupMenu` variant that takes a `PopupPositionProvider` as parameter ([#3202](https://github.com/JetBrains/intellij-community/pull/3202))
### Bug fixes
* **JEWEL-146** Fixed an issue in the `LazyListState.visibleItemsRange` and `SelectableLazyListState.visibleItemsRange` methods that were returning one more item than they should have ([#3214](https://github.com/JetBrains/intellij-community/pull/3214))
* **JEWEL-146** Fixed potential crashes in the IDE when reading `ComboBox.padding`, `TabbedPane.tabInsets`, and `SpeedSearch.borderInsets` from the LaF ([#3235](https://github.com/JetBrains/intellij-community/pull/3235))
* **JEWEL-174** Fixed toolwindows in the IDE not getting focused when clicking in an empty area or a non-focusable child composable ([#3228](https://github.com/JetBrains/intellij-community/pull/3228))
* **JEWEL-857** Fixed `SimpleListItem`'s semantics to ensure screen readers will read the content description from the children elements ([#3227](https://github.com/JetBrains/intellij-community/pull/3227))
* **JEWEL-857** Fixed `SelectableLazyColumn`'s semantics to ensure screen readers will read the content description from the children elements ([#3227](https://github.com/JetBrains/intellij-community/pull/3227))
* **JEWEL-857** Fixed `SelectableLazyColumn`'s semantics to ensure screen readers will read the selected/unselected state of items correctly ([#3227](https://github.com/JetBrains/intellij-community/pull/3227))
* If the list uses multiple selection mode, items will be considered as checkboxes
* If the list uses single selection mode, items will be considered as radio buttons
* **JEWEL-914** Fixed the `Chip` component's appearance in the IDE ([#3239](https://github.com/JetBrains/intellij-community/pull/3239))
* **JEWEL-952** Fixed an issue with menus where multiple sub-menus could be opened at the same time ([#3201](https://github.com/JetBrains/intellij-community/pull/3201))
* **JEWEL-953** Fixed keyboard navigation on custom native popups, in both standalone and the IDE ([#3208](https://github.com/JetBrains/intellij-community/pull/3208))
* Now, clicking the left arrow only closes the top level
* Also fixes incorrect popup focus forcing in the IDE
* **JEWEL-953** Fixed keyboard navigation on custom native popups in standalone to cycle around like it does the IDE ([#3208](https://github.com/JetBrains/intellij-community/pull/3208))
* **JEWEL-953** Fixed behaviour when `dismissOnClickOutside = false` for custom native popups in standalone ([#3208](https://github.com/JetBrains/intellij-community/pull/3208))
* **JEWEL-961,JEWEL-984** Fixed issues where `ListComboBox`es were not making focused entries fully visible on keyboard navigation ([#3237](https://github.com/JetBrains/intellij-community/pull/3237))
* **JEWEL-961,JEWEL-984** Fixed issues with string-based `ListComboBox`es not closing when pressing enter ([#3237](https://github.com/JetBrains/intellij-community/pull/3237))
* **JEWEL-961,JEWEL-984** Fixed issues in `ListComboBox`es scrolling to only move by one item at a time, to match Swing implementations ([#3237](https://github.com/JetBrains/intellij-community/pull/3237))
* **JEWEL-962** Fixed `ListComboBox` to properly scroll to ensure the selected item is visible when first opening the popup ([#3243](https://github.com/JetBrains/intellij-community/pull/3243))
* **JEWEL-962** Fixed `ListComboBox` to properly reset the scroll position when the popup is dismissed ([#3234](https://github.com/JetBrains/intellij-community/pull/3234))
* **JEWEL-1001** Fixed the text line height calculation in the IDE when the IDE zoom level is not 100% ([#3236](https://github.com/JetBrains/intellij-community/pull/3236))
* **JEWEL-1002** Fixed an issue that required explicitly providing a theme `instanceUuid` in standalone themes and could cause crashing at startup ([#3216](https://github.com/JetBrains/intellij-community/pull/3216))
* **JEWEL-1006** Fixed an issue in the custom popup renderer in standalone that was incorrectly triggering the "click outside" callback when a submenu was clicked ([#3238](https://github.com/JetBrains/intellij-community/pull/3238))
### Deprecated API
* **JEWEL-146** Deprecated `SelectableLazyColumn` overload that does not accept an `interactionSource` as parameter ([#3214](https://github.com/JetBrains/intellij-community/pull/3214))
## v0.30 (2025-09-04)
| Supported IJP versions | Compose Multiplatform version |
@@ -90,13 +141,13 @@
* **JEWEL-967** Fixed the Images Markdown extension artifact to correctly declare it depends on Coil3 ([#3188](https://github.com/JetBrains/intellij-community/pull/3188))
* **JEWEL-968** Fixed the Markdown console font ligatures settings to match user's IDE settings with all fonts ([#3178](https://github.com/JetBrains/intellij-community/pull/3178))
* **JEWEL-976** Fixed a `ArrayIndexOutOfBoundsException` in `ListComboBox` when passing an out-of-bounds selected index ([#3184](https://github.com/JetBrains/intellij-community/pull/3184))
* **JEWEL-989** Fixed `plugin.xml` dependencies for the Markdown styling modules — both standalone and bridge ([#3197](https://github.com/JetBrains/intellij-community/pull/3197))
* **JEWEL-985** Fixed a number of APIs that were missing the experimental annotations, or were improperly annotated as such: ([#3193](https://github.com/JetBrains/intellij-community/pull/3193))
* `LocalCodeHighlighter` and `NoOpCodeHighlighter`
* `LocalPopupRenderer`
* **JEWEL-986** Added missing CMP Resources transitive dependency to the `ui` module's POM ([#3195](https://github.com/JetBrains/intellij-community/pull/3195))
* Removed unnecessary dependency on the autolink, strikethrough, and images extensions from the bridge styling module
* Added missing dependency on the tables extension to the standalone styling module
* **JEWEL-989** Fixed `plugin.xml` dependencies for the Markdown styling modules — both standalone and bridge ([#3197](https://github.com/JetBrains/intellij-community/pull/3197))
### Deprecated API

View File

@@ -11,6 +11,8 @@ import com.github.ajalt.clikt.core.main
import com.github.ajalt.clikt.parameters.options.defaultLazy
import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.option
import java.io.File
import java.util.concurrent.ConcurrentHashMap
import kotlin.system.exitProcess
import kotlin.time.TimeSource.Monotonic.markNow
import kotlinx.coroutines.Dispatchers
@@ -24,8 +26,6 @@ import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import java.io.File
import java.util.concurrent.ConcurrentHashMap
// --- Configuration ---
private object Config {
@@ -51,7 +51,7 @@ class ExtractReleaseNotesCommand : CliktCommand() {
if (latestReleaseDate.isNullOrBlank()) {
printlnErr(
"Error: --start-date is required if ${Config.RELEASE_NOTES_FILE} " +
"does not exist or contain a release date."
"does not exist or contain a release date."
)
exitProcess(1)
}
@@ -198,7 +198,9 @@ class ExtractReleaseNotesCommand : CliktCommand() {
results.forEach { result ->
processedPrs[result.prId] = result
result.notes.forEach { (section, items) ->
allReleaseNotes.getOrPut(section) { mutableListOf() }.addAll(items)
allReleaseNotes
.getOrPut(section) { mutableListOf() }
.addAll(items.filter { it.description.isNotBlank() })
}
}
@@ -225,7 +227,7 @@ class ExtractReleaseNotesCommand : CliktCommand() {
val sectionOrder = listOf("⚠️ Important Changes", "New features", "Bug fixes", "Deprecated API", "Other")
val sortedSections =
allReleaseNotes.keys.sortedBy{ sectionKey ->
allReleaseNotes.keys.sortedBy { sectionKey ->
sectionOrder.indexOf(sectionKey).takeIf { it >= 0 } ?: Int.MAX_VALUE
}