diff --git a/.idea/modules.xml b/.idea/modules.xml
index 38b799dda78c..16aa70dd8d74 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -786,10 +786,10 @@
-
-
-
-
+
+
+
+
diff --git a/build/src/org/jetbrains/intellij/build/JewelMavenArtifacts.kt b/build/src/org/jetbrains/intellij/build/JewelMavenArtifacts.kt
index 415fac65ca2f..346c3ea8e030 100644
--- a/build/src/org/jetbrains/intellij/build/JewelMavenArtifacts.kt
+++ b/build/src/org/jetbrains/intellij/build/JewelMavenArtifacts.kt
@@ -23,8 +23,9 @@ internal object JewelMavenArtifacts {
"intellij.platform.jewel.foundation" to "jewel-foundation",
"intellij.platform.jewel.markdown.core" to "jewel-markdown-core",
"intellij.platform.jewel.ui" to "jewel-ui",
- "intellij.platform.jewel.markdown.extension.gfmTables" to "jewel-markdown-extension-gfm-tables",
- "intellij.platform.jewel.markdown.extension.gfmAlerts" to "jewel-markdown-extension-gfm-alerts",
+ "intellij.platform.jewel.markdown.extensions.gfmTables" to "jewel-markdown-extensions-gfm-tables",
+ "intellij.platform.jewel.markdown.extensions.gfmStrikethrough" to "jewel-markdown-extensions-gfm-strikethrough",
+ "intellij.platform.jewel.markdown.extensions.gfmAlerts" to "jewel-markdown-extensions-gfm-alerts",
)
val STANDALONE: Map = mapOf(
"intellij.platform.jewel.markdown.intUiStandaloneStyling" to "jewel-markdown-int-ui-standalone-styling",
diff --git a/platform/compose/compiler-plugin/BUILD.bazel b/platform/compose/compiler-plugin/BUILD.bazel
index 3278ae532df0..1db0f947a8c8 100644
--- a/platform/compose/compiler-plugin/BUILD.bazel
+++ b/platform/compose/compiler-plugin/BUILD.bazel
@@ -1,3 +1,8 @@
### auto-generated section `build intellij.platform.compose.compilerPlugin` start
load("@rules_java//java:defs.bzl", "java_library")
+
+java_library(
+ name = "compilerPlugin",
+ visibility = ["//visibility:public"]
+)
### auto-generated section `build intellij.platform.compose.compilerPlugin` end
\ No newline at end of file
diff --git a/platform/compose/src/com/intellij/platform/compose/showcase/ComposeShowcase.kt b/platform/compose/src/com/intellij/platform/compose/showcase/ComposeShowcase.kt
index c91b96a6d6d0..0b183395a87a 100644
--- a/platform/compose/src/com/intellij/platform/compose/showcase/ComposeShowcase.kt
+++ b/platform/compose/src/com/intellij/platform/compose/showcase/ComposeShowcase.kt
@@ -5,6 +5,7 @@ import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
@@ -13,7 +14,10 @@ import androidx.compose.ui.draw.shadow
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.onFocusEvent
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.input.key.*
+import androidx.compose.ui.input.key.Key
+import androidx.compose.ui.input.key.isShiftPressed
+import androidx.compose.ui.input.key.key
+import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.input.pointer.PointerIcon
import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.unit.dp
@@ -24,8 +28,9 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.keymap.KeymapUtil
import com.intellij.ui.UIBundle
import com.intellij.util.ui.JBUI
-import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.withContext
import org.jetbrains.jewel.bridge.toComposeColor
import org.jetbrains.jewel.foundation.modifier.onHover
import org.jetbrains.jewel.foundation.theme.JewelTheme
@@ -33,6 +38,7 @@ import org.jetbrains.jewel.foundation.theme.OverrideDarkMode
import org.jetbrains.jewel.ui.Orientation
import org.jetbrains.jewel.ui.Outline
import org.jetbrains.jewel.ui.component.*
+import org.jetbrains.jewel.ui.icons.AllIconsKeys
import org.jetbrains.jewel.ui.theme.defaultTabStyle
import org.jetbrains.jewel.ui.theme.tooltipStyle
import org.jetbrains.jewel.ui.util.isDark
@@ -50,25 +56,24 @@ internal fun ComposeShowcase() {
Title()
Text("This is Compose bundled inside IntelliJ Platform!")
Row {
- val scrollState = rememberScrollState()
- Column(
- verticalArrangement = Arrangement.spacedBy(15.dp),
- modifier = Modifier.weight(1f).verticalScroll(scrollState)
+ VerticallyScrollableContainer(
+ modifier = Modifier.weight(1f)
) {
- CheckBox()
- RadioButton()
- Buttons()
- Label()
- SelectableText()
- Tabs()
- LinkLabels()
- TextFieldSimple()
- TextFieldWithButton()
- TooltipAreaSimple()
+ Column(
+ verticalArrangement = Arrangement.spacedBy(15.dp),
+ ) {
+ CheckBox()
+ RadioButton()
+ Buttons()
+ Label()
+ SelectableText()
+ Tabs()
+ LinkLabels()
+ TextFieldSimple()
+ TextFieldWithButton()
+ TooltipAreaSimple()
+ }
}
-
- val adapter = rememberScrollbarAdapter(scrollState)
- androidx.compose.foundation.VerticalScrollbar(adapter)
}
}
}
@@ -176,7 +181,7 @@ private fun Buttons() {
.onFocusEvent { focused = it.isFocused }
.background(if (focused) JBUI.CurrentTheme.Focus.focusColor().toComposeColor() else Color.Unspecified, RoundedCornerShape(4.dp))
) {
- Icon("expui/image/fitContent.svg", contentDescription = null, iconClass = AllIcons::class.java)
+ Icon(AllIconsKeys.General.FitContent, contentDescription = null, iconClass = AllIcons::class.java)
}
Text("← Click me #$state3")
}
@@ -219,7 +224,7 @@ private fun LinkLabels() {
@Composable
private fun TextFieldSimple() {
- var textFieldState by remember { mutableStateOf("") }
+ val textFieldState = rememberTextFieldState()
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(5.dp),
@@ -227,9 +232,6 @@ private fun TextFieldSimple() {
Text("Text field:")
TextField(
textFieldState,
- onValueChange = {
- textFieldState = it
- },
modifier = Modifier.padding(5.dp)
)
}
@@ -238,14 +240,13 @@ private fun TextFieldSimple() {
@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun TextFieldWithButton() {
-
- var textFieldState by remember { mutableStateOf("") }
+ val textFieldState = rememberTextFieldState()
var fileExists by remember { mutableStateOf(true) }
LaunchedEffect(textFieldState) {
delay(300)
withContext(IO) {
- fileExists = textFieldState.isEmpty() || File(textFieldState).exists()
+ fileExists = textFieldState.text.isEmpty() || File(textFieldState.text.toString()).exists()
}
}
@@ -253,7 +254,7 @@ private fun TextFieldWithButton() {
val descriptor = FileChooserDescriptorFactory.createSingleFileOrFolderDescriptor()
descriptor.title = UIBundle.message("file.chooser.default.title")
FileChooser.chooseFile(descriptor, null, null) {
- textFieldState = it.path
+ textFieldState.edit { replace(0, textFieldState.text.length, it.path) }
}
}
@@ -267,8 +268,7 @@ private fun TextFieldWithButton() {
) {
Text("Choose file or folder:")
TextField(
- value = textFieldState,
- onValueChange = { textFieldState = it },
+ textFieldState,
modifier = Modifier
.padding(5.dp)
.height(28.dp)
@@ -289,7 +289,7 @@ private fun TextFieldWithButton() {
) {
IconButton({ chooseFile() }, Modifier.size(18.dp).pointerHoverIcon(PointerIcon.Hand).focusProperties { canFocus = false }) {
AllIcons.General.OpenDisk
- Icon("expui/inline/browse.svg", openFileChooserHint, iconClass = AllIcons::class.java)
+ Icon(AllIconsKeys.General.OpenDisk, openFileChooserHint, iconClass = AllIcons::class.java)
}
}
},
@@ -346,4 +346,4 @@ private fun TooltipSimple(modifier: Modifier = Modifier, content: @Composable ()
content()
}
}
-}
\ No newline at end of file
+}
diff --git a/platform/jewel/.github/workflows/check-ide-version.yml b/platform/jewel/.github/workflows/check-ide-version.yml
deleted file mode 100644
index 850a52d58401..000000000000
--- a/platform/jewel/.github/workflows/check-ide-version.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: IJ Platform version updates
-
-on:
- workflow_dispatch:
- schedule:
- - cron: 0 8 * * *
-
-jobs:
- check-ij-platform-updates:
- name: Check for IJP updates
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- branch-name:
- - releases/241
- - releases/242
- - main
-
- steps:
- - uses: actions/checkout@v4
- with:
- ref: ${{ matrix.branch-name }}
-
- - uses: actions/setup-java@v4
- with:
- distribution: zulu
- java-version: 21
- cache: gradle
-
- - name: Setup Gradle
- run: chmod +x gradlew
-
- - name: Run Gradle
- run: ./gradlew checkLatestIntelliJPlatformBuild --no-daemon
diff --git a/platform/jewel/.github/workflows/stale.yml b/platform/jewel/.github/workflows/stale.yml
deleted file mode 100644
index 28868730b4d7..000000000000
--- a/platform/jewel/.github/workflows/stale.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
-#
-# You can adjust the behavior by modifying this file.
-# For more information, see:
-# https://github.com/actions/stale
-name: Mark stale issues and pull requests
-
-on:
- schedule:
- - cron: '0 6 * * *'
-
-jobs:
- stale:
-
- runs-on: ubuntu-latest
- permissions:
- issues: write
- pull-requests: write
-
- steps:
- - uses: actions/stale@v5
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- stale-issue-message: 'This issue has been inactive for a long time.'
- stale-pr-message: 'Stale pull request message'
- stale-issue-label: 'stale'
- stale-pr-label: 'stale'
- exempt-issue-labels: 'blocked-externally'
- exempt-pr-labels: 'blocked-externally'
- only-labels: 'needs-info'
- days-before-stale: 7
- days-before-close: 3
- labels-to-remove-when-unstale: 'stale'
-
diff --git a/platform/jewel/FAST_PR_GUIDE.md b/platform/jewel/FAST_PR_GUIDE.md
new file mode 100644
index 000000000000..6339ca838e1b
--- /dev/null
+++ b/platform/jewel/FAST_PR_GUIDE.md
@@ -0,0 +1,21 @@
+# Fast PR Guide
+
+In order to get your pull requests merged with any futher complications (inside community repository) it is advised to follow these:
+
+1) Make sure your commits are prefixed with `[jewel] ` to ensure distinction of commits and ensure automation works.
+2) Prefix the PR name with `[jewel]` and ideally with `jewel` label.
+3) Avoid creating pull requests from chains of feature branches (branching from feature branches), this is possible, but can cause issues if combined with squashing/amending the commits. If you do this, ensure you properly rebase all of the branches.
+4) Ideally squash the commits, this is not a requirement, but beware that your feature branch might became unsuable if we squash the commits as part of the cherry-pick process.
+
+## Adding modules
+When adding modules, there is multiple tests ensuring quality of community project. These rules should be folowed in addition to rules above:
+1) Ensure that .idea/modules.xml is sorted alphabetically
+2) Source roots declared in the module .iml should match the folder structure. Do not add source roots that don't exist and vice versa.
+3) In resource folder, file called `.xml` should be placed that contains the V2 Plugin configuration. For sake of Jewel/platform modules, it is essential to alteast declare module dependencies in this file.
+4) Make sure that `.iml` files are not being modified after being changed by the IDE dialogs.
+
+## Adding dependencies
+1) Library for new dependency has to be stated inside CommunityLibraryLicenses.kt. If you are adding part of library already added, you still need to add the alternative library name to this file.
+2) Alternatively, library used by multiple modules might be added to community/libraries as a separate module containing only the dependency.
+3) Try not to use "exported" flag in dependencies.
+4) Make sure that dependencies already contained in the platform are not included as transitive dependencies. (same applies if the current module depends on module with this dependency already added.)
diff --git a/platform/jewel/build.gradle.kts b/platform/jewel/build.gradle.kts
index 54c9f4a18507..6446c9017166 100644
--- a/platform/jewel/build.gradle.kts
+++ b/platform/jewel/build.gradle.kts
@@ -13,8 +13,10 @@ dependencies {
sarif(projects.intUi.intUiDecoratedWindow)
sarif(projects.intUi.intUiStandalone)
sarif(projects.markdown.core)
- sarif(projects.markdown.extension.autolink)
- sarif(projects.markdown.extension.gfmAlerts)
+ sarif(projects.markdown.extensions.autolink)
+ sarif(projects.markdown.extensions.gfmAlerts)
+ sarif(projects.markdown.extensions.gfmStrikethrough)
+ sarif(projects.markdown.extensions.gfmTables)
sarif(projects.markdown.ideLafBridgeStyling)
sarif(projects.markdown.intUiStandaloneStyling)
sarif(projects.samples.idePlugin)
diff --git a/platform/jewel/buildSrc/src/main/kotlin/PublishConfiguration.kt b/platform/jewel/buildSrc/src/main/kotlin/PublishConfiguration.kt
index 533fa57b26ae..95510f8e6c88 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/PublishConfiguration.kt
+++ b/platform/jewel/buildSrc/src/main/kotlin/PublishConfiguration.kt
@@ -30,7 +30,7 @@ internal fun MavenPom.configureJewelPom() {
licenses {
license {
name = "Apache License 2.0"
- url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
+ url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
}
}
scm {
diff --git a/platform/jewel/buildSrc/src/main/kotlin/icon-keys-generator.gradle.kts b/platform/jewel/buildSrc/src/main/kotlin/icon-keys-generator.gradle.kts
index 5eb2a8f4af03..1f6011ae12f7 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/icon-keys-generator.gradle.kts
+++ b/platform/jewel/buildSrc/src/main/kotlin/icon-keys-generator.gradle.kts
@@ -6,6 +6,8 @@ import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import io.gitlab.arturbosch.detekt.Detekt
import org.jetbrains.dokka.gradle.DokkaTask
+import org.jetbrains.dokka.gradle.tasks.DokkaGenerateModuleTask
+import org.jetbrains.dokka.gradle.tasks.DokkaGeneratePublicationTask
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.tasks.BaseKotlinCompile
import java.lang.reflect.Field
@@ -47,6 +49,8 @@ extension.all item@{
withType { dependsOn(task) }
withType { dependsOn(task) }
withType { dependsOn(task) }
+ withType { dependsOn(task) }
+ withType { dependsOn(task) }
withType { dependsOn(task) }
}
}
diff --git a/platform/jewel/buildSrc/src/main/kotlin/intellij-theme-generator.gradle.kts b/platform/jewel/buildSrc/src/main/kotlin/intellij-theme-generator.gradle.kts
index 88069aa30272..618ef390be5e 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/intellij-theme-generator.gradle.kts
+++ b/platform/jewel/buildSrc/src/main/kotlin/intellij-theme-generator.gradle.kts
@@ -4,6 +4,8 @@ import com.squareup.kotlinpoet.ClassName
import io.gitlab.arturbosch.detekt.Detekt
import org.gradle.util.internal.GUtil
import org.jetbrains.dokka.gradle.DokkaTask
+import org.jetbrains.dokka.gradle.tasks.DokkaGenerateModuleTask
+import org.jetbrains.dokka.gradle.tasks.DokkaGeneratePublicationTask
import org.jetbrains.jewel.buildlogic.theme.IntelliJThemeGeneratorTask
import org.jetbrains.jewel.buildlogic.theme.ThemeGeneration
import org.jetbrains.jewel.buildlogic.theme.ThemeGeneratorContainer
@@ -33,6 +35,8 @@ extension.all {
withType { dependsOn(task) }
withType { dependsOn(task) }
withType { dependsOn(task) }
+ withType { dependsOn(task) }
+ withType { dependsOn(task) }
withType { dependsOn(task) }
}
diff --git a/platform/jewel/buildSrc/src/main/kotlin/jewel-publish.gradle.kts b/platform/jewel/buildSrc/src/main/kotlin/jewel-publish.gradle.kts
index cdbb8dd854a7..d9b4004b3766 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/jewel-publish.gradle.kts
+++ b/platform/jewel/buildSrc/src/main/kotlin/jewel-publish.gradle.kts
@@ -4,9 +4,22 @@ plugins {
kotlin("jvm")
`maven-publish`
id("org.jetbrains.dokka")
+ id("org.jetbrains.dokka-javadoc")
signing
}
+dokka {
+ dokkaSourceSets {
+ named("main") {
+ sourceLink {
+ // Point to IJP sources
+ remoteUrl("https://github.com/JetBrains/intellij-community")
+ localDirectory.set(rootDir)
+ }
+ }
+ }
+}
+
val sourcesJar by
tasks.registering(Jar::class) {
from(kotlin.sourceSets.main.map { it.kotlin })
@@ -17,7 +30,7 @@ val sourcesJar by
val javadocJar by
tasks.registering(Jar::class) {
- from(tasks.dokkaHtml)
+ from(tasks.dokkaGenerateModuleJavadoc)
archiveClassifier = "javadoc"
destinationDirectory = layout.buildDirectory.dir("artifacts")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
diff --git a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleases.kt b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleases.kt
index b71c878c9a54..bc6d7ee22284 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleases.kt
+++ b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleases.kt
@@ -1,14 +1,14 @@
package org.jetbrains.jewel.buildlogic.demodata
import com.squareup.kotlinpoet.ClassName
-import gradle.kotlin.dsl.accessors._6b77fac1fb1b8c5058558e9072dfa468.kotlin
-import gradle.kotlin.dsl.accessors._6b77fac1fb1b8c5058558e9072dfa468.sourceSets
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.file.SourceDirectorySet
+import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.Input
@@ -16,7 +16,6 @@ import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.get
-import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.setProperty
import java.io.File
@@ -27,7 +26,18 @@ open class StudioVersionsGenerationExtension(project: Project) {
project.objects
.directoryProperty()
.convention(
- project.layout.dir(project.provider { project.sourceSets.named("main").get().kotlin.srcDirs.first() })
+ project.layout.dir(
+ project.provider {
+ if (project.plugins.hasPlugin("org.gradle.jvm-ecosystem")) {
+ val sourceSets = project.extensions.getByName("sourceSets") as SourceSetContainer
+ val mainSourceSet = sourceSets.named("main").get()
+ val kotlinSourceSet = mainSourceSet.extensions.getByName("kotlin") as SourceDirectorySet
+ kotlinSourceSet.srcDirs.first()
+ } else {
+ error("Gradle plugin 'org.gradle.jvm-ecosystem' is required")
+ }
+ }
+ )
)
val resourcesDirs: SetProperty =
@@ -35,11 +45,11 @@ open class StudioVersionsGenerationExtension(project: Project) {
.setProperty()
.convention(
project.provider {
- when {
- project.plugins.hasPlugin("org.gradle.jvm-ecosystem") ->
- project.extensions.getByType()["main"].resources.srcDirs
-
- else -> emptySet()
+ if (project.plugins.hasPlugin("org.gradle.jvm-ecosystem")) {
+ val javaExtension = project.extensions.getByType(JavaPluginExtension::class.java)
+ javaExtension.sourceSets.named("main").get().resources.srcDirs
+ } else {
+ emptySet()
}
}
)
diff --git a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleasesReader.kt b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleasesReader.kt
index 1875586981dc..83795369e875 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleasesReader.kt
+++ b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/AndroidStudioReleasesReader.kt
@@ -33,6 +33,7 @@ internal object AndroidStudioReleasesReader {
private fun createBaseTypeSpec(className: ClassName, releases: ApiAndroidStudioReleases, resourceDirs: Set) =
TypeSpec.objectBuilder(className)
+ .addModifiers(KModifier.INTERNAL)
.superclass(
ClassName.bestGuess("org.jetbrains.jewel.samples.ideplugin.releasessample.ContentSource")
.parameterizedBy(ContentItemClassName)
@@ -70,7 +71,7 @@ internal object AndroidStudioReleasesReader {
add(" versionName = \"%L\",\n", release.version)
add(" build = \"%L\",\n", release.build)
add(" platformBuild = \"%L\",\n", release.platformBuild)
- add(" platformVersion = \"%L\",\n", release.platformVersion)
+ add(" platformVersion = \"%L\",\n", release.platformVersion ?: "N/A")
add(" channel = %L,\n", readChannel(release.channel))
add(" releaseDate = LocalDate(%L),\n", translateDate(release.date))
add(" key = \"%L\",\n", release.build)
diff --git a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/ApiAndroidStudioReleases.kt b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/ApiAndroidStudioReleases.kt
index 23e15f5cf843..dc75bee77690 100644
--- a/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/ApiAndroidStudioReleases.kt
+++ b/platform/jewel/buildSrc/src/main/kotlin/org/jetbrains/jewel/buildlogic/demodata/ApiAndroidStudioReleases.kt
@@ -20,7 +20,7 @@ internal data class ApiAndroidStudioReleases(@SerialName("content") val content:
@SerialName("download") val download: List = listOf(),
@SerialName("name") val name: String,
@SerialName("platformBuild") val platformBuild: String,
- @SerialName("platformVersion") val platformVersion: String,
+ @SerialName("platformVersion") val platformVersion: String?,
@SerialName("version") val version: String,
) {
diff --git a/platform/jewel/decorated-window/api/decorated-window.api b/platform/jewel/decorated-window/api/decorated-window.api
index c0502f19e4c1..2b05525e552f 100644
--- a/platform/jewel/decorated-window/api/decorated-window.api
+++ b/platform/jewel/decorated-window/api/decorated-window.api
@@ -51,7 +51,6 @@ public abstract interface class com/jetbrains/WindowMove {
public final class org/jetbrains/jewel/window/ComposableSingletons$TitleBarKt {
public static final field INSTANCE Lorg/jetbrains/jewel/window/ComposableSingletons$TitleBarKt;
- public static field lambda-1 Lkotlin/jvm/functions/Function2;
public fun ()V
public final fun getLambda-1$decorated_window ()Lkotlin/jvm/functions/Function2;
}
diff --git a/platform/jewel/detekt-plugin/build.gradle.kts b/platform/jewel/detekt-plugin/build.gradle.kts
index 697b8a339009..db82ca668b96 100644
--- a/platform/jewel/detekt-plugin/build.gradle.kts
+++ b/platform/jewel/detekt-plugin/build.gradle.kts
@@ -1,8 +1,6 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-plugins {
- jewel
-}
+plugins { jewel }
dependencies {
compileOnly("io.gitlab.arturbosch.detekt:detekt-api:1.23.7")
@@ -11,6 +9,4 @@ dependencies {
testImplementation("org.assertj:assertj-core:3.26.3")
}
-tasks.test {
- useJUnitPlatform()
-}
+tasks.test { useJUnitPlatform() }
diff --git a/platform/jewel/foundation/BUILD.bazel b/platform/jewel/foundation/BUILD.bazel
index 45ee3dfee6d7..3be690c3bc6b 100644
--- a/platform/jewel/foundation/BUILD.bazel
+++ b/platform/jewel/foundation/BUILD.bazel
@@ -58,4 +58,4 @@ jvm_test(
name = "foundation_test",
runtime_deps = [":foundation_test_lib"]
)
-### auto-generated section `build intellij.platform.jewel.foundation` end
+### auto-generated section `build intellij.platform.jewel.foundation` end
\ No newline at end of file
diff --git a/platform/jewel/foundation/api-dump-unreviewed.txt b/platform/jewel/foundation/api-dump-unreviewed.txt
index 044427885610..7c0245ad745b 100644
--- a/platform/jewel/foundation/api-dump-unreviewed.txt
+++ b/platform/jewel/foundation/api-dump-unreviewed.txt
@@ -646,7 +646,6 @@ f:org.jetbrains.jewel.foundation.theme.JewelTheme$Companion
- f:getGlobalColors(androidx.compose.runtime.Composer,I):org.jetbrains.jewel.foundation.GlobalColors
- f:getGlobalMetrics(androidx.compose.runtime.Composer,I):org.jetbrains.jewel.foundation.GlobalMetrics
- f:getName(androidx.compose.runtime.Composer,I):java.lang.String
-- f:getTextStyle(androidx.compose.runtime.Composer,I):androidx.compose.ui.text.TextStyle
- f:isDark(androidx.compose.runtime.Composer,I):Z
- f:isSwingCompatMode(androidx.compose.runtime.Composer,I):Z
f:org.jetbrains.jewel.foundation.theme.JewelThemeKt
@@ -680,8 +679,6 @@ f:org.jetbrains.jewel.foundation.theme.ThemeColorPalette
- f:grayOrNull-ijrfgN4(I):androidx.compose.ui.graphics.Color
- f:green-vNxB06k(I):J
- f:greenOrNull-ijrfgN4(I):androidx.compose.ui.graphics.Color
-- f:grey-vNxB06k(I):J
-- f:greyOrNull-ijrfgN4(I):androidx.compose.ui.graphics.Color
- hashCode():I
- f:lookup-ijrfgN4(java.lang.String):androidx.compose.ui.graphics.Color
- f:orange-vNxB06k(I):J
diff --git a/platform/jewel/foundation/api/foundation.api b/platform/jewel/foundation/api/foundation.api
index 398681c884ff..2b6175708eea 100644
--- a/platform/jewel/foundation/api/foundation.api
+++ b/platform/jewel/foundation/api/foundation.api
@@ -907,7 +907,6 @@ public final class org/jetbrains/jewel/foundation/theme/JewelTheme$Companion {
public final fun getGlobalColors (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalColors;
public final fun getGlobalMetrics (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalMetrics;
public final fun getName (Landroidx/compose/runtime/Composer;I)Ljava/lang/String;
- public final fun getTextStyle (Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/TextStyle;
public final fun isDark (Landroidx/compose/runtime/Composer;I)Z
public final fun isSwingCompatMode (Landroidx/compose/runtime/Composer;I)Z
}
@@ -945,8 +944,6 @@ public final class org/jetbrains/jewel/foundation/theme/ThemeColorPalette {
public final fun grayOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color;
public final fun green-vNxB06k (I)J
public final fun greenOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color;
- public final fun grey-vNxB06k (I)J
- public final fun greyOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color;
public fun hashCode ()I
public final fun lookup-ijrfgN4 (Ljava/lang/String;)Landroidx/compose/ui/graphics/Color;
public final fun orange-vNxB06k (I)J
diff --git a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt
index 8d9988f0221d..67653548293f 100644
--- a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt
+++ b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt
@@ -44,7 +44,6 @@ import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Pressed
import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Selected
import org.jetbrains.jewel.foundation.state.FocusableComponentState
import org.jetbrains.jewel.foundation.state.SelectableComponentState
-import org.jetbrains.jewel.foundation.util.JewelLogger
/**
* Renders a lazy tree view based on the provided tree data structure.
@@ -184,7 +183,6 @@ public fun BasicLazyTree(
}
.clickable(interactionSource = remember { MutableInteractionSource() }, indication = null) {
val item = flattenedTree[index] as Tree.Element
- JewelLogger.getInstance("BasicLazyTree").warn("Clicky clicky: ${item.data}")
(pointerEventScopedActions as? DefaultTreeViewPointerEventAction)?.notifyItemClicked(
item = item,
scope = scope,
diff --git a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt
index 963cac804eef..b70098588eca 100644
--- a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt
+++ b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt
@@ -280,21 +280,28 @@ public open class DefaultSelectableLazyColumnKeyActions(
state.lastKeyEventUsedMouse = false
state.isKeyboardNavigating = true
- with(keybindings) { with(actions) { execute(keys, state, selectionMode) } }
+ execute(
+ keys = keys,
+ state = state,
+ selectionMode = selectionMode,
+ keyEvent = actions,
+ keyBindings = keybindings,
+ )
}
- context(SelectableColumnKeybindings, SelectableColumnOnKeyEvent)
private fun KeyEvent.execute(
keys: List,
state: SelectableLazyListState,
selectionMode: SelectionMode,
+ keyEvent: SelectableColumnOnKeyEvent,
+ keyBindings: SelectableColumnKeybindings,
): Boolean {
- val singleSelectionEventHandled = handleSingleSelectionEvents(keys, state)
+ val singleSelectionEventHandled = handleSingleSelectionEvents(keys, state, keyEvent, keyBindings)
if (singleSelectionEventHandled) {
return true
}
if (selectionMode == SelectionMode.Multiple) {
- val multipleSelectionEventHandled = handleMultipleSelectionEvents(keys, state)
+ val multipleSelectionEventHandled = handleMultipleSelectionEvents(keys, state, keyEvent, keyBindings)
if (multipleSelectionEventHandled) {
return true
}
@@ -302,39 +309,45 @@ public open class DefaultSelectableLazyColumnKeyActions(
return false
}
- context(SelectableColumnKeybindings, SelectableColumnOnKeyEvent)
private fun KeyEvent.handleSingleSelectionEvents(
keys: List,
state: SelectableLazyListState,
+ keyEvent: SelectableColumnOnKeyEvent,
+ keybindings: SelectableColumnKeybindings,
): Boolean {
- when {
- isSelectNextItem -> onSelectNextItem(keys, state)
- isSelectPreviousItem -> onSelectPreviousItem(keys, state)
- isSelectFirstItem -> onSelectFirstItem(keys, state)
- isSelectLastItem -> onSelectLastItem(keys, state)
- isEdit -> onEdit()
- else -> return false
+ with(keybindings) {
+ when {
+ isSelectNextItem -> keyEvent.onSelectNextItem(keys, state)
+ isSelectPreviousItem -> keyEvent.onSelectPreviousItem(keys, state)
+ isSelectFirstItem -> keyEvent.onSelectFirstItem(keys, state)
+ isSelectLastItem -> keyEvent.onSelectLastItem(keys, state)
+ isEdit -> keyEvent.onEdit()
+ else -> return false
+ }
+ return true
}
- return true
}
- context(SelectableColumnKeybindings, SelectableColumnOnKeyEvent)
private fun KeyEvent.handleMultipleSelectionEvents(
keys: List,
state: SelectableLazyListState,
+ keyEvent: SelectableColumnOnKeyEvent,
+ keyBindings: SelectableColumnKeybindings,
): Boolean {
- when {
- isExtendSelectionToFirstItem -> onExtendSelectionToFirst(keys, state)
- isExtendSelectionToLastItem -> onExtendSelectionToLastItem(keys, state)
- isExtendSelectionWithNextItem -> onExtendSelectionWithNextItem(keys, state)
- isExtendSelectionWithPreviousItem -> onExtendSelectionWithPreviousItem(keys, state)
- isScrollPageDownAndExtendSelection -> onScrollPageDownAndExtendSelection(keys, state)
- isScrollPageDownAndSelectItem -> onScrollPageDownAndSelectItem(keys, state)
- isScrollPageUpAndExtendSelection -> onScrollPageUpAndExtendSelection(keys, state)
- isScrollPageUpAndSelectItem -> onScrollPageUpAndSelectItem(keys, state)
- isSelectAll -> onSelectAll(keys, state)
- else -> return false
+ with(keyBindings) {
+ when {
+ isExtendSelectionToFirstItem -> keyEvent.onExtendSelectionToFirst(keys, state)
+ isExtendSelectionToLastItem -> keyEvent.onExtendSelectionToLastItem(keys, state)
+ isExtendSelectionWithNextItem -> keyEvent.onExtendSelectionWithNextItem(keys, state)
+ isExtendSelectionWithPreviousItem -> keyEvent.onExtendSelectionWithPreviousItem(keys, state)
+ isScrollPageDownAndExtendSelection -> keyEvent.onScrollPageDownAndExtendSelection(keys, state)
+ isScrollPageDownAndSelectItem -> keyEvent.onScrollPageDownAndSelectItem(keys, state)
+ isScrollPageUpAndExtendSelection -> keyEvent.onScrollPageUpAndExtendSelection(keys, state)
+ isScrollPageUpAndSelectItem -> keyEvent.onScrollPageUpAndSelectItem(keys, state)
+ isSelectAll -> keyEvent.onSelectAll(keys, state)
+ else -> return false
+ }
+ return true
}
- return true
}
}
diff --git a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/JewelTheme.kt b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/JewelTheme.kt
index f129f994a0f6..4262ccc30527 100644
--- a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/JewelTheme.kt
+++ b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/JewelTheme.kt
@@ -23,10 +23,6 @@ public interface JewelTheme {
public val globalMetrics: GlobalMetrics
@Composable @ReadOnlyComposable get() = LocalGlobalMetrics.current
- @Deprecated("Use defaultTextStyle instead", ReplaceWith("JewelTheme.defaultTextStyle"), DeprecationLevel.ERROR)
- public val textStyle: TextStyle
- @Composable @ReadOnlyComposable get() = defaultTextStyle
-
public val defaultTextStyle: TextStyle
@Composable @ReadOnlyComposable get() = LocalTextStyle.current
diff --git a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/ThemeColorPalette.kt b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/ThemeColorPalette.kt
index 5a5092ab28a1..1a776efcf834 100644
--- a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/ThemeColorPalette.kt
+++ b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/theme/ThemeColorPalette.kt
@@ -21,11 +21,6 @@ public class ThemeColorPalette(
public val teal: List,
public val rawMap: Map,
) {
- @Deprecated("Use gray() instead", ReplaceWith("gray(index)")) public fun grey(index: Int): Color = gray(index)
-
- @Deprecated("Use grayOrNull() instead", ReplaceWith("grayOrNull(index)"))
- public fun greyOrNull(index: Int): Color? = grayOrNull(index)
-
public fun gray(index: Int): Color = gray[index - 1]
public fun grayOrNull(index: Int): Color? = gray.getOrNull(index - 1)
diff --git a/platform/jewel/gradle.properties b/platform/jewel/gradle.properties
index 48b7c7d0be49..c4545b16af55 100644
--- a/platform/jewel/gradle.properties
+++ b/platform/jewel/gradle.properties
@@ -4,7 +4,9 @@ org.gradle.jvmargs=-Xmx2G
kotlin.stdlib.default.dependency=false
org.jetbrains.intellij.platform.buildFeature.useBinaryReleases=false
+org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
+org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
-jdk.level=17
-ijp.target=243
-jewel.release.version=0.27.0
+jdk.level=21
+ijp.target=251
+jewel.release.version=0.28.0
diff --git a/platform/jewel/gradle/libs.versions.toml b/platform/jewel/gradle/libs.versions.toml
index f931608e4bad..ca6211168475 100644
--- a/platform/jewel/gradle/libs.versions.toml
+++ b/platform/jewel/gradle/libs.versions.toml
@@ -2,18 +2,19 @@
commonmark = "0.24.0"
composeDesktop = "1.8.0-alpha04"
detekt = "1.23.6"
-dokka = "1.9.20"
-idea = "2024.3.4.1"
-intelliJPlatformBuild = "243.25659.59"
-ideaPlugin = "2.3.0"
-jna = "5.14.0"
-kotlin = "2.0.21"
-kotlinSarif = "0.5.0"
-kotlinpoet = "1.18.1"
+dokka = "2.0.0"
+filepicker = "3.1.0"
+idea = "251.23774.109"
+intelliJPlatformBuild = "251.23774.109-EAP-SNAPSHOT"
+ideaPlugin = "2.4.0"
+jna = "5.17.0"
+kotlin = "2.1.10"
+kotlinSarif = "0.6.0"
+kotlinpoet = "2.1.0"
kotlinterGradlePlugin = "5.0.1"
-kotlinxSerialization = "1.7.3"
-kotlinxBinaryCompat = "0.16.3"
-ktfmtGradlePlugin = "0.20.1"
+kotlinxSerialization = "1.8.0"
+kotlinxBinaryCompat = "0.17.0"
+ktfmtGradlePlugin = "0.22.0"
[libraries]
commonmark-core = { module = "org.commonmark:commonmark", version.ref = "commonmark" }
@@ -21,7 +22,7 @@ commonmark-ext-autolink = { module = "org.commonmark:commonmark-ext-autolink", v
commonmark-ext-gfm-strikethrough = { module = "org.commonmark:commonmark-ext-gfm-strikethrough", version.ref = "commonmark" }
commonmark-ext-gfm-tables = { module = "org.commonmark:commonmark-ext-gfm-tables", version.ref = "commonmark" }
-filePicker = { module = "com.darkrockstudios:mpfilepicker", version = "3.1.0" }
+filePicker = { module = "com.darkrockstudios:mpfilepicker", version.ref = "filepicker" }
kotlinSarif = { module = "io.github.detekt.sarif4k:sarif4k", version.ref = "kotlinSarif" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
diff --git a/platform/jewel/ide-laf-bridge/BUILD.bazel b/platform/jewel/ide-laf-bridge/BUILD.bazel
index 2ef7460e3fe8..519ce0f69e17 100644
--- a/platform/jewel/ide-laf-bridge/BUILD.bazel
+++ b/platform/jewel/ide-laf-bridge/BUILD.bazel
@@ -45,8 +45,9 @@ jvm_library(
plugins = ["@lib//:compose-plugin"]
)
-jvm_test(
- name = "ideLafBridge_test",
+jvm_library(
+ name = "ideLafBridge_test_lib",
+ visibility = ["//visibility:public"],
srcs = glob(["ide-laf-bridge-tests/src/test/kotlin/**/*.kt", "ide-laf-bridge-tests/src/test/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
associates = [":ideLafBridge"],
@@ -73,4 +74,9 @@ jvm_test(
runtime_deps = [":ideLafBridge_resources"],
plugins = ["@lib//:compose-plugin"]
)
-### auto-generated section `build intellij.platform.jewel.ideLafBridge` end
+
+jvm_test(
+ name = "ideLafBridge_test",
+ runtime_deps = [":ideLafBridge_test_lib"]
+)
+### auto-generated section `build intellij.platform.jewel.ideLafBridge` end
\ No newline at end of file
diff --git a/platform/jewel/ide-laf-bridge/build.gradle.kts b/platform/jewel/ide-laf-bridge/build.gradle.kts
index ac3ff962b47d..47eb13b86694 100644
--- a/platform/jewel/ide-laf-bridge/build.gradle.kts
+++ b/platform/jewel/ide-laf-bridge/build.gradle.kts
@@ -34,9 +34,7 @@ repositories {
dependencies {
api(projects.ui) { exclude(group = "org.jetbrains.kotlinx") }
- intellijPlatform {
- intellijIdeaCommunity(libs.versions.idea)
- }
+ intellijPlatform { intellijIdeaCommunity(libs.versions.idea) }
testImplementation(compose.desktop.uiTestJUnit4)
testImplementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
diff --git a/platform/jewel/ide-laf-bridge/ide-laf-bridge-tests/src/test/kotlin/org/jetbrains/jewel/bridge/actionSystem/TestDataSink.kt b/platform/jewel/ide-laf-bridge/ide-laf-bridge-tests/src/test/kotlin/org/jetbrains/jewel/bridge/actionSystem/TestDataSink.kt
index 08cbfd3b94c6..6d6676f8c6ae 100644
--- a/platform/jewel/ide-laf-bridge/ide-laf-bridge-tests/src/test/kotlin/org/jetbrains/jewel/bridge/actionSystem/TestDataSink.kt
+++ b/platform/jewel/ide-laf-bridge/ide-laf-bridge-tests/src/test/kotlin/org/jetbrains/jewel/bridge/actionSystem/TestDataSink.kt
@@ -1,10 +1,6 @@
package org.jetbrains.jewel.bridge.actionSystem
-import com.intellij.openapi.actionSystem.DataKey
-import com.intellij.openapi.actionSystem.DataProvider
-import com.intellij.openapi.actionSystem.DataSink
-import com.intellij.openapi.actionSystem.DataSnapshotProvider
-import com.intellij.openapi.actionSystem.UiDataProvider
+import com.intellij.openapi.actionSystem.*
internal class TestDataSink : DataSink {
val allData = mutableMapOf()
diff --git a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/JewelComposePanelWrapper.kt b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/JewelComposePanelWrapper.kt
index feae7722d21c..654f45e76b50 100644
--- a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/JewelComposePanelWrapper.kt
+++ b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/JewelComposePanelWrapper.kt
@@ -14,6 +14,7 @@ import androidx.compose.ui.unit.toSize
import com.intellij.openapi.actionSystem.DataSink
import com.intellij.openapi.actionSystem.UiDataProvider
import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.application.PathManager
import com.intellij.openapi.util.registry.Registry
import java.awt.BorderLayout
import javax.swing.JComponent
diff --git a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeTooltip.kt b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeTooltip.kt
index 7fe6f9aef159..9dc14c9114a6 100644
--- a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeTooltip.kt
+++ b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeTooltip.kt
@@ -17,7 +17,7 @@ internal fun readTooltipStyle(): TooltipStyle {
metrics =
TooltipMetrics.defaults(
contentPadding = JBUI.CurrentTheme.HelpTooltip.smallTextBorderInsets().toPaddingValues(),
- showDelay = Registry.intValue("ide.tooltip.initialDelay").milliseconds,
+ showDelay = Registry.intValue("ide.tooltip.initialReshowDelay").milliseconds,
cornerSize = CornerSize(JBUI.CurrentTheme.Tooltip.CORNER_RADIUS.dp),
),
colors =
diff --git a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiComboBoxStyling.kt b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiComboBoxStyling.kt
index 8a5f3a15795b..aac01ccaf2a5 100644
--- a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiComboBoxStyling.kt
+++ b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiComboBoxStyling.kt
@@ -199,10 +199,10 @@ public object IntUiUndecoratedComboBoxColorsFactory {
}
public fun ComboBoxMetrics.Companion.default(
- arrowAreaSize: DpSize = DpSize(23.dp, 24.dp),
- minSize: DpSize = DpSize(49.dp, 24.dp),
+ arrowAreaSize: DpSize = DpSize(28.dp, 28.dp),
+ minSize: DpSize = DpSize(77.dp, 28.dp),
cornerSize: CornerSize = CornerSize(4.dp),
- contentPadding: PaddingValues = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
+ contentPadding: PaddingValues = PaddingValues(9.dp, 1.dp, 6.dp, 1.dp),
popupContentPadding: PaddingValues = PaddingValues(vertical = 6.dp),
borderWidth: Dp = 1.dp,
maxPopupHeight: Dp = 200.dp,
@@ -218,10 +218,10 @@ public fun ComboBoxMetrics.Companion.default(
)
public fun ComboBoxMetrics.Companion.undecorated(
- arrowAreaSize: DpSize = DpSize(23.dp, 24.dp),
- minSize: DpSize = DpSize(49.dp, 24.dp),
+ arrowAreaSize: DpSize = DpSize(28.dp, 28.dp),
+ minSize: DpSize = DpSize(77.dp, 28.dp),
cornerSize: CornerSize = CornerSize(4.dp),
- contentPadding: PaddingValues = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
+ contentPadding: PaddingValues = PaddingValues(9.dp, 1.dp, 6.dp, 1.dp),
popupContentPadding: PaddingValues = PaddingValues(vertical = 6.dp),
borderWidth: Dp = 0.dp,
maxPopupHeight: Dp = 200.dp,
diff --git a/platform/jewel/markdown/README.md b/platform/jewel/markdown/README.md
index 8a84a126e5b5..7997bfafa165 100644
--- a/platform/jewel/markdown/README.md
+++ b/platform/jewel/markdown/README.md
@@ -62,7 +62,7 @@ If you want to use extensions, you also need to add them **alongside** the `jewe
dependencies {
implementation(libs.jewel.standalone)
implementation(libs.jewel.markdown.intUiStandaloneStyling)
- implementation(libs.jewel.markdown.extension.gfm.alerts) // Optional
+ implementation(libs.jewel.markdown.extensions.gfm.alerts) // Optional
// Et cetera...
}
```
@@ -159,4 +159,4 @@ You can see this in action running the Standalone sample, and selecting Markdown
The following image shows the Jewel Markdown renderer displaying the Jewel readme.
-
\ No newline at end of file
+
diff --git a/platform/jewel/markdown/core/BUILD.bazel b/platform/jewel/markdown/core/BUILD.bazel
index 33e7c7652275..5acd8d8331b5 100644
--- a/platform/jewel/markdown/core/BUILD.bazel
+++ b/platform/jewel/markdown/core/BUILD.bazel
@@ -65,4 +65,4 @@ jvm_test(
name = "jewel-markdown-core_test",
runtime_deps = [":jewel-markdown-core_test_lib"]
)
-### auto-generated section `build intellij.platform.jewel.markdown.core` end
+### auto-generated section `build intellij.platform.jewel.markdown.core` end
\ No newline at end of file
diff --git a/platform/jewel/markdown/core/build.gradle.kts b/platform/jewel/markdown/core/build.gradle.kts
index 19e3dfb770d5..8c6865b06c63 100644
--- a/platform/jewel/markdown/core/build.gradle.kts
+++ b/platform/jewel/markdown/core/build.gradle.kts
@@ -15,9 +15,7 @@ dependencies {
testImplementation(compose.desktop.currentOs)
}
-publicApiValidation {
- excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.MarkdownBlock.*")
-}
+publicApiValidation { excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.MarkdownBlock.*") }
publishing.publications.named("main") {
val ijpTarget = project.property("ijp.target") as String
diff --git a/platform/jewel/markdown/core/src/main/kotlin/org/jetbrains/jewel/markdown/rendering/DefaultMarkdownBlockRenderer.kt b/platform/jewel/markdown/core/src/main/kotlin/org/jetbrains/jewel/markdown/rendering/DefaultMarkdownBlockRenderer.kt
index 752be3191c29..00a4b30b2d3f 100644
--- a/platform/jewel/markdown/core/src/main/kotlin/org/jetbrains/jewel/markdown/rendering/DefaultMarkdownBlockRenderer.kt
+++ b/platform/jewel/markdown/core/src/main/kotlin/org/jetbrains/jewel/markdown/rendering/DefaultMarkdownBlockRenderer.kt
@@ -447,7 +447,8 @@ public open class DefaultMarkdownBlockRenderer(
style = styling.editorTextStyle,
modifier =
Modifier.focusProperties { canFocus = false }
- .pointerHoverIcon(PointerIcon.Default, overrideDescendants = true),
+ .pointerHoverIcon(PointerIcon.Default, overrideDescendants = true)
+ .thenIf(!enabled) { alpha(.5f) },
)
}
diff --git a/platform/jewel/markdown/extension/autolink/api-dump-unreviewed.txt b/platform/jewel/markdown/extension/autolink/api-dump-unreviewed.txt
deleted file mode 100644
index 7d9a2c94507b..000000000000
--- a/platform/jewel/markdown/extension/autolink/api-dump-unreviewed.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-f:org.jetbrains.jewel.markdown.extension.autolink.AutolinkProcessorExtension
-- org.jetbrains.jewel.markdown.extensions.MarkdownProcessorExtension
-- sf:$stable:I
-- sf:INSTANCE:org.jetbrains.jewel.markdown.extension.autolink.AutolinkProcessorExtension
-- getParserExtension():org.commonmark.parser.Parser$ParserExtension
diff --git a/platform/jewel/markdown/extension/autolink/BUILD.bazel b/platform/jewel/markdown/extensions/autolink/BUILD.bazel
similarity index 71%
rename from platform/jewel/markdown/extension/autolink/BUILD.bazel
rename to platform/jewel/markdown/extensions/autolink/BUILD.bazel
index 8d90bf43cb7b..9a32c961af86 100644
--- a/platform/jewel/markdown/extension/autolink/BUILD.bazel
+++ b/platform/jewel/markdown/extensions/autolink/BUILD.bazel
@@ -1,4 +1,4 @@
-### auto-generated section `build intellij.platform.jewel.markdown.extension.autolink` start
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.autolink` start
load("//build:compiler-options.bzl", "create_kotlinc_options")
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources", "jvm_test")
@@ -14,14 +14,14 @@ create_kotlinc_options(
)
jvm_resources(
- name = "jewel-markdown-extension-autolink_resources",
+ name = "jewel-markdown-extensions-autolink_resources",
files = glob(["src/main/resources/**/*"]),
strip_prefix = "src/main/resources"
)
jvm_library(
- name = "jewel-markdown-extension-autolink",
- module_name = "intellij.platform.jewel.markdown.extension.autolink",
+ name = "jewel-markdown-extensions-autolink",
+ module_name = "intellij.platform.jewel.markdown.extensions.autolink",
visibility = ["//visibility:public"],
srcs = glob(["src/main/kotlin/**/*.kt", "src/main/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
@@ -32,19 +32,19 @@ jvm_library(
"//platform/jewel/markdown/core:jewel-markdown-core",
"//platform/jewel/ui",
"//platform/jewel/foundation",
- "@lib//:platform-jewel-markdown-extension-autolink-commonmark-ext-autolink",
+ "@lib//:platform-jewel-markdown-extensions-autolink-commonmark-ext-autolink",
"//libraries/compose-foundation-desktop",
],
- runtime_deps = [":jewel-markdown-extension-autolink_resources"],
+ runtime_deps = [":jewel-markdown-extensions-autolink_resources"],
plugins = ["@lib//:compose-plugin"]
)
jvm_library(
- name = "jewel-markdown-extension-autolink_test_lib",
+ name = "jewel-markdown-extensions-autolink_test_lib",
visibility = ["//visibility:public"],
srcs = glob(["src/test/kotlin/**/*.kt", "src/test/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
- associates = [":jewel-markdown-extension-autolink"],
+ associates = [":jewel-markdown-extensions-autolink"],
deps = [
"@lib//:kotlin-stdlib",
"@lib//:kotlinx-coroutines-core",
@@ -55,16 +55,16 @@ jvm_library(
"//platform/jewel/ui:ui_test_lib",
"//platform/jewel/foundation",
"//platform/jewel/foundation:foundation_test_lib",
- "@lib//:platform-jewel-markdown-extension-autolink-commonmark-ext-autolink",
+ "@lib//:platform-jewel-markdown-extensions-autolink-commonmark-ext-autolink",
"//libraries/compose-foundation-desktop",
"//libraries/compose-foundation-desktop-junit",
],
- runtime_deps = [":jewel-markdown-extension-autolink_resources"],
+ runtime_deps = [":jewel-markdown-extensions-autolink_resources"],
plugins = ["@lib//:compose-plugin"]
)
jvm_test(
- name = "jewel-markdown-extension-autolink_test",
- runtime_deps = [":jewel-markdown-extension-autolink_test_lib"]
+ name = "jewel-markdown-extensions-autolink_test",
+ runtime_deps = [":jewel-markdown-extensions-autolink_test_lib"]
)
-### auto-generated section `build intellij.platform.jewel.markdown.extension.autolink` end
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.autolink` end
\ No newline at end of file
diff --git a/platform/jewel/markdown/extensions/autolink/api-dump-unreviewed.txt b/platform/jewel/markdown/extensions/autolink/api-dump-unreviewed.txt
new file mode 100644
index 000000000000..03c35ce1cf1f
--- /dev/null
+++ b/platform/jewel/markdown/extensions/autolink/api-dump-unreviewed.txt
@@ -0,0 +1,5 @@
+f:org.jetbrains.jewel.markdown.extensions.autolink.AutolinkProcessorExtension
+- org.jetbrains.jewel.markdown.extensions.MarkdownProcessorExtension
+- sf:$stable:I
+- sf:INSTANCE:org.jetbrains.jewel.markdown.extensions.autolink.AutolinkProcessorExtension
+- getParserExtension():org.commonmark.parser.Parser$ParserExtension
diff --git a/platform/jewel/markdown/extension/autolink/api/autolink.api b/platform/jewel/markdown/extensions/autolink/api/autolink.api
similarity index 71%
rename from platform/jewel/markdown/extension/autolink/api/autolink.api
rename to platform/jewel/markdown/extensions/autolink/api/autolink.api
index 84a16300f97a..75094a7f4e10 100644
--- a/platform/jewel/markdown/extension/autolink/api/autolink.api
+++ b/platform/jewel/markdown/extensions/autolink/api/autolink.api
@@ -1,6 +1,6 @@
-public final class org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtension : org/jetbrains/jewel/markdown/extensions/MarkdownProcessorExtension {
+public final class org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtension : org/jetbrains/jewel/markdown/extensions/MarkdownProcessorExtension {
public static final field $stable I
- public static final field INSTANCE Lorg/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtension;
+ public static final field INSTANCE Lorg/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtension;
public fun getBlockProcessorExtension ()Lorg/jetbrains/jewel/markdown/extensions/MarkdownBlockProcessorExtension;
public fun getDelimitedInlineProcessorExtension ()Lorg/jetbrains/jewel/markdown/extensions/MarkdownDelimitedInlineProcessorExtension;
public fun getParserExtension ()Lorg/commonmark/parser/Parser$ParserExtension;
diff --git a/platform/jewel/markdown/extension/autolink/build.gradle.kts b/platform/jewel/markdown/extensions/autolink/build.gradle.kts
similarity index 100%
rename from platform/jewel/markdown/extension/autolink/build.gradle.kts
rename to platform/jewel/markdown/extensions/autolink/build.gradle.kts
diff --git a/platform/jewel/markdown/extension/autolink/exposed-third-party-api.txt b/platform/jewel/markdown/extensions/autolink/exposed-third-party-api.txt
similarity index 100%
rename from platform/jewel/markdown/extension/autolink/exposed-third-party-api.txt
rename to platform/jewel/markdown/extensions/autolink/exposed-third-party-api.txt
diff --git a/platform/jewel/markdown/extension/autolink/intellij.platform.jewel.markdown.extension.autolink.iml b/platform/jewel/markdown/extensions/autolink/intellij.platform.jewel.markdown.extensions.autolink.iml
similarity index 100%
rename from platform/jewel/markdown/extension/autolink/intellij.platform.jewel.markdown.extension.autolink.iml
rename to platform/jewel/markdown/extensions/autolink/intellij.platform.jewel.markdown.extensions.autolink.iml
diff --git a/platform/jewel/markdown/extension/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtension.kt b/platform/jewel/markdown/extensions/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtension.kt
similarity index 86%
rename from platform/jewel/markdown/extension/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtension.kt
rename to platform/jewel/markdown/extensions/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtension.kt
index 1d786e12711a..afc695e9ac9a 100644
--- a/platform/jewel/markdown/extension/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtension.kt
+++ b/platform/jewel/markdown/extensions/autolink/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtension.kt
@@ -1,4 +1,4 @@
-package org.jetbrains.jewel.markdown.extension.autolink
+package org.jetbrains.jewel.markdown.extensions.autolink
import org.commonmark.ext.autolink.AutolinkExtension
import org.commonmark.parser.Parser.ParserExtension
diff --git a/platform/jewel/markdown/extension/autolink/src/main/resources/intellij.platform.jewel.markdown.extension.autolink.xml b/platform/jewel/markdown/extensions/autolink/src/main/resources/intellij.platform.jewel.markdown.extensions.autolink.xml
similarity index 100%
rename from platform/jewel/markdown/extension/autolink/src/main/resources/intellij.platform.jewel.markdown.extension.autolink.xml
rename to platform/jewel/markdown/extensions/autolink/src/main/resources/intellij.platform.jewel.markdown.extensions.autolink.xml
diff --git a/platform/jewel/markdown/extension/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtensionTest.kt b/platform/jewel/markdown/extensions/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtensionTest.kt
similarity index 93%
rename from platform/jewel/markdown/extension/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtensionTest.kt
rename to platform/jewel/markdown/extensions/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtensionTest.kt
index 3bc7117eea71..bf0e95169eee 100644
--- a/platform/jewel/markdown/extension/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extension/autolink/AutolinkProcessorExtensionTest.kt
+++ b/platform/jewel/markdown/extensions/autolink/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/autolink/AutolinkProcessorExtensionTest.kt
@@ -1,4 +1,4 @@
-package org.jetbrains.jewel.markdown.extension.autolink
+package org.jetbrains.jewel.markdown.extensions.autolink
import org.jetbrains.jewel.markdown.InlineMarkdown
import org.jetbrains.jewel.markdown.MarkdownBlock
diff --git a/platform/jewel/markdown/extension/gfm-alerts/BUILD.bazel b/platform/jewel/markdown/extensions/gfm-alerts/BUILD.bazel
similarity index 79%
rename from platform/jewel/markdown/extension/gfm-alerts/BUILD.bazel
rename to platform/jewel/markdown/extensions/gfm-alerts/BUILD.bazel
index f6460bc504f7..0872f192af44 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/BUILD.bazel
+++ b/platform/jewel/markdown/extensions/gfm-alerts/BUILD.bazel
@@ -1,4 +1,4 @@
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmAlerts` start
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmAlerts` start
load("//build:compiler-options.bzl", "create_kotlinc_options")
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources", "jvm_test")
@@ -14,14 +14,14 @@ create_kotlinc_options(
)
jvm_resources(
- name = "jewel-markdown-extension-gfmAlerts_resources",
+ name = "jewel-markdown-extensions-gfmAlerts_resources",
files = glob(["src/main/resources/**/*"]),
strip_prefix = "src/main/resources"
)
jvm_library(
- name = "jewel-markdown-extension-gfmAlerts",
- module_name = "intellij.platform.jewel.markdown.extension.gfmAlerts",
+ name = "jewel-markdown-extensions-gfmAlerts",
+ module_name = "intellij.platform.jewel.markdown.extensions.gfmAlerts",
visibility = ["//visibility:public"],
srcs = glob(["src/main/kotlin/**/*.kt", "src/main/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
@@ -34,15 +34,15 @@ jvm_library(
"//platform/jewel/foundation",
"//libraries/compose-foundation-desktop",
],
- runtime_deps = [":jewel-markdown-extension-gfmAlerts_resources"],
+ runtime_deps = [":jewel-markdown-extensions-gfmAlerts_resources"],
plugins = ["@lib//:compose-plugin"]
)
jvm_test(
- name = "jewel-markdown-extension-gfmAlerts_test",
+ name = "jewel-markdown-extensions-gfmAlerts_test",
srcs = glob(["src/test/kotlin/**/*.kt", "src/test/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
- associates = [":jewel-markdown-extension-gfmAlerts"],
+ associates = [":jewel-markdown-extensions-gfmAlerts"],
deps = [
"@lib//:kotlin-stdlib",
"@lib//:kotlinx-coroutines-core",
@@ -56,7 +56,7 @@ jvm_test(
"//libraries/compose-foundation-desktop",
"//libraries/compose-foundation-desktop-junit",
],
- runtime_deps = [":jewel-markdown-extension-gfmAlerts_resources"],
+ runtime_deps = [":jewel-markdown-extensions-gfmAlerts_resources"],
plugins = ["@lib//:compose-plugin"]
)
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmAlerts` end
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmAlerts` end
\ No newline at end of file
diff --git a/platform/jewel/markdown/extension/gfm-alerts/api-dump-unreviewed.txt b/platform/jewel/markdown/extensions/gfm-alerts/api-dump-unreviewed.txt
similarity index 84%
rename from platform/jewel/markdown/extension/gfm-alerts/api-dump-unreviewed.txt
rename to platform/jewel/markdown/extensions/gfm-alerts/api-dump-unreviewed.txt
index dfbda408edf2..3ca8446b1619 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/api-dump-unreviewed.txt
+++ b/platform/jewel/markdown/extensions/gfm-alerts/api-dump-unreviewed.txt
@@ -1,56 +1,3 @@
-org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- org.jetbrains.jewel.markdown.MarkdownBlock$CustomBlock
-- a:getContent():java.util.List
-f:org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Caution
-- org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- sf:$stable:I
-- (java.util.List):V
-- f:component1():java.util.List
-- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Caution
-- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Caution,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Caution
-- equals(java.lang.Object):Z
-- getContent():java.util.List
-- hashCode():I
-f:org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Important
-- org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- sf:$stable:I
-- (java.util.List):V
-- f:component1():java.util.List
-- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Important
-- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Important,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Important
-- equals(java.lang.Object):Z
-- getContent():java.util.List
-- hashCode():I
-f:org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Note
-- org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- sf:$stable:I
-- (java.util.List):V
-- f:component1():java.util.List
-- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Note
-- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Note,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Note
-- equals(java.lang.Object):Z
-- getContent():java.util.List
-- hashCode():I
-f:org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Tip
-- org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- sf:$stable:I
-- (java.util.List):V
-- f:component1():java.util.List
-- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Tip
-- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Tip,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Tip
-- equals(java.lang.Object):Z
-- getContent():java.util.List
-- hashCode():I
-f:org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Warning
-- org.jetbrains.jewel.markdown.extensions.github.alerts.Alert
-- sf:$stable:I
-- (java.util.List):V
-- f:component1():java.util.List
-- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Warning
-- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Warning,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.Alert$Warning
-- equals(java.lang.Object):Z
-- getContent():java.util.List
-- hashCode():I
f:org.jetbrains.jewel.markdown.extensions.github.alerts.AlertStyling
- sf:$stable:I
- sf:Companion:org.jetbrains.jewel.markdown.extensions.github.alerts.AlertStyling$Companion
@@ -89,6 +36,59 @@ f:org.jetbrains.jewel.markdown.extensions.github.alerts.CautionAlertStyling
- getTitleTextStyle():androidx.compose.ui.text.TextStyle
- hashCode():I
f:org.jetbrains.jewel.markdown.extensions.github.alerts.CautionAlertStyling$Companion
+org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- org.jetbrains.jewel.markdown.MarkdownBlock$CustomBlock
+- a:getContent():java.util.List
+f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Caution
+- org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- sf:$stable:I
+- (java.util.List):V
+- f:component1():java.util.List
+- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Caution
+- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Caution,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Caution
+- equals(java.lang.Object):Z
+- getContent():java.util.List
+- hashCode():I
+f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Important
+- org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- sf:$stable:I
+- (java.util.List):V
+- f:component1():java.util.List
+- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Important
+- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Important,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Important
+- equals(java.lang.Object):Z
+- getContent():java.util.List
+- hashCode():I
+f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Note
+- org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- sf:$stable:I
+- (java.util.List):V
+- f:component1():java.util.List
+- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Note
+- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Note,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Note
+- equals(java.lang.Object):Z
+- getContent():java.util.List
+- hashCode():I
+f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Tip
+- org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- sf:$stable:I
+- (java.util.List):V
+- f:component1():java.util.List
+- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Tip
+- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Tip,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Tip
+- equals(java.lang.Object):Z
+- getContent():java.util.List
+- hashCode():I
+f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Warning
+- org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert
+- sf:$stable:I
+- (java.util.List):V
+- f:component1():java.util.List
+- f:copy(java.util.List):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Warning
+- bs:copy$default(org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Warning,java.util.List,I,java.lang.Object):org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert$Warning
+- equals(java.lang.Object):Z
+- getContent():java.util.List
+- hashCode():I
f:org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlertBlockRenderer
- org.jetbrains.jewel.markdown.extensions.MarkdownBlockRendererExtension
- sf:$stable:I
diff --git a/platform/jewel/markdown/extension/gfm-alerts/api/gfm-alerts.api b/platform/jewel/markdown/extensions/gfm-alerts/api/gfm-alerts.api
similarity index 89%
rename from platform/jewel/markdown/extension/gfm-alerts/api/gfm-alerts.api
rename to platform/jewel/markdown/extensions/gfm-alerts/api/gfm-alerts.api
index bb2d408893bd..e62c0de0d6aa 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/api/gfm-alerts.api
+++ b/platform/jewel/markdown/extensions/gfm-alerts/api/gfm-alerts.api
@@ -1,67 +1,3 @@
-public abstract interface class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert : org/jetbrains/jewel/markdown/MarkdownBlock$CustomBlock {
- public abstract fun getContent ()Ljava/util/List;
-}
-
-public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Caution : org/jetbrains/jewel/markdown/extensions/github/alerts/Alert {
- public static final field $stable I
- public fun (Ljava/util/List;)V
- public final fun component1 ()Ljava/util/List;
- public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Caution;
- public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Caution;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Caution;
- public fun equals (Ljava/lang/Object;)Z
- public fun getContent ()Ljava/util/List;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Important : org/jetbrains/jewel/markdown/extensions/github/alerts/Alert {
- public static final field $stable I
- public fun (Ljava/util/List;)V
- public final fun component1 ()Ljava/util/List;
- public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Important;
- public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Important;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Important;
- public fun equals (Ljava/lang/Object;)Z
- public fun getContent ()Ljava/util/List;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Note : org/jetbrains/jewel/markdown/extensions/github/alerts/Alert {
- public static final field $stable I
- public fun (Ljava/util/List;)V
- public final fun component1 ()Ljava/util/List;
- public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Note;
- public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Note;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Note;
- public fun equals (Ljava/lang/Object;)Z
- public fun getContent ()Ljava/util/List;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Tip : org/jetbrains/jewel/markdown/extensions/github/alerts/Alert {
- public static final field $stable I
- public fun (Ljava/util/List;)V
- public final fun component1 ()Ljava/util/List;
- public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Tip;
- public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Tip;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Tip;
- public fun equals (Ljava/lang/Object;)Z
- public fun getContent ()Ljava/util/List;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
-public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Warning : org/jetbrains/jewel/markdown/extensions/github/alerts/Alert {
- public static final field $stable I
- public fun (Ljava/util/List;)V
- public final fun component1 ()Ljava/util/List;
- public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Warning;
- public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Warning;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/Alert$Warning;
- public fun equals (Ljava/lang/Object;)Z
- public fun getContent ()Ljava/util/List;
- public fun hashCode ()I
- public fun toString ()Ljava/lang/String;
-}
-
public final class org/jetbrains/jewel/markdown/extensions/github/alerts/AlertStyling {
public static final field $stable I
public static final field Companion Lorg/jetbrains/jewel/markdown/extensions/github/alerts/AlertStyling$Companion;
@@ -112,6 +48,70 @@ public final class org/jetbrains/jewel/markdown/extensions/github/alerts/Caution
public final class org/jetbrains/jewel/markdown/extensions/github/alerts/CautionAlertStyling$Companion {
}
+public abstract interface class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert : org/jetbrains/jewel/markdown/MarkdownBlock$CustomBlock {
+ public abstract fun getContent ()Ljava/util/List;
+}
+
+public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Caution : org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert {
+ public static final field $stable I
+ public fun (Ljava/util/List;)V
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Caution;
+ public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Caution;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Caution;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getContent ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Important : org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert {
+ public static final field $stable I
+ public fun (Ljava/util/List;)V
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Important;
+ public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Important;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Important;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getContent ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Note : org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert {
+ public static final field $stable I
+ public fun (Ljava/util/List;)V
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Note;
+ public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Note;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Note;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getContent ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Tip : org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert {
+ public static final field $stable I
+ public fun (Ljava/util/List;)V
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Tip;
+ public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Tip;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Tip;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getContent ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
+public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Warning : org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert {
+ public static final field $stable I
+ public fun (Ljava/util/List;)V
+ public final fun component1 ()Ljava/util/List;
+ public final fun copy (Ljava/util/List;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Warning;
+ public static synthetic fun copy$default (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Warning;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert$Warning;
+ public fun equals (Ljava/lang/Object;)Z
+ public fun getContent ()Ljava/util/List;
+ public fun hashCode ()I
+ public fun toString ()Ljava/lang/String;
+}
+
public final class org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer : org/jetbrains/jewel/markdown/extensions/MarkdownBlockRendererExtension {
public static final field $stable I
public fun (Lorg/jetbrains/jewel/markdown/extensions/github/alerts/AlertStyling;Lorg/jetbrains/jewel/markdown/rendering/MarkdownStyling;)V
diff --git a/platform/jewel/markdown/extension/gfm-alerts/build.gradle.kts b/platform/jewel/markdown/extensions/gfm-alerts/build.gradle.kts
similarity index 79%
rename from platform/jewel/markdown/extension/gfm-alerts/build.gradle.kts
rename to platform/jewel/markdown/extensions/gfm-alerts/build.gradle.kts
index 802a08600d14..74d27bf5c025 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/build.gradle.kts
+++ b/platform/jewel/markdown/extensions/gfm-alerts/build.gradle.kts
@@ -12,9 +12,7 @@ dependencies {
testImplementation(compose.desktop.uiTestJUnit4)
}
-publicApiValidation {
- excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.alerts.*")
-}
+publicApiValidation { excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.alerts.*") }
publishing.publications.named("main") {
val ijpTarget = project.property("ijp.target") as String
diff --git a/platform/jewel/markdown/extension/gfm-alerts/exposed-third-party-api.txt b/platform/jewel/markdown/extensions/gfm-alerts/exposed-third-party-api.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/exposed-third-party-api.txt
rename to platform/jewel/markdown/extensions/gfm-alerts/exposed-third-party-api.txt
diff --git a/platform/jewel/markdown/extension/gfm-alerts/intellij.platform.jewel.markdown.extension.gfmAlerts.iml b/platform/jewel/markdown/extensions/gfm-alerts/intellij.platform.jewel.markdown.extensions.gfmAlerts.iml
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/intellij.platform.jewel.markdown.extension.gfmAlerts.iml
rename to platform/jewel/markdown/extensions/gfm-alerts/intellij.platform.jewel.markdown.extensions.gfmAlerts.iml
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/Alert.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert.kt
similarity index 73%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/Alert.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert.kt
index bf77b6d5ec70..4ee9d35eeff9 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/Alert.kt
+++ b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlert.kt
@@ -2,16 +2,16 @@ package org.jetbrains.jewel.markdown.extensions.github.alerts
import org.jetbrains.jewel.markdown.MarkdownBlock
-public sealed interface Alert : MarkdownBlock.CustomBlock {
+public sealed interface GitHubAlert : MarkdownBlock.CustomBlock {
public val content: List
- public data class Note(override val content: List) : Alert
+ public data class Note(override val content: List) : GitHubAlert
- public data class Tip(override val content: List) : Alert
+ public data class Tip(override val content: List) : GitHubAlert
- public data class Important(override val content: List) : Alert
+ public data class Important(override val content: List) : GitHubAlert
- public data class Warning(override val content: List) : Alert
+ public data class Warning(override val content: List) : GitHubAlert
- public data class Caution(override val content: List) : Alert
+ public data class Caution(override val content: List) : GitHubAlert
}
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt
similarity index 91%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt
index 0a92a1a9a622..94fd290dcd54 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt
+++ b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockRenderer.kt
@@ -18,11 +18,11 @@ import androidx.compose.ui.unit.dp
import org.jetbrains.jewel.foundation.theme.LocalContentColor
import org.jetbrains.jewel.markdown.MarkdownBlock.CustomBlock
import org.jetbrains.jewel.markdown.extensions.MarkdownBlockRendererExtension
-import org.jetbrains.jewel.markdown.extensions.github.alerts.Alert.Caution
-import org.jetbrains.jewel.markdown.extensions.github.alerts.Alert.Important
-import org.jetbrains.jewel.markdown.extensions.github.alerts.Alert.Note
-import org.jetbrains.jewel.markdown.extensions.github.alerts.Alert.Tip
-import org.jetbrains.jewel.markdown.extensions.github.alerts.Alert.Warning
+import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert.Caution
+import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert.Important
+import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert.Note
+import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert.Tip
+import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlert.Warning
import org.jetbrains.jewel.markdown.rendering.InlineMarkdownRenderer
import org.jetbrains.jewel.markdown.rendering.MarkdownBlockRenderer
import org.jetbrains.jewel.markdown.rendering.MarkdownStyling
@@ -31,7 +31,7 @@ import org.jetbrains.jewel.ui.component.Text
public class GitHubAlertBlockRenderer(private val styling: AlertStyling, private val rootStyling: MarkdownStyling) :
MarkdownBlockRendererExtension {
- override fun canRender(block: CustomBlock): Boolean = block is Alert
+ override fun canRender(block: CustomBlock): Boolean = block is GitHubAlert
@Composable
override fun render(
@@ -46,7 +46,7 @@ public class GitHubAlertBlockRenderer(private val styling: AlertStyling, private
// Smart cast doesn't work in this case, and then the detection for redundant suppression is
// also borked
@Suppress("MoveVariableDeclarationIntoWhen", "RedundantSuppression") // ktfmt: break line
- val alert = block as? Alert
+ val alert = block as? GitHubAlert
when (alert) {
is Caution -> Alert(alert, modifier, styling.caution, enabled, blockRenderer, onUrlClick, onTextClick)
@@ -60,7 +60,7 @@ public class GitHubAlertBlockRenderer(private val styling: AlertStyling, private
@Composable
private fun Alert(
- block: Alert,
+ block: GitHubAlert,
modifier: Modifier,
styling: BaseAlertStyling,
enabled: Boolean,
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertIcons.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertIcons.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertIcons.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertIcons.kt
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt
similarity index 95%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt
index 225c9ebf6d1b..682beef92538 100644
--- a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt
+++ b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertProcessorExtension.kt
@@ -46,11 +46,11 @@ public object GitHubAlertProcessorExtension : MarkdownProcessorExtension {
if (children.isEmpty()) return null
return when (block) {
- is Caution -> Alert.Caution(children)
- is Important -> Alert.Important(children)
- is Note -> Alert.Note(children)
- is Tip -> Alert.Tip(children)
- is Warning -> Alert.Warning(children)
+ is Caution -> GitHubAlert.Caution(children)
+ is Important -> GitHubAlert.Important(children)
+ is Note -> GitHubAlert.Note(children)
+ is Tip -> GitHubAlert.Tip(children)
+ is Warning -> GitHubAlert.Warning(children)
else -> error("Unsupported custom block of type ${block.javaClass.name}")
}
}
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertStyling.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertStyling.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertStyling.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertStyling.kt
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icon-robots.txt b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icon-robots.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icon-robots.txt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icon-robots.txt
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-caution.svg b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-caution.svg
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-caution.svg
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-caution.svg
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-important.svg b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-important.svg
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-important.svg
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-important.svg
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-note.svg b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-note.svg
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-note.svg
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-note.svg
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-tip.svg b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-tip.svg
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-tip.svg
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-tip.svg
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-warning.svg b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-warning.svg
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-warning.svg
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/icons/markdown/extensions/github/alerts/alert-warning.svg
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/main/resources/intellij.platform.jewel.markdown.extension.gfmAlerts.xml b/platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmAlerts.xml
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/main/resources/intellij.platform.jewel.markdown.extension.gfmAlerts.xml
rename to platform/jewel/markdown/extensions/gfm-alerts/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmAlerts.xml
diff --git a/platform/jewel/markdown/extension/gfm-alerts/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockExtensionTest.kt b/platform/jewel/markdown/extensions/gfm-alerts/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockExtensionTest.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-alerts/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockExtensionTest.kt
rename to platform/jewel/markdown/extensions/gfm-alerts/src/test/kotlin/org/jetbrains/jewel/markdown/extensions/github/alerts/GitHubAlertBlockExtensionTest.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/BUILD.bazel b/platform/jewel/markdown/extensions/gfm-strikethrough/BUILD.bazel
similarity index 72%
rename from platform/jewel/markdown/extension/gfm-strikethrough/BUILD.bazel
rename to platform/jewel/markdown/extensions/gfm-strikethrough/BUILD.bazel
index 91acb650f832..cfb71b6d0074 100644
--- a/platform/jewel/markdown/extension/gfm-strikethrough/BUILD.bazel
+++ b/platform/jewel/markdown/extensions/gfm-strikethrough/BUILD.bazel
@@ -1,4 +1,4 @@
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmStrikethrough` start
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmStrikethrough` start
load("//build:compiler-options.bzl", "create_kotlinc_options")
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources")
@@ -14,14 +14,14 @@ create_kotlinc_options(
)
jvm_resources(
- name = "jewel-markdown-extension-gfmStrikethrough_resources",
+ name = "jewel-markdown-extensions-gfmStrikethrough_resources",
files = glob(["src/main/resources/**/*"]),
strip_prefix = "src/main/resources"
)
jvm_library(
- name = "jewel-markdown-extension-gfmStrikethrough",
- module_name = "intellij.platform.jewel.markdown.extension.gfmStrikethrough",
+ name = "jewel-markdown-extensions-gfmStrikethrough",
+ module_name = "intellij.platform.jewel.markdown.extensions.gfmStrikethrough",
visibility = ["//visibility:public"],
srcs = glob(["src/main/kotlin/**/*.kt", "src/main/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
@@ -33,9 +33,9 @@ jvm_library(
"//platform/jewel/ui",
"//platform/jewel/foundation",
"//libraries/compose-foundation-desktop",
- "@lib//:platform-jewel-markdown-extension-gfm_strikethrough-commonmark-ext-gfm-strikethrough",
+ "@lib//:platform-jewel-markdown-extensions-gfm_strikethrough-commonmark-ext-gfm-strikethrough",
],
- runtime_deps = [":jewel-markdown-extension-gfmStrikethrough_resources"],
+ runtime_deps = [":jewel-markdown-extensions-gfmStrikethrough_resources"],
plugins = ["@lib//:compose-plugin"]
)
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmStrikethrough` end
\ No newline at end of file
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmStrikethrough` end
\ No newline at end of file
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/README.md b/platform/jewel/markdown/extensions/gfm-strikethrough/README.md
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/README.md
rename to platform/jewel/markdown/extensions/gfm-strikethrough/README.md
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/api-dump-unreviewed.txt b/platform/jewel/markdown/extensions/gfm-strikethrough/api-dump-unreviewed.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/api-dump-unreviewed.txt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/api-dump-unreviewed.txt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/api/gfm-strikethrough.api b/platform/jewel/markdown/extensions/gfm-strikethrough/api/gfm-strikethrough.api
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/api/gfm-strikethrough.api
rename to platform/jewel/markdown/extensions/gfm-strikethrough/api/gfm-strikethrough.api
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/build.gradle.kts b/platform/jewel/markdown/extensions/gfm-strikethrough/build.gradle.kts
similarity index 80%
rename from platform/jewel/markdown/extension/gfm-strikethrough/build.gradle.kts
rename to platform/jewel/markdown/extensions/gfm-strikethrough/build.gradle.kts
index a35e022e7311..6581f4c2ebf7 100644
--- a/platform/jewel/markdown/extension/gfm-strikethrough/build.gradle.kts
+++ b/platform/jewel/markdown/extensions/gfm-strikethrough/build.gradle.kts
@@ -17,6 +17,4 @@ publishing.publications.named("main") {
artifactId = "jewel-markdown-extension-${project.name}-$ijpTarget"
}
-publicApiValidation {
- excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.strikethrough.*")
-}
+publicApiValidation { excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.strikethrough.*") }
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/exposed-third-party-api.txt b/platform/jewel/markdown/extensions/gfm-strikethrough/exposed-third-party-api.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/exposed-third-party-api.txt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/exposed-third-party-api.txt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/intellij.platform.jewel.markdown.extension.gfmStrikethrough.iml b/platform/jewel/markdown/extensions/gfm-strikethrough/intellij.platform.jewel.markdown.extensions.gfmStrikethrough.iml
similarity index 88%
rename from platform/jewel/markdown/extension/gfm-strikethrough/intellij.platform.jewel.markdown.extension.gfmStrikethrough.iml
rename to platform/jewel/markdown/extensions/gfm-strikethrough/intellij.platform.jewel.markdown.extensions.gfmStrikethrough.iml
index 5a50032e5072..4d3a788c62bd 100644
--- a/platform/jewel/markdown/extension/gfm-strikethrough/intellij.platform.jewel.markdown.extension.gfmStrikethrough.iml
+++ b/platform/jewel/markdown/extensions/gfm-strikethrough/intellij.platform.jewel.markdown.extensions.gfmStrikethrough.iml
@@ -45,19 +45,17 @@
7385cb637f04dc4cbda4ddca9c2fcd2af7ac536a50e4c8d2c77f4748bb14bf41
-
- 679338e0b7fc15c02d275d598654b01a149893bc28a87992e90123c8d06af25b
-
+
+
+
-
-
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineProcessorExtension.kt b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineProcessorExtension.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineProcessorExtension.kt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineProcessorExtension.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineRendererExtension.kt b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineRendererExtension.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineRendererExtension.kt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughInlineRendererExtension.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughNode.kt b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughNode.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughNode.kt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughNode.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughProcessorExtension.kt b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughProcessorExtension.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughProcessorExtension.kt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughProcessorExtension.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughRendererExtension.kt b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughRendererExtension.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughRendererExtension.kt
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/strikethrough/GitHubStrikethroughRendererExtension.kt
diff --git a/platform/jewel/markdown/extension/gfm-strikethrough/src/main/resources/intellij.platform.jewel.markdown.extension.gfmStrikethrough.xml b/platform/jewel/markdown/extensions/gfm-strikethrough/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmStrikethrough.xml
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-strikethrough/src/main/resources/intellij.platform.jewel.markdown.extension.gfmStrikethrough.xml
rename to platform/jewel/markdown/extensions/gfm-strikethrough/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmStrikethrough.xml
diff --git a/platform/jewel/markdown/extension/gfm-tables/BUILD.bazel b/platform/jewel/markdown/extensions/gfm-tables/BUILD.bazel
similarity index 74%
rename from platform/jewel/markdown/extension/gfm-tables/BUILD.bazel
rename to platform/jewel/markdown/extensions/gfm-tables/BUILD.bazel
index 9d2e8fa659da..9f8185a9a36e 100644
--- a/platform/jewel/markdown/extension/gfm-tables/BUILD.bazel
+++ b/platform/jewel/markdown/extensions/gfm-tables/BUILD.bazel
@@ -1,4 +1,4 @@
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmTables` start
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmTables` start
load("//build:compiler-options.bzl", "create_kotlinc_options")
load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources")
@@ -14,14 +14,14 @@ create_kotlinc_options(
)
jvm_resources(
- name = "jewel-markdown-extension-gfmTables_resources",
+ name = "jewel-markdown-extensions-gfmTables_resources",
files = glob(["src/main/resources/**/*"]),
strip_prefix = "src/main/resources"
)
jvm_library(
- name = "jewel-markdown-extension-gfmTables",
- module_name = "intellij.platform.jewel.markdown.extension.gfmTables",
+ name = "jewel-markdown-extensions-gfmTables",
+ module_name = "intellij.platform.jewel.markdown.extensions.gfmTables",
visibility = ["//visibility:public"],
srcs = glob(["src/main/kotlin/**/*.kt", "src/main/kotlin/**/*.java"], allow_empty = True),
kotlinc_opts = ":custom",
@@ -33,9 +33,9 @@ jvm_library(
"//platform/jewel/ui",
"//platform/jewel/foundation",
"//libraries/compose-foundation-desktop",
- "@lib//:platform-jewel-markdown-extension-gfm_tables-commonmark-ext-gfm-tables",
+ "@lib//:platform-jewel-markdown-extensions-gfm_tables-commonmark-ext-gfm-tables",
],
- runtime_deps = [":jewel-markdown-extension-gfmTables_resources"],
+ runtime_deps = [":jewel-markdown-extensions-gfmTables_resources"],
plugins = ["@lib//:compose-plugin"]
)
-### auto-generated section `build intellij.platform.jewel.markdown.extension.gfmTables` end
\ No newline at end of file
+### auto-generated section `build intellij.platform.jewel.markdown.extensions.gfmTables` end
\ No newline at end of file
diff --git a/platform/jewel/markdown/extension/gfm-tables/README.md b/platform/jewel/markdown/extensions/gfm-tables/README.md
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/README.md
rename to platform/jewel/markdown/extensions/gfm-tables/README.md
diff --git a/platform/jewel/markdown/extension/gfm-tables/api-dump-unreviewed.txt b/platform/jewel/markdown/extensions/gfm-tables/api-dump-unreviewed.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/api-dump-unreviewed.txt
rename to platform/jewel/markdown/extensions/gfm-tables/api-dump-unreviewed.txt
diff --git a/platform/jewel/markdown/extension/gfm-tables/api/gfm-tables.api b/platform/jewel/markdown/extensions/gfm-tables/api/gfm-tables.api
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/api/gfm-tables.api
rename to platform/jewel/markdown/extensions/gfm-tables/api/gfm-tables.api
diff --git a/platform/jewel/markdown/extension/gfm-tables/build.gradle.kts b/platform/jewel/markdown/extensions/gfm-tables/build.gradle.kts
similarity index 85%
rename from platform/jewel/markdown/extension/gfm-tables/build.gradle.kts
rename to platform/jewel/markdown/extensions/gfm-tables/build.gradle.kts
index b73c9d355ad4..ac23a1f674b6 100644
--- a/platform/jewel/markdown/extension/gfm-tables/build.gradle.kts
+++ b/platform/jewel/markdown/extensions/gfm-tables/build.gradle.kts
@@ -15,9 +15,7 @@ dependencies {
testImplementation(compose.desktop.uiTestJUnit4)
}
-publicApiValidation {
- excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.tables.*")
-}
+publicApiValidation { excludedClassRegexes = setOf("org.jetbrains.jewel.markdown.extensions.github.tables.*") }
publishing.publications.named("main") {
val ijpTarget = project.property("ijp.target") as String
diff --git a/platform/jewel/markdown/extension/gfm-tables/exposed-third-party-api.txt b/platform/jewel/markdown/extensions/gfm-tables/exposed-third-party-api.txt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/exposed-third-party-api.txt
rename to platform/jewel/markdown/extensions/gfm-tables/exposed-third-party-api.txt
diff --git a/platform/jewel/markdown/extension/gfm-tables/intellij.platform.jewel.markdown.extension.gfmTables.iml b/platform/jewel/markdown/extensions/gfm-tables/intellij.platform.jewel.markdown.extensions.gfmTables.iml
similarity index 94%
rename from platform/jewel/markdown/extension/gfm-tables/intellij.platform.jewel.markdown.extension.gfmTables.iml
rename to platform/jewel/markdown/extensions/gfm-tables/intellij.platform.jewel.markdown.extensions.gfmTables.iml
index ad9e37a31d79..eaade35f3009 100644
--- a/platform/jewel/markdown/extension/gfm-tables/intellij.platform.jewel.markdown.extension.gfmTables.iml
+++ b/platform/jewel/markdown/extensions/gfm-tables/intellij.platform.jewel.markdown.extensions.gfmTables.iml
@@ -14,7 +14,9 @@
- $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compose-compiler-plugin/2.1.10/kotlin-compose-compiler-plugin-2.1.10.jar
+
+ $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compose-compiler-plugin/2.1.10/kotlin-compose-compiler-plugin-2.1.10.jar
+
diff --git a/platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableBlockRenderer.kt b/platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableBlockRenderer.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableBlockRenderer.kt
rename to platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableBlockRenderer.kt
diff --git a/platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableProcessorExtension.kt b/platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableProcessorExtension.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableProcessorExtension.kt
rename to platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableProcessorExtension.kt
diff --git a/platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableStyling.kt b/platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableStyling.kt
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableStyling.kt
rename to platform/jewel/markdown/extensions/gfm-tables/src/main/kotlin/org/jetbrains/jewel/markdown/extensions/github/tables/GitHubTableStyling.kt
diff --git a/platform/jewel/markdown/extension/gfm-tables/src/main/resources/intellij.platform.jewel.markdown.extension.gfmTables.xml b/platform/jewel/markdown/extensions/gfm-tables/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmTables.xml
similarity index 100%
rename from platform/jewel/markdown/extension/gfm-tables/src/main/resources/intellij.platform.jewel.markdown.extension.gfmTables.xml
rename to platform/jewel/markdown/extensions/gfm-tables/src/main/resources/intellij.platform.jewel.markdown.extensions.gfmTables.xml
diff --git a/platform/jewel/markdown/ide-laf-bridge-styling/BUILD.bazel b/platform/jewel/markdown/ide-laf-bridge-styling/BUILD.bazel
index 08f24bc314aa..b79574eddee1 100644
--- a/platform/jewel/markdown/ide-laf-bridge-styling/BUILD.bazel
+++ b/platform/jewel/markdown/ide-laf-bridge-styling/BUILD.bazel
@@ -33,8 +33,8 @@ jvm_library(
"//platform/jewel/ui",
"//platform/jewel/foundation",
"//platform/jewel/ide-laf-bridge:ideLafBridge",
- "//platform/jewel/markdown/extension/gfm-alerts:jewel-markdown-extension-gfmAlerts",
- "//platform/jewel/markdown/extension/gfm-tables:jewel-markdown-extension-gfmTables",
+ "//platform/jewel/markdown/extensions/gfm-alerts:jewel-markdown-extensions-gfmAlerts",
+ "//platform/jewel/markdown/extensions/gfm-tables:jewel-markdown-extensions-gfmTables",
"//platform/platform-api:ide",
"//platform/ide-core",
"//platform/ide-core-impl",
diff --git a/platform/jewel/markdown/ide-laf-bridge-styling/build.gradle.kts b/platform/jewel/markdown/ide-laf-bridge-styling/build.gradle.kts
index 0763451712b5..e382d934b02b 100644
--- a/platform/jewel/markdown/ide-laf-bridge-styling/build.gradle.kts
+++ b/platform/jewel/markdown/ide-laf-bridge-styling/build.gradle.kts
@@ -34,12 +34,10 @@ repositories {
dependencies {
api(projects.markdown.core)
api(projects.ideLafBridge)
- compileOnly(projects.markdown.extension.gfmAlerts)
- compileOnly(projects.markdown.extension.gfmTables)
+ compileOnly(projects.markdown.extensions.gfmAlerts)
+ compileOnly(projects.markdown.extensions.gfmTables)
- intellijPlatform {
- intellijIdeaCommunity(libs.versions.idea)
- }
+ intellijPlatform { intellijIdeaCommunity(libs.versions.idea) }
testImplementation(compose.desktop.uiTestJUnit4)
}
diff --git a/platform/jewel/markdown/ide-laf-bridge-styling/intellij.platform.jewel.markdown.ideLafBridgeStyling.iml b/platform/jewel/markdown/ide-laf-bridge-styling/intellij.platform.jewel.markdown.ideLafBridgeStyling.iml
index 3046c81a4386..01c824349cd8 100644
--- a/platform/jewel/markdown/ide-laf-bridge-styling/intellij.platform.jewel.markdown.ideLafBridgeStyling.iml
+++ b/platform/jewel/markdown/ide-laf-bridge-styling/intellij.platform.jewel.markdown.ideLafBridgeStyling.iml
@@ -38,8 +38,8 @@
-
-
+
+
diff --git a/platform/jewel/markdown/ide-laf-bridge-styling/src/main/resources/intellij.platform.jewel.markdown.ideLafBridgeStyling.xml b/platform/jewel/markdown/ide-laf-bridge-styling/src/main/resources/intellij.platform.jewel.markdown.ideLafBridgeStyling.xml
index 83325fc79468..d10365c25bbb 100644
--- a/platform/jewel/markdown/ide-laf-bridge-styling/src/main/resources/intellij.platform.jewel.markdown.ideLafBridgeStyling.xml
+++ b/platform/jewel/markdown/ide-laf-bridge-styling/src/main/resources/intellij.platform.jewel.markdown.ideLafBridgeStyling.xml
@@ -4,7 +4,7 @@
-
-
+
+
diff --git a/platform/jewel/markdown/int-ui-standalone-styling/BUILD.bazel b/platform/jewel/markdown/int-ui-standalone-styling/BUILD.bazel
index 12eae78e67bc..a937241c4ad7 100644
--- a/platform/jewel/markdown/int-ui-standalone-styling/BUILD.bazel
+++ b/platform/jewel/markdown/int-ui-standalone-styling/BUILD.bazel
@@ -33,8 +33,8 @@ jvm_library(
"//platform/jewel/ui",
"//platform/jewel/foundation",
"//platform/jewel/int-ui/int-ui-standalone:jewel-intUi-standalone",
- "//platform/jewel/markdown/extension/gfm-alerts:jewel-markdown-extension-gfmAlerts",
- "//platform/jewel/markdown/extension/gfm-tables:jewel-markdown-extension-gfmTables",
+ "//platform/jewel/markdown/extensions/gfm-alerts:jewel-markdown-extensions-gfmAlerts",
+ "//platform/jewel/markdown/extensions/gfm-tables:jewel-markdown-extensions-gfmTables",
"//libraries/compose-foundation-desktop",
],
runtime_deps = [":jewel-markdown-intUiStandaloneStyling_resources"],
diff --git a/platform/jewel/markdown/int-ui-standalone-styling/build.gradle.kts b/platform/jewel/markdown/int-ui-standalone-styling/build.gradle.kts
index 15e3061835ad..6913e96a913e 100644
--- a/platform/jewel/markdown/int-ui-standalone-styling/build.gradle.kts
+++ b/platform/jewel/markdown/int-ui-standalone-styling/build.gradle.kts
@@ -9,8 +9,8 @@ plugins {
dependencies {
api(projects.markdown.core)
api(projects.intUi.intUiStandalone)
- compileOnly(projects.markdown.extension.gfmAlerts)
- compileOnly(projects.markdown.extension.gfmTables)
+ compileOnly(projects.markdown.extensions.gfmAlerts)
+ compileOnly(projects.markdown.extensions.gfmTables)
testImplementation(compose.desktop.uiTestJUnit4)
}
diff --git a/platform/jewel/markdown/int-ui-standalone-styling/intellij.platform.jewel.markdown.intUiStandaloneStyling.iml b/platform/jewel/markdown/int-ui-standalone-styling/intellij.platform.jewel.markdown.intUiStandaloneStyling.iml
index c76bb493e2cc..7368ff04f459 100644
--- a/platform/jewel/markdown/int-ui-standalone-styling/intellij.platform.jewel.markdown.intUiStandaloneStyling.iml
+++ b/platform/jewel/markdown/int-ui-standalone-styling/intellij.platform.jewel.markdown.intUiStandaloneStyling.iml
@@ -38,8 +38,8 @@
-
-
+
+
diff --git a/platform/jewel/markdown/int-ui-standalone-styling/src/main/resources/intellij.platform.jewel.markdown.intUiStandaloneStyling.xml b/platform/jewel/markdown/int-ui-standalone-styling/src/main/resources/intellij.platform.jewel.markdown.intUiStandaloneStyling.xml
index 9918e8512c80..573a8fb14ccf 100644
--- a/platform/jewel/markdown/int-ui-standalone-styling/src/main/resources/intellij.platform.jewel.markdown.intUiStandaloneStyling.xml
+++ b/platform/jewel/markdown/int-ui-standalone-styling/src/main/resources/intellij.platform.jewel.markdown.intUiStandaloneStyling.xml
@@ -4,6 +4,6 @@
-
+
diff --git a/platform/jewel/samples/ide-plugin/build.gradle.kts b/platform/jewel/samples/ide-plugin/build.gradle.kts
index d93f449a04db..6cd7c8db975a 100644
--- a/platform/jewel/samples/ide-plugin/build.gradle.kts
+++ b/platform/jewel/samples/ide-plugin/build.gradle.kts
@@ -1,3 +1,4 @@
+import io.gitlab.arturbosch.detekt.Detekt
import java.net.URI
plugins {
@@ -33,15 +34,14 @@ repositories {
dependencies {
intellijPlatform { intellijIdeaCommunity(libs.versions.idea) }
+ implementation(projects.samples.showcase) { exclude(group = "org.jetbrains.kotlinx") }
implementation(projects.ideLafBridge) { exclude(group = "org.jetbrains.kotlinx") }
-
implementation(projects.markdown.ideLafBridgeStyling) { exclude(group = "org.jetbrains.kotlinx") }
implementation(compose.desktop.currentOs) {
exclude(group = "org.jetbrains.compose.material")
exclude(group = "org.jetbrains.kotlinx")
}
- implementation(project(":samples:showcase")) { exclude(group = "org.jetbrains.kotlinx") }
// TODO remove once https://youtrack.jetbrains.com/issue/IJPL-166436 is fixed
implementation("androidx.lifecycle:lifecycle-common-jvm:2.8.5") { exclude(group = "org.jetbrains.kotlinx") }
@@ -55,4 +55,8 @@ intellijPlatform {
autoReload = false
}
-tasks { runIde { jvmArgs = listOf("-Xmx3g") } }
+tasks {
+ runIde { jvmArgs = listOf("-Xmx3g") }
+
+ withType() { exclude("**/AndroidStudioReleases.kt") }
+}
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/SwingComparisonTabPanel.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/SwingComparisonTabPanel.kt
index d64eb8211dfa..45cc2485e8ba 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/SwingComparisonTabPanel.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/SwingComparisonTabPanel.kt
@@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@@ -53,7 +53,6 @@ import org.jetbrains.jewel.ui.component.EditableListComboBox
import org.jetbrains.jewel.ui.component.Icon
import org.jetbrains.jewel.ui.component.ListComboBox
import org.jetbrains.jewel.ui.component.OutlinedButton
-import org.jetbrains.jewel.ui.component.SimpleListItem
import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.jewel.ui.component.TextArea
import org.jetbrains.jewel.ui.component.TextField
@@ -197,7 +196,7 @@ internal class SwingComparisonTabPanel : BorderLayoutPanel() {
}
private fun Panel.comboBoxesRow() {
- row("ComboBoxes:") {
+ row("Combo Boxes:") {
// Swing ComboBoxes
val zoomLevels = arrayOf("100%", "125%", "150%", "175%", "200%", "300%")
@@ -270,86 +269,68 @@ internal class SwingComparisonTabPanel : BorderLayoutPanel() {
"Joy",
)
}
- var selectedComboBox1: String? by remember { mutableStateOf(comboBoxItems.first()) }
- var selectedComboBox2: String? by remember { mutableStateOf(comboBoxItems.first()) }
- var selectedComboBox3: String? by remember { mutableStateOf(comboBoxItems.first()) }
- var selectedComboBox4: String? by remember { mutableStateOf(comboBoxItems.first()) }
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Column {
+ var selectedIndex by remember { mutableIntStateOf(0) }
+ val selectedText: String = comboBoxItems[selectedIndex]
+
Text("Not editable")
- Text(text = "Selected item: $selectedComboBox1")
+ Text(text = "Selected item: $selectedText")
ListComboBox(
items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { selectedIndex = it },
modifier = Modifier.width(200.dp),
- onSelectedItemChange = { _, text -> selectedComboBox1 = text },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
)
}
Column {
+ var selectedIndex by remember { mutableIntStateOf(0) }
+ val selectedText: String = comboBoxItems[selectedIndex]
+
Text("Not editable + disabled")
- Text(text = "Selected item: $selectedComboBox2")
+ Text(text = "Selected item: $selectedText")
ListComboBox(
items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { selectedIndex = it },
modifier = Modifier.width(200.dp),
- isEnabled = false,
- onSelectedItemChange = { _, text -> selectedComboBox2 = text },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
+ enabled = false,
)
}
Column {
+ var selectedIndex by remember { mutableIntStateOf(0) }
+ val selectedText: String = comboBoxItems[selectedIndex]
+
Text("Editable")
- Text(text = "Selected item: $selectedComboBox3")
+ Text(text = "Selected item: $selectedText")
+
EditableListComboBox(
items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { selectedIndex = it },
modifier = Modifier.width(200.dp),
maxPopupHeight = 150.dp,
- onSelectedItemChange = { _, text -> selectedComboBox3 = text },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
)
}
Column {
+ var selectedIndex by remember { mutableIntStateOf(0) }
+ val selectedText: String = comboBoxItems[selectedIndex]
+
Text("Editable + disabled")
- Text(text = "Selected item: $selectedComboBox4")
+ Text(text = "Selected item: $selectedText")
+
EditableListComboBox(
items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { selectedIndex = it },
modifier = Modifier.width(200.dp),
- isEnabled = false,
- onSelectedItemChange = { _, text -> selectedComboBox4 = text },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
+ enabled = false,
)
}
}
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialog.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialog.kt
index 918062abf54b..3b60a8534a02 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialog.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialog.kt
@@ -3,13 +3,12 @@ package org.jetbrains.jewel.samples.ideplugin.dialog
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.shape.CornerSize
+import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import com.intellij.ide.ui.UISettings
-import com.intellij.openapi.application.ApplicationManager
-import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.toolWindow.ResizeStripeManager
@@ -24,6 +23,7 @@ import org.jetbrains.jewel.bridge.theme.macOs
import org.jetbrains.jewel.bridge.toDpSize
import org.jetbrains.jewel.bridge.toPaddingValues
import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.intui.markdown.bridge.ProvideMarkdownStyling
import org.jetbrains.jewel.samples.showcase.views.ComponentsView
import org.jetbrains.jewel.samples.showcase.views.ComponentsViewModel
import org.jetbrains.jewel.ui.component.styling.IconButtonMetrics
@@ -32,9 +32,6 @@ import org.jetbrains.jewel.ui.theme.iconButtonStyle
internal class ComponentShowcaseDialog(project: Project) : DialogWrapper(project) {
init {
- ApplicationManager.getApplication()
- .invokeLater({ initializeComposeMainDispatcherChecker() }, ModalityState.any())
-
title = "Jewel Components Showcase"
init()
contentPanel.border = JBUI.Borders.empty()
@@ -43,7 +40,6 @@ internal class ComponentShowcaseDialog(project: Project) : DialogWrapper(project
override fun createSouthPanel(): JComponent? = null
- @OptIn(ExperimentalLayoutApi::class)
override fun createCenterPanel(): JComponent {
val viewModel =
ComponentsViewModel(
@@ -54,33 +50,43 @@ internal class ComponentShowcaseDialog(project: Project) : DialogWrapper(project
val dialogPanel = JewelComposePanel {
val iconButtonMetrics = JewelTheme.iconButtonStyle.metrics
val uiSettings = UISettings.Companion.getInstance()
- ComponentsView(
- viewModel = viewModel,
- toolbarButtonMetrics =
- remember(uiSettings.compactMode, ResizeStripeManager.isShowNames()) {
- iconButtonMetrics.tweak(
- minSize = Toolbar.stripeToolbarButtonSize().toDpSize(),
- // See com.intellij.openapi.wm.impl.SquareStripeButtonLook.getButtonArc
- cornerSize =
- retrieveArcAsCornerSizeOrDefault(
- "Button.ToolWindow.arc",
- CornerSize(if (uiSettings.compactMode) 4.dp else 6.dp),
- ),
- padding =
- Toolbar.stripeToolbarButtonIconPadding(
- uiSettings.compactMode, // compactMode
- ResizeStripeManager.isShowNames(), // showNames
- )
- .toPaddingValues(),
- borderWidth = 0.dp,
- )
- },
- )
+ ProvideMarkdownStyling { RootLayout(viewModel, uiSettings, iconButtonMetrics) }
}
dialogPanel.preferredSize = Dimension(800, 600)
return dialogPanel
}
+ @OptIn(ExperimentalLayoutApi::class)
+ @Composable
+ private fun RootLayout(
+ viewModel: ComponentsViewModel,
+ uiSettings: UISettings,
+ iconButtonMetrics: IconButtonMetrics,
+ ) {
+ ComponentsView(
+ viewModel = viewModel,
+ toolbarButtonMetrics =
+ remember(uiSettings.compactMode, ResizeStripeManager.isShowNames()) {
+ iconButtonMetrics.tweak(
+ minSize = Toolbar.stripeToolbarButtonSize().toDpSize(),
+ // See com.intellij.openapi.wm.impl.SquareStripeButtonLook.getButtonArc
+ cornerSize =
+ retrieveArcAsCornerSizeOrDefault(
+ "Button.ToolWindow.arc",
+ CornerSize(if (uiSettings.compactMode) 4.dp else 6.dp),
+ ),
+ padding =
+ Toolbar.stripeToolbarButtonIconPadding(
+ uiSettings.compactMode, // compactMode
+ ResizeStripeManager.isShowNames(), // showNames
+ )
+ .toPaddingValues(),
+ borderWidth = 0.dp,
+ )
+ },
+ )
+ }
+
private fun IconButtonMetrics.tweak(
cornerSize: CornerSize = this.cornerSize,
borderWidth: Dp = this.borderWidth,
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialogAction.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialogAction.kt
index 6de0aa527bec..7334353e4c2e 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialogAction.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/ComponentShowcaseDialogAction.kt
@@ -3,20 +3,13 @@
package org.jetbrains.jewel.samples.ideplugin.dialog
import com.intellij.openapi.actionSystem.AnActionEvent
-import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT
-import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.components.service
import com.intellij.openapi.project.DumbAwareAction
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
internal class ComponentShowcaseDialogAction : DumbAwareAction() {
- init {
- ApplicationManager.getApplication()
- .invokeLater({ initializeComposeMainDispatcherChecker() }, ModalityState.any())
- }
-
override fun actionPerformed(event: AnActionEvent) {
val project = checkNotNull(event.project) { "Project not available" }
val scope = project.service().scope
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/DialogDeadlockWorkaround.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/DialogDeadlockWorkaround.kt
deleted file mode 100644
index a0c5f35b983a..000000000000
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/DialogDeadlockWorkaround.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the
-// Apache 2.0 license.
-package org.jetbrains.jewel.samples.ideplugin.dialog
-
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.LifecycleRegistry
-
-/**
- * Initializes the MainDispatcherChecker in Compose; this must be called from the UI thread in non-modal state. This is
- * a workaround for a freeze in the UI thread that is triggered by using Compose in a dialog before it has been used in
- * a non-modal state.
- *
- * See https://youtrack.jetbrains.com/issue/IJPL-166436
- *
- * TODO Delete this when the upstream bug is fixed.
- */
-internal fun initializeComposeMainDispatcherChecker() {
- object : LifecycleOwner {
- override val lifecycle = LifecycleRegistry(this)
-
- init {
- lifecycle.currentState = Lifecycle.State.STARTED
- }
- }
-}
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/JewelWizardDialogAction.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/JewelWizardDialogAction.kt
index 2f39340e5612..56f62a6f1ffa 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/JewelWizardDialogAction.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/JewelWizardDialogAction.kt
@@ -13,9 +13,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.intellij.openapi.actionSystem.AnActionEvent
-import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT
-import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.components.service
import com.intellij.openapi.project.DumbAwareAction
import com.intellij.openapi.project.Project
@@ -30,11 +28,6 @@ import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.jewel.ui.component.Typography
internal class JewelWizardDialogAction : DumbAwareAction() {
- init {
- ApplicationManager.getApplication()
- .invokeLater({ initializeComposeMainDispatcherChecker() }, ModalityState.any())
- }
-
override fun actionPerformed(event: AnActionEvent) {
val project = checkNotNull(event.project) { "Project not available" }
val scope = project.service().scope
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/WizardDialogWrapper.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/WizardDialogWrapper.kt
index 529f1a3b169d..edb7168f70dc 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/WizardDialogWrapper.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/dialog/WizardDialogWrapper.kt
@@ -3,9 +3,7 @@ package org.jetbrains.jewel.samples.ideplugin.dialog
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
-import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT
-import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.diagnostic.thisLogger
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
@@ -48,8 +46,6 @@ internal class WizardDialogWrapper(
init {
require(pages.isNotEmpty()) { "Wizard must have at least one page" }
- ApplicationManager.getApplication()
- .invokeLater({ initializeComposeMainDispatcherChecker() }, ModalityState.any())
init()
@@ -63,7 +59,7 @@ internal class WizardDialogWrapper(
val newScope = CoroutineScope(coroutineContext)
pageScope = newScope
- val pageIndex = currentPageIndex.value
+ val pageIndex = currentPageIndex.intValue
val page = pages[pageIndex]
backAction.isEnabled = pageIndex > 0 && page.canGoBackwards.value
@@ -99,20 +95,20 @@ internal class WizardDialogWrapper(
override fun createActions(): Array = arrayOf(cancelAction, backAction, nextAction, finishAction)
private fun onBackClick() {
- if (currentPageIndex.value <= 0) {
+ if (currentPageIndex.intValue <= 0) {
logger.warn("Trying to go back beyond the first page")
return
}
- currentPageIndex.value -= 1
+ currentPageIndex.intValue -= 1
updateActions()
}
private fun onNextClick() {
- if (currentPageIndex.value >= pages.lastIndex) {
+ if (currentPageIndex.intValue >= pages.lastIndex) {
logger.warn("Trying to go next on or beyond the last page")
return
}
- currentPageIndex.value += 1
+ currentPageIndex.intValue += 1
updateActions()
}
diff --git a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/AndroidStudioReleases.kt b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/AndroidStudioReleases.kt
index b321564c718a..db749ff2b3e5 100644
--- a/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/AndroidStudioReleases.kt
+++ b/platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/AndroidStudioReleases.kt
@@ -1,15 +1,609 @@
// Generated by the Jewel Android Studio Releases Generator
-// Generated from https://jb.gg/android-studio-releases-list.json on
-// 2024-08-07T12:44:17.265182+02:00[Europe/Rome]
+// Generated from https://jb.gg/android-studio-releases-list.json on 2025-03-24T13:04:38.321255+01:00[Europe/Rome]
package org.jetbrains.jewel.samples.ideplugin.releasessample
+import kotlin.String
+import kotlin.collections.List
import kotlinx.datetime.LocalDate
import org.jetbrains.jewel.samples.ideplugin.releasessample.ContentItem.AndroidStudio
-@Suppress("LargeClass")
-internal object AndroidStudioReleases : ContentSource() {
- override val items: List =
+internal object AndroidStudioReleases : ContentSource() {
+ override val items: List =
listOf(
+ AndroidStudio(
+ displayText = "Android Studio Narwhal | 2025.1.1 Canary 2",
+ imagePath = null,
+ versionName = "2025.1.1.2",
+ build = "AI-251.23774.16.2511.13244498",
+ platformBuild = "251.23774.16",
+ platformVersion = "N/A",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 3, 20),
+ key = "AI-251.23774.16.2511.13244498",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Narwhal | 2025.1.1 Canary 1",
+ imagePath = null,
+ versionName = "2025.1.1.1",
+ build = "AI-251.23774.16.2511.13239840",
+ platformBuild = "251.23774.16",
+ platformVersion = "N/A",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 3, 19),
+ key = "AI-251.23774.16.2511.13239840",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Beta 1",
+ imagePath = null,
+ versionName = "2024.3.2.9",
+ build = "AI-243.25659.59.2432.13218502",
+ platformBuild = "243.25659.59",
+ platformVersion = "2024.3.5",
+ channel = ReleaseChannel.Beta,
+ releaseDate = LocalDate(2025, 3, 18),
+ key = "AI-243.25659.59.2432.13218502",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 8",
+ imagePath = null,
+ versionName = "2024.3.2.8",
+ build = "AI-243.24978.46.2432.13174079",
+ platformBuild = "243.24978.46",
+ platformVersion = "2024.3.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 3, 7),
+ key = "AI-243.24978.46.2432.13174079",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1",
+ imagePath = null,
+ versionName = "2024.3.1.13",
+ build = "AI-243.22562.218.2431.13114758",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2025, 3, 4),
+ key = "AI-243.22562.218.2431.13114758",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 7",
+ imagePath = null,
+ versionName = "2024.3.2.7",
+ build = "AI-243.24978.46.2432.13133389",
+ platformBuild = "243.24978.46",
+ platformVersion = "2024.3.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 2, 27),
+ key = "AI-243.24978.46.2432.13133389",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Patch 2",
+ imagePath = null,
+ versionName = "2024.2.2.15",
+ build = "AI-242.23726.103.2422.13103373",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2025, 2, 26),
+ key = "AI-242.23726.103.2422.13103373",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 6",
+ imagePath = null,
+ versionName = "2024.3.2.6",
+ build = "AI-243.24978.46.2432.13093109",
+ platformBuild = "243.24978.46",
+ platformVersion = "2024.3.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 2, 21),
+ key = "AI-243.24978.46.2432.13093109",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 RC 2",
+ imagePath = null,
+ versionName = "2024.3.1.12",
+ build = "AI-243.22562.218.2431.13054891",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Other,
+ releaseDate = LocalDate(2025, 2, 18),
+ key = "AI-243.22562.218.2431.13054891",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 5",
+ imagePath = null,
+ versionName = "2024.3.2.5",
+ build = "AI-243.23654.117.2432.13058383",
+ platformBuild = "243.23654.117",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 2, 13),
+ key = "AI-243.23654.117.2432.13058383",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Patch 1",
+ imagePath = null,
+ versionName = "2024.2.2.14",
+ build = "AI-242.23726.103.2422.13016713",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2025, 2, 13),
+ key = "AI-242.23726.103.2422.13016713",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 4",
+ imagePath = null,
+ versionName = "2024.3.2.4",
+ build = "AI-243.23654.117.2432.13021186",
+ platformBuild = "243.23654.117",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 2, 6),
+ key = "AI-243.23654.117.2432.13021186",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 RC 1",
+ imagePath = null,
+ versionName = "2024.3.1.11",
+ build = "AI-243.22562.218.2431.12996373",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Other,
+ releaseDate = LocalDate(2025, 2, 5),
+ key = "AI-243.22562.218.2431.12996373",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 3",
+ imagePath = null,
+ versionName = "2024.3.2.3",
+ build = "AI-243.23654.117.2432.12988063",
+ platformBuild = "243.23654.117",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 2, 3),
+ key = "AI-243.23654.117.2432.12988063",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 2",
+ imagePath = null,
+ versionName = "2024.3.2.2",
+ build = "AI-243.22562.218.2432.12959061",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 1, 23),
+ key = "AI-243.22562.218.2432.12959061",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Beta 1",
+ imagePath = null,
+ versionName = "2024.3.1.10",
+ build = "AI-243.22562.218.2431.12926017",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Beta,
+ releaseDate = LocalDate(2025, 1, 22),
+ key = "AI-243.22562.218.2431.12926017",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 1",
+ imagePath = null,
+ versionName = "2024.3.2.1",
+ build = "AI-243.22562.218.2432.12933754",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 1, 21),
+ key = "AI-243.22562.218.2432.12933754",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 9",
+ imagePath = null,
+ versionName = "2024.3.1.9",
+ build = "AI-243.22562.218.2431.12894773",
+ platformBuild = "243.22562.218",
+ platformVersion = "2024.3.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 1, 10),
+ key = "AI-243.22562.218.2431.12894773",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2",
+ imagePath = null,
+ versionName = "2024.2.2.13",
+ build = "AI-242.23726.103.2422.12816248",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2025, 1, 9),
+ key = "AI-242.23726.103.2422.12816248",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 8",
+ imagePath = null,
+ versionName = "2024.3.1.8",
+ build = "AI-243.22562.145.2431.12862218",
+ platformBuild = "243.22562.145",
+ platformVersion = "2024.3.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2025, 1, 6),
+ key = "AI-243.22562.145.2431.12862218",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 7",
+ imagePath = null,
+ versionName = "2024.3.1.7",
+ build = "AI-243.22562.145.2431.12832016",
+ platformBuild = "243.22562.145",
+ platformVersion = "2024.3.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 12, 23),
+ key = "AI-243.22562.145.2431.12832016",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 6",
+ imagePath = null,
+ versionName = "2024.3.1.6",
+ build = "AI-243.22562.145.2431.12789491",
+ platformBuild = "243.22562.145",
+ platformVersion = "2024.3.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 12, 16),
+ key = "AI-243.22562.145.2431.12789491",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 RC 2",
+ imagePath = null,
+ versionName = "2024.2.2.12",
+ build = "AI-242.23726.103.2422.12785815",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Other,
+ releaseDate = LocalDate(2024, 12, 16),
+ key = "AI-242.23726.103.2422.12785815",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 5",
+ imagePath = null,
+ versionName = "2024.3.1.5",
+ build = "AI-243.21565.193.2431.12752199",
+ platformBuild = "243.21565.193",
+ platformVersion = "2024.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 12, 12),
+ key = "AI-243.21565.193.2431.12752199",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 RC 1",
+ imagePath = null,
+ versionName = "2024.2.2.11",
+ build = "AI-242.23726.103.2422.12721465",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Other,
+ releaseDate = LocalDate(2024, 12, 5),
+ key = "AI-242.23726.103.2422.12721465",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 4",
+ imagePath = null,
+ versionName = "2024.3.1.4",
+ build = "AI-243.21565.193.2431.12735582",
+ platformBuild = "243.21565.193",
+ platformVersion = "2024.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 12, 2),
+ key = "AI-243.21565.193.2431.12735582",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Patch 3",
+ imagePath = null,
+ versionName = "2024.2.1.12",
+ build = "AI-242.23339.11.2421.12700392",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 12, 2),
+ key = "AI-242.23339.11.2421.12700392",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 3",
+ imagePath = null,
+ versionName = "2024.3.1.3",
+ build = "AI-243.21565.193.2431.12691553",
+ platformBuild = "243.21565.193",
+ platformVersion = "2024.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 11, 21),
+ key = "AI-243.21565.193.2431.12691553",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1",
+ imagePath = null,
+ versionName = "2024.2.2.10",
+ build = "AI-242.23726.103.2422.12630895",
+ platformBuild = "242.23726.103",
+ platformVersion = "2024.2.4",
+ channel = ReleaseChannel.Beta,
+ releaseDate = LocalDate(2024, 11, 18),
+ key = "AI-242.23726.103.2422.12630895",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 2",
+ imagePath = null,
+ versionName = "2024.3.1.2",
+ build = "AI-243.21565.129.2431.12655144",
+ platformBuild = "243.21565.129",
+ platformVersion = "2024.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 11, 14),
+ key = "AI-243.21565.129.2431.12655144",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Meerkat | 2024.3.1 Canary 1",
+ imagePath = null,
+ versionName = "2024.3.1.1",
+ build = "AI-243.21565.23.2431.12637205",
+ platformBuild = "243.21565.23",
+ platformVersion = "2024.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 11, 12),
+ key = "AI-243.21565.23.2431.12637205",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 9",
+ imagePath = null,
+ versionName = "2024.2.2.9",
+ build = "AI-242.23339.11.2422.12584204",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 10, 31),
+ key = "AI-242.23339.11.2422.12584204",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Patch 2",
+ imagePath = null,
+ versionName = "2024.2.1.11",
+ build = "AI-242.23339.11.2421.12550806",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 10, 31),
+ key = "AI-242.23339.11.2421.12550806",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 8",
+ imagePath = null,
+ versionName = "2024.2.2.8",
+ build = "AI-242.23339.11.2422.12548333",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 10, 25),
+ key = "AI-242.23339.11.2422.12548333",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 7",
+ imagePath = null,
+ versionName = "2024.2.2.7",
+ build = "AI-242.23339.11.2422.12512484",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 10, 17),
+ key = "AI-242.23339.11.2422.12512484",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 6",
+ imagePath = null,
+ versionName = "2024.2.2.6",
+ build = "AI-242.23339.11.2422.12480590",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 10, 14),
+ key = "AI-242.23339.11.2422.12480590",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Patch 1",
+ imagePath = null,
+ versionName = "2024.2.1.10",
+ build = "AI-242.23339.11.2421.12483815",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 10, 14),
+ key = "AI-242.23339.11.2421.12483815",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 5",
+ imagePath = null,
+ versionName = "2024.2.2.5",
+ build = "AI-242.23339.11.2422.12448552",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 10, 3),
+ key = "AI-242.23339.11.2422.12448552",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1",
+ imagePath = null,
+ versionName = "2024.2.1.9",
+ build = "AI-242.21829.142.2421.12409432",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 10, 1),
+ key = "AI-242.21829.142.2421.12409432",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 4",
+ imagePath = null,
+ versionName = "2024.2.2.4",
+ build = "AI-242.23339.11.2422.12417746",
+ platformBuild = "242.23339.11",
+ platformVersion = "2024.2.3",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 9, 26),
+ key = "AI-242.23339.11.2422.12417746",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 3",
+ imagePath = null,
+ versionName = "2024.2.2.3",
+ build = "AI-242.21829.142.2422.12395834",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 9, 23),
+ key = "AI-242.21829.142.2422.12395834",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 RC 1",
+ imagePath = null,
+ versionName = "2024.2.1.8",
+ build = "AI-242.21829.142.2421.12366423",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Other,
+ releaseDate = LocalDate(2024, 9, 23),
+ key = "AI-242.21829.142.2421.12366423",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Koala Feature Drop | 2024.1.2 Patch 1",
+ imagePath = "/studio-splash-screens/KoalaFeatureDrop-stable.png",
+ versionName = "2024.1.2.13",
+ build = "AI-241.19072.14.2412.12360217",
+ platformBuild = "241.19072.14",
+ platformVersion = "2024.1.6",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 9, 17),
+ key = "AI-241.19072.14.2412.12360217",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 2",
+ imagePath = null,
+ versionName = "2024.2.2.2",
+ build = "AI-242.21829.142.2422.12358220",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 9, 12),
+ key = "AI-242.21829.142.2422.12358220",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Beta 2",
+ imagePath = null,
+ versionName = "2024.2.1.7",
+ build = "AI-242.21829.142.2421.12332550",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Beta,
+ releaseDate = LocalDate(2024, 9, 12),
+ key = "AI-242.21829.142.2421.12332550",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug Feature Drop | 2024.2.2 Canary 1",
+ imagePath = null,
+ versionName = "2024.2.2.1",
+ build = "AI-242.21829.142.2422.12329062",
+ platformBuild = "242.21829.142",
+ platformVersion = "2024.2.1",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 9, 9),
+ key = "AI-242.21829.142.2422.12329062",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Beta 1",
+ imagePath = null,
+ versionName = "2024.2.1.6",
+ build = "AI-242.20224.300.2421.12312915",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Beta,
+ releaseDate = LocalDate(2024, 9, 5),
+ key = "AI-242.20224.300.2421.12312915",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Canary 9",
+ imagePath = "/studio-splash-screens/Ladybug-canary.png",
+ versionName = "2024.2.1.5",
+ build = "AI-242.20224.300.2421.12293307",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 8, 30),
+ key = "AI-242.20224.300.2421.12293307",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Koala Feature Drop | 2024.1.2",
+ imagePath = "/studio-splash-screens/KoalaFeatureDrop-stable.png",
+ versionName = "2024.1.2.12",
+ build = "AI-241.18034.62.2412.12266719",
+ platformBuild = "241.18034.62",
+ platformVersion = "2024.1.4",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 8, 29),
+ key = "AI-241.18034.62.2412.12266719",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Canary 8",
+ imagePath = "/studio-splash-screens/Ladybug-canary.png",
+ versionName = "2024.2.1.4",
+ build = "AI-242.20224.300.2421.12279409",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 8, 28),
+ key = "AI-242.20224.300.2421.12279409",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Canary 7",
+ imagePath = "/studio-splash-screens/Ladybug-canary.png",
+ versionName = "2024.2.1.3",
+ build = "AI-242.20224.300.2421.12232258",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 8, 15),
+ key = "AI-242.20224.300.2421.12232258",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Canary 6",
+ imagePath = "/studio-splash-screens/Ladybug-canary.png",
+ versionName = "2024.2.1.2",
+ build = "AI-242.20224.300.2421.12216002",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 8, 13),
+ key = "AI-242.20224.300.2421.12216002",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Koala | 2024.1.1 Patch 2",
+ imagePath = "/studio-splash-screens/Koala-stable.png",
+ versionName = "2024.1.1.13",
+ build = "AI-241.18034.62.2411.12169540",
+ platformBuild = "241.18034.62",
+ platformVersion = "2024.1.4",
+ channel = ReleaseChannel.Stable,
+ releaseDate = LocalDate(2024, 8, 8),
+ key = "AI-241.18034.62.2411.12169540",
+ ),
+ AndroidStudio(
+ displayText = "Android Studio Ladybug | 2024.2.1 Canary 5",
+ imagePath = "/studio-splash-screens/Ladybug-canary.png",
+ versionName = "2024.2.1.1",
+ build = "AI-242.20224.300.2421.12201251",
+ platformBuild = "242.20224.300",
+ platformVersion = "2024.2",
+ channel = ReleaseChannel.Canary,
+ releaseDate = LocalDate(2024, 8, 8),
+ key = "AI-242.20224.300.2421.12201251",
+ ),
AndroidStudio(
displayText = "Android Studio Koala Feature Drop | 2024.1.2 RC 1",
imagePath = "/studio-splash-screens/KoalaFeatureDrop-stable.png",
diff --git a/platform/jewel/samples/ide-plugin/src/main/resources/intellij.platform.jewel.samples.idePlugin.xml b/platform/jewel/samples/ide-plugin/src/main/resources/intellij.platform.jewel.samples.idePlugin.xml
index 3e1892ab7144..6bdd5a75068d 100644
--- a/platform/jewel/samples/ide-plugin/src/main/resources/intellij.platform.jewel.samples.idePlugin.xml
+++ b/platform/jewel/samples/ide-plugin/src/main/resources/intellij.platform.jewel.samples.idePlugin.xml
@@ -3,8 +3,8 @@
-
-
+
+
diff --git a/platform/jewel/samples/showcase/BUILD.bazel b/platform/jewel/samples/showcase/BUILD.bazel
index c1c96c501e6e..65045b14fb07 100644
--- a/platform/jewel/samples/showcase/BUILD.bazel
+++ b/platform/jewel/samples/showcase/BUILD.bazel
@@ -31,6 +31,7 @@ jvm_library(
"@lib//:jetbrains-annotations",
"//platform/jewel/ui",
"//platform/jewel/foundation",
+ "//platform/jewel/markdown/core:jewel-markdown-core",
"//libraries/skiko",
"//libraries/compose-foundation-desktop",
],
diff --git a/platform/jewel/samples/showcase/api-dump-unreviewed.txt b/platform/jewel/samples/showcase/api-dump-unreviewed.txt
index e54121122b14..3079b1cb7046 100644
--- a/platform/jewel/samples/showcase/api-dump-unreviewed.txt
+++ b/platform/jewel/samples/showcase/api-dump-unreviewed.txt
@@ -11,16 +11,20 @@ f:org.jetbrains.jewel.samples.showcase.components.ChipsAndTreeKt
- sf:ChipsSample(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V
- sf:SelectableLazyColumnSample(androidx.compose.runtime.Composer,I):V
- sf:TreeSample(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V
+f:org.jetbrains.jewel.samples.showcase.components.ComboBoxesKt
+- sf:ComboBoxes(androidx.compose.runtime.Composer,I):V
f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$BannersKt
- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$BannersKt
- ():V
-- f:getLambda-1$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
+- f:getLambda-1$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function3
- f:getLambda-2$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
-- f:getLambda-3$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
+- f:getLambda-3$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
- f:getLambda-4$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
- f:getLambda-5$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
- f:getLambda-6$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
- f:getLambda-7$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
+- f:getLambda-8$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
+- f:getLambda-9$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$BordersKt
- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$BordersKt
- ():V
@@ -60,19 +64,12 @@ f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$ChipsAndT
- f:getLambda-5$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
- f:getLambda-6$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
- f:getLambda-7$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function4
-f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$DropdownsKt
-- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$DropdownsKt
+f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$ComboBoxesKt
+- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$ComboBoxesKt
- ():V
-- f:getLambda-1$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function3
-- f:getLambda-10$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
-- f:getLambda-2$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
+- f:getLambda-1$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function5
+- f:getLambda-2$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function5
- f:getLambda-3$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
-- f:getLambda-4$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
-- f:getLambda-5$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
-- f:getLambda-6$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function3
-- f:getLambda-7$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function5
-- f:getLambda-8$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function5
-- f:getLambda-9$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function5
f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$ScrollbarsKt
- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$ScrollbarsKt
- ():V
@@ -116,8 +113,6 @@ f:org.jetbrains.jewel.samples.showcase.components.ComposableSingletons$TooltipsK
- f:getLambda-1$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
- f:getLambda-2$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
- f:getLambda-3$intellij_platform_jewel_samples_showcase():kotlin.jvm.functions.Function2
-f:org.jetbrains.jewel.samples.showcase.components.DropdownsKt
-- sf:Dropdowns(androidx.compose.runtime.Composer,I):V
f:org.jetbrains.jewel.samples.showcase.components.IconsKt
- sf:Icons(androidx.compose.runtime.Composer,I):V
f:org.jetbrains.jewel.samples.showcase.components.LinksKt
@@ -163,6 +158,10 @@ f:org.jetbrains.jewel.samples.showcase.components.ShowcaseIcons$Components
- f:getToolbar():org.jetbrains.jewel.ui.icon.PathIconKey
- f:getTooltip():org.jetbrains.jewel.ui.icon.PathIconKey
- f:getTree():org.jetbrains.jewel.ui.icon.PathIconKey
+f:org.jetbrains.jewel.samples.showcase.components.ShowcaseIcons$ProgrammingLanguages
+- sf:$stable:I
+- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.components.ShowcaseIcons$ProgrammingLanguages
+- f:getKotlin():org.jetbrains.jewel.ui.icon.PathIconKey
f:org.jetbrains.jewel.samples.showcase.components.SliderKt
- sf:Sliders(androidx.compose.runtime.Composer,I):V
f:org.jetbrains.jewel.samples.showcase.components.SplitLayoutsKt
diff --git a/platform/jewel/samples/showcase/api/showcase.api b/platform/jewel/samples/showcase/api/showcase.api
index 7a768219ad70..9e60b76f5bd0 100644
--- a/platform/jewel/samples/showcase/api/showcase.api
+++ b/platform/jewel/samples/showcase/api/showcase.api
@@ -117,27 +117,17 @@ public final class org/jetbrains/jewel/samples/showcase/components/ComposableSin
public final class org/jetbrains/jewel/samples/showcase/components/ComposableSingletons$DropdownsKt {
public static final field INSTANCE Lorg/jetbrains/jewel/samples/showcase/components/ComposableSingletons$DropdownsKt;
- public static field lambda-1 Lkotlin/jvm/functions/Function3;
- public static field lambda-10 Lkotlin/jvm/functions/Function2;
- public static field lambda-2 Lkotlin/jvm/functions/Function2;
- public static field lambda-3 Lkotlin/jvm/functions/Function2;
- public static field lambda-4 Lkotlin/jvm/functions/Function2;
+ public static field lambda-1 Lkotlin/jvm/functions/Function5;
+ public static field lambda-2 Lkotlin/jvm/functions/Function5;
+ public static field lambda-3 Lkotlin/jvm/functions/Function5;
+ public static field lambda-4 Lkotlin/jvm/functions/Function5;
public static field lambda-5 Lkotlin/jvm/functions/Function2;
- public static field lambda-6 Lkotlin/jvm/functions/Function3;
- public static field lambda-7 Lkotlin/jvm/functions/Function5;
- public static field lambda-8 Lkotlin/jvm/functions/Function5;
- public static field lambda-9 Lkotlin/jvm/functions/Function5;
public fun ()V
- public final fun getLambda-1$showcase ()Lkotlin/jvm/functions/Function3;
- public final fun getLambda-10$showcase ()Lkotlin/jvm/functions/Function2;
- public final fun getLambda-2$showcase ()Lkotlin/jvm/functions/Function2;
- public final fun getLambda-3$showcase ()Lkotlin/jvm/functions/Function2;
- public final fun getLambda-4$showcase ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-1$showcase ()Lkotlin/jvm/functions/Function5;
+ public final fun getLambda-2$showcase ()Lkotlin/jvm/functions/Function5;
+ public final fun getLambda-3$showcase ()Lkotlin/jvm/functions/Function5;
+ public final fun getLambda-4$showcase ()Lkotlin/jvm/functions/Function5;
public final fun getLambda-5$showcase ()Lkotlin/jvm/functions/Function2;
- public final fun getLambda-6$showcase ()Lkotlin/jvm/functions/Function3;
- public final fun getLambda-7$showcase ()Lkotlin/jvm/functions/Function5;
- public final fun getLambda-8$showcase ()Lkotlin/jvm/functions/Function5;
- public final fun getLambda-9$showcase ()Lkotlin/jvm/functions/Function5;
}
public final class org/jetbrains/jewel/samples/showcase/components/ComposableSingletons$ScrollbarsKt {
diff --git a/platform/jewel/samples/showcase/build.gradle.kts b/platform/jewel/samples/showcase/build.gradle.kts
index 86dbfb468524..adae6f9f4c60 100644
--- a/platform/jewel/samples/showcase/build.gradle.kts
+++ b/platform/jewel/samples/showcase/build.gradle.kts
@@ -8,6 +8,7 @@ plugins {
dependencies {
implementation(project(":foundation"))
implementation(project(":ui"))
+ implementation(projects.markdown.core)
testImplementation(compose.desktop.uiTestJUnit4)
testImplementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
}
diff --git a/platform/jewel/samples/showcase/intellij.platform.jewel.samples.showcase.iml b/platform/jewel/samples/showcase/intellij.platform.jewel.samples.showcase.iml
index bfd8743b8a90..f94f388413ae 100644
--- a/platform/jewel/samples/showcase/intellij.platform.jewel.samples.showcase.iml
+++ b/platform/jewel/samples/showcase/intellij.platform.jewel.samples.showcase.iml
@@ -36,6 +36,7 @@
+
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt
index 5b418bb46032..e89042bee1d9 100644
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt
@@ -16,6 +16,8 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.markdown.Markdown
+import org.jetbrains.jewel.ui.component.CheckboxRow
import org.jetbrains.jewel.ui.component.ErrorDefaultBanner
import org.jetbrains.jewel.ui.component.ErrorInlineBanner
import org.jetbrains.jewel.ui.component.GroupHeader
@@ -108,27 +110,43 @@ public fun Banners() {
GroupHeader("Inline banner")
+ var showTitle by remember { mutableStateOf(false) }
+ var optionalTitle: String? by remember { mutableStateOf(null) }
+ CheckboxRow(
+ checked = showTitle,
+ onCheckedChange = {
+ showTitle = it
+ optionalTitle = if (showTitle) "I'm an optional title " + LONG_IPSUM else null
+ },
+ ) {
+ Text("Show optional title")
+ }
+
InformationInlineBanner(
icon = null,
style = JewelTheme.inlineBannerStyle.information,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
)
InformationInlineBanner(
icon = null,
style = JewelTheme.inlineBannerStyle.information,
- text = LONG_IPSUM,
+ title = optionalTitle,
actionIcons = {
IconButton(onClick = { clickLabel = "Info inline no icon Action Icon clicked" }) {
Icon(AllIconsKeys.General.Close, "Close button")
}
},
- )
+ ) {
+ Markdown("This is a **Markdown** banner — [watch](https://youtu.be/dQw4w9WgXcQ) `this` out ;)")
+ }
InformationInlineBanner(
icon = null,
style = JewelTheme.inlineBannerStyle.information,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
actions = {
Link("Action A", onClick = { clickLabel = "Info inline no icon Action A clicked" })
Link("Action B", onClick = { clickLabel = "Info inline no icon Action B clicked" })
@@ -139,6 +157,7 @@ public fun Banners() {
icon = null,
style = JewelTheme.inlineBannerStyle.information,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
actionIcons = {
IconButton(onClick = { clickLabel = "Info inline no icon Action Icon clicked" }) {
Icon(AllIconsKeys.General.Close, "Close button")
@@ -153,10 +172,12 @@ public fun Banners() {
InformationInlineBanner(
style = JewelTheme.inlineBannerStyle.information,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
)
ErrorInlineBanner(
style = JewelTheme.inlineBannerStyle.error,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
actionIcons = {
IconButton(onClick = { clickLabel = "Error Inline Action Icon clicked" }) {
Icon(AllIconsKeys.General.Close, "Close button")
@@ -166,6 +187,7 @@ public fun Banners() {
InformationInlineBanner(
style = JewelTheme.inlineBannerStyle.information,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
actions = {
Link("Action A", onClick = { clickLabel = "Information Inline Action A clicked" })
Link("Action B", onClick = { clickLabel = "Information Inline Action B clicked" })
@@ -174,6 +196,7 @@ public fun Banners() {
SuccessInlineBanner(
style = JewelTheme.inlineBannerStyle.success,
text = LONG_IPSUM,
+ title = optionalTitle,
actions = {
Link("Action A", onClick = { clickLabel = "Success Inline Action A clicked" })
Link("Action B", onClick = { clickLabel = "Success Inline Action B clicked" })
@@ -190,6 +213,7 @@ public fun Banners() {
WarningInlineBanner(
style = JewelTheme.inlineBannerStyle.warning,
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
+ title = optionalTitle,
actions = { Link("Action A", onClick = { clickLabel = "Warning Inline Action A clicked" }) },
actionIcons = {
IconButton(onClick = { clickLabel = "Error Close Icon clicked" }) {
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt
new file mode 100644
index 000000000000..96eb37c70c78
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt
@@ -0,0 +1,283 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the
+// Apache 2.0 license.
+package org.jetbrains.jewel.samples.showcase.components
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.widthIn
+import androidx.compose.foundation.text.input.rememberTextFieldState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.unit.dp
+import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.ui.component.ComboBox
+import org.jetbrains.jewel.ui.component.DefaultButton
+import org.jetbrains.jewel.ui.component.EditableComboBox
+import org.jetbrains.jewel.ui.component.EditableListComboBox
+import org.jetbrains.jewel.ui.component.GroupHeader
+import org.jetbrains.jewel.ui.component.ListComboBox
+import org.jetbrains.jewel.ui.component.PopupContainer
+import org.jetbrains.jewel.ui.component.PopupManager
+import org.jetbrains.jewel.ui.component.SimpleListItem
+import org.jetbrains.jewel.ui.component.Text
+import org.jetbrains.jewel.ui.disabled
+import org.jetbrains.jewel.ui.icon.IconKey
+import org.jetbrains.jewel.ui.icons.AllIconsKeys
+
+private val stringItems =
+ listOf(
+ "Cat",
+ "Elephant",
+ "Sun",
+ "Book",
+ "Laughter",
+ "Whisper",
+ "Ocean",
+ "Serendipity lorem ipsum",
+ "Umbrella",
+ "Joy",
+ )
+
+private val languageOptions =
+ listOf(
+ ProgrammingLanguage("Kotlin", ShowcaseIcons.ProgrammingLanguages.Kotlin),
+ ProgrammingLanguage("Java", AllIconsKeys.FileTypes.Java),
+ ProgrammingLanguage("Python", AllIconsKeys.Language.Python),
+ ProgrammingLanguage("JavaScript", AllIconsKeys.FileTypes.JavaScript),
+ ProgrammingLanguage("Java", AllIconsKeys.FileTypes.Java),
+ ProgrammingLanguage("Rust", AllIconsKeys.Language.Rust),
+ ProgrammingLanguage("Go", AllIconsKeys.Language.GO),
+ ProgrammingLanguage("Ruby", AllIconsKeys.Language.Ruby),
+ )
+
+@Composable
+public fun ComboBoxes() {
+ GroupHeader("List combo box (aka dropdown)")
+ ListComboBoxes()
+
+ GroupHeader("Editable list combo box")
+ EditableListComboBoxes()
+
+ GroupHeader("Custom combo boxes")
+ CustomComboBoxes()
+}
+
+@Composable
+private fun ListComboBoxes() {
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, enabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) stringItems[selectedIndex] else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ ListComboBox(
+ items = stringItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index -> selectedIndex = index },
+ modifier = Modifier.widthIn(max = 200.dp),
+ itemKeys = { _, item -> item },
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("Generics-based API, enabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) languageOptions[selectedIndex].name else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ ListComboBox(
+ items = languageOptions,
+ selectedIndex = selectedIndex,
+ modifier = Modifier.widthIn(max = 200.dp),
+ onSelectedItemChange = { index -> selectedIndex = index },
+ itemKeys = { index, _ -> index },
+ itemContent = { item, isSelected, isActive ->
+ SimpleListItem(
+ text = item.name,
+ selected = isSelected,
+ active = isActive,
+ iconContentDescription = item.name,
+ icon = item.icon,
+ colorFilter = null,
+ )
+ },
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, disabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) stringItems[selectedIndex] else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ ListComboBox(
+ items = stringItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index -> selectedIndex = index },
+ modifier = Modifier.widthIn(max = 200.dp),
+ enabled = false,
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("Generics-based API, disabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) languageOptions[selectedIndex].name else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ ListComboBox(
+ items = languageOptions,
+ selectedIndex = selectedIndex,
+ modifier = Modifier.widthIn(max = 200.dp),
+ enabled = false,
+ onSelectedItemChange = { index -> selectedIndex = index },
+ itemKeys = { index, _ -> index },
+ itemContent = { item, isSelected, isActive ->
+ SimpleListItem(
+ text = item.name,
+ selected = isSelected,
+ active = isActive,
+ iconContentDescription = item.name,
+ icon = item.icon,
+ colorFilter = ColorFilter.disabled(),
+ )
+ },
+ )
+ }
+ }
+}
+
+@Composable
+private fun EditableListComboBoxes() {
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, enabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) stringItems[selectedIndex] else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ EditableListComboBox(
+ items = stringItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index -> selectedIndex = index },
+ modifier = Modifier.widthIn(max = 200.dp),
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, disabled")
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) stringItems[selectedIndex] else "[none]"
+ InfoText(text = "Selected item: $selectedItemText")
+
+ EditableListComboBox(
+ items = stringItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index -> selectedIndex = index },
+ modifier = Modifier.widthIn(max = 200.dp),
+ enabled = false,
+ )
+ }
+ }
+}
+
+@Composable
+private fun CustomComboBoxes() {
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, non-editable")
+
+ val popupManager = remember { PopupManager() }
+ var selectedIndex by remember { mutableIntStateOf(2) }
+ val selectedItemText = if (selectedIndex >= 0) stringItems[selectedIndex] else "[none]"
+
+ ComboBox(
+ labelText = selectedItemText,
+ modifier = Modifier.widthIn(max = 200.dp),
+ popupManager = popupManager,
+ popupContent = {
+ CustomPopupContent(popupManager) {
+ selectedIndex = stringItems.indices.random()
+ popupManager.setPopupVisible(false)
+ }
+ },
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("Generics-based API, non-editable")
+
+ val popupManager = remember { PopupManager() }
+ var selectedIndex by remember { mutableIntStateOf(2) }
+
+ ComboBox(
+ modifier = Modifier.widthIn(max = 200.dp),
+ popupManager = popupManager,
+ popupContent = {
+ CustomPopupContent(popupManager) {
+ selectedIndex = languageOptions.indices.random()
+ popupManager.setPopupVisible(false)
+ }
+ },
+ labelContent = {
+ SimpleListItem(
+ text = languageOptions[selectedIndex].name,
+ icon = languageOptions[selectedIndex].icon,
+ isSelected = false,
+ isActive = true,
+ )
+ },
+ )
+ }
+
+ Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Text("String-based API, editable")
+
+ val popupManager = remember { PopupManager() }
+ val state = rememberTextFieldState(stringItems[2])
+
+ EditableComboBox(
+ textFieldState = state,
+ modifier = Modifier.widthIn(max = 200.dp),
+ popupManager = popupManager,
+ popupContent = {
+ CustomPopupContent(popupManager) {
+ val newItemIndex = stringItems.indices.random()
+ state.edit { replace(0, originalText.length, stringItems[newItemIndex]) }
+ popupManager.setPopupVisible(false)
+ }
+ },
+ )
+ }
+ }
+}
+
+@Composable
+private fun CustomPopupContent(popupManager: PopupManager, onButtonClick: () -> Unit) {
+ PopupContainer(onDismissRequest = { popupManager.setPopupVisible(false) }, horizontalAlignment = Alignment.Start) {
+ Column(
+ Modifier.padding(horizontal = 16.dp, vertical = 8.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ InfoText("Your custom content here!")
+ DefaultButton(onClick = onButtonClick) { Text("Pick a random item") }
+ }
+ }
+}
+
+@Composable
+private fun InfoText(text: String) {
+ Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis, color = JewelTheme.globalColors.text.info)
+}
+
+private data class ProgrammingLanguage(val name: String, val icon: IconKey)
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Dropdowns.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Dropdowns.kt
deleted file mode 100644
index e79575e8ffb0..000000000000
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Dropdowns.kt
+++ /dev/null
@@ -1,317 +0,0 @@
-// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the
-// Apache 2.0 license.
-package org.jetbrains.jewel.samples.showcase.components
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.text.input.rememberTextFieldState
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableIntStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.unit.dp
-import kotlin.random.Random
-import org.jetbrains.jewel.ui.Outline
-import org.jetbrains.jewel.ui.component.Dropdown
-import org.jetbrains.jewel.ui.component.EditableComboBox
-import org.jetbrains.jewel.ui.component.EditableListComboBox
-import org.jetbrains.jewel.ui.component.GroupHeader
-import org.jetbrains.jewel.ui.component.ListComboBox
-import org.jetbrains.jewel.ui.component.PopupContainer
-import org.jetbrains.jewel.ui.component.PopupManager
-import org.jetbrains.jewel.ui.component.SimpleListItem
-import org.jetbrains.jewel.ui.component.Text
-import org.jetbrains.jewel.ui.component.separator
-import org.jetbrains.jewel.ui.icons.AllIconsKeys
-
-@Composable
-public fun Dropdowns() {
- Column {
- OldDropdowns()
-
- Spacer(modifier = Modifier.height(24.dp))
-
- ComboBoxes()
- }
-}
-
-@Composable
-private fun OldDropdowns() {
- GroupHeader("Dropdowns (deprecated)")
-
- Spacer(modifier = Modifier.height(8.dp))
-
- Row(horizontalArrangement = Arrangement.spacedBy(10.dp), verticalAlignment = Alignment.CenterVertically) {
- val items = remember { listOf("Light", "Dark", "---", "High Contrast", "Darcula", "IntelliJ Light") }
- var selected by remember { mutableStateOf(items.first()) }
-
- Dropdown(enabled = false, menuContent = {}) { Text("Disabled") }
- Dropdown(
- menuContent = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(selected = selected == it, onClick = { selected = it }) { Text(it) }
- }
- }
- separator()
- submenu(
- submenu = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(selected = selected == it, onClick = { selected = it }) { Text(it) }
- }
- }
- separator()
- submenu(
- submenu = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(selected = selected == it, onClick = { selected = it }) {
- Text(it)
- }
- }
- }
- }
- ) {
- Text("Submenu2")
- }
- }
- ) {
- Text("Submenu")
- }
- }
- ) {
- Text(selected)
- }
- Dropdown(
- outline = Outline.Error,
- menuContent = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(selected = selected == it, onClick = { selected = it }) { Text(it) }
- }
- }
- },
- ) {
- Text(selected)
- }
- Dropdown(
- menuContent = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(
- iconKey = dropdownIconsSample.random(),
- keybinding =
- if (Random.nextBoolean()) {
- null
- } else {
- dropdownKeybindingsSample.shuffled().take(2).toSet()
- },
- selected = false,
- onClick = {},
- ) {
- Text(it)
- }
- }
- }
- submenu(
- submenu = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(
- iconKey = dropdownIconsSample.random(),
- keybinding =
- if (Random.nextBoolean()) {
- null
- } else {
- dropdownKeybindingsSample.shuffled().take(2).toSet()
- },
- selected = false,
- onClick = {},
- ) {
- Text(it)
- }
- }
- }
- separator()
- submenu(
- submenu = {
- items.forEach {
- if (it == "---") {
- separator()
- } else {
- selectableItem(
- iconKey = dropdownIconsSample.random(),
- selected = false,
- onClick = {},
- ) {
- Text(it)
- }
- }
- }
- }
- ) {
- Text("Submenu2")
- }
- }
- ) {
- Text("Submenu")
- }
- }
- ) {
- Text("With icons")
- }
- }
-}
-
-private val dropdownIconsSample = listOf(AllIconsKeys.Actions.Find, AllIconsKeys.Actions.Close, null)
-private val dropdownKeybindingsSample = setOf("A", "B", "?", "?", "?")
-
-@Composable
-private fun ComboBoxes() {
- GroupHeader("List combobox")
- ListComboBoxes()
-
- Spacer(modifier = Modifier.height(16.dp))
-
- GroupHeader("Simple combobox")
- SimpleComboBoxes()
-}
-
-@Composable
-private fun ListComboBoxes() {
- val comboBoxItems = remember {
- listOf(
- "Cat",
- "Elephant",
- "Sun",
- "Book",
- "Laughter",
- "Whisper",
- "Ocean",
- "Serendipity lorem ipsum",
- "Umbrella",
- "Joy",
- )
- }
-
- Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Column(Modifier.weight(1f).padding(top = 8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
- Text("Enabled and Editable")
-
- var selectedIndex by remember { mutableIntStateOf(2) }
- val selectedItemText = if (selectedIndex >= 0) comboBoxItems[selectedIndex] else ""
- Text(text = "Selected item: $selectedItemText", maxLines = 1, overflow = TextOverflow.Ellipsis)
-
- EditableListComboBox(
- items = comboBoxItems,
- selectedIndex = selectedIndex,
- onItemSelected = { index, text -> selectedIndex = index },
- modifier = Modifier.width(200.dp),
- maxPopupHeight = 150.dp,
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
- )
- }
-
- Column(Modifier.weight(1f).padding(top = 8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
- Text("Enabled")
- var selectedIndex by remember { mutableIntStateOf(2) }
- val selectedItemText = if (selectedIndex >= 0) comboBoxItems[selectedIndex] else ""
- Text(text = "Selected item: $selectedItemText", maxLines = 1, overflow = TextOverflow.Ellipsis)
-
- ListComboBox(
- items = comboBoxItems,
- selectedIndex = selectedIndex,
- modifier = Modifier.width(200.dp),
- maxPopupHeight = 150.dp,
- onItemSelected = { index, text -> selectedIndex = index },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
- )
- }
-
- Column(Modifier.weight(1f).padding(top = 8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
- Text("Disabled")
- var selectedIndex by remember { mutableIntStateOf(2) }
- val selectedItemText = if (selectedIndex >= 0) comboBoxItems[selectedIndex] else ""
- Text(text = "Selected item: $selectedItemText", maxLines = 1, overflow = TextOverflow.Ellipsis)
-
- ListComboBox(
- isEnabled = false,
- items = comboBoxItems,
- selectedIndex = selectedIndex,
- modifier = Modifier.width(200.dp),
- maxPopupHeight = 150.dp,
- onItemSelected = { index, text -> selectedIndex = index },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- iconContentDescription = item,
- )
- },
- )
- }
- }
-}
-
-@Composable
-private fun SimpleComboBoxes() {
- Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(8.dp)) {
- Text("Enabled and Editable")
-
- val popupManager = remember { PopupManager() }
- val state = rememberTextFieldState()
- EditableComboBox(
- textFieldState = state,
- modifier = Modifier.width(200.dp),
- popupManager = popupManager,
- popupContent = {
- PopupContainer(
- onDismissRequest = { popupManager.setPopupVisible(false) },
- horizontalAlignment = Alignment.Start,
- ) {
- Text("Your custom popup here!", Modifier.padding(horizontal = 16.dp, vertical = 8.dp))
- }
- },
- )
- }
- }
-}
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ShowcaseIcons.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ShowcaseIcons.kt
index fc78b932ae49..6148396796c9 100644
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ShowcaseIcons.kt
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ShowcaseIcons.kt
@@ -37,4 +37,8 @@ public object ShowcaseIcons {
public val tooltip: PathIconKey = PathIconKey("icons/components/tooltip.svg", ShowcaseIcons::class.java)
public val tree: PathIconKey = PathIconKey("icons/components/tree.svg", ShowcaseIcons::class.java)
}
+
+ public object ProgrammingLanguages {
+ public val Kotlin: PathIconKey = PathIconKey("icons/kotlin.svg", ShowcaseIcons::class.java)
+ }
}
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Tabs.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Tabs.kt
index b03505b6f820..08e1371b94f3 100644
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Tabs.kt
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Tabs.kt
@@ -79,7 +79,7 @@ private fun DefaultTabShowcase() {
}
}
- TabStripWithAddButton(tabs, JewelTheme.defaultTabStyle) {
+ TabStripWithAddButton(tabs = tabs, style = JewelTheme.defaultTabStyle) {
val insertionIndex = (selectedTabIndex + 1).coerceIn(0..tabIds.size)
val nextTabId = maxId + 1
@@ -138,7 +138,7 @@ private fun EditorTabShowcase() {
}
}
- TabStripWithAddButton(tabs, JewelTheme.editorTabStyle) {
+ TabStripWithAddButton(tabs = tabs, style = JewelTheme.editorTabStyle) {
val insertionIndex = (selectedTabIndex + 1).coerceIn(0..tabIds.size)
val nextTabId = maxId + 1
@@ -150,7 +150,7 @@ private fun EditorTabShowcase() {
@Composable
private fun TabStripWithAddButton(tabs: List, style: TabStyle, onAddClick: () -> Unit) {
Row(verticalAlignment = Alignment.CenterVertically) {
- TabStrip(tabs, style, modifier = Modifier.weight(1f))
+ TabStrip(tabs = tabs, style = style, modifier = Modifier.weight(1f))
IconButton(onClick = onAddClick, modifier = Modifier.size(JewelTheme.defaultTabStyle.metrics.tabHeight)) {
Icon(key = AllIconsKeys.General.Add, contentDescription = "Add a tab")
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/views/ComponentsViewModel.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/views/ComponentsViewModel.kt
index 8f01824efdb3..66374983ee06 100644
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/views/ComponentsViewModel.kt
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/views/ComponentsViewModel.kt
@@ -12,7 +12,7 @@ import org.jetbrains.jewel.samples.showcase.components.Borders
import org.jetbrains.jewel.samples.showcase.components.Buttons
import org.jetbrains.jewel.samples.showcase.components.Checkboxes
import org.jetbrains.jewel.samples.showcase.components.ChipsAndTrees
-import org.jetbrains.jewel.samples.showcase.components.Dropdowns
+import org.jetbrains.jewel.samples.showcase.components.ComboBoxes
import org.jetbrains.jewel.samples.showcase.components.Icons
import org.jetbrains.jewel.samples.showcase.components.Links
import org.jetbrains.jewel.samples.showcase.components.ProgressBar
@@ -48,7 +48,7 @@ public class ComponentsViewModel(
content = { RadioButtons() },
),
ViewInfo(title = "Checkboxes", iconKey = ShowcaseIcons.Components.checkbox, content = { Checkboxes() }),
- ViewInfo(title = "Dropdowns", iconKey = ShowcaseIcons.Components.comboBox, content = { Dropdowns() }),
+ ViewInfo(title = "Combo Boxes", iconKey = ShowcaseIcons.Components.comboBox, content = { ComboBoxes() }),
ViewInfo(title = "Chips and trees", iconKey = ShowcaseIcons.Components.tree, content = { ChipsAndTrees() }),
ViewInfo(
title = "Progressbar",
diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/kotlin.svg b/platform/jewel/samples/showcase/src/main/resources/icons/kotlin.svg
new file mode 100644
index 000000000000..8807b9d22709
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/resources/icons/kotlin.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/kotlin_dark.svg b/platform/jewel/samples/showcase/src/main/resources/icons/kotlin_dark.svg
new file mode 100644
index 000000000000..2516858ad961
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/resources/icons/kotlin_dark.svg
@@ -0,0 +1,5 @@
+
+
diff --git a/platform/jewel/samples/standalone/BUILD.bazel b/platform/jewel/samples/standalone/BUILD.bazel
index e2b8a86862a1..b3a07174d3c8 100644
--- a/platform/jewel/samples/standalone/BUILD.bazel
+++ b/platform/jewel/samples/standalone/BUILD.bazel
@@ -31,7 +31,7 @@ jvm_library(
"@lib//:jetbrains-annotations",
"@lib//:platform-jewel-samples-standalone-com-darkrockstudios-mpfilepicker",
"@lib//:platform-jewel-samples-standalone-com-darkrockstudios-mpfilepicker-jvm",
- "//platform/jewel/markdown/extension/autolink:jewel-markdown-extension-autolink",
+ "//platform/jewel/markdown/extensions/autolink:jewel-markdown-extensions-autolink",
"//platform/jewel/ui",
"//platform/jewel/foundation",
"//platform/jewel/int-ui/int-ui-decorated-window:jewel-intUi-decoratedWindow",
@@ -39,19 +39,19 @@ jvm_library(
"//platform/jewel/decorated-window:decoratedWindow",
"//platform/jewel/markdown/int-ui-standalone-styling:jewel-markdown-intUiStandaloneStyling",
"//platform/jewel/markdown/core:jewel-markdown-core",
- "//platform/jewel/markdown/extension/gfm-alerts:jewel-markdown-extension-gfmAlerts",
+ "//platform/jewel/markdown/extensions/gfm-alerts:jewel-markdown-extensions-gfmAlerts",
+ "//platform/jewel/markdown/extensions/gfm-tables:jewel-markdown-extensions-gfmTables",
+ "//platform/jewel/markdown/extensions/gfm-strikethrough:jewel-markdown-extensions-gfmStrikethrough",
"//platform/jewel/int-ui/int-ui-standalone:jewel-intUi-standalone",
"//libraries/compose-foundation-desktop",
"//platform/jewel/samples/showcase:jewel-samples-showcase",
- "//platform/jewel/markdown/extension/gfm-tables:jewel-markdown-extension-gfmTables",
- "//platform/jewel/markdown/extension/gfm-strikethrough:jewel-markdown-extension-gfmStrikethrough",
],
runtime_deps = [
":jewel-samples-standalone_resources",
- "@lib//:jna",
- "@lib//:platform-jewel-samples-standalone-org-lwjgl-lwjgl",
"@lib//:platform-jewel-samples-standalone-org-lwjgl-lwjgl-tinyfd",
"@lib//:platform-jewel-samples-standalone-org-nibor-autolink-autolink",
+ "@lib//:jna",
+ "@lib//:platform-jewel-samples-standalone-org-lwjgl-lwjgl",
],
plugins = ["@lib//:compose-plugin"]
)
diff --git a/platform/jewel/samples/standalone/api-dump-unreviewed.txt b/platform/jewel/samples/standalone/api-dump-unreviewed.txt
index ffeb88d46bd1..fba1f5b67a2c 100644
--- a/platform/jewel/samples/standalone/api-dump-unreviewed.txt
+++ b/platform/jewel/samples/standalone/api-dump-unreviewed.txt
@@ -3,7 +3,6 @@ f:org.jetbrains.jewel.samples.standalone.markdown.ComposableSingletons$MarkdownE
- ():V
- f:getLambda-1$intellij_platform_jewel_samples_standalone():kotlin.jvm.functions.Function2
- f:getLambda-2$intellij_platform_jewel_samples_standalone():kotlin.jvm.functions.Function2
-- f:getLambda-3$intellij_platform_jewel_samples_standalone():kotlin.jvm.functions.Function5
f:org.jetbrains.jewel.samples.standalone.markdown.JewelReadmeKt
- sf:getJewelReadme():java.lang.String
f:org.jetbrains.jewel.samples.standalone.markdown.MarkdownEditorKt
diff --git a/platform/jewel/samples/standalone/build.gradle.kts b/platform/jewel/samples/standalone/build.gradle.kts
index e61bf76bf256..78fe8869cc6b 100644
--- a/platform/jewel/samples/standalone/build.gradle.kts
+++ b/platform/jewel/samples/standalone/build.gradle.kts
@@ -9,20 +9,23 @@ plugins {
}
dependencies {
- implementation(libs.kotlin.reflect)
- implementation(projects.intUi.intUiStandalone)
implementation(projects.intUi.intUiDecoratedWindow)
- implementation(projects.markdown.intUiStandaloneStyling)
- implementation(projects.markdown.extension.gfmAlerts)
- implementation(projects.markdown.extension.gfmStrikethrough)
- implementation(projects.markdown.extension.gfmTables)
- implementation(projects.markdown.extension.autolink)
- implementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
- implementation(compose.components.resources)
- implementation(project(":samples:showcase"))
+ implementation(projects.intUi.intUiStandalone)
implementation(projects.markdown.core)
- implementation("com.darkrockstudios:mpfilepicker:3.1.0")
+ implementation(projects.markdown.extensions.gfmAlerts)
+ implementation(projects.markdown.extensions.gfmStrikethrough)
+ implementation(projects.markdown.extensions.gfmTables)
+ implementation(projects.markdown.extensions.autolink)
+ implementation(projects.markdown.intUiStandaloneStyling)
+ implementation(projects.samples.showcase)
+
+ implementation(compose.components.resources)
+ implementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
+
+ implementation(libs.filePicker)
implementation(libs.intellijPlatform.icons)
+ implementation(libs.kotlin.reflect)
+
testImplementation(compose.desktop.uiTestJUnit4)
testImplementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
}
diff --git a/platform/jewel/samples/standalone/intellij.platform.jewel.samples.standalone.iml b/platform/jewel/samples/standalone/intellij.platform.jewel.samples.standalone.iml
index f9b0afbb2f7e..230ac9c4d616 100644
--- a/platform/jewel/samples/standalone/intellij.platform.jewel.samples.standalone.iml
+++ b/platform/jewel/samples/standalone/intellij.platform.jewel.samples.standalone.iml
@@ -68,7 +68,7 @@
-
+
@@ -76,26 +76,9 @@
-
-
-
-
-
-
-
- cf83f90e32fb973ff5edfca4ef35f55ca51bb70a579b6a1f290744f552e8e484
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -135,7 +118,24 @@
-
-
+
+
+
+
+
+
+ cf83f90e32fb973ff5edfca4ef35f55ca51bb70a579b6a1f290744f552e8e484
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/Main.kt b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/Main.kt
index 349d861d8278..51a1a1eb998d 100644
--- a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/Main.kt
+++ b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/Main.kt
@@ -14,6 +14,7 @@ import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.decodeToSvgPainter
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.foundation.util.JewelLogger
+import org.jetbrains.jewel.intui.markdown.standalone.ProvideMarkdownStyling
import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme
import org.jetbrains.jewel.intui.standalone.theme.createDefaultTextStyle
import org.jetbrains.jewel.intui.standalone.theme.createEditorTextStyle
@@ -77,7 +78,7 @@ public fun main() {
},
content = {
TitleBarView()
- currentView.content()
+ ProvideMarkdownStyling { currentView.content() }
},
)
}
diff --git a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownEditor.kt b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownEditor.kt
index ac7903e94e67..61926f21f1f1 100644
--- a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownEditor.kt
+++ b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownEditor.kt
@@ -13,6 +13,7 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
@@ -26,7 +27,6 @@ import org.jetbrains.jewel.ui.Orientation
import org.jetbrains.jewel.ui.component.Divider
import org.jetbrains.jewel.ui.component.ListComboBox
import org.jetbrains.jewel.ui.component.OutlinedButton
-import org.jetbrains.jewel.ui.component.SimpleListItem
import org.jetbrains.jewel.ui.component.Text
import org.jetbrains.jewel.ui.component.TextArea
@@ -68,18 +68,16 @@ private fun ControlsRow(modifier: Modifier = Modifier, onLoadMarkdown: (String)
Spacer(Modifier.weight(1f))
val comboBoxItems = remember { listOf("Jewel readme", "Markdown catalog") }
- var selected by remember { mutableStateOf("Jewel readme") }
+ var selectedIndex by remember { mutableIntStateOf(0) }
ListComboBox(
items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index ->
+ selectedIndex = index
+ onLoadMarkdown(if (selectedIndex == 0) JewelReadme else MarkdownCatalog)
+ },
modifier = Modifier.width(170.dp).padding(end = 2.dp),
maxPopupHeight = 150.dp,
- onSelectedItemChange = { _, text ->
- selected = text
- onLoadMarkdown(if (selected == "Jewel readme") JewelReadme else MarkdownCatalog)
- },
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(text = item, isSelected = isSelected, isActive = isActive)
- },
)
}
}
diff --git a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownPreview.kt b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownPreview.kt
index c35dd654f0a9..c15c57bf6e14 100644
--- a/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownPreview.kt
+++ b/platform/jewel/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/markdown/MarkdownPreview.kt
@@ -29,7 +29,7 @@ import org.jetbrains.jewel.intui.markdown.standalone.styling.extensions.github.t
import org.jetbrains.jewel.intui.markdown.standalone.styling.light
import org.jetbrains.jewel.markdown.LazyMarkdown
import org.jetbrains.jewel.markdown.MarkdownBlock
-import org.jetbrains.jewel.markdown.extension.autolink.AutolinkProcessorExtension
+import org.jetbrains.jewel.markdown.extensions.autolink.AutolinkProcessorExtension
import org.jetbrains.jewel.markdown.extensions.github.alerts.AlertStyling
import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlertProcessorExtension
import org.jetbrains.jewel.markdown.extensions.github.alerts.GitHubAlertRendererExtension
diff --git a/platform/jewel/samples/standalone/src/main/resources/intellij.platform.jewel.samples.standalone.xml b/platform/jewel/samples/standalone/src/main/resources/intellij.platform.jewel.samples.standalone.xml
index 52ff4a8f8b52..91a0506cf701 100644
--- a/platform/jewel/samples/standalone/src/main/resources/intellij.platform.jewel.samples.standalone.xml
+++ b/platform/jewel/samples/standalone/src/main/resources/intellij.platform.jewel.samples.standalone.xml
@@ -7,9 +7,9 @@
-
-
-
-
+
+
+
+
diff --git a/platform/jewel/settings.gradle.kts b/platform/jewel/settings.gradle.kts
index 79090d9bf517..1d720658dff0 100644
--- a/platform/jewel/settings.gradle.kts
+++ b/platform/jewel/settings.gradle.kts
@@ -41,10 +41,10 @@ include(
":int-ui:int-ui-standalone",
":detekt-plugin",
":markdown:core",
- ":markdown:extension:autolink",
- ":markdown:extension:gfm-alerts",
- ":markdown:extension:gfm-strikethrough",
- ":markdown:extension:gfm-tables",
+ ":markdown:extensions:autolink",
+ ":markdown:extensions:gfm-alerts",
+ ":markdown:extensions:gfm-strikethrough",
+ ":markdown:extensions:gfm-tables",
":markdown:int-ui-standalone-styling",
":markdown:ide-laf-bridge-styling",
":samples:ide-plugin",
@@ -62,48 +62,28 @@ gradleEnterprise {
}
}
-val isWindows
- get() = System.getProperty("os.name").contains("win", true)
-
-val gradleCommand: String by
-lazy(LazyThreadSafetyMode.NONE) {
- val gradlewFilename =
- if (isWindows) {
- "gradlew.bat"
- } else {
- "gradlew"
- }
-
- val gradlew = File(rootProject.projectDir, gradlewFilename)
- if (gradlew.exists() && gradlew.isFile && gradlew.canExecute()) {
- logger.info("Using gradlew wrapper at ${gradlew.invariantSeparatorsPath}")
- gradlew.invariantSeparatorsPath
- } else {
- "gradle"
- }
-}
-
-val shebang = if (isWindows) "" else "#!/bin/sh"
-
-/*
-// This is broken on Windows, please do not enable it again until it is fixed.
gitHooks {
hook("pre-push") {
- from(shebang) {
- // language=Shell Script
- """
- |#### Note: this hook was autogenerated. You can edit it in settings.gradle.kts
- |GRADLEW=$gradleCommand
- |if ! ${'$'}GRADLEW ktfmtCheck ; then
- | ${'$'}GRADLEW ktfmtFormat
- | echo 1>&2 "\nktfmt found problems; commit the result and re-push"
- | exit 1
- |fi
- |
+ from("#!/bin/sh") {
"""
+ |set -x
+ |#### Note: this hook was autogenerated. You can edit it in Jewel's settings.gradle.kts
+ |[ "${'$'}(basename "${'$'}(pwd)")" == "ultimate" ] && exit 0
+ |GRADLEW="./gradlew"
+ |OLD_DIR=$(pwd)
+ |cd "${rootDir.absolutePath}"
+ |if ! ${'$'}GRADLEW ktfmtCheck ; then
+ | ${'$'}GRADLEW ktfmtFormat
+ | echo 1>&2 "\nktfmt found problems; commit the result and re-push"
+ | cd ${'$'}OLD_DIR
+ | exit 1
+ |fi
+ |cd ${'$'}OLD_DIR
+ |
+ """
.trimMargin()
}
}
createHooks(overwriteExisting = true)
-}*/
+}
diff --git a/platform/jewel/ui-tests/BUILD.bazel b/platform/jewel/ui-tests/BUILD.bazel
index 2f27329d4e7b..d546d06030cc 100644
--- a/platform/jewel/ui-tests/BUILD.bazel
+++ b/platform/jewel/ui-tests/BUILD.bazel
@@ -40,4 +40,4 @@ jvm_test(
runtime_deps = [":uiTests_test_resources"],
plugins = ["@lib//:compose-plugin"]
)
-### auto-generated section `build intellij.platform.jewel.uiTests` end
+### auto-generated section `build intellij.platform.jewel.uiTests` end
\ No newline at end of file
diff --git a/platform/jewel/ui-tests/build.gradle.kts b/platform/jewel/ui-tests/build.gradle.kts
index be8b65a7a587..8206f18ead6d 100644
--- a/platform/jewel/ui-tests/build.gradle.kts
+++ b/platform/jewel/ui-tests/build.gradle.kts
@@ -1,19 +1,12 @@
-
-import org.jetbrains.compose.ComposeBuildConfig
-
plugins {
jewel
alias(libs.plugins.composeDesktop)
alias(libs.plugins.compose.compiler)
}
-private val composeVersion
- get() = ComposeBuildConfig.composeVersion
-
dependencies {
api(projects.ui)
api(projects.intUi.intUiStandalone)
testImplementation(compose.desktop.uiTestJUnit4)
testImplementation(compose.desktop.currentOs) { exclude(group = "org.jetbrains.compose.material") }
}
-
diff --git a/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/ListComboBoxUiTest.kt b/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/ListComboBoxUiTest.kt
index 465efbe5d423..c5a247882c74 100644
--- a/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/ListComboBoxUiTest.kt
+++ b/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/ListComboBoxUiTest.kt
@@ -4,15 +4,12 @@ import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.text.input.rememberTextFieldState
-import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
-import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
@@ -22,7 +19,6 @@ import androidx.compose.ui.test.assertHasNoClickAction
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsFocused
import androidx.compose.ui.test.assertIsNotEnabled
-import androidx.compose.ui.test.assertIsSelected
import androidx.compose.ui.test.assertTextContains
import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.hasContentDescription
@@ -31,13 +27,15 @@ import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onLast
import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performKeyInput
-import androidx.compose.ui.test.performMouseInput
import androidx.compose.ui.test.performTextClearance
import androidx.compose.ui.test.performTextInput
import androidx.compose.ui.test.pressKey
import androidx.compose.ui.unit.dp
+import junit.framework.TestCase.assertEquals
+import org.jetbrains.jewel.foundation.lazy.rememberSelectableLazyListState
import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme
import org.junit.Ignore
import org.junit.Rule
@@ -47,6 +45,7 @@ import org.junit.Test
class ListComboBoxUiTest {
@get:Rule val composeRule = createComposeRule()
+ // Helper properties to access common UI elements in tests
private val popupMenu: SemanticsNodeInteraction
get() = composeRule.onNodeWithTag("Jewel.ComboBox.Popup")
@@ -89,14 +88,12 @@ class ListComboBoxUiTest {
val focusRequester = FocusRequester()
composeRule.setContent {
IntUiTheme {
- Box(
- modifier =
- Modifier.Companion.size(20.dp).focusRequester(focusRequester).testTag("Pre-Box").focusable(true)
- )
- EditableComboBox(
- textFieldState = rememberTextFieldState("Item 1"),
- modifier = Modifier.Companion.width(140.dp).testTag("ComboBox"),
- popupContent = { /* ... */ },
+ Box(modifier = Modifier.size(20.dp).focusRequester(focusRequester).testTag("Pre-Box").focusable(true))
+ EditableListComboBox(
+ items = comboBoxItems,
+ onSelectedItemChange = { _: Int -> },
+ modifier = Modifier.width(140.dp).testTag("ComboBox"),
+ selectedIndex = 0,
)
}
}
@@ -104,15 +101,15 @@ class ListComboBoxUiTest {
composeRule.onNodeWithTag("Pre-Box").assertIsDisplayed().assertIsFocused()
composeRule.onNodeWithTag("Pre-Box").performKeyInput {
- keyDown(Key.Companion.Tab)
- keyUp(Key.Companion.Tab)
+ keyDown(Key.Tab)
+ keyUp(Key.Tab)
}
composeRule.onNodeWithTag("Jewel.ComboBox.TextField", useUnmergedTree = true).assertIsFocused()
textField.performKeyInput {
- keyDown(Key.Companion.Tab)
- keyUp(Key.Companion.Tab)
+ keyDown(Key.Tab)
+ keyUp(Key.Tab)
}
composeRule.onNodeWithTag("Pre-Box").assertIsFocused()
@@ -122,7 +119,8 @@ class ListComboBoxUiTest {
fun `when not-editable click opens popup`() {
val comboBox = focusedListComboBox()
comboBox.performClick()
- composeRule.onNodeWithTag("Item 2", useUnmergedTree = true).assertIsDisplayed()
+ popupMenu.assertIsDisplayed()
+ composeRule.onAllNodesWithText("Item 2", useUnmergedTree = true).onLast().assertIsDisplayed()
}
@Test
@@ -153,8 +151,8 @@ class ListComboBoxUiTest {
popupMenu.assertDoesNotExist()
comboBox.performKeyInput {
- keyDown(Key.Companion.Spacebar)
- keyUp(Key.Companion.Spacebar)
+ keyDown(Key.Spacebar)
+ keyUp(Key.Spacebar)
}
popupMenu.assertIsDisplayed()
}
@@ -168,8 +166,8 @@ class ListComboBoxUiTest {
textField.assertIsFocused().assertIsDisplayed()
textField.assertTextContains("Item 1")
textField.assertIsFocused().performKeyInput {
- keyDown(Key.Companion.Spacebar)
- keyUp(Key.Companion.Spacebar)
+ keyDown(Key.Spacebar)
+ keyUp(Key.Spacebar)
}
textField.assertTextEquals("Item 1 ")
popupMenu.assertDoesNotExist()
@@ -182,8 +180,8 @@ class ListComboBoxUiTest {
popupMenu.assertDoesNotExist()
comboBox.performKeyInput {
- keyDown(Key.Companion.Enter)
- keyUp(Key.Companion.Enter)
+ keyDown(Key.Enter)
+ keyUp(Key.Enter)
}
popupMenu.assertDoesNotExist()
composeRule.onNodeWithTag("Item 1", useUnmergedTree = true).assertDoesNotExist()
@@ -196,8 +194,8 @@ class ListComboBoxUiTest {
popupMenu.assertDoesNotExist()
comboBox.performKeyInput {
- keyDown(Key.Companion.Enter)
- keyUp(Key.Companion.Enter)
+ keyDown(Key.Enter)
+ keyUp(Key.Enter)
}
textField.assertIsDisplayed()
popupMenu.assertDoesNotExist()
@@ -288,8 +286,8 @@ class ListComboBoxUiTest {
editableListComboBox()
popupMenu.assertDoesNotExist()
textField.performKeyInput {
- keyDown(Key.Companion.DirectionDown)
- keyUp(Key.Companion.DirectionDown)
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
}
popupMenu.assertIsDisplayed()
}
@@ -299,10 +297,10 @@ class ListComboBoxUiTest {
editableListComboBox()
popupMenu.assertDoesNotExist()
textField.performKeyInput {
- keyDown(Key.Companion.DirectionDown)
- keyUp(Key.Companion.DirectionDown)
- keyDown(Key.Companion.DirectionDown)
- keyUp(Key.Companion.DirectionDown)
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
}
popupMenu.assertIsDisplayed()
composeRule.onAllNodesWithText("Item 2", useUnmergedTree = true).onLast().assertIsDisplayed()
@@ -323,8 +321,8 @@ class ListComboBoxUiTest {
fun `when enabled but not editable spacebar opens the popup`() {
val comboBox = focusedListComboBox()
comboBox.performKeyInput {
- keyDown(Key.Companion.Spacebar)
- keyUp(Key.Companion.Spacebar)
+ keyDown(Key.Spacebar)
+ keyUp(Key.Spacebar)
}
popupMenu.assertIsDisplayed()
}
@@ -333,13 +331,13 @@ class ListComboBoxUiTest {
fun `when enabled but not editable pressing spacebar twice opens and closes the popup`() {
val comboBox = focusedListComboBox()
comboBox.performKeyInput {
- keyDown(Key.Companion.Spacebar)
- keyUp(Key.Companion.Spacebar)
+ keyDown(Key.Spacebar)
+ keyUp(Key.Spacebar)
}
popupMenu.assertIsDisplayed()
comboBox.performKeyInput {
- keyDown(Key.Companion.Spacebar)
- keyUp(Key.Companion.Spacebar)
+ keyDown(Key.Spacebar)
+ keyUp(Key.Spacebar)
}
popupMenu.assertDoesNotExist()
}
@@ -371,8 +369,8 @@ class ListComboBoxUiTest {
comboBox.performClick()
popupMenu.assertIsDisplayed()
comboBox.performKeyInput {
- keyDown(Key.Companion.Enter)
- keyUp(Key.Companion.Enter)
+ keyDown(Key.Enter)
+ keyUp(Key.Enter)
}
popupMenu.assertDoesNotExist()
}
@@ -390,23 +388,90 @@ class ListComboBoxUiTest {
@Test
fun `when editable clicking chevron open the popup and select the first item`() {
- editableListComboBox()
+ // Use the direct composition so we can track the selection state
+ val focusRequester = FocusRequester()
+ var selectedIndex = 0
+
+ composeRule.setContent {
+ IntUiTheme {
+ EditableListComboBox(
+ items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index: Int -> selectedIndex = index },
+ modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
+ enabled = true,
+ itemKeys = { index: Int, item: String -> index }, // Explicitly use index as key for tests
+ )
+ }
+ }
+
+ composeRule.waitForIdle()
+
+ focusRequester.requestFocus()
+ composeRule.waitForIdle()
+
+ comboBox.assertIsDisplayed()
+ textField.assertIsDisplayed().assertIsFocused()
+
chevronContainer.performClick()
- composeRule.onNodeWithTag("Item 1", useUnmergedTree = true).assertIsDisplayed().assertIsSelected()
+ composeRule.waitForIdle()
+ popupMenu.assertIsDisplayed()
+
+ composeRule.onAllNodesWithText("Item 1", useUnmergedTree = true).onLast().assertIsDisplayed()
+
+ // Verify selection state through selectedIndex and text field
+ assert(selectedIndex == 0) { "Expected selectedIndex to be 0, but was $selectedIndex" }
+ textField.assertTextEquals("Item 1")
}
@Test
fun `when editable pressing down twice selects the second element`() {
- editableListComboBox()
+ // Use the direct composition so we can track the selection state
+ val focusRequester = FocusRequester()
+ var selectedIndex = 0
+
+ composeRule.setContent {
+ IntUiTheme {
+ EditableListComboBox(
+ items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index: Int -> selectedIndex = index },
+ modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
+ enabled = true,
+ itemKeys = { index: Int, item: String -> index }, // Explicitly use index as key for tests
+ listState = rememberSelectableLazyListState(),
+ )
+ }
+ }
+
+ composeRule.waitForIdle()
+
+ focusRequester.requestFocus()
+ composeRule.waitForIdle()
+
+ textField.assertIsDisplayed().assertIsFocused()
popupMenu.assertDoesNotExist()
- comboBox.performKeyInput { pressKey(Key.Companion.DirectionDown) }
- popupMenu.assertIsDisplayed()
- composeRule.onNodeWithTag("Item 1", useUnmergedTree = true).assertIsDisplayed().assertIsSelected()
+ textField.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ }
+ composeRule.waitForIdle()
- comboBox.performKeyInput { pressKey(Key.Companion.DirectionDown) }
popupMenu.assertIsDisplayed()
- composeRule.onNodeWithTag("Item 2", useUnmergedTree = true).assertIsDisplayed().assertIsSelected()
+ composeRule.onAllNodesWithText("Item 1", useUnmergedTree = true).onLast().assertIsDisplayed()
+ assert(selectedIndex == 0) { "Expected selectedIndex to be 0 after opening popup, but was $selectedIndex" }
+
+ textField.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ }
+ composeRule.waitForIdle()
+
+ composeRule.onAllNodesWithText("Item 2", useUnmergedTree = true).onLast().assertIsDisplayed()
+ assert(selectedIndex == 1) { "Expected selectedIndex to be 1 after second down press, but was $selectedIndex" }
+
+ textField.assertTextEquals("Item 2")
}
@Test
@@ -415,19 +480,61 @@ class ListComboBoxUiTest {
comboBox.performClick()
popupMenu.assertIsDisplayed()
- composeRule.onNodeWithTag("Item 2", useUnmergedTree = true).assertIsDisplayed().performMouseInput {
- enter(Offset(2f, 0f))
- moveTo(Offset(10f, 2f))
- advanceEventTime()
+ // Press down to navigate to second item
+ comboBox.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
}
+ composeRule.waitForIdle()
- composeRule.onNodeWithTag("Item 2", useUnmergedTree = true).assertIsSelected().performKeyInput {
- pressKey(Key.Companion.Enter)
- }
+ // Verify second item is visible and selected
+ composeRule.onAllNodesWithText("Item 2", useUnmergedTree = true).onLast().assertIsDisplayed()
+ // Press enter to select
+ comboBox.performKeyInput { pressKey(Key.Enter) }
+ composeRule.waitForIdle()
+
+ // Verify final state
comboBox.assertTextEquals("Item 2", includeEditableText = false)
}
+ @Test
+ fun `stateless ListComboBox displays and selects initial selectedIndex item`() {
+ var selectedIndex = 2
+ var selectedText = "Item 3"
+
+ composeRule.setContent {
+ IntUiTheme {
+ ListComboBox(
+ items = comboBoxItems,
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index ->
+ selectedIndex = index
+ selectedText = comboBoxItems[index]
+ },
+ modifier = Modifier.testTag("ComboBox").width(200.dp),
+ itemKeys = { index: Int, item: String -> index },
+ )
+ }
+ }
+
+ // Wait for LaunchedEffect to complete
+ composeRule.waitForIdle()
+
+ // Verify initial selection
+ composeRule.onNodeWithTag("ComboBox").assertTextEquals("Item 3")
+
+ // Click to open popup
+ composeRule.onNodeWithTag("ComboBox").performClick()
+
+ // Select first item
+ composeRule.onNodeWithText("Item 1").performClick()
+
+ // Verify selection updated
+ assertEquals(0, selectedIndex)
+ assertEquals("Item 1", selectedText)
+ }
+
@Test
fun `when selectedIndex changes externally ListComboBox updates`() {
var selectedIndex by mutableStateOf(0)
@@ -437,108 +544,132 @@ class ListComboBoxUiTest {
ListComboBox(
items = comboBoxItems,
selectedIndex = selectedIndex,
- onItemSelected = { index, _ -> selectedIndex = index },
+ onSelectedItemChange = { index -> selectedIndex = index },
modifier = Modifier.testTag("ComboBox").width(200.dp),
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- modifier = Modifier.testTag(item),
- iconContentDescription = item,
- )
- },
+ itemKeys = { index: Int, item: String -> index },
)
}
}
+ // Verify initial state
composeRule.onNode(hasTestTag("ComboBox")).assertTextEquals("Item 1", includeEditableText = false)
- selectedIndex = 3
+
+ // Open popup
+ comboBox.performClick()
composeRule.waitForIdle()
- composeRule.onNodeWithTag("Jewel.ComboBox.ChevronContainer", useUnmergedTree = true).performClick()
- composeRule.onNodeWithTag("Book", useUnmergedTree = true).assertIsSelected()
+
+ // Navigate to Book (3 down presses)
+ repeat(3) {
+ comboBox.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ }
+ composeRule.waitForIdle()
+ }
+
+ // Press enter to select
+ comboBox.performKeyInput { pressKey(Key.Enter) }
+ composeRule.waitForIdle()
+
+ // Verify ComboBox text is updated
+ composeRule.onNode(hasTestTag("ComboBox")).assertTextEquals("Book", includeEditableText = false)
+ assert(selectedIndex == 3) { "Expected selectedIndex to be 3, but was $selectedIndex" }
}
@Test
fun `when editable ListComboBox text is edited then selectedIndex remains unchanged`() {
- var selectedIdx = 1
+ var selectedIndex = 2
+ val focusRequester = FocusRequester()
composeRule.setContent {
- val textState = rememberTextFieldState("Item 2")
IntUiTheme {
EditableListComboBox(
items = comboBoxItems,
- selectedIndex = selectedIdx,
- onItemSelected = { index, _ -> selectedIdx = index },
- textFieldState = textState,
- modifier = Modifier.testTag("ComboBox").width(200.dp),
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- modifier = Modifier.testTag(item),
- iconContentDescription = item,
- )
- },
+ selectedIndex = selectedIndex,
+ onSelectedItemChange = { index: Int -> selectedIndex = index },
+ modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
+ itemKeys = { index: Int, item: String -> index },
+ listState = rememberSelectableLazyListState(),
)
}
}
- textField.assertTextEquals("Item 2")
+ // Request focus and wait for it
+ focusRequester.requestFocus()
+ composeRule.waitForIdle()
- textField.performTextClearance()
+ // Clear text field and input new text
+ textField.assertIsDisplayed().assertIsFocused().performTextClearance()
textField.performTextInput("Custom text")
- assert(selectedIdx == 1) { "Expected selectedIdx to remain 1, but was $selectedIdx" }
-
- chevronContainer.performClick()
- composeRule.onNodeWithTag("Item 2", useUnmergedTree = true).assertIsSelected()
+ // Verify selectedIndex remains unchanged
+ assertEquals(2, selectedIndex)
}
@Test
fun `when editable ListComboBox selectedIndex changes then text field updates`() {
var selectedIndex by mutableStateOf(0)
+ val focusRequester = FocusRequester()
composeRule.setContent {
- val textState = rememberTextFieldState(comboBoxItems[selectedIndex])
-
- // Update text state when selectedIndex changes
- LaunchedEffect(selectedIndex) { textState.edit { replace(0, length, comboBoxItems[selectedIndex]) } }
-
IntUiTheme {
EditableListComboBox(
items = comboBoxItems,
selectedIndex = selectedIndex,
- onItemSelected = { index, _ -> selectedIndex = index },
- textFieldState = textState, // Pass the explicitly managed text state
- modifier = Modifier.testTag("ComboBox").width(200.dp),
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- modifier = Modifier.testTag(item),
- iconContentDescription = item,
- )
- },
+ onSelectedItemChange = { index: Int -> selectedIndex = index },
+ modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
+ itemKeys = { index: Int, item: String -> index },
)
}
}
- textField.assertTextEquals("Item 1")
- selectedIndex = 3
+ // Wait for initial composition and request focus
+ composeRule.waitForIdle()
+ focusRequester.requestFocus()
composeRule.waitForIdle()
- textField.assertTextEquals("Book")
+ // Verify initial text and focus
+ textField.assertIsDisplayed().assertIsFocused()
+ textField.assertTextEquals("Item 1")
- chevronContainer.performClick()
- composeRule.onNodeWithTag("Book", useUnmergedTree = true).assertIsSelected()
+ // Press down to open popup
+ textField.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ }
+ composeRule.waitForIdle()
+
+ // Press down three more times to get to "Book"
+ repeat(3) {
+ textField.performKeyInput {
+ keyDown(Key.DirectionDown)
+ keyUp(Key.DirectionDown)
+ }
+ composeRule.waitForIdle()
+ }
+
+ // Verify popup item is selected
+ composeRule.onAllNodesWithText("Book", useUnmergedTree = true).onLast().assertIsDisplayed()
+
+ // Verify text field updates and selection state
+ textField.assertTextEquals("Book")
+ assert(selectedIndex == 3) { "Expected selectedIndex to be 3, but was $selectedIndex" }
}
private fun editableListComboBox(): SemanticsNodeInteraction {
val focusRequester = FocusRequester()
- injectEditableListComboBox(focusRequester, isEnabled = true)
+ composeRule.setContent {
+ IntUiTheme {
+ EditableListComboBox(
+ items = comboBoxItems,
+ selectedIndex = 0,
+ onSelectedItemChange = { _: Int -> },
+ modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
+ enabled = true,
+ itemKeys = { index: Int, item: String -> index }, // Explicitly use index as key for tests
+ )
+ }
+ }
focusRequester.requestFocus()
val comboBox = comboBox
comboBox.assertIsDisplayed()
@@ -574,18 +705,10 @@ class ListComboBoxUiTest {
ListComboBox(
items = comboBoxItems,
selectedIndex = 0,
- onItemSelected = { _, _ -> },
+ onSelectedItemChange = {},
modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
- isEnabled = isEnabled,
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- modifier = Modifier.testTag(item),
- iconContentDescription = item,
- )
- },
+ enabled = isEnabled,
+ itemKeys = { index: Int, item: String -> index },
)
}
}
@@ -596,33 +719,27 @@ class ListComboBoxUiTest {
IntUiTheme {
EditableListComboBox(
items = comboBoxItems,
+ selectedIndex = 0,
+ onSelectedItemChange = { _: Int -> },
modifier = Modifier.testTag("ComboBox").width(200.dp).focusRequester(focusRequester),
- isEnabled = isEnabled,
- itemContent = { item, isSelected, isActive ->
- SimpleListItem(
- text = item,
- isSelected = isSelected,
- isActive = isActive,
- modifier = Modifier.testTag(item),
- iconContentDescription = item,
- )
- },
+ enabled = isEnabled,
+ itemKeys = { index: Int, item: String -> index },
)
}
}
}
-}
-private val comboBoxItems =
- listOf(
- "Item 1",
- "Item 2",
- "Item 3",
- "Book",
- "Laughter",
- "Whisper",
- "Ocean",
- "Serendipity lorem ipsum",
- "Umbrella",
- "Joy",
- )
+ private val comboBoxItems =
+ listOf(
+ "Item 1",
+ "Item 2",
+ "Item 3",
+ "Book",
+ "Laughter",
+ "Whisper",
+ "Ocean",
+ "Serendipity lorem ipsum",
+ "Umbrella",
+ "Joy",
+ )
+}
diff --git a/platform/jewel/ui/BUILD.bazel b/platform/jewel/ui/BUILD.bazel
index 58226dffa811..0776152720e9 100644
--- a/platform/jewel/ui/BUILD.bazel
+++ b/platform/jewel/ui/BUILD.bazel
@@ -78,4 +78,4 @@ jvm_test(
name = "ui_test",
runtime_deps = [":ui_test_lib"]
)
-### auto-generated section `build intellij.platform.jewel.ui` end
+### auto-generated section `build intellij.platform.jewel.ui` end
\ No newline at end of file
diff --git a/platform/jewel/ui/api-dump-unreviewed.txt b/platform/jewel/ui/api-dump-unreviewed.txt
index 0fbdc6a61d66..ec588b71a53d 100644
--- a/platform/jewel/ui/api-dump-unreviewed.txt
+++ b/platform/jewel/ui/api-dump-unreviewed.txt
@@ -191,6 +191,7 @@ f:org.jetbrains.jewel.ui.component.CircularProgressIndicatorKt
- sf:CircularProgressIndicator(androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,kotlinx.coroutines.CoroutineDispatcher,androidx.compose.runtime.Composer,I,I):V
- sf:CircularProgressIndicatorBig(androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,kotlinx.coroutines.CoroutineDispatcher,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.ComboBoxKt
+- sf:ComboBox-05tvjtU(androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,kotlin.jvm.functions.Function0,kotlin.jvm.functions.Function0,org.jetbrains.jewel.ui.component.PopupManager,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I,I):V
- sf:ComboBox-xYaah8o(java.lang.String,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function0,kotlin.jvm.functions.Function0,org.jetbrains.jewel.ui.component.PopupManager,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I,I):V
f:org.jetbrains.jewel.ui.component.ComboBoxState
- org.jetbrains.jewel.foundation.state.FocusableComponentState
@@ -234,6 +235,14 @@ f:org.jetbrains.jewel.ui.component.ComposableSingletons$InlineBannerKt
- f:getLambda-2$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
- f:getLambda-3$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
- f:getLambda-4$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
+- f:getLambda-5$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
+- f:getLambda-6$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
+- f:getLambda-7$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
+- f:getLambda-8$intellij_platform_jewel_ui():kotlin.jvm.functions.Function2
+f:org.jetbrains.jewel.ui.component.ComposableSingletons$ListComboBoxKt
+- sf:INSTANCE:org.jetbrains.jewel.ui.component.ComposableSingletons$ListComboBoxKt
+- ():V
+- f:getLambda-1$intellij_platform_jewel_ui():kotlin.jvm.functions.Function5
f:org.jetbrains.jewel.ui.component.ComposableSingletons$MenuKt
- sf:INSTANCE:org.jetbrains.jewel.ui.component.ComposableSingletons$MenuKt
- ():V
@@ -334,12 +343,8 @@ f:org.jetbrains.jewel.ui.component.IconButtonState$Companion
- bs:of-3OtLUoY$default(org.jetbrains.jewel.ui.component.IconButtonState$Companion,Z,Z,Z,Z,Z,I,java.lang.Object):J
f:org.jetbrains.jewel.ui.component.IconKt
- sf:Icon(androidx.compose.ui.graphics.painter.Painter,java.lang.String,androidx.compose.ui.graphics.ColorFilter,androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V
-- sf:Icon(java.lang.String,java.lang.String,java.lang.Class,androidx.compose.ui.graphics.ColorFilter,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.painter.PainterHint,androidx.compose.runtime.Composer,I,I):V
-- sf:Icon(java.lang.String,java.lang.String,java.lang.Class,androidx.compose.ui.graphics.ColorFilter,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I):V
- sf:Icon(org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,androidx.compose.ui.Modifier,java.lang.Class,androidx.compose.ui.graphics.ColorFilter,org.jetbrains.jewel.ui.painter.PainterHint,androidx.compose.runtime.Composer,I,I):V
- sf:Icon(org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,androidx.compose.ui.Modifier,java.lang.Class,androidx.compose.ui.graphics.ColorFilter,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I):V
-- sf:Icon-FHprtrg(java.lang.String,java.lang.String,java.lang.Class,androidx.compose.ui.Modifier,J,org.jetbrains.jewel.ui.painter.PainterHint,androidx.compose.runtime.Composer,I,I):V
-- sf:Icon-FHprtrg(java.lang.String,java.lang.String,java.lang.Class,androidx.compose.ui.Modifier,J,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I):V
- sf:Icon-FHprtrg(org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,androidx.compose.ui.Modifier,java.lang.Class,J,org.jetbrains.jewel.ui.painter.PainterHint,androidx.compose.runtime.Composer,I,I):V
- sf:Icon-FHprtrg(org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,androidx.compose.ui.Modifier,java.lang.Class,J,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I):V
- sf:Icon-ww6aTOc(androidx.compose.ui.graphics.ImageBitmap,java.lang.String,androidx.compose.ui.Modifier,J,androidx.compose.runtime.Composer,I,I):V
@@ -347,10 +352,14 @@ f:org.jetbrains.jewel.ui.component.IconKt
- sf:Icon-ww6aTOc(androidx.compose.ui.graphics.vector.ImageVector,java.lang.String,androidx.compose.ui.Modifier,J,androidx.compose.runtime.Composer,I,I):V
- sf:painterResource(java.lang.String,androidx.compose.runtime.Composer,I):androidx.compose.ui.graphics.painter.Painter
f:org.jetbrains.jewel.ui.component.InlineBannerKt
-- sf:ErrorInlineBanner(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
-- sf:InformationInlineBanner(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
-- sf:SuccessInlineBanner(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
-- sf:WarningInlineBanner(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
+- sf:ErrorInlineBanner(androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:ErrorInlineBanner(java.lang.String,androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
+- sf:InformationInlineBanner(androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:InformationInlineBanner(java.lang.String,androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
+- sf:SuccessInlineBanner(androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:SuccessInlineBanner(java.lang.String,androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
+- sf:WarningInlineBanner(androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:WarningInlineBanner(java.lang.String,androidx.compose.ui.Modifier,java.lang.String,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function3,kotlin.jvm.functions.Function3,org.jetbrains.jewel.ui.component.styling.InlineBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.InputFieldState
- org.jetbrains.jewel.foundation.state.FocusableComponentState
- sf:Companion:org.jetbrains.jewel.ui.component.InputFieldState$Companion
@@ -419,11 +428,10 @@ f:org.jetbrains.jewel.ui.component.LinkState$Companion
- f:of-oSacjZw(Z,Z,Z,Z,Z,Z):J
- bs:of-oSacjZw$default(org.jetbrains.jewel.ui.component.LinkState$Companion,Z,Z,Z,Z,Z,Z,I,java.lang.Object):J
f:org.jetbrains.jewel.ui.component.ListComboBoxKt
-- sf:EditableListComboBox-lYrZsNM(java.util.List,androidx.compose.ui.Modifier,Z,I,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function5,androidx.compose.runtime.Composer,I,I,I):V
-- sf:EditableListComboBox-xKBSf-U(java.util.List,I,kotlin.jvm.functions.Function2,androidx.compose.foundation.text.input.TextFieldState,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function5,androidx.compose.runtime.Composer,I,I,I):V
-- sf:ListComboBox-8u0NR3k(java.util.List,I,kotlin.jvm.functions.Function2,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function5,androidx.compose.runtime.Composer,I,I,I):V
-- sf:ListComboBox-lYrZsNM(java.util.List,androidx.compose.ui.Modifier,Z,I,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function5,androidx.compose.runtime.Composer,I,I,I):V
-- sf:selectedItemIndex(org.jetbrains.jewel.foundation.lazy.SelectableLazyListState):I
+- sf:EditableListComboBox-xzYpEKs(java.util.List,I,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,org.jetbrains.jewel.foundation.lazy.SelectableLazyListState,androidx.compose.runtime.Composer,I,I,I):V
+- sf:ListComboBox-xKBSf-U(java.util.List,I,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,kotlin.jvm.functions.Function1,org.jetbrains.jewel.foundation.lazy.SelectableLazyListState,kotlin.jvm.functions.Function5,androidx.compose.runtime.Composer,I,I,I):V
+- sf:ListComboBox-xzYpEKs(java.util.List,I,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.Outline,F,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,androidx.compose.ui.text.TextStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,org.jetbrains.jewel.foundation.lazy.SelectableLazyListState,androidx.compose.runtime.Composer,I,I,I):V
+- sf:selectedItemIndex(org.jetbrains.jewel.foundation.lazy.SelectableLazyListState,java.util.List,kotlin.jvm.functions.Function2):I
f:org.jetbrains.jewel.ui.component.ListItemState
- sf:$stable:I
- (Z,Z):V
@@ -465,7 +473,6 @@ f:org.jetbrains.jewel.ui.component.MenuItemState$Companion
- bs:of-moUeATs$default(org.jetbrains.jewel.ui.component.MenuItemState$Companion,Z,Z,Z,Z,Z,Z,I,java.lang.Object):J
f:org.jetbrains.jewel.ui.component.MenuKt
- sf:MenuSeparator(androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuItemMetrics,org.jetbrains.jewel.ui.component.styling.MenuItemColors,androidx.compose.runtime.Composer,I,I):V
-- sf:MenuSubmenuItem(androidx.compose.ui.Modifier,Z,Z,java.lang.String,java.lang.Class,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.MenuStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
- sf:MenuSubmenuItem(androidx.compose.ui.Modifier,Z,Z,org.jetbrains.jewel.ui.icon.IconKey,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.MenuStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
- sf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V
- sf:items(org.jetbrains.jewel.ui.component.MenuScope,I,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function3):V
@@ -489,9 +496,6 @@ org.jetbrains.jewel.ui.component.MenuScope
- bs:selectableItem$default(org.jetbrains.jewel.ui.component.MenuScope,Z,org.jetbrains.jewel.ui.icon.IconKey,java.util.Set,kotlin.jvm.functions.Function0,Z,kotlin.jvm.functions.Function2,I,java.lang.Object):V
- a:submenu(Z,org.jetbrains.jewel.ui.icon.IconKey,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2):V
- bs:submenu$default(org.jetbrains.jewel.ui.component.MenuScope,Z,org.jetbrains.jewel.ui.icon.IconKey,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,I,java.lang.Object):V
-f:org.jetbrains.jewel.ui.component.PlatformIconKt
-- sf:PlatformIcon-uDo3WH8(org.jetbrains.jewel.ui.icon.IntelliJIconKey,java.lang.String,androidx.compose.ui.Modifier,J,org.jetbrains.jewel.ui.painter.PainterHint,androidx.compose.runtime.Composer,I,I):V
-- sf:PlatformIcon-uDo3WH8(org.jetbrains.jewel.ui.icon.IntelliJIconKey,java.lang.String,androidx.compose.ui.Modifier,J,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.PopupContainerKt
- sf:PopupContainer(kotlin.jvm.functions.Function0,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,androidx.compose.ui.window.PopupProperties,androidx.compose.ui.window.PopupPositionProvider,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.PopupManager
@@ -545,9 +549,6 @@ f:org.jetbrains.jewel.ui.component.ScrollableContainerKt
- sf:HorizontallyScrollableContainer(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
- sf:HorizontallyScrollableContainer(androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
- sf:HorizontallyScrollableContainer(androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.foundation.ScrollState,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
-- bsf:ScrollableContainer(androidx.compose.foundation.lazy.LazyListState,androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
-- bsf:ScrollableContainer(androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
-- bsf:ScrollableContainer(androidx.compose.ui.Modifier,androidx.compose.foundation.ScrollState,androidx.compose.foundation.ScrollState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
- sf:VerticallyScrollableContainer(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
- sf:VerticallyScrollableContainer(androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
- sf:VerticallyScrollableContainer(androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.foundation.ScrollState,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,Z,Z,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.jvm.functions.Function3,androidx.compose.runtime.Composer,I,I):V
@@ -660,9 +661,13 @@ f:org.jetbrains.jewel.ui.component.SelectableIconButtonState$Companion
- bs:of-z9lnavA$default(org.jetbrains.jewel.ui.component.SelectableIconButtonState$Companion,Z,Z,Z,Z,Z,Z,I,java.lang.Object):J
f:org.jetbrains.jewel.ui.component.SimpleListItemKt
- sf:SimpleListItem-0vH8DBg(org.jetbrains.jewel.ui.component.ListItemState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:SimpleListItem-J1qPv4o(Z,Z,androidx.compose.ui.graphics.ColorFilter,java.util.List,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I,I):V
+- sf:SimpleListItem-Wu8B24Y(java.lang.String,org.jetbrains.jewel.ui.component.ListItemState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,androidx.compose.ui.graphics.ColorFilter,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I,I):V
+- sf:SimpleListItem-XFD2ZOI(java.lang.String,Z,Z,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,androidx.compose.ui.graphics.ColorFilter,org.jetbrains.jewel.ui.painter.PainterHint[],androidx.compose.runtime.Composer,I,I,I):V
- sf:SimpleListItem-aqv2aB4(java.lang.String,Z,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,androidx.compose.runtime.Composer,I,I):V
- sf:SimpleListItem-eKw1uXw(java.lang.String,org.jetbrains.jewel.ui.component.ListItemState,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,androidx.compose.runtime.Composer,I,I):V
- sf:SimpleListItem-gMrHQkA(Z,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,Z,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:SimpleListItem-tJlDC5Y(org.jetbrains.jewel.ui.component.ListItemState,androidx.compose.ui.graphics.ColorFilter,java.util.List,androidx.compose.ui.Modifier,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.icon.IconKey,java.lang.String,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,F,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.SliderKt
- sf:Slider(F,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,kotlin.ranges.ClosedFloatingPointRange,I,kotlin.jvm.functions.Function0,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.SliderStyle,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.ui.component.SliderState
@@ -802,11 +807,9 @@ f:org.jetbrains.jewel.ui.component.TabsKt
f:org.jetbrains.jewel.ui.component.TextAreaKt
- sf:TextArea(androidx.compose.foundation.text.input.TextFieldState,androidx.compose.ui.Modifier,Z,Z,androidx.compose.foundation.text.input.InputTransformation,androidx.compose.ui.text.TextStyle,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.input.KeyboardActionHandler,androidx.compose.foundation.text.input.TextFieldLineLimits,kotlin.jvm.functions.Function2,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.Outline,kotlin.jvm.functions.Function2,androidx.compose.ui.Modifier,androidx.compose.foundation.text.input.OutputTransformation,Z,androidx.compose.foundation.ScrollState,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,androidx.compose.runtime.Composer,I,I,I):V
- sf:TextArea(androidx.compose.ui.text.input.TextFieldValue,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,Z,kotlin.jvm.functions.Function2,Z,org.jetbrains.jewel.ui.Outline,androidx.compose.ui.text.input.VisualTransformation,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.KeyboardActions,I,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,androidx.compose.ui.text.TextStyle,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I,I):V
-- sf:TextArea(java.lang.String,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,Z,org.jetbrains.jewel.ui.Outline,kotlin.jvm.functions.Function2,Z,androidx.compose.ui.text.input.VisualTransformation,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.KeyboardActions,I,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,androidx.compose.ui.text.TextStyle,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I,I):V
f:org.jetbrains.jewel.ui.component.TextFieldKt
- sf:TextField(androidx.compose.foundation.text.input.TextFieldState,androidx.compose.ui.Modifier,Z,Z,androidx.compose.foundation.text.input.InputTransformation,androidx.compose.ui.text.TextStyle,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.input.KeyboardActionHandler,kotlin.jvm.functions.Function2,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.Outline,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,androidx.compose.foundation.text.input.OutputTransformation,Z,androidx.compose.runtime.Composer,I,I,I):V
- sf:TextField(androidx.compose.ui.text.input.TextFieldValue,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,Z,org.jetbrains.jewel.ui.Outline,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,Z,androidx.compose.ui.text.input.VisualTransformation,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.KeyboardActions,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,androidx.compose.ui.text.TextStyle,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.runtime.Composer,I,I,I):V
-- sf:TextField(java.lang.String,kotlin.jvm.functions.Function1,androidx.compose.ui.Modifier,Z,Z,org.jetbrains.jewel.ui.Outline,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,Z,androidx.compose.ui.text.input.VisualTransformation,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.KeyboardActions,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.runtime.Composer,I,I,I):V
f:org.jetbrains.jewel.ui.component.TextKt
- sf:Text-F-Jr8PA(androidx.compose.ui.text.AnnotatedString,androidx.compose.ui.Modifier,J,J,androidx.compose.ui.text.font.FontStyle,androidx.compose.ui.text.font.FontWeight,androidx.compose.ui.text.font.FontFamily,J,androidx.compose.ui.text.style.TextDecoration,I,J,I,Z,I,java.util.Map,kotlin.jvm.functions.Function1,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I,I):V
- sf:Text-bAzTDeA(java.lang.String,androidx.compose.ui.Modifier,J,J,androidx.compose.ui.text.font.FontStyle,androidx.compose.ui.text.font.FontWeight,androidx.compose.ui.text.font.FontFamily,J,androidx.compose.ui.text.style.TextDecoration,I,J,I,Z,I,kotlin.jvm.functions.Function1,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I,I):V
diff --git a/platform/jewel/ui/api/ui.api b/platform/jewel/ui/api/ui.api
index 2e249cf5f5e9..43f1736b207a 100644
--- a/platform/jewel/ui/api/ui.api
+++ b/platform/jewel/ui/api/ui.api
@@ -251,6 +251,7 @@ public final class org/jetbrains/jewel/ui/component/CircularProgressIndicatorKt
}
public final class org/jetbrains/jewel/ui/component/ComboBoxKt {
+ public static final fun ComboBox-05tvjtU (Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lorg/jetbrains/jewel/ui/component/PopupManager;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V
public static final fun ComboBox-xYaah8o (Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lorg/jetbrains/jewel/ui/component/PopupManager;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V
}
@@ -290,10 +291,6 @@ public final class org/jetbrains/jewel/ui/component/ComboBoxState$Companion {
public final class org/jetbrains/jewel/ui/component/ComposableSingletons$BannerKt {
public static final field INSTANCE Lorg/jetbrains/jewel/ui/component/ComposableSingletons$BannerKt;
- public static field lambda-1 Lkotlin/jvm/functions/Function2;
- public static field lambda-2 Lkotlin/jvm/functions/Function2;
- public static field lambda-3 Lkotlin/jvm/functions/Function2;
- public static field lambda-4 Lkotlin/jvm/functions/Function2;
public fun ()V
public final fun getLambda-1$ui ()Lkotlin/jvm/functions/Function2;
public final fun getLambda-2$ui ()Lkotlin/jvm/functions/Function2;
@@ -303,20 +300,25 @@ public final class org/jetbrains/jewel/ui/component/ComposableSingletons$BannerK
public final class org/jetbrains/jewel/ui/component/ComposableSingletons$InlineBannerKt {
public static final field INSTANCE Lorg/jetbrains/jewel/ui/component/ComposableSingletons$InlineBannerKt;
- public static field lambda-1 Lkotlin/jvm/functions/Function2;
- public static field lambda-2 Lkotlin/jvm/functions/Function2;
- public static field lambda-3 Lkotlin/jvm/functions/Function2;
- public static field lambda-4 Lkotlin/jvm/functions/Function2;
public fun ()V
public final fun getLambda-1$ui ()Lkotlin/jvm/functions/Function2;
public final fun getLambda-2$ui ()Lkotlin/jvm/functions/Function2;
public final fun getLambda-3$ui ()Lkotlin/jvm/functions/Function2;
public final fun getLambda-4$ui ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-5$ui ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-6$ui ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-7$ui ()Lkotlin/jvm/functions/Function2;
+ public final fun getLambda-8$ui ()Lkotlin/jvm/functions/Function2;
+}
+
+public final class org/jetbrains/jewel/ui/component/ComposableSingletons$ListComboBoxKt {
+ public static final field INSTANCE Lorg/jetbrains/jewel/ui/component/ComposableSingletons$ListComboBoxKt;
+ public fun ()V
+ public final fun getLambda-1$ui ()Lkotlin/jvm/functions/Function5;
}
public final class org/jetbrains/jewel/ui/component/ComposableSingletons$MenuKt {
public static final field INSTANCE Lorg/jetbrains/jewel/ui/component/ComposableSingletons$MenuKt;
- public static field lambda-1 Lkotlin/jvm/functions/Function2;
public fun ()V
public final fun getLambda-1$ui ()Lkotlin/jvm/functions/Function2;
}
@@ -446,12 +448,8 @@ public final class org/jetbrains/jewel/ui/component/IconButtonState$Companion {
public final class org/jetbrains/jewel/ui/component/IconKt {
public static final fun Icon (Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
- public static final fun Icon (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
- public static final fun Icon (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/Modifier;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
public static final fun Icon (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/Class;Landroidx/compose/ui/graphics/ColorFilter;Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
public static final fun Icon (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/Class;Landroidx/compose/ui/graphics/ColorFilter;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
- public static final fun Icon-FHprtrg (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroidx/compose/ui/Modifier;JLorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
- public static final fun Icon-FHprtrg (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Landroidx/compose/ui/Modifier;J[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
public static final fun Icon-FHprtrg (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/Class;JLorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
public static final fun Icon-FHprtrg (Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/Class;J[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
public static final fun Icon-ww6aTOc (Landroidx/compose/ui/graphics/ImageBitmap;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
@@ -461,10 +459,14 @@ public final class org/jetbrains/jewel/ui/component/IconKt {
}
public final class org/jetbrains/jewel/ui/component/InlineBannerKt {
- public static final fun ErrorInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
- public static final fun InformationInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
- public static final fun SuccessInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
- public static final fun WarningInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
+ public static final fun ErrorInlineBanner (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun ErrorInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
+ public static final fun InformationInlineBanner (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun InformationInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
+ public static final fun SuccessInlineBanner (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun SuccessInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
+ public static final fun WarningInlineBanner (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun WarningInlineBanner (Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lorg/jetbrains/jewel/ui/component/styling/InlineBannerStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;II)V
}
public final class org/jetbrains/jewel/ui/component/InputFieldState : org/jetbrains/jewel/foundation/state/FocusableComponentState {
@@ -553,11 +555,10 @@ public final class org/jetbrains/jewel/ui/component/LinkState$Companion {
}
public final class org/jetbrains/jewel/ui/component/ListComboBoxKt {
- public static final fun EditableListComboBox-lYrZsNM (Ljava/util/List;Landroidx/compose/ui/Modifier;ZILorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;III)V
- public static final fun EditableListComboBox-xKBSf-U (Ljava/util/List;ILkotlin/jvm/functions/Function2;Landroidx/compose/foundation/text/input/TextFieldState;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;III)V
- public static final fun ListComboBox-8u0NR3k (Ljava/util/List;ILkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;III)V
- public static final fun ListComboBox-lYrZsNM (Ljava/util/List;Landroidx/compose/ui/Modifier;ZILorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;III)V
- public static final fun selectedItemIndex (Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)I
+ public static final fun EditableListComboBox-xzYpEKs (Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/runtime/Composer;III)V
+ public static final fun ListComboBox-xKBSf-U (Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;III)V
+ public static final fun ListComboBox-xzYpEKs (Ljava/util/List;ILkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/Outline;FLandroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/ComboBoxStyle;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/runtime/Composer;III)V
+ public static final fun selectedItemIndex (Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Ljava/util/List;Lkotlin/jvm/functions/Function2;)I
}
public final class org/jetbrains/jewel/ui/component/ListItemState {
@@ -609,7 +610,6 @@ public final class org/jetbrains/jewel/ui/component/MenuItemState$Companion {
public final class org/jetbrains/jewel/ui/component/MenuKt {
public static final fun MenuSeparator (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/MenuItemMetrics;Lorg/jetbrains/jewel/ui/component/styling/MenuItemColors;Landroidx/compose/runtime/Composer;II)V
- public static final fun MenuSubmenuItem (Landroidx/compose/ui/Modifier;ZZLjava/lang/String;Ljava/lang/Class;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/MenuStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
public static final fun MenuSubmenuItem (Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/icon/IconKey;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/MenuStyle;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
public static final fun PopupMenu (Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/MenuStyle;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
public static final fun items (Lorg/jetbrains/jewel/ui/component/MenuScope;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V
@@ -644,11 +644,6 @@ public final class org/jetbrains/jewel/ui/component/MenuScope$DefaultImpls {
public static synthetic fun submenu$default (Lorg/jetbrains/jewel/ui/component/MenuScope;ZLorg/jetbrains/jewel/ui/icon/IconKey;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
}
-public final class org/jetbrains/jewel/ui/component/PlatformIconKt {
- public static final fun PlatformIcon-uDo3WH8 (Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
- public static final fun PlatformIcon-uDo3WH8 (Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;Ljava/lang/String;Landroidx/compose/ui/Modifier;J[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;II)V
-}
-
public final class org/jetbrains/jewel/ui/component/PopupContainerKt {
public static final fun PopupContainer (Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/PopupContainerStyle;Landroidx/compose/ui/window/PopupProperties;Landroidx/compose/ui/window/PopupPositionProvider;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
}
@@ -714,9 +709,6 @@ public final class org/jetbrains/jewel/ui/component/ScrollableContainerKt {
public static final fun HorizontallyScrollableContainer (Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
public static final fun HorizontallyScrollableContainer (Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
public static final fun HorizontallyScrollableContainer (Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
- public static final synthetic fun ScrollableContainer (Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
- public static final synthetic fun ScrollableContainer (Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
- public static final synthetic fun ScrollableContainer (Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/ScrollState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
public static final fun VerticallyScrollableContainer (Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
public static final fun VerticallyScrollableContainer (Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
public static final fun VerticallyScrollableContainer (Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
@@ -857,9 +849,13 @@ public final class org/jetbrains/jewel/ui/component/SelectableIconButtonState$Co
public final class org/jetbrains/jewel/ui/component/SimpleListItemKt {
public static final fun SimpleListItem-0vH8DBg (Lorg/jetbrains/jewel/ui/component/ListItemState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun SimpleListItem-J1qPv4o (ZZLandroidx/compose/ui/graphics/ColorFilter;Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V
+ public static final fun SimpleListItem-Wu8B24Y (Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/ListItemState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLandroidx/compose/ui/graphics/ColorFilter;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;III)V
+ public static final fun SimpleListItem-XFD2ZOI (Ljava/lang/String;ZZLandroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLandroidx/compose/ui/graphics/ColorFilter;[Lorg/jetbrains/jewel/ui/painter/PainterHint;Landroidx/compose/runtime/Composer;III)V
public static final fun SimpleListItem-aqv2aB4 (Ljava/lang/String;ZLandroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLandroidx/compose/runtime/Composer;II)V
public static final fun SimpleListItem-eKw1uXw (Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/ListItemState;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLandroidx/compose/runtime/Composer;II)V
public static final fun SimpleListItem-gMrHQkA (ZLandroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;ZLorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+ public static final fun SimpleListItem-tJlDC5Y (Lorg/jetbrains/jewel/ui/component/ListItemState;Landroidx/compose/ui/graphics/ColorFilter;Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/ui/icon/IconKey;Ljava/lang/String;Lorg/jetbrains/jewel/ui/component/styling/SimpleListItemStyle;FLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
}
public final class org/jetbrains/jewel/ui/component/SliderKt {
@@ -1039,13 +1035,11 @@ public final class org/jetbrains/jewel/ui/component/TabsKt {
public final class org/jetbrains/jewel/ui/component/TextAreaKt {
public static final fun TextArea (Landroidx/compose/foundation/text/input/TextFieldState;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/foundation/text/input/InputTransformation;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/input/KeyboardActionHandler;Landroidx/compose/foundation/text/input/TextFieldLineLimits;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/TextAreaStyle;Lorg/jetbrains/jewel/ui/Outline;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/input/OutputTransformation;ZLandroidx/compose/foundation/ScrollState;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;Landroidx/compose/runtime/Composer;III)V
public static final fun TextArea (Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;ZLorg/jetbrains/jewel/ui/Outline;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ILkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/ui/component/styling/TextAreaStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;III)V
- public static final fun TextArea (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/Outline;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ILkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/ui/component/styling/TextAreaStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;III)V
}
public final class org/jetbrains/jewel/ui/component/TextFieldKt {
public static final fun TextField (Landroidx/compose/foundation/text/input/TextFieldState;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/foundation/text/input/InputTransformation;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/input/KeyboardActionHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lorg/jetbrains/jewel/ui/component/styling/TextFieldStyle;Lorg/jetbrains/jewel/ui/Outline;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/text/input/OutputTransformation;ZLandroidx/compose/runtime/Composer;III)V
public static final fun TextField (Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/Outline;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/ui/component/styling/TextFieldStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V
- public static final fun TextField (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLorg/jetbrains/jewel/ui/Outline;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/ui/component/styling/TextFieldStyle;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V
}
public final class org/jetbrains/jewel/ui/component/TextKt {
@@ -3041,6 +3035,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Actions {
public final fun getAnnotate ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getArrowCollapse ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getArrowExpand ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getAttach ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getBack ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getBuildAutoReloadChanges ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getBuildLoadChanges ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3194,8 +3189,8 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Actions {
public final fun getResume ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getRollback ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getRunAll ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getRunAnything ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getRunToCursor ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getRun_anything ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getScratch ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getSearch ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getSearchNewLine ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3382,11 +3377,13 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Debugger {
public final fun getThawAll ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadAtBreakpoint ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadCurrent ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getThreadDaemon ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadFrozen ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadGroup ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadGroupCurrent ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadRunning ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreadSuspended ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getThreadVirtual ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getThreads ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getValue ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getVariablesTab ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3398,7 +3395,6 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Debugger {
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Debugger$ThreadStates {
public static final field $stable I
public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Debugger$ThreadStates;
- public final fun getDaemon_sign ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getIdle ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getSocket ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
@@ -3450,6 +3446,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$FileTypes {
public final fun getAny_type ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getArchive ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getAspectj ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getBinaryData ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getConfig ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getContexts ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getContextsModifier ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3558,6 +3555,8 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$General {
public final fun getInheritedMethod ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInlineAdd ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInlineAddHover ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getInlineClose ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getInlineCloseHover ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInlineCopy ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInlineCopyHover ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInlineRefresh ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3569,6 +3568,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$General {
public final fun getInspectionsError ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsErrorEmpty ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsEye ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getInspectionsGrammar ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsMixed ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsOK ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsOKEmpty ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3579,13 +3579,14 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$General {
public final fun getInspectionsWarning ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInspectionsWarningEmpty ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getKeyboard ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getLanguage ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLayout ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLayoutEditorOnly ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLayoutEditorPreview ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLayoutPreviewOnly ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLinkDropTriangle ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getLocalizationSettings ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getLocate ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getMenu ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getModified ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getModifiedSelected ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getMoreTabs ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3682,6 +3683,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Gutter {
public final fun getSuggestedRefactoringBulbDisabled ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUnfold ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUnique ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getWeb ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getWriteAccess ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
@@ -3741,7 +3743,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Ide {
public final fun getNavBarSeparator ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getOutgoingChangesOn ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getPipette ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getPipette_rollover ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getPipetteRollover ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getPowerSaveMode ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getRating ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getRating1 ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -3800,13 +3802,6 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$RoundShadow {
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$RunAnything {
public static final field $stable I
public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$RunAnything;
- public final fun getOpenRecentProject ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
-}
-
-public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$Settings {
- public static final field $stable I
- public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$Settings;
- public final fun getNewUI ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Ide$Shadow {
@@ -3974,11 +3969,10 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes {
public final fun getConfigFolder ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getConsole ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getConstant ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getConstructor ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getController ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getCopyOfFolder ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getCustomRegion ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getCvs_global ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getCvs_roots ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getDataColumn ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getDataSchema ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getDataTables ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4007,9 +4001,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes {
public final fun getIdeaModule ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getIdeaProject ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInclude ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getInspectionResults ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getInterface ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
- public final fun getJ2eeParameter ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getJarDirectory ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getJavaDocFolder ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getJavaModule ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4094,6 +4086,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes {
public final fun getUndeploy ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUnknown ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUnknownJdk ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getUnloadedProject ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUpFolder ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getUpLevel ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getVariable ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4109,7 +4102,6 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes {
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes$Jsf {
public static final field $stable I
public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Nodes$Jsf;
- public final fun getRenderer ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$ObjectBrowser {
@@ -4433,14 +4425,17 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Toolwindows {
public final fun getTask ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowAnalyzeDataflow ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowAnt ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getToolWindowAskAI ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowBookmarks ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowBuild ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowChanges ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowCommander ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowCommit ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getToolWindowComponents ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowCoverage ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowDataView ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowDebugger ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getToolWindowDevMode ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowDuplicates ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowFavorites ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowFind ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4450,6 +4445,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Toolwindows {
public final fun getToolWindowJsonPath ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowMessages ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowModuleDependencies ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getToolWindowOverflow ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowPalette ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowProblems ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowProblemsEmpty ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4458,6 +4454,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Toolwindows {
public final fun getToolWindowProject ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowRun ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowRunWithCoverage ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getToolWindowServer ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowServices ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowStructure ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getToolWindowTodo ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
@@ -4534,6 +4531,7 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Webreferences {
public static final field $stable I
public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Webreferences;
public final fun getMessageQueue ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getOpenapi ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getServer ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
public final fun getWebSocket ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
@@ -4588,6 +4586,13 @@ public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Windows {
public final fun getRestoreSmall ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
}
+public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Windows$Mouse {
+ public static final field $stable I
+ public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Windows$Mouse;
+ public final fun getCursorPointingHand ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+ public final fun getCursorText ()Lorg/jetbrains/jewel/ui/icon/IntelliJIconKey;
+}
+
public final class org/jetbrains/jewel/ui/icons/AllIconsKeys$Xml {
public static final field $stable I
public static final field INSTANCE Lorg/jetbrains/jewel/ui/icons/AllIconsKeys$Xml;
diff --git a/platform/jewel/ui/build.gradle.kts b/platform/jewel/ui/build.gradle.kts
index 23cced779ad4..b4494c355af6 100644
--- a/platform/jewel/ui/build.gradle.kts
+++ b/platform/jewel/ui/build.gradle.kts
@@ -1,4 +1,3 @@
-import org.jetbrains.compose.ComposeBuildConfig
import org.jmailen.gradle.kotlinter.tasks.FormatTask
import org.jmailen.gradle.kotlinter.tasks.LintTask
@@ -12,9 +11,6 @@ plugins {
alias(libs.plugins.kotlinx.serialization)
}
-private val composeVersion
- get() = ComposeBuildConfig.composeVersion
-
dependencies {
api(projects.foundation)
implementation(compose.components.resources)
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ComboBox.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ComboBox.kt
index 9a03a32426e5..cd4f3621fcad 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ComboBox.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ComboBox.kt
@@ -7,7 +7,6 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
@@ -45,7 +44,9 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.takeOrElse
import androidx.compose.ui.window.PopupProperties
+import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.foundation.Stroke
import org.jetbrains.jewel.foundation.modifier.border
import org.jetbrains.jewel.foundation.modifier.onHover
@@ -58,12 +59,32 @@ import org.jetbrains.jewel.ui.focusOutline
import org.jetbrains.jewel.ui.outline
import org.jetbrains.jewel.ui.theme.comboBoxStyle
+/**
+ * A dropdown component that displays a text label and a popup with custom content.
+ *
+ * This component provides a standard dropdown UI with a text label. When clicked, it displays a popup with customizable
+ * content. Supports keyboard navigation, focus management, and various visual states.
+ *
+ * @param labelText The text to display in the dropdown field
+ * @param modifier Modifier to be applied to the combo box
+ * @param popupModifier Modifier to be applied to the popup
+ * @param enabled Controls whether the combo box can be interacted with
+ * @param outline The outline style to be applied to the combo box
+ * @param maxPopupHeight The maximum height of the popup
+ * @param interactionSource Source of interactions for this combo box
+ * @param style The visual styling configuration for the combo box
+ * @param textStyle The typography style to be applied to the text
+ * @param onArrowDownPress Called when the down arrow key is pressed while the popup is visible
+ * @param onArrowUpPress Called when the up arrow key is pressed while the popup is visible
+ * @param popupManager Manager for controlling the popup visibility state
+ * @param popupContent Composable content for the popup
+ */
@Composable
public fun ComboBox(
labelText: String,
modifier: Modifier = Modifier,
popupModifier: Modifier = Modifier,
- isEnabled: Boolean = true,
+ enabled: Boolean = true,
outline: Outline = Outline.None,
maxPopupHeight: Dp = Dp.Unspecified,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
@@ -78,10 +99,10 @@ public fun ComboBox(
val popupVisible by popupManager.isPopupVisible
- var comboBoxState by remember { mutableStateOf(ComboBoxState.of(enabled = isEnabled)) }
+ var comboBoxState by remember { mutableStateOf(ComboBoxState.of(enabled = enabled)) }
val comboBoxFocusRequester = remember { FocusRequester() }
- remember(isEnabled) { comboBoxState = comboBoxState.copy(enabled = isEnabled) }
+ remember(enabled) { comboBoxState = comboBoxState.copy(enabled = enabled) }
LaunchedEffect(interactionSource) {
interactionSource.interactions.collect { interaction ->
@@ -110,7 +131,7 @@ public fun ComboBox(
popupManager.setPopupVisible(false)
}
}
- .thenIf(isEnabled) {
+ .thenIf(enabled) {
focusable(true, interactionSource)
.onHover { chevronHovered = it }
.pointerInput(interactionSource) {
@@ -181,7 +202,7 @@ public fun ComboBox(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.focusable(false).focusProperties { canFocus = false },
) {
- val textColor = if (isEnabled) Color.Unspecified else style.colors.borderDisabled
+ val textColor = if (enabled) Color.Unspecified else style.colors.borderDisabled
Text(
text = labelText,
style = textStyle.copy(color = textColor),
@@ -189,22 +210,16 @@ public fun ComboBox(
overflow = TextOverflow.Ellipsis,
modifier =
Modifier.testTag("Jewel.ComboBox.NonEditableText")
- .fillMaxWidth()
.weight(1f)
.padding(style.metrics.contentPadding),
)
- Chevron(style, isEnabled)
+ Chevron(style, enabled)
}
}
if (popupVisible) {
- val maxHeight =
- if (maxPopupHeight == Dp.Unspecified) {
- JewelTheme.comboBoxStyle.metrics.maxPopupHeight
- } else {
- maxPopupHeight
- }
+ val maxHeight = maxPopupHeight.takeOrElse { style.metrics.maxPopupHeight }
PopupContainer(
onDismissRequest = {
@@ -226,13 +241,196 @@ public fun ComboBox(
}
}
+/**
+ * A dropdown component that displays custom content in the label area and a popup with custom content.
+ *
+ * This component provides a standard dropdown UI with customizable label content. When clicked, it displays a popup
+ * with customizable content. Supports keyboard navigation, focus management, and various visual states.
+ *
+ * This version of ComboBox allows for complete customization of the label area through a composable function.
+ *
+ * @param modifier Modifier to be applied to the combo box
+ * @param popupModifier Modifier to be applied to the popup
+ * @param enabled Controls whether the combo box can be interacted with
+ * @param outline The outline style to be applied to the combo box
+ * @param maxPopupHeight The maximum height of the popup
+ * @param interactionSource Source of interactions for this combo box
+ * @param style The visual styling configuration for the combo box
+ * @param onArrowDownPress Called when the down arrow key is pressed while the popup is visible
+ * @param onArrowUpPress Called when the up arrow key is pressed while the popup is visible
+ * @param popupManager Manager for controlling the popup visibility state
+ * @param labelContent Composable content for the label area of the combo box
+ * @param popupContent Composable content for the popup
+ */
+@ExperimentalJewelApi
@Composable
-private fun Chevron(style: ComboBoxStyle, isEnabled: Boolean) {
+public fun ComboBox(
+ modifier: Modifier = Modifier,
+ popupModifier: Modifier = Modifier,
+ enabled: Boolean = true,
+ outline: Outline = Outline.None,
+ maxPopupHeight: Dp = Dp.Unspecified,
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
+ style: ComboBoxStyle = JewelTheme.comboBoxStyle,
+ onArrowDownPress: () -> Unit = {},
+ onArrowUpPress: () -> Unit = {},
+ popupManager: PopupManager = PopupManager(),
+ labelContent: @Composable (() -> Unit),
+ popupContent: @Composable (() -> Unit),
+) {
+ var chevronHovered by remember { mutableStateOf(false) }
+
+ val popupVisible by popupManager.isPopupVisible
+
+ var comboBoxState by remember { mutableStateOf(ComboBoxState.of(enabled = enabled)) }
+ val comboBoxFocusRequester = remember { FocusRequester() }
+
+ remember(enabled) { comboBoxState = comboBoxState.copy(enabled = enabled) }
+
+ LaunchedEffect(interactionSource) {
+ interactionSource.interactions.collect { interaction ->
+ when (interaction) {
+ is PressInteraction.Press -> comboBoxState = comboBoxState.copy(pressed = true)
+ is PressInteraction.Cancel,
+ is PressInteraction.Release -> comboBoxState = comboBoxState.copy(pressed = false)
+ is HoverInteraction.Enter -> comboBoxState = comboBoxState.copy(hovered = true)
+ is HoverInteraction.Exit -> comboBoxState = comboBoxState.copy(hovered = false)
+ }
+ }
+ }
+
+ val shape = RoundedCornerShape(style.metrics.cornerSize)
+ val borderColor by style.colors.borderFor(comboBoxState)
+ var comboBoxWidth by remember { mutableStateOf(Dp.Unspecified) }
+ val density = LocalDensity.current
+
+ Box(
+ modifier =
+ modifier
+ .focusRequester(comboBoxFocusRequester)
+ .onFocusChanged { focusState ->
+ comboBoxState = comboBoxState.copy(focused = focusState.isFocused)
+ if (!focusState.isFocused) {
+ popupManager.setPopupVisible(false)
+ }
+ }
+ .thenIf(enabled) {
+ focusable(true, interactionSource)
+ .onHover { chevronHovered = it }
+ .pointerInput(interactionSource) {
+ detectPressAndCancel(
+ onPress = {
+ popupManager.setPopupVisible(!popupVisible)
+ comboBoxFocusRequester.requestFocus()
+ },
+ onCancel = { popupManager.setPopupVisible(false) },
+ )
+ }
+ .semantics(mergeDescendants = true) { role = Role.DropdownList }
+ .onPreviewKeyEvent {
+ if (it.type != KeyEventType.KeyDown) return@onPreviewKeyEvent false
+
+ when {
+ it.key == Key.Spacebar -> {
+ popupManager.setPopupVisible(!popupVisible)
+ true
+ }
+
+ it.key == Key.DirectionDown -> {
+ if (popupVisible) {
+ onArrowDownPress()
+ } else {
+ popupManager.setPopupVisible(true)
+ }
+ true
+ }
+
+ it.key == Key.DirectionUp && popupVisible -> {
+ onArrowUpPress()
+ true
+ }
+
+ it.key == Key.Escape && popupVisible -> {
+ popupManager.setPopupVisible(false)
+ true
+ }
+
+ else -> false
+ }
+ }
+ }
+ .background(style.colors.backgroundFor(comboBoxState, false).value, shape)
+ .thenIf(outline == Outline.None) {
+ focusOutline(state = comboBoxState, outlineShape = shape, alignment = Stroke.Alignment.Center)
+ .border(
+ alignment = Stroke.Alignment.Inside,
+ width = style.metrics.borderWidth,
+ color = borderColor,
+ shape = shape,
+ )
+ }
+ .outline(
+ state = comboBoxState,
+ outline = outline,
+ outlineShape = shape,
+ alignment = Stroke.Alignment.Center,
+ )
+ .widthIn(min = style.metrics.minSize.width)
+ .height(style.metrics.minSize.height)
+ .onSizeChanged { comboBoxWidth = with(density) { it.width.toDp() } },
+ contentAlignment = Alignment.CenterStart,
+ ) {
+ CompositionLocalProvider(LocalContentColor provides style.colors.contentFor(comboBoxState).value) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier.focusable(false).focusProperties { canFocus = false },
+ ) {
+ Box(
+ modifier = Modifier.weight(1f).height(style.metrics.minSize.height),
+ contentAlignment = Alignment.CenterStart,
+ ) {
+ labelContent()
+ }
+ Chevron(style, enabled)
+ }
+ }
+
+ if (popupVisible) {
+ val maxHeight = maxPopupHeight.takeOrElse { style.metrics.maxPopupHeight }
+
+ PopupContainer(
+ onDismissRequest = {
+ if (!chevronHovered) {
+ popupManager.setPopupVisible(false)
+ }
+ },
+ modifier =
+ popupModifier
+ .testTag("Jewel.ComboBox.Popup")
+ .heightIn(max = maxHeight)
+ .width(comboBoxWidth)
+ .onClick { popupManager.setPopupVisible(false) },
+ horizontalAlignment = Alignment.Start,
+ popupProperties = PopupProperties(focusable = false),
+ content = popupContent,
+ )
+ }
+ }
+}
+
+/**
+ * Renders the chevron (down arrow) icon for the combo box.
+ *
+ * @param style The visual styling configuration for the combo box
+ * @param enabled Whether the combo box is enabled, affects the icon color
+ */
+@Composable
+private fun Chevron(style: ComboBoxStyle, enabled: Boolean) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.testTag("Jewel.ComboBox.ChevronContainer").size(style.metrics.arrowAreaSize),
) {
- val iconColor = if (isEnabled) Color.Unspecified else style.colors.borderDisabled
+ val iconColor = if (enabled) Color.Unspecified else style.colors.borderDisabled
Icon(key = style.icons.chevronDown, tint = iconColor, contentDescription = null)
}
}
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt
index 326f18c5ac1f..af460d8a334e 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt
@@ -33,6 +33,7 @@ import androidx.compose.ui.input.InputMode
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.semantics.Role
+import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
import org.jetbrains.jewel.foundation.Stroke
import org.jetbrains.jewel.foundation.modifier.border
import org.jetbrains.jewel.foundation.modifier.thenIf
@@ -53,10 +54,8 @@ import org.jetbrains.jewel.ui.outline
import org.jetbrains.jewel.ui.painter.hints.Stateful
import org.jetbrains.jewel.ui.theme.dropdownStyle
-@Deprecated(
- message = "Use ListComboBox instead. This component will be removed in a future release.",
- level = DeprecationLevel.WARNING,
-)
+@ScheduledForRemoval(inVersion = "2025.2")
+@Deprecated(message = "Use ListComboBox instead. This component will be removed in a future release.")
@Composable
public fun Dropdown(
modifier: Modifier = Modifier,
@@ -172,6 +171,8 @@ public fun Dropdown(
}
}
+@ScheduledForRemoval(inVersion = "2025.2")
+@Deprecated(message = "Use ListComboBox instead. Dropdown will be removed in a future release.")
@Immutable
@JvmInline
public value class DropdownState(public val state: ULong) : FocusableComponentState {
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/EditableComboBox.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/EditableComboBox.kt
index 7838991bb124..3621c0ae1d7c 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/EditableComboBox.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/EditableComboBox.kt
@@ -79,7 +79,7 @@ public fun EditableComboBox(
textFieldState: TextFieldState,
modifier: Modifier = Modifier,
popupModifier: Modifier = Modifier,
- isEnabled: Boolean = true,
+ enabled: Boolean = true,
outline: Outline = Outline.None,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
style: ComboBoxStyle = JewelTheme.comboBoxStyle,
@@ -96,9 +96,9 @@ public fun EditableComboBox(
val textFieldInteractionSource = remember { MutableInteractionSource() }
val textFieldFocusRequester = remember { FocusRequester() }
- var comboBoxState by remember { mutableStateOf(ComboBoxState.of(enabled = isEnabled)) }
+ var comboBoxState by remember { mutableStateOf(ComboBoxState.of(enabled = enabled)) }
- remember(isEnabled) { comboBoxState = comboBoxState.copy(enabled = isEnabled) }
+ remember(enabled) { comboBoxState = comboBoxState.copy(enabled = enabled) }
LaunchedEffect(interactionSource) {
interactionSource.interactions.collect { interaction ->
@@ -153,9 +153,9 @@ public fun EditableComboBox(
verticalAlignment = Alignment.CenterVertically,
) {
TextField(
- isEnabled = isEnabled,
+ enabled = enabled,
inputTextFieldState = textFieldState,
- isFocused = comboBoxState.isFocused,
+ focused = comboBoxState.isFocused,
textFieldFocusRequester = textFieldFocusRequester,
style = style,
popupManager = popupManager,
@@ -166,11 +166,11 @@ public fun EditableComboBox(
onEnterPress = onEnterPress,
onFocusedChange = { comboBoxState = comboBoxState.copy(focused = it) },
onHoveredChange = { textFieldHovered = it },
- modifier = Modifier.fillMaxWidth().weight(1f),
+ modifier = Modifier.weight(1f),
)
Chevron(
- isEnabled = isEnabled,
+ enabled = enabled,
style = style,
interactionSource = interactionSource,
onHoveredChange = { chevronHovered = it },
@@ -208,9 +208,9 @@ public fun EditableComboBox(
@Composable
private fun TextField(
modifier: Modifier,
- isEnabled: Boolean,
+ enabled: Boolean,
inputTextFieldState: TextFieldState,
- isFocused: Boolean,
+ focused: Boolean,
textFieldFocusRequester: FocusRequester,
style: ComboBoxStyle,
popupManager: PopupManager,
@@ -222,9 +222,11 @@ private fun TextField(
onFocusedChange: (Boolean) -> Unit,
onHoveredChange: (Boolean) -> Unit,
) {
- val textColor = if (isEnabled) style.colors.content else style.colors.borderDisabled
+ val textColor = if (enabled) style.colors.content else style.colors.borderDisabled
val popupVisible by popupManager.isPopupVisible
+ if (focused) textFieldFocusRequester.requestFocus()
+
BasicTextField(
state = inputTextFieldState,
modifier =
@@ -267,13 +269,13 @@ private fun TextField(
textStyle = textStyle.copy(color = textColor),
cursorBrush = SolidColor(style.colors.content),
interactionSource = textFieldInteractionSource,
- enabled = isEnabled,
+ enabled = enabled,
)
}
@Composable
private fun Chevron(
- isEnabled: Boolean,
+ enabled: Boolean,
style: ComboBoxStyle,
interactionSource: MutableInteractionSource,
onHoveredChange: (Boolean) -> Unit,
@@ -284,7 +286,7 @@ private fun Chevron(
modifier =
Modifier.testTag("Jewel.ComboBox.ChevronContainer")
.size(style.metrics.arrowAreaSize) // Fixed size
- .thenIf(isEnabled) {
+ .thenIf(enabled) {
onHover { onHoveredChange(it) }
.pointerInput(interactionSource) {
detectPressAndCancel(onPress = onPressWhenEnabled, onCancel = onCancelPress)
@@ -300,8 +302,8 @@ private fun Chevron(
}
}
) {
- val dividerColor = if (isEnabled) style.colors.border else style.colors.borderDisabled
- val iconTint = if (isEnabled) Color.Unspecified else style.colors.contentDisabled
+ val dividerColor = if (enabled) style.colors.border else style.colors.borderDisabled
+ val iconTint = if (enabled) Color.Unspecified else style.colors.contentDisabled
Divider(
orientation = Orientation.Vertical,
thickness = style.metrics.borderWidth,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Icon.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Icon.kt
index ab8286f1944e..26871b5a5a19 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Icon.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Icon.kt
@@ -27,7 +27,6 @@ import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.decodeToImageBitmap
import org.jetbrains.compose.resources.decodeToImageVector
@@ -39,102 +38,6 @@ import org.jetbrains.jewel.ui.icon.newUiChecker
import org.jetbrains.jewel.ui.painter.PainterHint
import org.jetbrains.jewel.ui.painter.rememberResourcePainterProvider
-@Deprecated(
- "Use the IconKey-based API instead",
- ReplaceWith(
- "key = Icon(PathIconKey(resource, iconClass), contentDescription = contentDescription, " +
- "colorFilter = colorFilter, modifier = modifier, hints)",
- "org.jetbrains.jewel.ui.icon.PathIconKey",
- ),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun Icon(
- resource: String,
- contentDescription: String?,
- iconClass: Class<*>,
- colorFilter: ColorFilter?,
- modifier: Modifier = Modifier,
- vararg hints: PainterHint,
-) {
- val painterProvider = rememberResourcePainterProvider(resource, iconClass)
- val painter by painterProvider.getPainter(*hints)
-
- Icon(painter = painter, contentDescription = contentDescription, modifier = modifier, colorFilter = colorFilter)
-}
-
-@Deprecated(
- "Use the IconKey-based API instead",
- ReplaceWith(
- "key = Icon(PathIconKey(resource, iconClass), contentDescription = contentDescription, " +
- "colorFilter = colorFilter, modifier = modifier, hint = hint)",
- "org.jetbrains.jewel.ui.icon.PathIconKey",
- ),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun Icon(
- resource: String,
- contentDescription: String?,
- iconClass: Class<*>,
- colorFilter: ColorFilter?,
- modifier: Modifier = Modifier,
- hint: PainterHint,
-) {
- val painterProvider = rememberResourcePainterProvider(resource, iconClass)
- val painter by painterProvider.getPainter(hint)
-
- Icon(painter = painter, contentDescription = contentDescription, modifier = modifier, colorFilter = colorFilter)
-}
-
-@Deprecated(
- "Use the IconKey-based API instead",
- ReplaceWith(
- "Icon(key = PathIconKey(resource, iconClass), contentDescription = contentDescription, " +
- "tint = tint, modifier = modifier, hints = hints)",
- "org.jetbrains.jewel.ui.icon.PathIconKey",
- ),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun Icon(
- resource: String,
- contentDescription: String?,
- iconClass: Class<*>,
- modifier: Modifier = Modifier,
- tint: Color = Color.Unspecified,
- vararg hints: PainterHint,
-) {
- val painterProvider = rememberResourcePainterProvider(resource, iconClass)
- val painter by painterProvider.getPainter(*hints)
-
- Icon(painter = painter, contentDescription = contentDescription, modifier = modifier, tint = tint)
-}
-
-@Deprecated(
- "Use the IconKey-based API instead",
- ReplaceWith(
- "Icon(key = PathIconKey(resource, iconClass), contentDescription = contentDescription, " +
- "tint = tint, modifier = modifier, hint = hint)",
- "org.jetbrains.jewel.ui.icon.PathIconKey",
- ),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun Icon(
- resource: String,
- contentDescription: String?,
- iconClass: Class<*>,
- modifier: Modifier = Modifier,
- tint: Color = Color.Unspecified,
- hint: PainterHint,
-) {
- val painterProvider = rememberResourcePainterProvider(resource, iconClass)
- val painter by painterProvider.getPainter(hint)
-
- Icon(painter = painter, contentDescription = contentDescription, modifier = modifier, tint = tint)
-}
-
@Composable
public fun Icon(
key: IconKey,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InlineBanner.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InlineBanner.kt
index 61e204bfe420..684ed98a3ffa 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InlineBanner.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InlineBanner.kt
@@ -30,6 +30,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight.Companion.Bold
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import org.jetbrains.jewel.foundation.modifier.thenIf
@@ -40,248 +41,502 @@ import org.jetbrains.jewel.ui.icons.AllIconsKeys
import org.jetbrains.jewel.ui.theme.inlineBannerStyle
/**
- * Displays an informational inline banner providing subtle, non-intrusive context or feedback within a particular UI
- * section.
- *
- * The banner uses the inline "information" theme by default, featuring an optional icon, a context message, and
- * optional actions.
- *
- * @param text the primary content of the banner, briefly describing the information it conveys.
- * @param modifier a [Modifier] to customize the layout and appearance of the banner.
- * @param icon a composable representation of an optional 16x16 dp "information" icon displayed to the left of the
- * banner. Pass `null` to hide the icon. By default, it shows the "information" icon.
- * @param actions a lambda defining optional interactive components (e.g., links, buttons) placed inside the banner for
- * inline actions like "View More" or "Dismiss."
- * @param actionIcons a lambda defining composable icons representing secondary or quick actions, such as closing the
- * banner. Icons are placed on the right side of the banner.
- * @param style a [InlineBannerStyle] that determines the visual styling of the banner, using the default “information”
- * theme. This can be overridden for customization.
- * @param textStyle typography settings applied to the banner text, based on the default Jewel theme.
+ * Displays an informational inline banner providing subtle, non-intrusive context or feedback.
*
* Use this banner to provide relevant, non-critical information in a compact layout.
*
- * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/balloon.html)
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
*
* **Swing equivalent:**
- * [`Notifications`](https://github.com/JetBrains/intellij-community/blob/idea/243.23654.153/platform/ide-core/src/com/intellij/notification/Notifications.java)
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
*
* **Usage example:**
* [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
*
* ```kotlin
* InformationInlineBanner(
- * text = "Project indexed successfully.",
+ * text = "Project index up to date.",
* actions = {
* Link("View Logs", onClick = { /* handle click */ })
* }
* )
* ```
+ *
+ * @param text The primary content of the banner, briefly describing the information it conveys.
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [text].
+ * @param icon Slot for an optional icon displayed on the left of the [text] or [title]. If null, there is no icon. By
+ * default, it is the [AllIconsKeys.General.BalloonInformation] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [text].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [text] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.information`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.information].
+ * @param textStyle The base [TextStyle] used by the [text] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
*/
@Composable
public fun InformationInlineBanner(
text: String,
modifier: Modifier = Modifier,
+ title: String? = null,
icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonInformation, null) },
actions: (@Composable FlowRowScope.() -> Unit)? = null,
actionIcons: (@Composable RowScope.() -> Unit)? = null,
style: InlineBannerStyle = JewelTheme.inlineBannerStyle.information,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
) {
- InlineBannerImpl(
- text = text,
+ InformationInlineBanner(
+ title = title,
style = style,
textStyle = textStyle,
icon = icon,
actions = actions,
modifier = modifier,
actionIcons = actionIcons,
+ ) {
+ Text(text = text, style = textStyle)
+ }
+}
+
+/**
+ * Displays an informational inline banner providing subtle, non-intrusive context or feedback.
+ *
+ * Use this banner to provide relevant, non-critical information in a compact layout.
+ *
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
+ *
+ * **Swing equivalent:**
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
+ *
+ * **Usage example:**
+ * [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
+ *
+ * ```kotlin
+ * InformationInlineBanner(
+ * actions = {
+ * Link("View Logs", onClick = { /* handle click */ })
+ * }
+ * ) {
+ * Markdown("Project index **up to date**.")
+ * }
+ * ```
+ *
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [content].
+ * @param icon Slot for an optional icon displayed on the left of the [content] or [title]. If null, there is no icon.
+ * By default, it is the [AllIconsKeys.General.BalloonInformation] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [content].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [content] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.information`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.information].
+ * @param textStyle The base [TextStyle] used by the [content] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
+ * @param content The primary content of the banner, briefly describing the information it conveys.
+ */
+@Composable
+public fun InformationInlineBanner(
+ modifier: Modifier = Modifier,
+ title: String? = null,
+ icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonInformation, null) },
+ actions: (@Composable FlowRowScope.() -> Unit)? = null,
+ actionIcons: (@Composable RowScope.() -> Unit)? = null,
+ style: InlineBannerStyle = JewelTheme.inlineBannerStyle.information,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+ content: @Composable () -> Unit,
+) {
+ InlineBannerImpl(
+ title = title,
+ style = style,
+ textStyle = textStyle,
+ icon = icon,
+ actions = actions,
+ modifier = modifier,
+ actionIcons = actionIcons,
+ content = content,
)
}
/**
- * Displays an inline banner to confirm successful actions or state completions in compact UI sections without
- * interrupting the workflow.
+ * Displays a success inline banner providing information about the successful completion of an operation.
*
- * The banner uses the inline "success" theme by default, featuring an optional icon, a success message, and optional
- * user actions.
- *
- * @param text the main content of the banner, succinctly describing the successful operation or state.
- * @param modifier a [Modifier] to customize the layout, padding, or size of the banner.
- * @param icon a composable for an optional 16x16 dp "success" icon displayed on the left side of the banner. The
- * success icon is shown by default. Pass `null` to hide the icon.
- * @param actions a lambda defining optional interactive components, such as links or buttons, placed within the banner
- * for additional user operations.
- * @param actionIcons a lambda defining composable icons for quick or secondary operations, such as dismissing the
- * banner, placed on the banner's right side.
- * @param style a [InlineBannerStyle] defining the visual appearance of the banner. It uses the default "success" theme,
- * but this can be customized if needed.
- * @param textStyle the style of the banner text, controlled by the Jewel theme's typography.
- *
- * Use this banner to provide visual feedback for completed actions.
- *
- * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/balloon.html)
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
*
* **Swing equivalent:**
- * [`Notifications`](https://github.com/JetBrains/intellij-community/blob/idea/243.23654.153/platform/ide-core/src/com/intellij/notification/Notifications.java)
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
*
* **Usage example:**
* [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
*
* ```kotlin
* SuccessInlineBanner(
- * text = "Build completed successfully.",
+ * text = "Project indexed successfully.",
* actions = {
- * Link("Details", onClick = { /* handle link */ })
+ * Link("View Logs", onClick = { /* handle click */ })
* }
* )
* ```
+ *
+ * @param text The primary content of the banner, briefly describing the information it conveys.
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [text].
+ * @param icon Slot for an optional icon displayed on the left of the [text] or [title]. If null, there is no icon. By
+ * default, it is the [AllIconsKeys.Status.Success] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [text].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [text] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.success`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.success].
+ * @param textStyle The base [TextStyle] used by the [text] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
*/
@Composable
public fun SuccessInlineBanner(
text: String,
modifier: Modifier = Modifier,
- icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.Debugger.ThreadStates.Idle, null) },
+ title: String? = null,
+ icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.Status.Success, null) },
actions: (@Composable FlowRowScope.() -> Unit)? = null,
actionIcons: (@Composable RowScope.() -> Unit)? = null,
style: InlineBannerStyle = JewelTheme.inlineBannerStyle.success,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
) {
- InlineBannerImpl(
- text = text,
+ SuccessInlineBanner(
+ title = title,
style = style,
textStyle = textStyle,
icon = icon,
actions = actions,
modifier = modifier,
actionIcons = actionIcons,
+ ) {
+ Text(text = text, style = textStyle)
+ }
+}
+
+/**
+ * Displays a success inline banner providing information about the successful completion of an operation.
+ *
+ * Use this banner to provide relevant, non-critical information in a compact layout.
+ *
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
+ *
+ * **Swing equivalent:**
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
+ *
+ * **Usage example:**
+ * [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
+ *
+ * ```kotlin
+ * SuccessInlineBanner(
+ * actions = {
+ * Link("View Logs", onClick = { /* handle click */ })
+ * }
+ * ) {
+ * Markdown("Project indexed **successfully**.")
+ * }
+ * ```
+ *
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [content].
+ * @param icon Slot for an optional icon displayed on the left of the [content] or [title]. If null, there is no icon.
+ * By default, it is the [AllIconsKeys.Status.Success] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [content].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [content] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.success`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.success].
+ * @param textStyle The base [TextStyle] used by the [content] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
+ * @param content The primary content of the banner, briefly describing the information it conveys.
+ */
+@Composable
+public fun SuccessInlineBanner(
+ modifier: Modifier = Modifier,
+ title: String? = null,
+ icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.Status.Success, null) },
+ actions: (@Composable FlowRowScope.() -> Unit)? = null,
+ actionIcons: (@Composable RowScope.() -> Unit)? = null,
+ style: InlineBannerStyle = JewelTheme.inlineBannerStyle.success,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+ content: @Composable () -> Unit,
+) {
+ InlineBannerImpl(
+ title = title,
+ style = style,
+ textStyle = textStyle,
+ icon = icon,
+ actions = actions,
+ modifier = modifier,
+ actionIcons = actionIcons,
+ content = content,
)
}
/**
* Shows a warning inline banner to draw attention to non-critical issues that require user awareness or resolution.
*
- * The banner applies the inline "warning" theme by default, including an optional icon, a warning message, and
- * additional actions if provided.
+ * Use this banner to provide relevant, non-critical information in a compact layout.
*
- * @param text the main content of the banner, describing the warning or potential issue.
- * @param modifier a [Modifier] for applying layout modifications to the banner, such as padding or size changes.
- * @param icon a composable element for an optional 16x16 dp "warning" icon displayed at the banner's left edge. The
- * warning icon is shown by default. Set `null` to omit the icon.
- * @param actions a lambda defining interactive elements such as links or buttons, which provide additional user
- * operations related to the warning.
- * @param actionIcons a lambda defining composable icons for secondary operations, like dismissing the banner, placed on
- * the right side of the banner.
- * @param style an [InlineBannerStyle] defining the warning theme of the banner. The default warning theme is applied by
- * default, but this can be customized.
- * @param textStyle typography used for the text content of the banner, inheriting from the Jewel theme.
- *
- * Use this banner for unobstructive warnings requiring user awareness.
- *
- * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/balloon.html)
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
*
* **Swing equivalent:**
- * [`Notifications`](https://github.com/JetBrains/intellij-community/blob/idea/243.23654.153/platform/ide-core/src/com/intellij/notification/Notifications.java)
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
*
* **Usage example:**
* [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
*
* ```kotlin
* WarningInlineBanner(
- * text = "This feature is deprecated and will be removed in the next version.",
+ * text = "Project indexed with warnings.",
* actions = {
- * Link("Learn More", onClick = { /* handle action */ })
+ * Link("View Logs", onClick = { /* handle click */ })
* }
* )
* ```
+ *
+ * @param text The primary content of the banner, briefly describing the information it conveys.
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [text].
+ * @param icon Slot for an optional icon displayed on the left of the [text] or [title]. If null, there is no icon. By
+ * default, it is the [AllIconsKeys.General.BalloonWarning] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [text].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [text] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.warning`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.warning].
+ * @param textStyle The base [TextStyle] used by the [text] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
*/
@Composable
public fun WarningInlineBanner(
text: String,
modifier: Modifier = Modifier,
+ title: String? = null,
icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonWarning, null) },
actions: (@Composable FlowRowScope.() -> Unit)? = null,
actionIcons: (@Composable RowScope.() -> Unit)? = null,
style: InlineBannerStyle = JewelTheme.inlineBannerStyle.warning,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
) {
- InlineBannerImpl(
- text = text,
+ WarningInlineBanner(
+ title = title,
style = style,
textStyle = textStyle,
icon = icon,
actions = actions,
modifier = modifier,
actionIcons = actionIcons,
+ ) {
+ Text(text = text, style = textStyle)
+ }
+}
+
+/**
+ * Shows a warning inline banner to draw attention to non-critical issues that require user awareness or resolution.
+ *
+ * Use this banner to provide relevant, non-critical information in a compact layout.
+ *
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
+ *
+ * **Swing equivalent:**
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
+ *
+ * **Usage example:**
+ * [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
+ *
+ * ```kotlin
+ * WarningInlineBanner(
+ * actions = {
+ * Link("View Logs", onClick = { /* handle click */ })
+ * }
+ * ) {
+ * Markdown("Project indexed **with warnings**.")
+ * }
+ * ```
+ *
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [content].
+ * @param icon Slot for an optional icon displayed on the left of the [content] or [title]. If null, there is no icon.
+ * By default, it is the [AllIconsKeys.General.BalloonWarning] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [content].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [content] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.warning`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.warning].
+ * @param textStyle The base [TextStyle] used by the [content] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
+ * @param content The primary content of the banner, briefly describing the information it conveys.
+ */
+@Composable
+public fun WarningInlineBanner(
+ modifier: Modifier = Modifier,
+ title: String? = null,
+ icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonWarning, null) },
+ actions: (@Composable FlowRowScope.() -> Unit)? = null,
+ actionIcons: (@Composable RowScope.() -> Unit)? = null,
+ style: InlineBannerStyle = JewelTheme.inlineBannerStyle.warning,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+ content: @Composable () -> Unit,
+) {
+ InlineBannerImpl(
+ title = title,
+ style = style,
+ textStyle = textStyle,
+ icon = icon,
+ actions = actions,
+ modifier = modifier,
+ actionIcons = actionIcons,
+ content = content,
)
}
/**
- * Displays an inline banner highlighting critical errors or failures that require immediate user attention and action.
+ * Shows an error inline banner to draw attention to non-critical issues that require user awareness or resolution.
*
- * This banner uses the inline "error" theme by default, featuring a message describing the error, and optional icons
- * and actions to assist the user in resolving it.
+ * Use this banner to provide relevant, non-critical information in a compact layout.
*
- * @param text the main content of the banner, describing the error context or failure details.
- * @param modifier a [Modifier] for layout customization (e.g., padding, width).
- * @param icon a composable that displays an optional 16x16 dp "error" icon at the banner's left side. The error icon is
- * displayed by default and can be omitted by passing `null`.
- * @param actions a lambda providing interactive options (e.g., retry, open settings) as part of the banner.
- * @param actionIcons a lambda defining composable icons for secondary operations, such as closing or dismissing the
- * banner, rendered on the banner's right side.
- * @param style an [InlineBannerStyle] defining the banner's appearance under the error theme. It can be customized to
- * override the default error styling.
- * @param textStyle typography settings for the text content, based on the default Jewel theme.
- *
- * Use this banner to convey high-priority errors affecting application behavior.
- *
- * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/balloon.html)
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
*
* **Swing equivalent:**
- * [`Notifications`](https://github.com/JetBrains/intellij-community/blob/idea/243.23654.153/platform/ide-core/src/com/intellij/notification/Notifications.java)
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
*
* **Usage example:**
* [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
*
* ```kotlin
* ErrorInlineBanner(
- * text = "Connection to the server failed.",
+ * text = "Project indexed failed.",
* actions = {
- * Link("Retry", onClick = { /* handle retry */ })
+ * Link("View Logs", onClick = { /* handle click */ })
* }
* )
* ```
+ *
+ * @param text The primary content of the banner, briefly describing the information it conveys.
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [text].
+ * @param icon Slot for an optional icon displayed on the left of the [text] or [title]. If null, there is no icon. By
+ * default, it is the [AllIconsKeys.General.BalloonError] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [text].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [text] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.error`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.error].
+ * @param textStyle The base [TextStyle] used by the [text] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
*/
@Composable
public fun ErrorInlineBanner(
text: String,
modifier: Modifier = Modifier,
+ title: String? = null,
icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonError, null) },
actions: (@Composable FlowRowScope.() -> Unit)? = null,
actionIcons: (@Composable RowScope.() -> Unit)? = null,
style: InlineBannerStyle = JewelTheme.inlineBannerStyle.error,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
) {
- InlineBannerImpl(
- text = text,
+ ErrorInlineBanner(
style = style,
textStyle = textStyle,
+ title = title,
icon = icon,
actions = actions,
modifier = modifier,
actionIcons = actionIcons,
+ ) {
+ Text(text = text, style = textStyle)
+ }
+}
+
+/**
+ * Shows an error inline banner to draw attention to non-critical issues that require user awareness or resolution.
+ *
+ * Use this banner to provide relevant, non-critical information in a compact layout.
+ *
+ * **Guidelines:** [on IntelliJ Platform SDK webhelp](https://plugins.jetbrains.com/docs/intellij/banner.html) (note:
+ * there are no guidelines for inline banners)
+ *
+ * **Swing equivalent:**
+ * [`InlineBanner`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/InlineBanner.kt)
+ *
+ * **Usage example:**
+ * [`Banners.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Banners.kt)
+ *
+ * ```kotlin
+ * ErrorInlineBanner(
+ * actions = {
+ * Link("View Logs", onClick = { /* handle click */ })
+ * }
+ * ) {
+ * Markdown("Project indexed **successfully**.")
+ * }
+ * ```
+ *
+ * @param modifier [Modifier] to apply to the banner.
+ * @param title An optional title, rendered in bold, that appears above the [content].
+ * @param icon Slot for an optional icon displayed on the left of the [content] or [title]. If null, there is no icon.
+ * By default, it is the [AllIconsKeys.General.BalloonError] icon.
+ * @param actions Slot for optional primary actions (usually links) to show at the bottom of the banner, below the
+ * [content].
+ * @param actionIcons Slot for secondary actions (usually icon buttons), such as closing the banner to show at the top
+ * right of the banner, to the right of the [content] or [title].
+ * @param style An [InlineBannerStyle] used to style the banner. The default is the theme's
+ * [`JewelTheme.inlineBannerStyle.error`][org.jetbrains.jewel.ui.component.styling.InlineBannerStyles.error].
+ * @param textStyle The base [TextStyle] used by the [content] and [title]. Note that the [title] always has a
+ * [`Bold` weight][androidx.compose.ui.text.font.FontWeight.Bold].
+ * @param content The primary content of the banner, briefly describing the information it conveys.
+ */
+@Composable
+public fun ErrorInlineBanner(
+ modifier: Modifier = Modifier,
+ title: String? = null,
+ icon: (@Composable () -> Unit)? = { Icon(AllIconsKeys.General.BalloonError, null) },
+ actions: (@Composable FlowRowScope.() -> Unit)? = null,
+ actionIcons: (@Composable RowScope.() -> Unit)? = null,
+ style: InlineBannerStyle = JewelTheme.inlineBannerStyle.error,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+ content: @Composable () -> Unit,
+) {
+ InlineBannerImpl(
+ style = style,
+ textStyle = textStyle,
+ title = title,
+ icon = icon,
+ actions = actions,
+ modifier = modifier,
+ actionIcons = actionIcons,
+ content = content,
)
}
@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun InlineBannerImpl(
- text: String,
style: InlineBannerStyle,
textStyle: TextStyle,
+ title: String?,
icon: @Composable (() -> Unit)?,
actions: @Composable (FlowRowScope.() -> Unit)?,
actionIcons: @Composable (RowScope.() -> Unit)?,
modifier: Modifier,
+ content: @Composable (() -> Unit),
) {
val borderColor = style.colors.border
RoundedCornerBox(
@@ -305,7 +560,11 @@ private fun InlineBannerImpl(
.padding(top = 12.dp, bottom = 12.dp) // kftmt plz behave
.thenIf(actionIcons == null) { padding(end = 12.dp) }
) {
- Text(text = text, style = textStyle)
+ if (title != null) {
+ Text(text = title, style = textStyle, fontWeight = Bold)
+ Spacer(Modifier.height(8.dp))
+ }
+ content()
if (actions != null) {
Spacer(Modifier.height(8.dp))
@@ -327,7 +586,7 @@ private fun InlineBannerImpl(
}
@Composable
-internal fun RoundedCornerBox(
+private fun RoundedCornerBox(
modifier: Modifier = Modifier,
contentColor: Color,
borderColor: Color,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt
index c9814a37179d..31acef0f5a05 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt
@@ -29,7 +29,6 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.Density
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
import org.jetbrains.jewel.foundation.Stroke
import org.jetbrains.jewel.foundation.modifier.border
import org.jetbrains.jewel.foundation.modifier.thenIf
@@ -125,8 +124,6 @@ internal fun InputField(
)
}
-@Deprecated("NO")
-@ScheduledForRemoval
@Composable
internal fun InputField(
value: TextFieldValue,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ListComboBox.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ListComboBox.kt
index 37b4f1f367eb..2b5cb48a567c 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ListComboBox.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ListComboBox.kt
@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListState
-import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -18,6 +17,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.KeyEventType
import androidx.compose.ui.input.key.key
@@ -25,9 +25,9 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.key.type
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.Dp
-import kotlin.collections.indexOf
+import androidx.compose.ui.unit.takeOrElse
import kotlinx.coroutines.launch
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
+import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn
import org.jetbrains.jewel.foundation.lazy.SelectableLazyListState
import org.jetbrains.jewel.foundation.lazy.SelectionMode
@@ -40,35 +40,65 @@ import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.foundation.util.JewelLogger
import org.jetbrains.jewel.ui.Outline
import org.jetbrains.jewel.ui.component.styling.ComboBoxStyle
+import org.jetbrains.jewel.ui.disabled
import org.jetbrains.jewel.ui.theme.comboBoxStyle
+/**
+ * A non-editable dropdown list component that follows the standard visual styling.
+ *
+ * Provides a selectable list of items in a dropdown format. When clicked, displays a popup with the list of items.
+ * Supports keyboard navigation, item selection, and custom item rendering. The selected item is displayed in the main
+ * control.
+ *
+ * **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/drop-down.html)
+ *
+ * **Usage example:**
+ * [`ComboBoxes.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt)
+ *
+ * **Swing equivalent:**
+ * [`ComboBox`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/openapi/ui/ComboBox.java)
+ *
+ * @param items The list of items to display in the dropdown
+ * @param selectedIndex The index of the currently selected item
+ * @param onSelectedItemChange Called when an item is selected, with the new index
+ * @param itemKeys Function to generate unique keys for items; defaults to using the item itself as the key
+ * @param modifier Modifier to be applied to the combo box
+ * @param enabled Controls whether the combo box can be interacted with
+ * @param outline The outline style to be applied to the combo box
+ * @param maxPopupHeight The maximum height of the popup list
+ * @param interactionSource Source of interactions for this combo box
+ * @param style The visual styling configuration for the combo box
+ * @param onPopupVisibleChange Called when the popup visibility changes
+ * @param listState The State object for the selectable lazy list in the popup
+ * @param itemContent Composable content for rendering each item in the list
+ * @see com.intellij.openapi.ui.ComboBox
+ */
+@ExperimentalJewelApi
@Composable
-public fun ListComboBox(
- items: List,
+public fun ListComboBox(
+ items: List,
selectedIndex: Int,
- onItemSelected: (Int, String) -> Unit,
+ onSelectedItemChange: (Int) -> Unit,
+ itemKeys: (Int, T) -> Any,
modifier: Modifier = Modifier,
- isEnabled: Boolean = true,
+ enabled: Boolean = true,
outline: Outline = Outline.None,
maxPopupHeight: Dp = Dp.Unspecified,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
style: ComboBoxStyle = JewelTheme.comboBoxStyle,
- textStyle: TextStyle = JewelTheme.defaultTextStyle,
onPopupVisibleChange: (visible: Boolean) -> Unit = {},
- itemContent: @Composable (text: String, isSelected: Boolean, isActive: Boolean) -> Unit,
+ listState: SelectableLazyListState = rememberSelectableLazyListState(),
+ itemContent: @Composable (item: T, isSelected: Boolean, isActive: Boolean) -> Unit,
) {
- val listState = rememberSelectableLazyListState()
- listState.selectedKeys = setOf(selectedIndex)
+ LaunchedEffect(Unit) { listState.selectedKeys = setOf(itemKeys(selectedIndex, items[selectedIndex])) }
- var labelText by remember { mutableStateOf(items[selectedIndex]) }
var previewSelectedIndex by remember { mutableIntStateOf(selectedIndex) }
val scope = rememberCoroutineScope()
fun setSelectedItem(index: Int) {
if (index >= 0 && index <= items.lastIndex) {
- listState.selectedKeys = setOf(index)
- labelText = items[index]
- onItemSelected(index, items[index])
+ listState.selectedKeys = setOf(itemKeys(index, items[index]))
+ onSelectedItemChange(index)
scope.launch { listState.lazyListState.scrollToIndex(index) }
} else {
JewelLogger.getInstance("ListComboBox").trace("Ignoring item index $index as it's invalid")
@@ -79,13 +109,8 @@ public fun ListComboBox(
previewSelectedIndex = -1
}
- val contentPadding = JewelTheme.comboBoxStyle.metrics.popupContentPadding
- val popupMaxHeight =
- if (maxPopupHeight == Dp.Unspecified) {
- JewelTheme.comboBoxStyle.metrics.maxPopupHeight
- } else {
- maxPopupHeight
- }
+ val contentPadding = style.metrics.popupContentPadding
+ val popupMaxHeight = maxPopupHeight.takeOrElse { style.metrics.maxPopupHeight }
val popupManager = remember {
PopupManager(
@@ -113,11 +138,10 @@ public fun ListComboBox(
false
}
},
- isEnabled = isEnabled,
- labelText = labelText,
+ enabled = enabled,
maxPopupHeight = popupMaxHeight,
onArrowDownPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing down will actually change the
// selected value to the one underneath it (unless it's the last one)
@@ -129,7 +153,7 @@ public fun ListComboBox(
setSelectedItem((currentSelectedIndex + 1).coerceAtMost(items.lastIndex))
},
onArrowUpPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing up will actually change the
// selected value to the one above it (unless it's the first one)
@@ -141,10 +165,10 @@ public fun ListComboBox(
setSelectedItem((currentSelectedIndex - 1).coerceAtLeast(0))
},
style = style,
- textStyle = textStyle,
interactionSource = interactionSource,
outline = outline,
popupManager = popupManager,
+ labelContent = { itemContent(items[selectedIndex], false, false) },
) {
PopupContent(
items = items,
@@ -157,7 +181,8 @@ public fun ListComboBox(
previewSelectedIndex = it
}
},
- onSelectedItemChange = ::setSelectedItem,
+ onSelectedItemChange = { index: Int -> setSelectedItem(index) },
+ itemKeys = itemKeys,
itemContent = itemContent,
)
}
@@ -173,191 +198,64 @@ public fun ListComboBox(
* **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/drop-down.html)
*
* **Usage example:**
- * [`Dropdowns.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Dropdowns.kt)
+ * [`ComboBoxes.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt)
*
* **Swing equivalent:**
* [`ComboBox`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/openapi/ui/ComboBox.java)
*
* @param items The list of items to display in the dropdown
+ * @param selectedIndex The index of the currently selected item
+ * @param onSelectedItemChange Called when an item is selected, with the new index
* @param modifier Modifier to be applied to the combo box
- * @param isEnabled Controls whether the combo box can be interacted with
- * @param initialSelectedIndex The index of the initially selected item
+ * @param enabled Controls whether the combo box can be interacted with
* @param outline The outline style to be applied to the combo box
* @param maxPopupHeight The maximum height of the popup list
* @param interactionSource Source of interactions for this combo box
* @param style The visual styling configuration for the combo box
* @param textStyle The typography style to be applied to the items
- * @param onSelectedItemChange Called when the selected item changes, with the new index and item
* @param onPopupVisibleChange Called when the popup visibility changes
- * @param itemContent Composable content for rendering each item in the list
+ * @param itemKeys Function to generate unique keys for items; defaults to using the item itself as the key
+ * @param listState The State object for the selectable lazy list in the popup
* @see com.intellij.openapi.ui.ComboBox
*/
@Composable
-public fun EditableListComboBox(
- items: List,
- selectedIndex: Int,
- onItemSelected: (Int, String) -> Unit,
- textFieldState: TextFieldState = rememberTextFieldState(items[selectedIndex]),
- modifier: Modifier = Modifier,
- isEnabled: Boolean = true,
- outline: Outline = Outline.None,
- maxPopupHeight: Dp = Dp.Unspecified,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- style: ComboBoxStyle = JewelTheme.comboBoxStyle,
- textStyle: TextStyle = JewelTheme.defaultTextStyle,
- onPopupVisibleChange: (visible: Boolean) -> Unit = {},
- itemContent: @Composable (text: String, isSelected: Boolean, isActive: Boolean) -> Unit,
-) {
- val listState = rememberSelectableLazyListState()
- listState.selectedKeys = setOf(selectedIndex)
-
- var previewSelectedIndex by remember { mutableIntStateOf(selectedIndex) }
- val scope = rememberCoroutineScope()
-
- fun setSelectedItem(index: Int) {
- if (index >= 0 && index <= items.lastIndex) {
- // Note: it's important to do the edit _before_ updating the list state,
- // since updating the list state will cause another, asynchronous and
- // potentially nested call to edit, which is not supported.
- // This is because setting the selected keys on the SLC will eventually
- // cause a call to this very function via SLC's onSelectedIndexesChange.
- textFieldState.edit { replace(0, length, items[index]) }
-
- if (listState.selectedKeys.size != 1 || listState.selectedItemIndex() != index) {
- // This guard condition should also help avoid issues caused by side effects
- // of setting new selected keys, as per the comment above.
- listState.selectedKeys = setOf(index)
- }
- onItemSelected(index, items[index])
- scope.launch { listState.lazyListState.scrollToIndex(index) }
- } else {
- JewelLogger.getInstance("EditableListComboBox").trace("Ignoring item index $index as it's invalid")
- }
- }
-
- val contentPadding = JewelTheme.comboBoxStyle.metrics.popupContentPadding
- val popupMaxHeight =
- if (maxPopupHeight == Dp.Unspecified) {
- JewelTheme.comboBoxStyle.metrics.maxPopupHeight
- } else {
- maxPopupHeight
- }
-
- EditableComboBox(
- textFieldState = textFieldState,
- modifier = modifier,
- isEnabled = isEnabled,
- outline = outline,
- interactionSource = interactionSource,
- style = style,
- textStyle = textStyle,
- onArrowDownPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
-
- // When there is a preview-selected item, pressing down will actually change the
- // selected value to the one underneath it (unless it's the last one)
- if (previewSelectedIndex >= 0 && previewSelectedIndex < items.lastIndex) {
- currentSelectedIndex = previewSelectedIndex
- previewSelectedIndex = -1
- }
-
- setSelectedItem((currentSelectedIndex + 1).coerceAtMost(items.lastIndex))
- },
- onArrowUpPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
-
- // When there is a preview-selected item, pressing up will actually change the
- // selected value to the one above it (unless it's the first one)
- if (previewSelectedIndex > 0) {
- currentSelectedIndex = previewSelectedIndex
- previewSelectedIndex = -1
- }
-
- setSelectedItem((currentSelectedIndex - 1).coerceAtLeast(0))
- },
- onEnterPress = {
- val indexOfSelected = items.indexOf(textFieldState.text)
- setSelectedItem(indexOfSelected)
- },
- popupManager =
- remember {
- PopupManager(
- onPopupVisibleChange = {
- previewSelectedIndex = -1
- onPopupVisibleChange(it)
- },
- name = "EditableListComboBoxPopup",
- )
- },
- popupContent = {
- PopupContent(
- items = items,
- previewSelectedItemIndex = previewSelectedIndex,
- listState = listState,
- popupMaxHeight = popupMaxHeight,
- contentPadding = contentPadding,
- onPreviewSelectedItemChange = {
- if (it >= 0 && previewSelectedIndex != it) {
- previewSelectedIndex = it
- }
- },
- onSelectedItemChange = ::setSelectedItem,
- itemContent = itemContent,
- )
- },
- )
-}
-
-@Deprecated(
- message = "Use the stateless ListComboBox with selectedIndex and onItemSelected parameters instead",
- level = DeprecationLevel.WARNING,
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
public fun ListComboBox(
items: List,
+ selectedIndex: Int,
+ onSelectedItemChange: (Int) -> Unit,
modifier: Modifier = Modifier,
- isEnabled: Boolean = true,
- initialSelectedIndex: Int = 0,
+ enabled: Boolean = true,
outline: Outline = Outline.None,
maxPopupHeight: Dp = Dp.Unspecified,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
style: ComboBoxStyle = JewelTheme.comboBoxStyle,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
- onSelectedItemChange: (Int, String) -> Unit = { _, _ -> },
onPopupVisibleChange: (visible: Boolean) -> Unit = {},
- itemContent: @Composable (text: String, isSelected: Boolean, isActive: Boolean) -> Unit,
+ itemKeys: (Int, String) -> Any = { _, item -> item },
+ listState: SelectableLazyListState = rememberSelectableLazyListState(),
) {
- val listState = rememberSelectableLazyListState()
- var labelText by remember { mutableStateOf(items.firstOrNull().orEmpty()) }
+ var labelText by remember { mutableStateOf(items[selectedIndex]) }
var previewSelectedIndex by remember { mutableIntStateOf(-1) }
val scope = rememberCoroutineScope()
LaunchedEffect(Unit) {
- // Select the first item in the list automatically when creating
- if (items.isNotEmpty()) {
- listState.selectedKeys = setOf(initialSelectedIndex.coerceIn(0, items.lastIndex))
- }
+ // Select the first item in the list when creating
+ listState.selectedKeys = setOf(itemKeys(selectedIndex, items[selectedIndex]))
}
fun setSelectedItem(index: Int) {
if (index >= 0 && index <= items.lastIndex) {
- listState.selectedKeys = setOf(index)
+ listState.selectedKeys = setOf(itemKeys(index, items[index]))
labelText = items[index]
- onSelectedItemChange(index, items[index])
+ onSelectedItemChange(index)
scope.launch { listState.lazyListState.scrollToIndex(index) }
} else {
JewelLogger.getInstance("ListComboBox").trace("Ignoring item index $index as it's invalid")
}
}
- val contentPadding = JewelTheme.comboBoxStyle.metrics.popupContentPadding
- val popupMaxHeight =
- if (maxPopupHeight == Dp.Unspecified) {
- JewelTheme.comboBoxStyle.metrics.maxPopupHeight
- } else {
- maxPopupHeight
- }
+ val contentPadding = style.metrics.popupContentPadding
+ val popupMaxHeight = maxPopupHeight.takeOrElse { style.metrics.maxPopupHeight }
val popupManager = remember {
PopupManager(
@@ -385,11 +283,11 @@ public fun ListComboBox(
false
}
},
- isEnabled = isEnabled,
+ enabled = enabled,
labelText = labelText,
maxPopupHeight = popupMaxHeight,
onArrowDownPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing down will actually change the
// selected value to the one underneath it (unless it's the last one)
@@ -401,7 +299,7 @@ public fun ListComboBox(
setSelectedItem((currentSelectedIndex + 1).coerceAtMost(items.lastIndex))
},
onArrowUpPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing up will actually change the
// selected value to the one above it (unless it's the first one)
@@ -430,7 +328,16 @@ public fun ListComboBox(
}
},
onSelectedItemChange = ::setSelectedItem,
- itemContent = itemContent,
+ itemKeys = itemKeys,
+ itemContent = { item, isSelected, isActive ->
+ SimpleListItem(
+ text = item,
+ selected = isSelected,
+ active = isActive,
+ iconContentDescription = item,
+ colorFilter = if (enabled) null else ColorFilter.disabled(),
+ )
+ },
)
}
}
@@ -445,56 +352,50 @@ public fun ListComboBox(
* **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/drop-down.html)
*
* **Usage example:**
- * [`Dropdowns.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Dropdowns.kt)
+ * [`ComboBoxes.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt)
*
* **Swing equivalent:**
* [`ComboBox`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/openapi/ui/ComboBox.java)
* with [setEditable(true)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#setEditable-boolean-)
*
* @param items The list of items to display in the dropdown
+ * @param selectedIndex The index of the currently selected item
+ * @param onSelectedItemChange Called when the selected item changes, with the new index and item
* @param modifier Modifier to be applied to the combo box
- * @param isEnabled Controls whether the combo box can be interacted with
- * @param initialSelectedIndex The index of the initially selected item
+ * @param enabled Controls whether the combo box can be interacted with
* @param outline The outline style to be applied to the combo box
* @param maxPopupHeight The maximum height of the popup list
* @param interactionSource Source of interactions for this combo box
* @param style The visual styling configuration for the combo box
* @param textStyle The typography style to be applied to the items
- * @param onSelectedItemChange Called when the selected item changes, with the new index and item
* @param onPopupVisibleChange Called when the popup visibility changes
- * @param itemContent Composable content for rendering each item in the list
+ * @param itemKeys Function to generate unique keys for items; defaults to using the item itself as the key
+ * @param listState The State object for the selectable lazy list in the popup
* @see com.intellij.openapi.ui.ComboBox
*/
-@Deprecated(
- "Use the stateless EditableListComboBox with selectedIndex and onItemSelected parameters instead",
- level = DeprecationLevel.WARNING,
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
@Composable
public fun EditableListComboBox(
items: List,
+ selectedIndex: Int,
+ onSelectedItemChange: (Int) -> Unit,
modifier: Modifier = Modifier,
- isEnabled: Boolean = true,
- initialSelectedIndex: Int = 0,
+ enabled: Boolean = true,
outline: Outline = Outline.None,
maxPopupHeight: Dp = Dp.Unspecified,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
style: ComboBoxStyle = JewelTheme.comboBoxStyle,
textStyle: TextStyle = JewelTheme.defaultTextStyle,
- onSelectedItemChange: (Int, String) -> Unit = { _, _ -> },
onPopupVisibleChange: (visible: Boolean) -> Unit = {},
- itemContent: @Composable (text: String, isSelected: Boolean, isActive: Boolean) -> Unit,
+ itemKeys: (Int, String) -> Any = { _, item -> item },
+ listState: SelectableLazyListState = rememberSelectableLazyListState(),
) {
- val listState = rememberSelectableLazyListState()
- val textFieldState = rememberTextFieldState(items.firstOrNull().orEmpty())
+ val textFieldState = rememberTextFieldState(items[selectedIndex])
var previewSelectedIndex by remember { mutableIntStateOf(-1) }
val scope = rememberCoroutineScope()
LaunchedEffect(Unit) {
- // Select the first item in the list automatically when creating
- if (items.isNotEmpty()) {
- listState.selectedKeys = setOf(initialSelectedIndex.coerceIn(0, items.lastIndex))
- }
+ // Select the first item in the list when creating
+ listState.selectedKeys = setOf(itemKeys(selectedIndex, items[selectedIndex]))
}
fun setSelectedItem(index: Int) {
@@ -506,36 +407,31 @@ public fun EditableListComboBox(
// cause a call to this very function via SLC's onSelectedIndexesChange.
textFieldState.edit { replace(0, length, items[index]) }
- if (listState.selectedKeys.size != 1 || listState.selectedItemIndex() != index) {
+ if (listState.selectedKeys.size != 1 || itemKeys(index, items[index]) !in listState.selectedKeys) {
// This guard condition should also help avoid issues caused by side effects
// of setting new selected keys, as per the comment above.
- listState.selectedKeys = setOf(index)
+ listState.selectedKeys = setOf(itemKeys(index, items[index]))
}
- onSelectedItemChange(index, items[index])
+ onSelectedItemChange(index)
scope.launch { listState.lazyListState.scrollToIndex(index) }
} else {
listState.selectedKeys = emptySet()
}
}
- val contentPadding = JewelTheme.comboBoxStyle.metrics.popupContentPadding
- val popupMaxHeight =
- if (maxPopupHeight == Dp.Unspecified) {
- JewelTheme.comboBoxStyle.metrics.maxPopupHeight
- } else {
- maxPopupHeight
- }
+ val contentPadding = style.metrics.popupContentPadding
+ val popupMaxHeight = maxPopupHeight.takeOrElse { style.metrics.maxPopupHeight }
EditableComboBox(
textFieldState = textFieldState,
modifier = modifier,
- isEnabled = isEnabled,
+ enabled = enabled,
outline = outline,
interactionSource = interactionSource,
style = style,
textStyle = textStyle,
onArrowDownPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing down will actually change the
// selected value to the one underneath it (unless it's the last one)
@@ -547,7 +443,7 @@ public fun EditableListComboBox(
setSelectedItem((currentSelectedIndex + 1).coerceAtMost(items.lastIndex))
},
onArrowUpPress = {
- var currentSelectedIndex = listState.selectedItemIndex()
+ var currentSelectedIndex = listState.selectedItemIndex(items, itemKeys)
// When there is a preview-selected item, pressing up will actually change the
// selected value to the one above it (unless it's the first one)
@@ -587,7 +483,15 @@ public fun EditableListComboBox(
}
},
onSelectedItemChange = ::setSelectedItem,
- itemContent = itemContent,
+ itemKeys = itemKeys,
+ itemContent = { item, isSelected, isActive ->
+ SimpleListItem(
+ text = item,
+ isSelected = isSelected,
+ isActive = isActive,
+ iconContentDescription = item,
+ )
+ },
)
},
)
@@ -607,7 +511,6 @@ private suspend fun LazyListState.scrollToIndex(itemIndex: Int) {
itemIndex == visibleItemsRange.last && !isLastItemFullyVisible -> {
scrollToItem(itemIndex, layoutInfo.viewportEndOffset - lastItemInfoSize)
}
-
itemIndex > visibleItemsRange.last -> {
// First scroll assuming the new item has the same height as the current last item
scrollToItem(itemIndex, layoutInfo.viewportEndOffset - lastItemInfoSize)
@@ -622,18 +525,29 @@ private suspend fun LazyListState.scrollToIndex(itemIndex: Int) {
}
/** Returns the index of the selected item in the list, returning -1 if there is no selected item. */
-public fun SelectableLazyListState.selectedItemIndex(): Int = selectedKeys.firstOrNull() as Int? ?: -1
+public fun SelectableLazyListState.selectedItemIndex(items: List, itemKeys: (Int, T) -> Any): Int {
+ if (selectedKeys.isEmpty()) return -1
+
+ val selectedKey = selectedKeys.first()
+ for (i in items.indices) {
+ if (itemKeys(i, items[i]) == selectedKey) {
+ return i
+ }
+ }
+ return -1
+}
@Composable
-private fun PopupContent(
- items: List,
+private fun PopupContent(
+ items: List,
previewSelectedItemIndex: Int,
listState: SelectableLazyListState,
popupMaxHeight: Dp,
contentPadding: PaddingValues,
onPreviewSelectedItemChange: (Int) -> Unit,
onSelectedItemChange: (Int) -> Unit,
- itemContent: @Composable (text: String, isSelected: Boolean, isActive: Boolean) -> Unit,
+ itemKeys: (Int, T) -> Any,
+ itemContent: @Composable (item: T, isSelected: Boolean, isActive: Boolean) -> Unit,
) {
VerticallyScrollableContainer(
scrollState = listState.lazyListState,
@@ -650,7 +564,7 @@ private fun PopupContent(
) { ->
itemsIndexed(
items = items,
- key = { itemIndex, _ -> itemIndex }, // TODO pass in from user?
+ key = { itemIndex, item -> itemKeys(itemIndex, item) },
itemContent = { index, item ->
Box(
modifier =
@@ -662,10 +576,13 @@ private fun PopupContent(
}
}
) {
- // Items can be "actually" selected, or "preview" selected (e.g., hovered),
+ // Items can be "actually" selected, or "preview" selected (e.g.,
+ // hovered),
// but if we have a "preview" selection, we hide the "actual" selection
+ val key = itemKeys(index, item)
+ val isItemSelected = listState.selectedKeys.contains(key)
val showAsSelected =
- (isSelected && previewSelectedItemIndex < 0) || previewSelectedItemIndex == index
+ (isItemSelected && previewSelectedItemIndex < 0) || previewSelectedItemIndex == index
itemContent(item, showAsSelected, isActive)
}
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt
index d9ba2d5d73bf..0ae70185c969 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt
@@ -82,7 +82,6 @@ import org.jetbrains.jewel.ui.component.styling.MenuItemColors
import org.jetbrains.jewel.ui.component.styling.MenuItemMetrics
import org.jetbrains.jewel.ui.component.styling.MenuStyle
import org.jetbrains.jewel.ui.icon.IconKey
-import org.jetbrains.jewel.ui.icon.PathIconKey
import org.jetbrains.jewel.ui.painter.hints.Stateful
import org.jetbrains.jewel.ui.theme.menuStyle
import org.jetbrains.skiko.hostOs
@@ -525,30 +524,6 @@ internal fun MenuItem(
}
}
-@Deprecated(
- "Use the IconKey variant",
- ReplaceWith(
- "MenuSubmenuItem(modifier, enabled, canShowIcon, iconResource?.let { PathIconKey(it, iconClass) }, " +
- "interactionSource, style, submenu, content)",
- "org/jetbrains/jewel/ui/component/Menu.kt:472",
- ),
-)
-@Composable
-public fun MenuSubmenuItem(
- modifier: Modifier = Modifier,
- enabled: Boolean = true,
- canShowIcon: Boolean,
- iconResource: String?,
- iconClass: Class<*>,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- style: MenuStyle = JewelTheme.menuStyle,
- submenu: MenuScope.() -> Unit,
- content: @Composable () -> Unit,
-) {
- val iconKey = remember(iconResource, iconClass) { iconResource?.let { PathIconKey(it, iconClass) } }
- MenuSubmenuItem(modifier, enabled, canShowIcon, iconKey, interactionSource, style, submenu, content)
-}
-
@Composable
public fun MenuSubmenuItem(
modifier: Modifier = Modifier,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PlatformIcon.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PlatformIcon.kt
deleted file mode 100644
index 8a097d3b2f13..000000000000
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PlatformIcon.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.jetbrains.jewel.ui.component
-
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
-import org.jetbrains.jewel.ui.icon.IntelliJIconKey
-import org.jetbrains.jewel.ui.painter.PainterHint
-
-@Deprecated(
- "Use Icon directly, this doesn't have any advantage over it anymore.",
- ReplaceWith("Icon(key, contentDescription, modifier, tint, hint)", "com.jewel.ui.component.Icon"),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun PlatformIcon(
- key: IntelliJIconKey,
- contentDescription: String?,
- modifier: Modifier = Modifier,
- tint: Color = Color.Unspecified,
- hint: PainterHint,
-) {
- @Suppress("DEPRECATION") // Everything is deprecated here anyway
- PlatformIcon(key, contentDescription, modifier, tint, *arrayOf(hint))
-}
-
-@Deprecated(
- "Use Icon directly, this doesn't have any advantage over it anymore.",
- ReplaceWith("Icon(key, contentDescription, modifier, tint, hints)", "com.jewel.ui.component.Icon"),
-)
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Composable
-public fun PlatformIcon(
- key: IntelliJIconKey,
- contentDescription: String?,
- modifier: Modifier = Modifier,
- tint: Color = Color.Unspecified,
- vararg hints: PainterHint,
-) {
- Icon(key, contentDescription, modifier, key::class.java, tint, *hints)
-}
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ScrollableContainer.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ScrollableContainer.kt
index 3c989423e235..deb3726ca0a9 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ScrollableContainer.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/ScrollableContainer.kt
@@ -35,8 +35,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
-import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.component.styling.ScrollbarStyle
import org.jetbrains.jewel.ui.component.styling.ScrollbarVisibility.AlwaysVisible
@@ -430,113 +428,6 @@ public fun HorizontallyScrollableContainer(
}
}
-@ScheduledForRemoval(inVersion = "Before Jewel 1.0")
-@Deprecated("Not properly supported due to Compose limitations", level = DeprecationLevel.HIDDEN)
-@ExperimentalJewelApi
-@Composable
-public fun ScrollableContainer(
- modifier: Modifier = Modifier,
- verticalScrollState: ScrollState = rememberScrollState(),
- horizontalScrollState: ScrollState = rememberScrollState(),
- verticalScrollbarModifier: Modifier = Modifier,
- horizontalScrollbarModifier: Modifier = Modifier,
- style: ScrollbarStyle = JewelTheme.scrollbarStyle,
- content: @Composable BoxScope.() -> Unit,
-) {
- var keepVisible by remember { mutableStateOf(false) }
- val scope = rememberCoroutineScope()
-
- ScrollableContainerImpl(
- verticalScrollbar = {
- VerticalScrollbar(verticalScrollState, verticalScrollbarModifier, style = style, keepVisible = keepVisible)
- },
- horizontalScrollbar = {
- HorizontalScrollbar(
- horizontalScrollState,
- horizontalScrollbarModifier,
- style = style,
- keepVisible = keepVisible,
- )
- },
- modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
- scrollbarStyle = style,
- ) {
- Box(Modifier.layoutId(ID_CONTENT).verticalScroll(verticalScrollState).horizontalScroll(horizontalScrollState)) {
- content()
- }
- }
-}
-
-@ScheduledForRemoval(inVersion = "Before Jewel 1.0")
-@Deprecated("Not properly supported due to Compose limitations", level = DeprecationLevel.HIDDEN)
-@ExperimentalJewelApi
-@Composable
-public fun ScrollableContainer(
- verticalScrollState: LazyListState,
- horizontalScrollState: LazyListState,
- modifier: Modifier = Modifier,
- verticalScrollbarModifier: Modifier = Modifier,
- horizontalScrollbarModifier: Modifier = Modifier,
- style: ScrollbarStyle = JewelTheme.scrollbarStyle,
- content: @Composable BoxScope.() -> Unit,
-) {
- var keepVisible by remember { mutableStateOf(false) }
- val scope = rememberCoroutineScope()
-
- ScrollableContainerImpl(
- verticalScrollbar = {
- VerticalScrollbar(verticalScrollState, verticalScrollbarModifier, style = style, keepVisible = keepVisible)
- },
- horizontalScrollbar = {
- HorizontalScrollbar(
- horizontalScrollState,
- horizontalScrollbarModifier,
- style = style,
- keepVisible = keepVisible,
- )
- },
- modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
- scrollbarStyle = style,
- ) {
- Box(Modifier.layoutId(ID_CONTENT)) { content() }
- }
-}
-
-@ScheduledForRemoval(inVersion = "Before Jewel 1.0")
-@Deprecated("Not properly supported due to Compose limitations", level = DeprecationLevel.HIDDEN)
-@ExperimentalJewelApi
-@Composable
-public fun ScrollableContainer(
- verticalScrollState: LazyGridState,
- horizontalScrollState: LazyGridState,
- modifier: Modifier = Modifier,
- verticalScrollbarModifier: Modifier = Modifier,
- horizontalScrollbarModifier: Modifier = Modifier,
- style: ScrollbarStyle = JewelTheme.scrollbarStyle,
- content: @Composable BoxScope.() -> Unit,
-) {
- var keepVisible by remember { mutableStateOf(false) }
- val scope = rememberCoroutineScope()
-
- ScrollableContainerImpl(
- verticalScrollbar = {
- VerticalScrollbar(verticalScrollState, verticalScrollbarModifier, style = style, keepVisible = keepVisible)
- },
- horizontalScrollbar = {
- HorizontalScrollbar(
- horizontalScrollState,
- horizontalScrollbarModifier,
- style = style,
- keepVisible = keepVisible,
- )
- },
- modifier = modifier.withKeepVisible(style.scrollbarVisibility.lingerDuration, scope) { keepVisible = it },
- scrollbarStyle = style,
- ) {
- Box(Modifier.layoutId(ID_CONTENT)) { content() }
- }
-}
-
private fun Modifier.withKeepVisible(
lingerDuration: Duration,
scope: CoroutineScope,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/SimpleListItem.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/SimpleListItem.kt
index 76473c4987a6..96beea2903cb 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/SimpleListItem.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/SimpleListItem.kt
@@ -12,23 +12,234 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.semantics.selected
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
import org.jetbrains.jewel.foundation.GenerateDataFunctions
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle
import org.jetbrains.jewel.ui.icon.IconKey
+import org.jetbrains.jewel.ui.painter.PainterHint
import org.jetbrains.jewel.ui.theme.simpleListItemStyle
+/**
+ * A simple list item layout comprising of a text and an optional icon to its start side.
+ *
+ * The text will only take up one line and is ellipsized if too long to fit.
+ *
+ * @param text The text displayed in the list item
+ * @param state The state of the list item, containing selection and activity status.
+ * @param modifier Optional [Modifier] to apply to to the list item.
+ * @param textModifier Optional [Modifier] to apply to to the list item text.
+ * @param iconModifier Optional [Modifier] to apply to specifically to the icon.
+ * @param icon Optional [IconKey] representing the icon displayed in the list item.
+ * @param iconContentDescription Optional content description [String] for accessibility purposes for the icon.
+ * @param style Optional [SimpleListItemStyle] for defining the appearance of the list item; default is based on the
+ * Jewel theme.
+ * @param height The height of the list item; default is based on the Jewel theme's global metrics.
+ * @param colorFilter Optional [ColorFilter] to apply to the icon, if any.
+ * @param painterHints Optional [PainterHint]s to apply to the icon, if any.
+ */
+@Composable
+public fun SimpleListItem(
+ text: String,
+ state: ListItemState,
+ modifier: Modifier = Modifier,
+ textModifier: Modifier = Modifier,
+ iconModifier: Modifier = Modifier,
+ icon: IconKey? = null,
+ iconContentDescription: String? = null,
+ style: SimpleListItemStyle = JewelTheme.simpleListItemStyle,
+ height: Dp = JewelTheme.globalMetrics.rowHeight,
+ colorFilter: ColorFilter? = null,
+ vararg painterHints: PainterHint,
+) {
+ SimpleListItem(
+ state = state,
+ modifier = modifier,
+ iconModifier = iconModifier,
+ icon = icon,
+ iconContentDescription = iconContentDescription,
+ style = style,
+ height = height,
+ painterHints = painterHints.toList(),
+ colorFilter = colorFilter,
+ ) {
+ Text(
+ text = text,
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ style = JewelTheme.defaultTextStyle,
+ color = style.colors.contentFor(state).value,
+ modifier = textModifier,
+ )
+ }
+}
+
+/**
+ * A simple list item layout comprising of a text and an optional icon to its start side.
+ *
+ * The text will only take up one line and is ellipsized if too long to fit. It also exposes [selected] and [active]
+ * properties, instead of the state.
+ *
+ * @param text The text displayed in the list item.
+ * @param selected Indicates whether the list item is selected.
+ * @param active Indicates whether the list item is active or disabled; default is active.
+ * @param modifier Optional [Modifier] to apply to to the entire list item.
+ * @param textModifier Optional [Modifier] to apply to specifically to the text.
+ * @param iconModifier Optional [Modifier] to apply to specifically to the icon.
+ * @param icon Optional [IconKey] representing the icon displayed on the start side of the list item.
+ * @param iconContentDescription Optional content description [String] for the icon for accessibility purposes.
+ * @param style The [SimpleListItemStyle] defining the appearance of the list item; default is based on the Jewel theme.
+ * @param height The height of the list item; default is based on the Jewel theme's global metrics.
+ * @param colorFilter Optional [ColorFilter] to apply to the icon, if any.
+ * @param painterHints Optional [PainterHint]s to apply to the icon, if any.
+ */
+@Composable
+public fun SimpleListItem(
+ text: String,
+ selected: Boolean,
+ active: Boolean = true,
+ modifier: Modifier = Modifier,
+ textModifier: Modifier = Modifier,
+ iconModifier: Modifier = Modifier,
+ icon: IconKey? = null,
+ iconContentDescription: String? = null,
+ style: SimpleListItemStyle = JewelTheme.simpleListItemStyle,
+ height: Dp = JewelTheme.globalMetrics.rowHeight,
+ colorFilter: ColorFilter? = null,
+ vararg painterHints: PainterHint,
+) {
+ val state = remember(selected, active) { ListItemState(selected, active) }
+ SimpleListItem(
+ text = text,
+ state = state,
+ modifier = modifier,
+ textModifier = textModifier,
+ iconModifier = iconModifier,
+ icon = icon,
+ iconContentDescription = iconContentDescription,
+ style = style,
+ height = height,
+ colorFilter = colorFilter,
+ painterHints = painterHints,
+ )
+}
+
+/**
+ * A simple list item layout comprising of a content slot and an optional icon to its start side. It also exposes
+ * [selected] and [active] properties, instead of the state.
+ *
+ * @param selected Indicates whether the list item is selected.
+ * @param active Determines if the list item is in an active state (e.g., enabled or interactive).
+ * @param colorFilter Optional [ColorFilter] applied to the item, typically used with the icon.
+ * @param painterHints Optional list of [PainterHint] to provide hints for painting customizations; default is empty.
+ * @param modifier Optional [Modifier] to apply to to the list item.
+ * @param iconModifier Optional [Modifier] to apply to specifically to the icon.
+ * @param icon Optional [IconKey] representing the icon displayed in the list item.
+ * @param iconContentDescription Optional content description [String] for accessibility purposes for the icon.
+ * @param style Optional [SimpleListItemStyle] for defining the appearance of the list item; default is based on the
+ * Jewel theme.
+ * @param colorFilter Optional [ColorFilter] to apply to the icon, if any.
+ * @param painterHints Optional [PainterHint]s to apply to the icon, if any.
+ */
+@Composable
+public fun SimpleListItem(
+ selected: Boolean,
+ active: Boolean = true,
+ colorFilter: ColorFilter? = null,
+ painterHints: List = emptyList(),
+ modifier: Modifier = Modifier,
+ iconModifier: Modifier = Modifier,
+ icon: IconKey? = null,
+ iconContentDescription: String? = null,
+ style: SimpleListItemStyle = JewelTheme.simpleListItemStyle,
+ height: Dp = JewelTheme.globalMetrics.rowHeight,
+ content: @Composable () -> Unit,
+) {
+ val state = remember(selected, active) { ListItemState(selected, active) }
+ SimpleListItem(
+ state = state,
+ modifier = modifier,
+ iconModifier = iconModifier,
+ icon = icon,
+ iconContentDescription = iconContentDescription,
+ style = style,
+ height = height,
+ colorFilter = colorFilter,
+ painterHints = painterHints,
+ content = content,
+ )
+}
+
+/**
+ * A simple list item layout comprising of a content slot and an optional icon to its start side.
+ *
+ * @param state The state of the list item, containing selection and activity status.
+ * @param colorFilter Optional [ColorFilter] applied to the item, typically used with the icon.
+ * @param painterHints Optional list of [PainterHint] to provide hints for painting customizations; default is empty.
+ * @param modifier Optional [Modifier] to apply to the root container of the list item.
+ * @param iconModifier Optional [Modifier] to apply to the icon displayed in the list item.
+ * @param icon Optional [IconKey] that defines which icon should be displayed.
+ * @param iconContentDescription Optional content description [String] for the icon, used for accessibility.
+ * @param style The style of the list item, including colors and metrics, with a default value from the theme; default
+ * is based on the Jewel theme.
+ * @param colorFilter Optional [ColorFilter] to apply to the icon, if any.
+ * @param painterHints Optional [PainterHint]s to apply to the icon, if any.
+ */
+@Composable
+public fun SimpleListItem(
+ state: ListItemState,
+ colorFilter: ColorFilter? = null,
+ painterHints: List = emptyList(),
+ modifier: Modifier = Modifier,
+ iconModifier: Modifier = Modifier,
+ icon: IconKey? = null,
+ iconContentDescription: String? = null,
+ style: SimpleListItemStyle = JewelTheme.simpleListItemStyle,
+ height: Dp = JewelTheme.globalMetrics.rowHeight,
+ content: @Composable () -> Unit,
+) {
+ Row(
+ modifier =
+ modifier
+ .semantics { selected = state.isSelected }
+ .fillMaxWidth()
+ .height(height)
+ .padding(style.metrics.outerPadding)
+ .background(
+ color = style.colors.backgroundFor(state).value,
+ shape = RoundedCornerShape(style.metrics.selectionBackgroundCornerSize),
+ )
+ .padding(style.metrics.innerPadding),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(style.metrics.iconTextGap),
+ ) {
+ if (icon != null) {
+ Icon(
+ modifier = iconModifier.size(16.dp),
+ key = icon,
+ contentDescription = iconContentDescription,
+ colorFilter = colorFilter,
+ hints = painterHints.toTypedArray(),
+ )
+ }
+ content()
+ }
+}
+
/**
* A simple list item layout comprising of a content slot and an optional icon to its start side.
*
* The text will only take up one line and is ellipsized if too long to fit. The item will draw a background based on
* the [isSelected] and [isActive] values.
*/
+@Deprecated("Use the overload with selected, active, colorFilter and hints")
+@ScheduledForRemoval(inVersion = "In 2025.3")
@Composable
public fun SimpleListItem(
isSelected: Boolean,
@@ -51,6 +262,8 @@ public fun SimpleListItem(
* The text will only take up one line and is ellipsized if too long to fit. The item will draw a background based on
* the [isSelected] and [isActive] values.
*/
+@Deprecated("Use the overload with selected, active, colorFilter and hints")
+@ScheduledForRemoval(inVersion = "In 2025.3")
@Composable
public fun SimpleListItem(
text: String,
@@ -74,6 +287,8 @@ public fun SimpleListItem(
* The text will only take up one line and is ellipsized if too long to fit. The item will draw a background based on
* the [state].
*/
+@Deprecated("Use the overload with selected, active, colorFilter and hints")
+@ScheduledForRemoval(inVersion = "In 2025.3")
@Composable
public fun SimpleListItem(
text: String,
@@ -104,6 +319,8 @@ public fun SimpleListItem(
* The text will only take up one line and is ellipsized if too long to fit. The item will draw a background based on
* the [state].
*/
+@Deprecated("Use the overload with selected, active, colorFilter and hints")
+@ScheduledForRemoval(inVersion = "In 2025.3")
@Composable
public fun SimpleListItem(
state: ListItemState,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TabStrip.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TabStrip.kt
index df034453e1e0..bf71d8f8cd9b 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TabStrip.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TabStrip.kt
@@ -78,7 +78,7 @@ public fun TabStrip(tabs: List, style: TabStyle, modifier: Modifier = M
)
.selectableGroup()
) {
- tabs.forEach { TabImpl(isActive = tabStripState.isActive, tabData = it) }
+ tabs.forEach { tabData -> TabImpl(isActive = tabStripState.isActive, tabData = tabData, tabStyle = style) }
}
AnimatedVisibility(
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Tabs.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Tabs.kt
index d22b9d3e37e8..443c165eb716 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Tabs.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Tabs.kt
@@ -43,6 +43,7 @@ import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Selected
import org.jetbrains.jewel.foundation.state.SelectableComponentState
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.foundation.theme.LocalContentColor
+import org.jetbrains.jewel.ui.component.styling.TabStyle
import org.jetbrains.jewel.ui.icon.IconKey
import org.jetbrains.jewel.ui.painter.PainterHint
import org.jetbrains.jewel.ui.painter.hints.Stateful
@@ -111,15 +112,10 @@ public fun TabContentScope.SimpleTabContent(
internal fun TabImpl(
isActive: Boolean,
tabData: TabData,
+ tabStyle: TabStyle,
modifier: Modifier = Modifier,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
) {
- val tabStyle =
- when (tabData) {
- is TabData.Default -> JewelTheme.defaultTabStyle
- is TabData.Editor -> JewelTheme.editorTabStyle
- }
-
var tabState by remember { mutableStateOf(TabState.of(selected = tabData.selected, active = isActive)) }
remember(tabData.selected, isActive) { tabState = tabState.copy(selected = tabData.selected, active = isActive) }
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextArea.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextArea.kt
index 34e89842d256..3e78c4052eb4 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextArea.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextArea.kt
@@ -19,10 +19,7 @@ import androidx.compose.foundation.text.input.TextFieldLineLimits
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -40,7 +37,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
+import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.foundation.theme.LocalContentColor
import org.jetbrains.jewel.foundation.theme.LocalTextStyle
@@ -224,65 +221,42 @@ private fun calculatePaddings(
style.metrics.contentPadding to 0.dp
}
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Deprecated("Please use TextArea(state) instead. If you want to observe text changes, use snapshotFlow { state.text }")
-@Composable
-public fun TextArea(
- value: String,
- onValueChange: (String) -> Unit,
- modifier: Modifier = Modifier,
- enabled: Boolean = true,
- readOnly: Boolean = false,
- outline: Outline = Outline.None,
- placeholder: @Composable (() -> Unit)? = null,
- undecorated: Boolean = false,
- visualTransformation: VisualTransformation = VisualTransformation.None,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
- keyboardActions: KeyboardActions = KeyboardActions(),
- maxLines: Int = Int.MAX_VALUE,
- onTextLayout: (TextLayoutResult) -> Unit = {},
- style: TextAreaStyle = JewelTheme.textAreaStyle,
- textStyle: TextStyle = JewelTheme.defaultTextStyle,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- decorationBoxModifier: Modifier = Modifier,
-) {
- var textFieldValueState by remember { mutableStateOf(TextFieldValue(text = value)) }
- val textFieldValue = textFieldValueState.copy(text = value)
- var lastTextValue by remember(value) { mutableStateOf(value) }
-
- @Suppress("DEPRECATION")
- TextArea(
- value = textFieldValue,
- onValueChange = { newTextFieldValueState ->
- textFieldValueState = newTextFieldValueState
-
- val stringChangedSinceLastInvocation = lastTextValue != newTextFieldValueState.text
- lastTextValue = newTextFieldValueState.text
-
- if (stringChangedSinceLastInvocation) {
- onValueChange(newTextFieldValueState.text)
- }
- },
- modifier = modifier,
- enabled = enabled,
- readOnly = readOnly,
- outline = outline,
- placeholder = placeholder,
- undecorated = undecorated,
- visualTransformation = visualTransformation,
- keyboardOptions = keyboardOptions,
- keyboardActions = keyboardActions,
- maxLines = maxLines,
- onTextLayout = onTextLayout,
- style = style,
- textStyle = textStyle,
- interactionSource = interactionSource,
- decorationBoxModifier = decorationBoxModifier,
- )
-}
-
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Deprecated("Please use TextArea(state) instead. If you want to observe text changes, use snapshotFlow { state.text }")
+/**
+ * A multi-line text input component that follows the standard visual styling.
+ * > **Note:** you should prefer the state-based variant whenever possible. When the `TextFieldState`-based variant will
+ * > reach feature parity with this variant, we'll deprecate this variant and, after some time, remove it.
+ *
+ * Provides a scrollable text editing area that can display and edit multiple lines of text. The component includes
+ * standard text editing capabilities and platform-specific key bindings. It **cannot** display scrollbars.
+ *
+ * **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/text-area.html)
+ *
+ * **Usage example:**
+ * [`TextAreas.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/TextAreas.kt)
+ *
+ * **Swing equivalent:**
+ * [`JBTextArea`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/components/JBTextArea.java)
+ *
+ * @param value The state object controlling the text content and selection
+ * @param onValueChange A lambda invoked when the internal state changes
+ * @param modifier Modifier to be applied to the text area
+ * @param enabled Controls whether the text area can be interacted with
+ * @param readOnly Controls whether the text can be modified
+ * @param placeholder Content to display when the text area is empty
+ * @param undecorated Whether to show the text area without decorations
+ * @param outline The outline style to be applied to the text area
+ * @param visualTransformation Transforms text input before it appears in the text area
+ * @param keyboardOptions Options controlling keyboard input behavior
+ * @param keyboardActions Handler for keyboard actions
+ * @param maxLines Sets the number of max lines allowed
+ * @param onTextLayout Callback for text layout changes
+ * @param style The visual styling configuration for the text area
+ * @param textStyle The typography style to be applied to the text
+ * @param interactionSource Source of interactions for this text area
+ * @param decorationBoxModifier Modifier to be applied to the decoration box
+ * @see com.intellij.ui.components.JBTextArea
+ */
+@ExperimentalJewelApi
@Composable
public fun TextArea(
value: TextFieldValue,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextField.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextField.kt
index cb7d6741e409..46d2378a0961 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextField.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/TextField.kt
@@ -15,10 +15,7 @@ import androidx.compose.foundation.text.input.TextFieldLineLimits
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -33,7 +30,7 @@ import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.offset
import kotlin.math.max
-import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval
+import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.foundation.theme.JewelTheme
import org.jetbrains.jewel.foundation.theme.LocalContentColor
import org.jetbrains.jewel.foundation.theme.LocalTextStyle
@@ -76,7 +73,6 @@ import org.jetbrains.jewel.ui.theme.textFieldStyle
* @param undecorated Whether to show the text field without decorations
* @see com.intellij.ui.components.JBTextField
*/
-@Suppress("DuplicatedCode") // The dupe is scheduled for removal
@Composable
public fun TextField(
state: TextFieldState,
@@ -136,64 +132,44 @@ public fun TextField(
)
}
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Deprecated("Please use TextField(state) instead. If you want to observe text changes, use snapshotFlow { state.text }")
-@Composable
-public fun TextField(
- value: String,
- onValueChange: (String) -> Unit,
- modifier: Modifier = Modifier,
- enabled: Boolean = true,
- readOnly: Boolean = false,
- outline: Outline = Outline.None,
- placeholder: @Composable (() -> Unit)? = null,
- leadingIcon: @Composable (() -> Unit)? = null,
- trailingIcon: @Composable (() -> Unit)? = null,
- undecorated: Boolean = false,
- visualTransformation: VisualTransformation = VisualTransformation.None,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
- keyboardActions: KeyboardActions = KeyboardActions(),
- onTextLayout: (TextLayoutResult) -> Unit = {},
- style: TextFieldStyle = JewelTheme.textFieldStyle,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
-) {
- var textFieldValueState by remember { mutableStateOf(TextFieldValue(text = value)) }
- val textFieldValue = textFieldValueState.copy(text = value)
- var lastTextValue by remember(value) { mutableStateOf(value) }
-
- @Suppress("DEPRECATION")
- TextField(
- value = textFieldValue,
- onValueChange = { newTextFieldValueState ->
- textFieldValueState = newTextFieldValueState
-
- val stringChangedSinceLastInvocation = lastTextValue != newTextFieldValueState.text
- lastTextValue = newTextFieldValueState.text
-
- if (stringChangedSinceLastInvocation) {
- onValueChange(newTextFieldValueState.text)
- }
- },
- modifier = modifier,
- enabled = enabled,
- readOnly = readOnly,
- outline = outline,
- placeholder = placeholder,
- trailingIcon = trailingIcon,
- leadingIcon = leadingIcon,
- undecorated = undecorated,
- visualTransformation = visualTransformation,
- keyboardOptions = keyboardOptions,
- keyboardActions = keyboardActions,
- onTextLayout = onTextLayout,
- style = style,
- interactionSource = interactionSource,
- )
-}
-
-@Suppress("DuplicatedCode") // This is scheduled for removal
-@ScheduledForRemoval(inVersion = "Before 1.0")
-@Deprecated("Please use TextField(state) instead. If you want to observe text changes, use snapshotFlow { state.text }")
+/**
+ * A single-line text input component that follows the standard visual styling.
+ * > **Note:** you should prefer the state-based variant whenever possible. When the `TextFieldState`-based variant will
+ * > reach feature parity with this variant, we'll deprecate this variant and, after some time, remove it.
+ *
+ * Provides a text input field for single-line text entry with optional leading and trailing icons, placeholder text,
+ * and various text input features. The component supports standard text editing capabilities and platform-specific key
+ * bindings.
+ *
+ * **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/input-field.html)
+ *
+ * **Usage example:**
+ * [`TextFields.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/TextFields.kt)
+ *
+ * **Swing equivalent:**
+ * [`JBTextField`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-api/src/com/intellij/ui/components/JBTextField.java)
+ * and [`JTextField`](https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html)
+ *
+ * @param value The state object controlling the text content and selection
+ * @param onValueChange A lambda invoked when the internal state changes
+ * @param modifier Modifier to be applied to the text field
+ * @param enabled Controls whether the text field can be interacted with
+ * @param readOnly Controls whether the text can be modified
+ * @param outline The outline style to be applied to the text field
+ * @param placeholder Content to display when the text field is empty
+ * @param leadingIcon Optional icon to display before the text
+ * @param trailingIcon Optional icon to display after the text
+ * @param undecorated Whether to show the text field without decorations
+ * @param visualTransformation Transforms text input before it appears in the text field
+ * @param keyboardOptions Options controlling keyboard input behavior
+ * @param keyboardActions Handler for keyboard actions
+ * @param onTextLayout Callback for text layout changes
+ * @param style The visual styling configuration for the text field
+ * @param textStyle The typography style to be applied to the text
+ * @param interactionSource Source of interactions for this text field
+ * @see com.intellij.ui.components.JBTextField
+ */
+@ExperimentalJewelApi
@Composable
public fun TextField(
value: TextFieldValue,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/TooltipStyling.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/TooltipStyling.kt
index d64a9596f61c..8f48a617e314 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/TooltipStyling.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/TooltipStyling.kt
@@ -133,7 +133,7 @@ public class TooltipMetrics(
public companion object {
public fun defaults(
contentPadding: PaddingValues = PaddingValues(vertical = 9.dp, horizontal = 12.dp),
- showDelay: Duration = 1200.milliseconds,
+ showDelay: Duration = 500.milliseconds, // ide.tooltip.initialReshowDelay
cornerSize: CornerSize = CornerSize(4.dp),
borderWidth: Dp = 1.dp,
shadowSize: Dp = 12.dp,
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/painter/ResourcePainterProvider.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/painter/ResourcePainterProvider.kt
index 5d3509fc8b8f..f009da56fad8 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/painter/ResourcePainterProvider.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/painter/ResourcePainterProvider.kt
@@ -206,7 +206,7 @@ public class ResourcePainterProvider(private val basePath: String, vararg classL
try {
loadingAction(url)
} catch (e: RuntimeException) {
- val message = "Unable to load SVG resource from $url\n${e.stackTraceToString()}"
+ val message = "Unable to load resource from $url\n${e.stackTraceToString()}"
logger.error(message)
return errorPainter
}
diff --git a/platform/platform-resources/src/META-INF/common-ide-modules.xml b/platform/platform-resources/src/META-INF/common-ide-modules.xml
index 5508613572e9..cae3f9c1d2ed 100644
--- a/platform/platform-resources/src/META-INF/common-ide-modules.xml
+++ b/platform/platform-resources/src/META-INF/common-ide-modules.xml
@@ -15,8 +15,9 @@
-
-
+
+
+
diff --git a/plugins/markdown/compose/intellij.markdown.compose.preview.iml b/plugins/markdown/compose/intellij.markdown.compose.preview.iml
index abadd546d4e4..7ecb58f6af8f 100644
--- a/plugins/markdown/compose/intellij.markdown.compose.preview.iml
+++ b/plugins/markdown/compose/intellij.markdown.compose.preview.iml
@@ -38,6 +38,6 @@
-
+
\ No newline at end of file