[JEWEL-1000] Update standalone theme defs, fix generator

This updates the ThemeDefinition dumps for standalone for the main
branch, fixes the Gradle generator to generate them in the correct
folder, makes sure they're properly formatted.

It also adds a step to the release guide to make sure we update them.

Bonus changes:
* Removed unused `ijp.target` property and relative logic from the
  Gradle build and docs.
* Bumped target IJP to 252.1 in Gradle build
* Bump IJP Gradle Plugin to 2.8.0

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

(cherry picked from commit f101aa8994c72b6db52118fb9942b1a2fad28944)

GitOrigin-RevId: 9ac97d38d9b83d95d18106782834d2a3f6fb90f9
This commit is contained in:
Sebastiano Poggi
2025-09-02 18:22:45 +02:00
committed by intellij-monorepo-bot
parent a0256a539f
commit 07fa590b64
17 changed files with 661 additions and 874 deletions

View File

@@ -56,13 +56,17 @@ kotlin {
}
tasks {
detektMain { exclude { it.file.absolutePath.startsWith(layout.buildDirectory.asFile.get().absolutePath) } }
// We need to use relative paths for patterns.
// Exclude does not work; this is how the Kotlinter plugin docs recommend doing it, and it works...
val buildDir = layout.buildDirectory.asFile.get().relativeTo(project.projectDir).path
detektMain { source = (source - fileTree(buildDir)).asFileTree }
formatKotlinMain { exclude { it.file.absolutePath.replace('\\', '/').contains("build/generated") } }
withType<KtfmtBaseTask> { exclude { it.file.absolutePath.contains("build/generated") } }
formatKotlinMain { source = (source - fileTree(buildDir)).asFileTree }
withType<KtfmtBaseTask> { source = (source - fileTree(buildDir)).asFileTree }
lintKotlinMain {
exclude { it.file.absolutePath.replace('\\', '/').contains("build/generated") }
source = (source - fileTree(buildDir)).asFileTree
reports = provider {
mapOf(

View File

@@ -1,19 +0,0 @@
package org.jetbrains.jewel.buildlogic.ideversion
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
internal data class ApiIdeaReleasesItem(
@SerialName("code") val code: String,
@SerialName("releases") val releases: List<Release>,
) {
@Serializable
internal data class Release(
@SerialName("build") val build: String,
@SerialName("type") val type: String,
@SerialName("version") val version: String,
@SerialName("majorVersion") val majorVersion: String,
)
}

View File

@@ -1,186 +0,0 @@
package org.jetbrains.jewel.buildlogic.ideversion
import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.tasks.TaskAction
open class CheckIdeaVersionTask : DefaultTask() {
private val releasesUrl =
"https://data.services.jetbrains.com/products?" +
"fields=code,releases,releases.version,releases.build,releases.type,releases.majorVersion&" +
"code=IC"
private val ideaVersionRegex = "202\\d\\.(\\d\\.)?\\d".toRegex(RegexOption.IGNORE_CASE)
private val intelliJPlatformBuildRegex = "2\\d{2}\\.\\d+\\.\\d+(?:-EAP-SNAPSHOT)?".toRegex(RegexOption.IGNORE_CASE)
private val currentIjpVersion = project.currentIjpVersion
init {
group = "jewel"
}
@TaskAction
fun generate() {
logger.lifecycle("Fetching IntelliJ Platform releases from $releasesUrl...")
val ideaVersion = readCurrentVersionInfo()
validateIdeaVersion(ideaVersion)
val platformBuildsForThisMajorVersion =
IJPVersionsFetcher.fetchBuildsForCurrentMajorVersion(releasesUrl, ideaVersion.majorVersion, logger)
if (platformBuildsForThisMajorVersion == null) {
logger.error("Cannot check platform version, no builds found for current version $ideaVersion")
return
}
val latestAvailableBuild = platformBuildsForThisMajorVersion.last()
logger.info("The latest IntelliJ Platform ${ideaVersion.version} build is ${latestAvailableBuild.build}")
val isCurrentBuildStable = ideaVersion.type.lowercase() != "eap"
if (IJPVersionsFetcher.compare(ideaVersion, latestAvailableBuild) < 0) {
throw GradleException(
buildString {
appendLine("IntelliJ Platform version dependency is out of date.")
appendLine()
append("Current build: ${ideaVersion.build}")
if (!isCurrentBuildStable) append("-EAP-SNAPSHOT")
appendLine()
appendLine("Current version: ${ideaVersion.version}")
append("Detected channel: ")
appendLine(latestAvailableBuild.type)
appendLine()
append("Latest build: ${latestAvailableBuild.build}")
if (!isCurrentBuildStable) append("-EAP-SNAPSHOT")
appendLine()
append("Latest version: ")
if (isCurrentBuildStable) {
appendLine(latestAvailableBuild.version)
} else {
appendLine(latestAvailableBuild.build.removeSuffix("-EAP-SNAPSHOT"))
}
appendLine(
"Please update the 'idea' and 'intelliJPlatformBuild' " + "versions in the catalog accordingly."
)
}
)
}
logger.lifecycle(
"No IntelliJ Platform version updates available. " +
"Current: ${ideaVersion.build} (${ideaVersion.version})"
)
}
private fun readCurrentVersionInfo(): ApiIdeaReleasesItem.Release {
val catalogFile = project.rootProject.file("gradle/libs.versions.toml")
val ideaVersion = readIdeaVersion(catalogFile)
val isStableBuild = !ideaVersion.matches(intelliJPlatformBuildRegex)
val platformBuild = readPlatformBuild(catalogFile)
val majorVersion =
if (isStableBuild) {
asMajorPlatformVersion(ideaVersion)
} else {
inferMajorPlatformVersion(platformBuild)
}
return ApiIdeaReleasesItem.Release(
build = platformBuild.removeSuffix("-EAP-SNAPSHOT"),
version = ideaVersion,
majorVersion = majorVersion,
type = if (isStableBuild) "release" else "eap",
)
}
private fun asMajorPlatformVersion(rawVersion: String) = rawVersion.take(6)
private fun inferMajorPlatformVersion(rawBuildNumber: String) =
"20${rawBuildNumber.take(2)}.${rawBuildNumber.substringBefore('.').last()}"
private fun readIdeaVersion(catalogFile: File): String {
val versionName = "idea"
val catalogDependencyLine =
catalogFile.useLines { lines -> lines.find { it.startsWith(versionName) } }
?: throw GradleException(
"Unable to find IJP dependency '$versionName' in the catalog file '${catalogFile.path}'"
)
val dependencyVersion =
catalogDependencyLine.substringAfter(versionName).trimStart(' ', '=').trimEnd().trim('"')
if (!dependencyVersion.matches(ideaVersionRegex) && !dependencyVersion.matches(intelliJPlatformBuildRegex)) {
throw GradleException("Invalid IJ IDEA version found in version catalog: '$dependencyVersion'")
}
return dependencyVersion
}
private fun readPlatformBuild(catalogFile: File): String {
val versionName = "intelliJPlatformBuild"
val catalogDependencyLine =
catalogFile.useLines { lines -> lines.find { it.startsWith(versionName) } }
?: throw GradleException(
"Unable to find IJP dependency '$versionName' in the catalog file '${catalogFile.path}'"
)
val declaredPlatformBuild =
catalogDependencyLine.substringAfter(versionName).trimStart(' ', '=').trimEnd().trim('"')
if (!declaredPlatformBuild.matches(intelliJPlatformBuildRegex)) {
throw GradleException("Invalid IJP build found in version catalog: '$declaredPlatformBuild'")
}
return declaredPlatformBuild
}
private fun validateIdeaVersion(currentVersion: ApiIdeaReleasesItem.Release) {
val candidateMatches =
IJPVersionsFetcher.fetchIJPVersions(releasesUrl, logger)
?: throw GradleException("Can't fetch all IJP releases.")
val match =
candidateMatches.find { it.build == currentVersion.build }
?: throw GradleException("IJ build ${currentVersion.build} seemingly does not exist")
if (currentVersion.type != "eap" && match.version != currentVersion.version) {
throw GradleException(
buildString {
appendLine("The 'idea' and 'intelliJPlatformBuild' properties in the catalog don't match.")
append("'idea' = ")
append(currentVersion.version)
append(", 'intelliJPlatformBuild' = ")
appendLine(currentVersion.build)
appendLine()
appendLine("That build number is for version ${match.version}.")
appendLine("Adjust the values so they're aligned correctly.")
}
)
}
// The match's build doesn't contain the -EAP-SNAPSHOT SUFFIX
if (currentVersion.type == "eap" && currentVersion.version != match.build) {
throw GradleException(
buildString {
appendLine("The 'idea' and 'intelliJPlatformBuild' properties in the catalog don't match.")
append("'idea' = ")
append(currentVersion.version)
append(", 'intelliJPlatformBuild' = ")
appendLine(currentVersion.build + "-EAP-SNAPSHOT")
appendLine()
appendLine("For non-stable IJP versions, the version and build should match,")
appendLine("minus the '-EAP-SNAPSHOT' suffix in the build number.")
appendLine("Adjust the values so they're aligned correctly.")
}
)
}
}
}

View File

@@ -1,15 +0,0 @@
package org.jetbrains.jewel.buildlogic.ideversion
import org.gradle.api.Project
val Project.currentIjpVersion: String
get() {
val rawValue =
property("ijp.target") as? String ?: error("Property ijp.target not defined. Check your gradle.properties!")
if (rawValue.length != 3 || rawValue.toIntOrNull()?.let { it < 0 } == true) {
error("Invalid ijp.target property value: '$rawValue'")
}
return rawValue
}

View File

@@ -1,97 +0,0 @@
package org.jetbrains.jewel.buildlogic.ideversion
import java.io.IOException
import java.net.URI
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import org.gradle.api.logging.Logger
internal object IJPVersionsFetcher {
fun fetchIJPVersions(releasesUrl: String, logger: Logger): List<ApiIdeaReleasesItem.Release>? {
val json = Json {
ignoreUnknownKeys = true
isLenient = true
}
val icReleases =
try {
URI.create(releasesUrl)
.toURL()
.openStream()
.use { json.decodeFromStream<List<ApiIdeaReleasesItem>>(it) }
.first()
} catch (e: IOException) {
logger.warn(
"Couldn't fetch IJ Platform releases, can't check for updates.\n" +
"Cause: ${e::class.qualifiedName}${e.message}"
)
return null
} catch (e: RuntimeException) {
logger.error("Unexpected error while fetching IJ Platform releases, can't check for updates.", e)
return null
}
check(icReleases.code == "IIC") { "Was expecting code IIC but was ${icReleases.code}" }
check(icReleases.releases.isNotEmpty()) { "Was expecting to have releases but the list is empty" }
return icReleases.releases
}
fun fetchBuildsForCurrentMajorVersion(
releasesUrl: String,
majorPlatformVersion: String,
logger: Logger,
): List<ApiIdeaReleasesItem.Release>? {
val releases = fetchIJPVersions(releasesUrl, logger) ?: return null
return releases
.asSequence()
.filter { it.majorVersion == majorPlatformVersion }
.sortedWith(ReleaseComparator)
.toList()
}
fun fetchLatestBuildForCurrentMajorVersion(releasesUrl: String, majorPlatformVersion: String, logger: Logger) =
fetchBuildsForCurrentMajorVersion(releasesUrl, majorPlatformVersion, logger)?.last()
fun compare(first: ApiIdeaReleasesItem.Release, second: ApiIdeaReleasesItem.Release): Int =
VersionComparator.compare(first.build, second.build)
private object ReleaseComparator : Comparator<ApiIdeaReleasesItem.Release> {
override fun compare(o1: ApiIdeaReleasesItem.Release?, o2: ApiIdeaReleasesItem.Release?): Int {
if (o1 == o2) return 0
if (o1 == null) return -1
if (o2 == null) return 1
return VersionComparator.compare(o1.build, o2.build)
}
}
private object VersionComparator : Comparator<String> {
override fun compare(o1: String?, o2: String?): Int {
if (o1 == o2) return 0
if (o1 == null) return -1
if (o2 == null) return 1
require(o1.isNotEmpty() && o1.all { it.isDigit() || it == '.' }) { "The first version is invalid: '$o1'" }
require(o2.isNotEmpty() && o2.all { it.isDigit() || it == '.' }) { "The first version is invalid: '$o2'" }
val firstGroups = o1.split('.')
val secondGroups = o2.split('.')
require(firstGroups.size == 3) { "The first version is invalid: '$o1'" }
require(secondGroups.size == 3) { "The second version is invalid: '$o2'" }
val firstComparison = firstGroups[0].toInt().compareTo(secondGroups[0].toInt())
if (firstComparison != 0) return firstComparison
val secondComparison = firstGroups[1].toInt().compareTo(secondGroups[1].toInt())
if (secondComparison != 0) return secondComparison
return firstGroups[2].toInt().compareTo(secondGroups[2].toInt())
}
}
}

View File

@@ -7,22 +7,24 @@ import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import com.squareup.kotlinpoet.joinToCode
import java.time.ZoneOffset
import java.time.ZonedDateTime
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
internal object IntUiThemeDescriptorReader {
private val colorGroups = setOf("Gray", "Blue", "Green", "Red", "Yellow", "Orange", "Purple", "Teal")
private val colorClassName = ClassName("androidx.compose.ui.graphics", "Color")
fun readThemeFrom(themeDescriptor: IntellijThemeDescriptor, className: ClassName, sourcePath: String) =
fun readThemeFrom(
themeDescriptor: IntellijThemeDescriptor,
className: ClassName,
sourcePath: String,
ijpMajor: String,
) =
FileSpec.builder(className)
.apply {
indent(" ")
val todayUtc = ZonedDateTime.now().withZoneSameInstant(ZoneOffset.UTC).toLocalDate()
addFileComment("Generated by the Jewel Int UI Palette Generator on $todayUtc\n")
addFileComment("Generated by the Jewel Int UI Palette Generator for IJP $ijpMajor\n")
addFileComment("*** DO NOT EDIT MANUALLY! Use generateThemes task to update. ***\n")
addFileComment("Source: $sourcePath")
addImport(colorClassName.packageName, colorClassName.simpleName)
@@ -104,7 +106,9 @@ internal object IntUiThemeDescriptorReader {
val pairValue = it.value
if (pairValue is JsonPrimitive && pairValue.isString) {
it.key to pairValue.content
} else null
} else {
null
}
}
.forEach { colorPalette[it.first] = it.second }
}
@@ -117,7 +121,7 @@ internal object IntUiThemeDescriptorReader {
PropertySpec.builder("iconData", iconDataClassName, KModifier.OVERRIDE)
.initializer(
CodeBlock.of(
"ThemeIconData(iconOverrides = \n%L,colorPalette = \n%L,\nselectionColorPalette = %L\n)",
"ThemeIconData(\niconOverrides = \n%L,\ncolorPalette = \n%L,\nselectionColorPalette = %L\n)",
iconOverridesBlock,
colorPalette.toMapCodeBlock(),
selectionColorPaletteBlock,
@@ -127,8 +131,11 @@ internal object IntUiThemeDescriptorReader {
)
}
private inline fun <reified K, reified V> Map<K, V>.toMapCodeBlock() =
entries
private inline fun <reified K, reified V> Map<K, V>.toMapCodeBlock(): CodeBlock {
if (entries.isEmpty()) return CodeBlock.of("emptyMap()")
return entries
.map { (key, value) -> CodeBlock.of("\"%L\" to \"%L\"", key, value) }
.joinToCode(prefix = "mapOf(", separator = ",\n", suffix = ")")
}
}

View File

@@ -24,7 +24,6 @@ class ThemeGeneratorContainer(container: NamedDomainObjectContainer<ThemeGenerat
NamedDomainObjectContainer<ThemeGeneration> by container
class ThemeGeneration(val name: String, project: Project) {
val targetDir: DirectoryProperty =
project.objects.directoryProperty().convention(project.layout.buildDirectory.dir("generated/theme"))
val themeClassName = project.objects.property<String>()
@@ -33,15 +32,11 @@ class ThemeGeneration(val name: String, project: Project) {
@CacheableTask
abstract class IntelliJThemeGeneratorTask : DefaultTask() {
@get:OutputFile abstract val outputFile: RegularFileProperty
@get:InputFile
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val themeFile: RegularFileProperty
@get:InputFile @get:PathSensitive(PathSensitivity.RELATIVE) abstract val themeFile: RegularFileProperty
@get:Input
abstract val themeFilePath: Property<String>
@get:Input abstract val themeFilePath: Property<String>
@get:Input abstract val themeClassName: Property<String>
@@ -59,7 +54,19 @@ abstract class IntelliJThemeGeneratorTask : DefaultTask() {
val themeDescriptor = themeFile.inputStream().use { json.decodeFromStream<IntellijThemeDescriptor>(it) }
val className = ClassName.bestGuess(themeClassName.get())
val file = IntUiThemeDescriptorReader.readThemeFrom(themeDescriptor, className, themeFilePath.get())
val buildNumberFile = project.rootDir.resolve("../../build.txt")
check(buildNumberFile.isFile) { "The build.txt file must exist in the community root" }
val buildNumber = buildNumberFile.readText().trim()
check(validateBuildNumber(buildNumber)) { "The build number in build.txt does not seem valid: '$buildNumber'" }
val file =
IntUiThemeDescriptorReader.readThemeFrom(
themeDescriptor,
className,
themeFilePath.get(),
buildNumber.substringBefore('.'),
)
val outputFile = outputFile.get().asFile
logger.lifecycle(
@@ -67,6 +74,19 @@ abstract class IntelliJThemeGeneratorTask : DefaultTask() {
)
outputFile.bufferedWriter().use { file.writeTo(it) }
}
private fun validateBuildNumber(buildNumber: String): Boolean {
// Examples:
// * 253.1234.567
// * 241.SNAPSHOT
if (buildNumber.isBlank()) return false
if (buildNumber.length < 5) return false
if (buildNumber.take(3).toIntOrNull()?.takeIf { it > 240 } == null) return false
if (buildNumber[3] != '.') return false
val afterDot = buildNumber.drop(4)
return afterDot == "SNAPSHOT" || afterDot.all { it.isDigit() || it == '.' }
}
}
@Serializable

View File

@@ -24,9 +24,9 @@ High-level steps:
```
5. Cherry-pick the changes to the target release branches (e.g., `252`)
1. Make sure you've not included IJP major release-specific changes
2. Update the `ijp.target` entry in [`gradle.properties`](../gradle.properties)
3. Update the Kotlin version in the [Gradle version catalog](../gradle/libs.versions.toml) to match the IJP's Kotlin version
4. Update other related versions if needed
2. Update the Kotlin version in the [Gradle version catalog](../gradle/libs.versions.toml) to match the IJ Platform's Kotlin version
3. Update other related versions if needed
4. Run `./gradlew generateThemes --rerun-tasks` to update the standalone theme definitions
5. Run all Gradle-based checks
6. Run all IJ tests (e.g., via the `tests.cmd` script)
7. Verify everything works in the Jewel Standalone sample (components, Markdown rendering)
@@ -36,8 +36,11 @@ High-level steps:
```shell
./scripts/metalava-signatures.sh --validate --release <new-release>
```
11. Open a MR for each cherry-pick branch on Space
6. When both MRs are approved and merged, run the TeamCity job to publish the artefacts to Maven Central
11. Open a merge request for each cherry-pick branch on Space
6. When both MRs are approved and merged:
1. Run the TeamCity job to publish the artefacts to Maven Central
2. Tag the commits the releases were cut from, with this format: `JEWEL-[Jewel version]-[major IJP version]`. For
example, for Jewel 0.30.0, `JEWEL-0.30.0-251` on the 251 branch and `JEWEL-0.30.0-252` on the 252 branch.
## Testing publishing locally

View File

@@ -8,5 +8,4 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
jdk.level=21
ijp.target=251
jewel.release.version=0.30.0

View File

@@ -6,9 +6,9 @@ composeDesktop = "1.9.0-beta03"
detekt = "1.23.8"
dokka = "2.0.0"
filepicker = "3.1.0"
idea = "2025.2"
intelliJPlatformBuild = "252.23892.409"
ideaPlugin = "2.6.0"
idea = "2025.2.1"
intelliJPlatformBuild = "252.25557.131"
ideaPlugin = "2.8.0"
jbr = "1.6.0"
jna = "5.17.0"
junitJupiter = "5.13.4"

View File

@@ -1,3 +1,4 @@
import io.gitlab.arturbosch.detekt.Detekt
import org.jetbrains.jewel.buildlogic.metalava.GenerateMetalavaApiTask
import org.jetbrains.jewel.buildlogic.theme.IntelliJThemeGeneratorTask
@@ -18,14 +19,50 @@ intelliJThemeGenerator {
register("intUiLight") {
themeClassName = "org.jetbrains.jewel.intui.core.theme.IntUiLightTheme"
themeFilePath = "../../platform/platform-resources/src/themes/expUI/expUI_light.theme.json"
targetDir = project.file("generated/theme/")
}
register("intUiDark") {
themeClassName = "org.jetbrains.jewel.intui.core.theme.IntUiDarkTheme"
themeFilePath = "../../platform/platform-resources/src/themes/expUI/expUI_dark.theme.json"
targetDir = project.file("generated/theme/")
}
}
tasks {
val themeGeneratorTasks = withType<IntelliJThemeGeneratorTask>()
withType<GenerateMetalavaApiTask> { dependsOn(themeGeneratorTasks) }
themeGeneratorTasks.configureEach { finalizedBy(ktfmtFormatMain) }
ktfmtFormatMain {
// Ensure the ktfmtFormatMain task is not considered UP-TO-DATE when
// we've regenerated the theme definitions (it doesn't always pick
// it up for some reason)
outputs.upToDateWhen { themeGeneratorTasks.none { it.state.executed } }
}
val generateThemes by
register("generateThemes") {
description = "Updates the ThemeDescription dumps and reformats them."
dependsOn(themeGeneratorTasks)
dependsOn(ktfmtFormatMain)
}
withType<GenerateMetalavaApiTask> { dependsOn(generateThemes) }
ktfmtCheckMain {
mustRunAfter(generateThemes)
mustRunAfter(ktfmtFormatMain)
}
lintKotlinMain {
mustRunAfter(generateThemes)
mustRunAfter(ktfmtFormatMain)
}
withType<Detekt>().configureEach {
mustRunAfter(generateThemes)
mustRunAfter(ktfmtFormatMain)
}
detektMain {
mustRunAfter(generateThemes)
mustRunAfter(ktfmtFormatMain)
}
}

View File

@@ -1,6 +1,6 @@
// Generated by the Jewel Int UI Palette Generator
// Generated from the IntelliJ Platform version idea/243.19420.21
// Source: https://raw.githubusercontent.com/JetBrains/intellij-community/idea/243.19420.21/platform/platform-resources/src/themes/expUI/expUI_dark.theme.json
// Generated by the Jewel Int UI Palette Generator for IJP 253
// *** DO NOT EDIT MANUALLY! Use generateThemes task to update. ***
// Source: ../../platform/platform-resources/src/themes/expUI/expUI_dark.theme.json
package org.jetbrains.jewel.intui.core.theme
import androidx.compose.ui.graphics.Color
@@ -15,254 +15,265 @@ public object IntUiDarkTheme : ThemeDescriptor {
override val name: String = "Dark (Int UI)"
override val colors: ThemeColorPalette = ThemeColorPalette(
gray = listOf(
Color(0xFF1E1F22),
Color(0xFF2B2D30),
Color(0xFF393B40),
Color(0xFF43454A),
Color(0xFF4E5157),
Color(0xFF5A5D63),
Color(0xFF6F737A),
Color(0xFF868A91),
Color(0xFF9DA0A8),
Color(0xFFB4B8BF),
Color(0xFFCED0D6),
Color(0xFFDFE1E5),
Color(0xFFF0F1F2),
Color(0xFFFFFFFF)
),
blue = listOf(
Color(0xFF25324D),
Color(0xFF2E436E),
Color(0xFF35538F),
Color(0xFF375FAD),
Color(0xFF366ACE),
Color(0xFF3574F0),
Color(0xFF467FF2),
Color(0xFF548AF7),
Color(0xFF6B9BFA),
Color(0xFF83ACFC),
Color(0xFF99BBFF),
Color(0xFFB5CEFF),
Color(0xFFD1E0FF)
),
green = listOf(
Color(0xFF253627),
Color(0xFF273828),
Color(0xFF375239),
Color(0xFF436946),
Color(0xFF4E8052),
Color(0xFF57965C),
Color(0xFF5FAD65),
Color(0xFF73BD79),
Color(0xFF89CC8E),
Color(0xFFA0DBA5),
Color(0xFFB9EBBD),
Color(0xFFD4FAD7)
),
yellow = listOf(
Color(0xFF3D3223),
Color(0xFF5E4D33),
Color(0xFF826A41),
Color(0xFF9E814A),
Color(0xFFBA9752),
Color(0xFFD6AE58),
Color(0xFFF2C55C),
Color(0xFFF5D273),
Color(0xFFF7DE8B),
Color(0xFFFCEBA4),
Color(0xFFFFF6BD)
),
red = listOf(
Color(0xFF402929),
Color(0xFF472B2B),
Color(0xFF5E3838),
Color(0xFF7A4343),
Color(0xFF9C4E4E),
Color(0xFFBD5757),
Color(0xFFDB5C5C),
Color(0xFFE37774),
Color(0xFFEB938D),
Color(0xFFF2B1AA),
Color(0xFFF7CCC6),
Color(0xFFFAE3DE)
),
orange = listOf(
Color(0xFF45322B),
Color(0xFF614438),
Color(0xFF825845),
Color(0xFFA36B4E),
Color(0xFFC27A53),
Color(0xFFE08855),
Color(0xFFE5986C),
Color(0xFFF0AC81),
Color(0xFFF5BD98),
Color(0xFFFACEAF),
Color(0xFFFFDFC7)
),
purple = listOf(
Color(0xFF2F2936),
Color(0xFF3B3147),
Color(0xFF433358),
Color(0xFF583D7A),
Color(0xFF6C469C),
Color(0xFF8150BE),
Color(0xFF955AE0),
Color(0xFFA571E6),
Color(0xFFB589EC),
Color(0xFFC4A0F3),
Color(0xFFD4B8F9),
Color(0xFFE4CEFF)
),
teal = listOf(
Color(0xFF1D3838),
Color(0xFF1D3D3B),
Color(0xFF1E4D4A),
Color(0xFF20635D),
Color(0xFF21786F),
Color(0xFF238E82),
Color(0xFF24A394),
Color(0xFF42B1A4),
Color(0xFF60C0B5),
Color(0xFF7DCEC5),
Color(0xFF9BDDD6),
Color(0xFFB9EBE6)
),
override val colors: ThemeColorPalette =
ThemeColorPalette(
gray =
listOf(
Color(0xFF1E1F22),
Color(0xFF2B2D30),
Color(0xFF393B40),
Color(0xFF43454A),
Color(0xFF4E5157),
Color(0xFF5A5D63),
Color(0xFF6F737A),
Color(0xFF868A91),
Color(0xFF9DA0A8),
Color(0xFFB4B8BF),
Color(0xFFCED0D6),
Color(0xFFDFE1E5),
Color(0xFFF0F1F2),
Color(0xFFFFFFFF),
),
blue =
listOf(
Color(0xFF25324D),
Color(0xFF2E436E),
Color(0xFF35538F),
Color(0xFF375FAD),
Color(0xFF366ACE),
Color(0xFF3574F0),
Color(0xFF467FF2),
Color(0xFF548AF7),
Color(0xFF6B9BFA),
Color(0xFF83ACFC),
Color(0xFF99BBFF),
Color(0xFFB5CEFF),
Color(0xFFD1E0FF),
),
green =
listOf(
Color(0xFF253627),
Color(0xFF273828),
Color(0xFF375239),
Color(0xFF436946),
Color(0xFF4E8052),
Color(0xFF57965C),
Color(0xFF5FAD65),
Color(0xFF73BD79),
Color(0xFF89CC8E),
Color(0xFFA0DBA5),
Color(0xFFB9EBBD),
Color(0xFFD4FAD7),
),
yellow =
listOf(
Color(0xFF3D3223),
Color(0xFF5E4D33),
Color(0xFF826A41),
Color(0xFF9E814A),
Color(0xFFBA9752),
Color(0xFFD6AE58),
Color(0xFFF2C55C),
Color(0xFFF5D273),
Color(0xFFF7DE8B),
Color(0xFFFCEBA4),
Color(0xFFFFF6BD),
),
red =
listOf(
Color(0xFF402929),
Color(0xFF472B2B),
Color(0xFF5E3838),
Color(0xFF7A4343),
Color(0xFF9C4E4E),
Color(0xFFBD5757),
Color(0xFFDB5C5C),
Color(0xFFE37774),
Color(0xFFEB938D),
Color(0xFFF2B1AA),
Color(0xFFF7CCC6),
Color(0xFFFAE3DE),
),
orange =
listOf(
Color(0xFF45322B),
Color(0xFF614438),
Color(0xFF825845),
Color(0xFFA36B4E),
Color(0xFFC27A53),
Color(0xFFE08855),
Color(0xFFE5986C),
Color(0xFFF0AC81),
Color(0xFFF5BD98),
Color(0xFFFACEAF),
Color(0xFFFFDFC7),
),
purple =
listOf(
Color(0xFF2F2936),
Color(0xFF3B3147),
Color(0xFF433358),
Color(0xFF583D7A),
Color(0xFF6C469C),
Color(0xFF8150BE),
Color(0xFF955AE0),
Color(0xFFA571E6),
Color(0xFFB589EC),
Color(0xFFC4A0F3),
Color(0xFFD4B8F9),
Color(0xFFE4CEFF),
),
teal =
listOf(
Color(0xFF1D3838),
Color(0xFF1D3D3B),
Color(0xFF1E4D4A),
Color(0xFF20635D),
Color(0xFF21786F),
Color(0xFF238E82),
Color(0xFF24A394),
Color(0xFF42B1A4),
Color(0xFF60C0B5),
Color(0xFF7DCEC5),
Color(0xFF9BDDD6),
Color(0xFFB9EBE6),
),
rawMap =
mapOf(
"Gray1" to Color(0xFF1E1F22),
"Gray2" to Color(0xFF2B2D30),
"Gray3" to Color(0xFF393B40),
"Gray4" to Color(0xFF43454A),
"Gray5" to Color(0xFF4E5157),
"Gray6" to Color(0xFF5A5D63),
"Gray7" to Color(0xFF6F737A),
"Gray8" to Color(0xFF868A91),
"Gray9" to Color(0xFF9DA0A8),
"Gray10" to Color(0xFFB4B8BF),
"Gray11" to Color(0xFFCED0D6),
"Gray12" to Color(0xFFDFE1E5),
"Gray13" to Color(0xFFF0F1F2),
"Gray14" to Color(0xFFFFFFFF),
"Blue1" to Color(0xFF25324D),
"Blue2" to Color(0xFF2E436E),
"Blue3" to Color(0xFF35538F),
"Blue4" to Color(0xFF375FAD),
"Blue5" to Color(0xFF366ACE),
"Blue6" to Color(0xFF3574F0),
"Blue7" to Color(0xFF467FF2),
"Blue8" to Color(0xFF548AF7),
"Blue9" to Color(0xFF6B9BFA),
"Blue10" to Color(0xFF83ACFC),
"Blue11" to Color(0xFF99BBFF),
"Blue12" to Color(0xFFB5CEFF),
"Blue13" to Color(0xFFD1E0FF),
"Green1" to Color(0xFF253627),
"Green2" to Color(0xFF273828),
"Green3" to Color(0xFF375239),
"Green4" to Color(0xFF436946),
"Green5" to Color(0xFF4E8052),
"Green6" to Color(0xFF57965C),
"Green7" to Color(0xFF5FAD65),
"Green8" to Color(0xFF73BD79),
"Green9" to Color(0xFF89CC8E),
"Green10" to Color(0xFFA0DBA5),
"Green11" to Color(0xFFB9EBBD),
"Green12" to Color(0xFFD4FAD7),
"Yellow1" to Color(0xFF3D3223),
"Yellow2" to Color(0xFF5E4D33),
"Yellow3" to Color(0xFF826A41),
"Yellow4" to Color(0xFF9E814A),
"Yellow5" to Color(0xFFBA9752),
"Yellow6" to Color(0xFFD6AE58),
"Yellow7" to Color(0xFFF2C55C),
"Yellow8" to Color(0xFFF5D273),
"Yellow9" to Color(0xFFF7DE8B),
"Yellow10" to Color(0xFFFCEBA4),
"Yellow11" to Color(0xFFFFF6BD),
"Red1" to Color(0xFF402929),
"Red2" to Color(0xFF472B2B),
"Red3" to Color(0xFF5E3838),
"Red4" to Color(0xFF7A4343),
"Red5" to Color(0xFF9C4E4E),
"Red6" to Color(0xFFBD5757),
"Red7" to Color(0xFFDB5C5C),
"Red8" to Color(0xFFE37774),
"Red9" to Color(0xFFEB938D),
"Red10" to Color(0xFFF2B1AA),
"Red11" to Color(0xFFF7CCC6),
"Red12" to Color(0xFFFAE3DE),
"Orange1" to Color(0xFF45322B),
"Orange2" to Color(0xFF614438),
"Orange3" to Color(0xFF825845),
"Orange4" to Color(0xFFA36B4E),
"Orange5" to Color(0xFFC27A53),
"Orange6" to Color(0xFFE08855),
"Orange7" to Color(0xFFE5986C),
"Orange8" to Color(0xFFF0AC81),
"Orange9" to Color(0xFFF5BD98),
"Orange10" to Color(0xFFFACEAF),
"Orange11" to Color(0xFFFFDFC7),
"Purple1" to Color(0xFF2F2936),
"Purple2" to Color(0xFF3B3147),
"Purple3" to Color(0xFF433358),
"Purple4" to Color(0xFF583D7A),
"Purple5" to Color(0xFF6C469C),
"Purple6" to Color(0xFF8150BE),
"Purple7" to Color(0xFF955AE0),
"Purple8" to Color(0xFFA571E6),
"Purple9" to Color(0xFFB589EC),
"Purple10" to Color(0xFFC4A0F3),
"Purple11" to Color(0xFFD4B8F9),
"Purple12" to Color(0xFFE4CEFF),
"Teal1" to Color(0xFF1D3838),
"Teal2" to Color(0xFF1D3D3B),
"Teal3" to Color(0xFF1E4D4A),
"Teal4" to Color(0xFF20635D),
"Teal5" to Color(0xFF21786F),
"Teal6" to Color(0xFF238E82),
"Teal7" to Color(0xFF24A394),
"Teal8" to Color(0xFF42B1A4),
"Teal9" to Color(0xFF60C0B5),
"Teal10" to Color(0xFF7DCEC5),
"Teal11" to Color(0xFF9BDDD6),
"Teal12" to Color(0xFFB9EBE6),
),
)
rawMap = mapOf(
"Gray1" to Color(0xFF1E1F22),
"Gray2" to Color(0xFF2B2D30),
"Gray3" to Color(0xFF393B40),
"Gray4" to Color(0xFF43454A),
"Gray5" to Color(0xFF4E5157),
"Gray6" to Color(0xFF5A5D63),
"Gray7" to Color(0xFF6F737A),
"Gray8" to Color(0xFF868A91),
"Gray9" to Color(0xFF9DA0A8),
"Gray10" to Color(0xFFB4B8BF),
"Gray11" to Color(0xFFCED0D6),
"Gray12" to Color(0xFFDFE1E5),
"Gray13" to Color(0xFFF0F1F2),
"Gray14" to Color(0xFFFFFFFF),
"Blue1" to Color(0xFF25324D),
"Blue2" to Color(0xFF2E436E),
"Blue3" to Color(0xFF35538F),
"Blue4" to Color(0xFF375FAD),
"Blue5" to Color(0xFF366ACE),
"Blue6" to Color(0xFF3574F0),
"Blue7" to Color(0xFF467FF2),
"Blue8" to Color(0xFF548AF7),
"Blue9" to Color(0xFF6B9BFA),
"Blue10" to Color(0xFF83ACFC),
"Blue11" to Color(0xFF99BBFF),
"Blue12" to Color(0xFFB5CEFF),
"Blue13" to Color(0xFFD1E0FF),
"Green1" to Color(0xFF253627),
"Green2" to Color(0xFF273828),
"Green3" to Color(0xFF375239),
"Green4" to Color(0xFF436946),
"Green5" to Color(0xFF4E8052),
"Green6" to Color(0xFF57965C),
"Green7" to Color(0xFF5FAD65),
"Green8" to Color(0xFF73BD79),
"Green9" to Color(0xFF89CC8E),
"Green10" to Color(0xFFA0DBA5),
"Green11" to Color(0xFFB9EBBD),
"Green12" to Color(0xFFD4FAD7),
"Yellow1" to Color(0xFF3D3223),
"Yellow2" to Color(0xFF5E4D33),
"Yellow3" to Color(0xFF826A41),
"Yellow4" to Color(0xFF9E814A),
"Yellow5" to Color(0xFFBA9752),
"Yellow6" to Color(0xFFD6AE58),
"Yellow7" to Color(0xFFF2C55C),
"Yellow8" to Color(0xFFF5D273),
"Yellow9" to Color(0xFFF7DE8B),
"Yellow10" to Color(0xFFFCEBA4),
"Yellow11" to Color(0xFFFFF6BD),
"Red1" to Color(0xFF402929),
"Red2" to Color(0xFF472B2B),
"Red3" to Color(0xFF5E3838),
"Red4" to Color(0xFF7A4343),
"Red5" to Color(0xFF9C4E4E),
"Red6" to Color(0xFFBD5757),
"Red7" to Color(0xFFDB5C5C),
"Red8" to Color(0xFFE37774),
"Red9" to Color(0xFFEB938D),
"Red10" to Color(0xFFF2B1AA),
"Red11" to Color(0xFFF7CCC6),
"Red12" to Color(0xFFFAE3DE),
"Orange1" to Color(0xFF45322B),
"Orange2" to Color(0xFF614438),
"Orange3" to Color(0xFF825845),
"Orange4" to Color(0xFFA36B4E),
"Orange5" to Color(0xFFC27A53),
"Orange6" to Color(0xFFE08855),
"Orange7" to Color(0xFFE5986C),
"Orange8" to Color(0xFFF0AC81),
"Orange9" to Color(0xFFF5BD98),
"Orange10" to Color(0xFFFACEAF),
"Orange11" to Color(0xFFFFDFC7),
"Purple1" to Color(0xFF2F2936),
"Purple2" to Color(0xFF3B3147),
"Purple3" to Color(0xFF433358),
"Purple4" to Color(0xFF583D7A),
"Purple5" to Color(0xFF6C469C),
"Purple6" to Color(0xFF8150BE),
"Purple7" to Color(0xFF955AE0),
"Purple8" to Color(0xFFA571E6),
"Purple9" to Color(0xFFB589EC),
"Purple10" to Color(0xFFC4A0F3),
"Purple11" to Color(0xFFD4B8F9),
"Purple12" to Color(0xFFE4CEFF),
"Teal1" to Color(0xFF1D3838),
"Teal2" to Color(0xFF1D3D3B),
"Teal3" to Color(0xFF1E4D4A),
"Teal4" to Color(0xFF20635D),
"Teal5" to Color(0xFF21786F),
"Teal6" to Color(0xFF238E82),
"Teal7" to Color(0xFF24A394),
"Teal8" to Color(0xFF42B1A4),
"Teal9" to Color(0xFF60C0B5),
"Teal10" to Color(0xFF7DCEC5),
"Teal11" to Color(0xFF9BDDD6),
"Teal12" to Color(0xFFB9EBE6)
)
)
override val iconData: ThemeIconData = ThemeIconData(iconOverrides =
mapOf("/com/intellij/ide/ui/laf/icons/darcula/checkBox.svg" to
"/themes/expUI/icons/dark/checkBox.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxFocused.svg" to
"/themes/expUI/icons/dark/checkBoxFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelected.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelected.svg" to
"/themes/expUI/icons/dark/checkBoxSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radio.svg" to
"/themes/expUI/icons/dark/radio.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioDisabled.svg" to
"/themes/expUI/icons/dark/radioDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioFocused.svg" to
"/themes/expUI/icons/dark/radioFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelected.svg" to
"/themes/expUI/icons/dark/radioSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelectedDisabled.svg" to
"/themes/expUI/icons/dark/radioSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelectedFocused.svg" to
"/themes/expUI/icons/dark/radioSelectedFocused.svg"), colorPalette =
mapOf(),
selectionColorPalette = mapOf()
)
override val iconData: ThemeIconData =
ThemeIconData(
iconOverrides =
mapOf(
"/com/intellij/ide/ui/laf/icons/darcula/checkBox.svg" to "/themes/expUI/icons/dark/checkBox.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxFocused.svg" to
"/themes/expUI/icons/dark/checkBoxFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelected.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxIndeterminateSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelected.svg" to
"/themes/expUI/icons/dark/checkBoxSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/checkBoxSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radio.svg" to "/themes/expUI/icons/dark/radio.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioDisabled.svg" to
"/themes/expUI/icons/dark/radioDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioFocused.svg" to
"/themes/expUI/icons/dark/radioFocused.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelected.svg" to
"/themes/expUI/icons/dark/radioSelected.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelectedDisabled.svg" to
"/themes/expUI/icons/dark/radioSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/darcula/radioSelectedFocused.svg" to
"/themes/expUI/icons/dark/radioSelectedFocused.svg",
),
colorPalette = emptyMap(),
selectionColorPalette = emptyMap(),
)
}

View File

@@ -1,6 +1,6 @@
// Generated by the Jewel Int UI Palette Generator
// Generated from the IntelliJ Platform version idea/243.19420.21
// Source: https://raw.githubusercontent.com/JetBrains/intellij-community/idea/243.19420.21/platform/platform-resources/src/themes/expUI/expUI_light.theme.json
// Generated by the Jewel Int UI Palette Generator for IJP 253
// *** DO NOT EDIT MANUALLY! Use generateThemes task to update. ***
// Source: ../../platform/platform-resources/src/themes/expUI/expUI_light.theme.json
package org.jetbrains.jewel.intui.core.theme
import androidx.compose.ui.graphics.Color
@@ -15,253 +15,267 @@ public object IntUiLightTheme : ThemeDescriptor {
override val name: String = "Light (Int UI)"
override val colors: ThemeColorPalette = ThemeColorPalette(
gray = listOf(
Color(0xFF000000),
Color(0xFF27282E),
Color(0xFF383A42),
Color(0xFF494B57),
Color(0xFF5A5D6B),
Color(0xFF6C707E),
Color(0xFF818594),
Color(0xFFA8ADBD),
Color(0xFFC9CCD6),
Color(0xFFD3D5DB),
Color(0xFFDFE1E5),
Color(0xFFEBECF0),
Color(0xFFF7F8FA),
Color(0xFFFFFFFF)
),
blue = listOf(
Color(0xFF2E55A3),
Color(0xFF315FBD),
Color(0xFF3369D6),
Color(0xFF3574F0),
Color(0xFF4682FA),
Color(0xFF588CF3),
Color(0xFF709CF5),
Color(0xFF88ADF7),
Color(0xFFA0BDF8),
Color(0xFFC2D6FC),
Color(0xFFD4E2FF),
Color(0xFFEDF3FF),
Color(0xFFF5F8FE)
),
green = listOf(
Color(0xFF1E6B33),
Color(0xFF1F7536),
Color(0xFF1F8039),
Color(0xFF208A3C),
Color(0xFF369650),
Color(0xFF55A76A),
Color(0xFF89C398),
Color(0xFFAFDBB8),
Color(0xFFC5E5CC),
Color(0xFFE3F7E7),
Color(0xFFF2FCF3)
),
yellow = listOf(
Color(0xFFA46704),
Color(0xFFC27D04),
Color(0xFFDF9303),
Color(0xFFFFAF0F),
Color(0xFFFDBD3D),
Color(0xFFFED277),
Color(0xFFFEE6B1),
Color(0xFFFFF1D1),
Color(0xFFFFF5DB),
Color(0xFFFFFAEB)
),
red = listOf(
Color(0xFFAD2B38),
Color(0xFFBC303E),
Color(0xFFCC3645),
Color(0xFFDB3B4B),
Color(0xFFE55765),
Color(0xFFE46A76),
Color(0xFFED99A1),
Color(0xFFF2B6BB),
Color(0xFFFAD4D8),
Color(0xFFFFEBEC),
Color(0xFFFFF2F3),
Color(0xFFFFF7F7)
),
orange = listOf(
Color(0xFFA14916),
Color(0xFFB85516),
Color(0xFFCE6117),
Color(0xFFE56D17),
Color(0xFFEC8F4C),
Color(0xFFF2B181),
Color(0xFFF9D2B6),
Color(0xFFFFEFE3),
Color(0xFFFFF4EB)
),
teal = listOf(
Color(0xFF096A6E),
Color(0xFF077A7F),
Color(0xFF058B90),
Color(0xFF039BA1),
Color(0xFF3FB3B8),
Color(0xFF7BCCCF),
Color(0xFFB6E4E5),
Color(0xFFDAF4F5),
Color(0xFFF2FCFC)
),
purple = listOf(
Color(0xFF55339C),
Color(0xFF643CB8),
Color(0xFF7444D4),
Color(0xFF834DF0),
Color(0xFFA177F4),
Color(0xFFBFA1F8),
Color(0xFFDCCBFB),
Color(0xFFEFE5FF),
Color(0xFFF5EDFF),
Color(0xFFFAF5FF)
),
override val colors: ThemeColorPalette =
ThemeColorPalette(
gray =
listOf(
Color(0xFF000000),
Color(0xFF27282E),
Color(0xFF383A42),
Color(0xFF494B57),
Color(0xFF5A5D6B),
Color(0xFF6C707E),
Color(0xFF818594),
Color(0xFFA8ADBD),
Color(0xFFC9CCD6),
Color(0xFFD3D5DB),
Color(0xFFDFE1E5),
Color(0xFFEBECF0),
Color(0xFFF7F8FA),
Color(0xFFFFFFFF),
),
blue =
listOf(
Color(0xFF2E55A3),
Color(0xFF315FBD),
Color(0xFF3369D6),
Color(0xFF3574F0),
Color(0xFF4682FA),
Color(0xFF588CF3),
Color(0xFF709CF5),
Color(0xFF88ADF7),
Color(0xFFA0BDF8),
Color(0xFFC2D6FC),
Color(0xFFD4E2FF),
Color(0xFFEDF3FF),
Color(0xFFF5F8FE),
),
green =
listOf(
Color(0xFF1E6B33),
Color(0xFF1F7536),
Color(0xFF1F8039),
Color(0xFF208A3C),
Color(0xFF369650),
Color(0xFF55A76A),
Color(0xFF89C398),
Color(0xFFAFDBB8),
Color(0xFFC5E5CC),
Color(0xFFE3F7E7),
Color(0xFFF2FCF3),
),
yellow =
listOf(
Color(0xFFA46704),
Color(0xFFC27D04),
Color(0xFFDF9303),
Color(0xFFFFAF0F),
Color(0xFFFDBD3D),
Color(0xFFFED277),
Color(0xFFFEE6B1),
Color(0xFFFFF1D1),
Color(0xFFFFF5DB),
Color(0xFFFFFAEB),
),
red =
listOf(
Color(0xFFAD2B38),
Color(0xFFBC303E),
Color(0xFFCC3645),
Color(0xFFDB3B4B),
Color(0xFFE55765),
Color(0xFFE46A76),
Color(0xFFED99A1),
Color(0xFFF2B6BB),
Color(0xFFFAD4D8),
Color(0xFFFFEBEC),
Color(0xFFFFF2F3),
Color(0xFFFFF7F7),
),
orange =
listOf(
Color(0xFFA14916),
Color(0xFFB85516),
Color(0xFFCE6117),
Color(0xFFE56D17),
Color(0xFFEC8F4C),
Color(0xFFF2B181),
Color(0xFFF9D2B6),
Color(0xFFFFEFE3),
Color(0xFFFFF4EB),
),
teal =
listOf(
Color(0xFF096A6E),
Color(0xFF077A7F),
Color(0xFF058B90),
Color(0xFF039BA1),
Color(0xFF3FB3B8),
Color(0xFF7BCCCF),
Color(0xFFB6E4E5),
Color(0xFFDAF4F5),
Color(0xFFF2FCFC),
),
purple =
listOf(
Color(0xFF55339C),
Color(0xFF643CB8),
Color(0xFF7444D4),
Color(0xFF834DF0),
Color(0xFFA177F4),
Color(0xFFBFA1F8),
Color(0xFFDCCBFB),
Color(0xFFEFE5FF),
Color(0xFFF5EDFF),
Color(0xFFFAF5FF),
),
rawMap =
mapOf(
"Gray1" to Color(0xFF000000),
"Gray2" to Color(0xFF27282E),
"Gray3" to Color(0xFF383A42),
"Gray4" to Color(0xFF494B57),
"Gray5" to Color(0xFF5A5D6B),
"Gray6" to Color(0xFF6C707E),
"Gray7" to Color(0xFF818594),
"Gray8" to Color(0xFFA8ADBD),
"Gray9" to Color(0xFFC9CCD6),
"Gray10" to Color(0xFFD3D5DB),
"Gray11" to Color(0xFFDFE1E5),
"Gray12" to Color(0xFFEBECF0),
"Gray13" to Color(0xFFF7F8FA),
"Gray14" to Color(0xFFFFFFFF),
"windowsPopupBorder" to Color(0xFFB9BDC9),
"Blue1" to Color(0xFF2E55A3),
"Blue2" to Color(0xFF315FBD),
"Blue3" to Color(0xFF3369D6),
"Blue4" to Color(0xFF3574F0),
"Blue5" to Color(0xFF4682FA),
"Blue6" to Color(0xFF588CF3),
"Blue7" to Color(0xFF709CF5),
"Blue8" to Color(0xFF88ADF7),
"Blue9" to Color(0xFFA0BDF8),
"Blue10" to Color(0xFFC2D6FC),
"Blue11" to Color(0xFFD4E2FF),
"Blue12" to Color(0xFFEDF3FF),
"Blue13" to Color(0xFFF5F8FE),
"Green1" to Color(0xFF1E6B33),
"Green2" to Color(0xFF1F7536),
"Green3" to Color(0xFF1F8039),
"Green4" to Color(0xFF208A3C),
"Green5" to Color(0xFF369650),
"Green6" to Color(0xFF55A76A),
"Green7" to Color(0xFF89C398),
"Green8" to Color(0xFFAFDBB8),
"Green9" to Color(0xFFC5E5CC),
"Green10" to Color(0xFFE3F7E7),
"Green11" to Color(0xFFF2FCF3),
"Yellow1" to Color(0xFFA46704),
"Yellow2" to Color(0xFFC27D04),
"Yellow3" to Color(0xFFDF9303),
"Yellow4" to Color(0xFFFFAF0F),
"Yellow5" to Color(0xFFFDBD3D),
"Yellow6" to Color(0xFFFED277),
"Yellow7" to Color(0xFFFEE6B1),
"Yellow8" to Color(0xFFFFF1D1),
"Yellow9" to Color(0xFFFFF5DB),
"Yellow10" to Color(0xFFFFFAEB),
"Red1" to Color(0xFFAD2B38),
"Red2" to Color(0xFFBC303E),
"Red3" to Color(0xFFCC3645),
"Red4" to Color(0xFFDB3B4B),
"Red5" to Color(0xFFE55765),
"Red6" to Color(0xFFE46A76),
"Red7" to Color(0xFFED99A1),
"Red8" to Color(0xFFF2B6BB),
"Red9" to Color(0xFFFAD4D8),
"Red10" to Color(0xFFFFEBEC),
"Red11" to Color(0xFFFFF2F3),
"Red12" to Color(0xFFFFF7F7),
"Orange1" to Color(0xFFA14916),
"Orange2" to Color(0xFFB85516),
"Orange3" to Color(0xFFCE6117),
"Orange4" to Color(0xFFE56D17),
"Orange5" to Color(0xFFEC8F4C),
"Orange6" to Color(0xFFF2B181),
"Orange7" to Color(0xFFF9D2B6),
"Orange8" to Color(0xFFFFEFE3),
"Orange9" to Color(0xFFFFF4EB),
"Teal1" to Color(0xFF096A6E),
"Teal2" to Color(0xFF077A7F),
"Teal3" to Color(0xFF058B90),
"Teal4" to Color(0xFF039BA1),
"Teal5" to Color(0xFF3FB3B8),
"Teal6" to Color(0xFF7BCCCF),
"Teal7" to Color(0xFFB6E4E5),
"Teal8" to Color(0xFFDAF4F5),
"Teal9" to Color(0xFFF2FCFC),
"Purple1" to Color(0xFF55339C),
"Purple2" to Color(0xFF643CB8),
"Purple3" to Color(0xFF7444D4),
"Purple4" to Color(0xFF834DF0),
"Purple5" to Color(0xFFA177F4),
"Purple6" to Color(0xFFBFA1F8),
"Purple7" to Color(0xFFDCCBFB),
"Purple8" to Color(0xFFEFE5FF),
"Purple9" to Color(0xFFF5EDFF),
"Purple10" to Color(0xFFFAF5FF),
),
)
rawMap = mapOf(
"Gray1" to Color(0xFF000000),
"Gray2" to Color(0xFF27282E),
"Gray3" to Color(0xFF383A42),
"Gray4" to Color(0xFF494B57),
"Gray5" to Color(0xFF5A5D6B),
"Gray6" to Color(0xFF6C707E),
"Gray7" to Color(0xFF818594),
"Gray8" to Color(0xFFA8ADBD),
"Gray9" to Color(0xFFC9CCD6),
"Gray10" to Color(0xFFD3D5DB),
"Gray11" to Color(0xFFDFE1E5),
"Gray12" to Color(0xFFEBECF0),
"Gray13" to Color(0xFFF7F8FA),
"Gray14" to Color(0xFFFFFFFF),
"windowsPopupBorder" to Color(0xFFB9BDC9),
"Blue1" to Color(0xFF2E55A3),
"Blue2" to Color(0xFF315FBD),
"Blue3" to Color(0xFF3369D6),
"Blue4" to Color(0xFF3574F0),
"Blue5" to Color(0xFF4682FA),
"Blue6" to Color(0xFF588CF3),
"Blue7" to Color(0xFF709CF5),
"Blue8" to Color(0xFF88ADF7),
"Blue9" to Color(0xFFA0BDF8),
"Blue10" to Color(0xFFC2D6FC),
"Blue11" to Color(0xFFD4E2FF),
"Blue12" to Color(0xFFEDF3FF),
"Blue13" to Color(0xFFF5F8FE),
"Green1" to Color(0xFF1E6B33),
"Green2" to Color(0xFF1F7536),
"Green3" to Color(0xFF1F8039),
"Green4" to Color(0xFF208A3C),
"Green5" to Color(0xFF369650),
"Green6" to Color(0xFF55A76A),
"Green7" to Color(0xFF89C398),
"Green8" to Color(0xFFAFDBB8),
"Green9" to Color(0xFFC5E5CC),
"Green10" to Color(0xFFE3F7E7),
"Green11" to Color(0xFFF2FCF3),
"Yellow1" to Color(0xFFA46704),
"Yellow2" to Color(0xFFC27D04),
"Yellow3" to Color(0xFFDF9303),
"Yellow4" to Color(0xFFFFAF0F),
"Yellow5" to Color(0xFFFDBD3D),
"Yellow6" to Color(0xFFFED277),
"Yellow7" to Color(0xFFFEE6B1),
"Yellow8" to Color(0xFFFFF1D1),
"Yellow9" to Color(0xFFFFF5DB),
"Yellow10" to Color(0xFFFFFAEB),
"Red1" to Color(0xFFAD2B38),
"Red2" to Color(0xFFBC303E),
"Red3" to Color(0xFFCC3645),
"Red4" to Color(0xFFDB3B4B),
"Red5" to Color(0xFFE55765),
"Red6" to Color(0xFFE46A76),
"Red7" to Color(0xFFED99A1),
"Red8" to Color(0xFFF2B6BB),
"Red9" to Color(0xFFFAD4D8),
"Red10" to Color(0xFFFFEBEC),
"Red11" to Color(0xFFFFF2F3),
"Red12" to Color(0xFFFFF7F7),
"Orange1" to Color(0xFFA14916),
"Orange2" to Color(0xFFB85516),
"Orange3" to Color(0xFFCE6117),
"Orange4" to Color(0xFFE56D17),
"Orange5" to Color(0xFFEC8F4C),
"Orange6" to Color(0xFFF2B181),
"Orange7" to Color(0xFFF9D2B6),
"Orange8" to Color(0xFFFFEFE3),
"Orange9" to Color(0xFFFFF4EB),
"Teal1" to Color(0xFF096A6E),
"Teal2" to Color(0xFF077A7F),
"Teal3" to Color(0xFF058B90),
"Teal4" to Color(0xFF039BA1),
"Teal5" to Color(0xFF3FB3B8),
"Teal6" to Color(0xFF7BCCCF),
"Teal7" to Color(0xFFB6E4E5),
"Teal8" to Color(0xFFDAF4F5),
"Teal9" to Color(0xFFF2FCFC),
"Purple1" to Color(0xFF55339C),
"Purple2" to Color(0xFF643CB8),
"Purple3" to Color(0xFF7444D4),
"Purple4" to Color(0xFF834DF0),
"Purple5" to Color(0xFFA177F4),
"Purple6" to Color(0xFFBFA1F8),
"Purple7" to Color(0xFFDCCBFB),
"Purple8" to Color(0xFFEFE5FF),
"Purple9" to Color(0xFFF5EDFF),
"Purple10" to Color(0xFFFAF5FF)
)
)
override val iconData: ThemeIconData = ThemeIconData(iconOverrides =
mapOf("/windows/minimize.svg" to "/expui/windows/minimize.svg",
"/windows/minimizeInactive.svg" to "/expui/windows/minimizeInactive.svg",
"/windows/maximize.svg" to "/expui/windows/maximize.svg",
"/windows/maximizeInactive.svg" to "/expui/windows/maximizeInactive.svg",
"/windows/closeActive.svg" to "/expui/windows/closeActive.svg",
"/windows/closeInactive.svg" to "/expui/windows/closeInactive.svg",
"/windows/restore.svg" to "/expui/windows/restore.svg",
"/windows/restoreInactive.svg" to "/expui/windows/restoreInactive.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBox.svg" to
"/themes/expUI/icons/dark/checkBox.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxFocused.svg" to
"/themes/expUI/icons/dark/checkBoxFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelected.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelected.svg" to
"/themes/expUI/icons/dark/checkBoxSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radio.svg" to
"/themes/expUI/icons/dark/radio.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioDisabled.svg" to
"/themes/expUI/icons/dark/radioDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioFocused.svg" to
"/themes/expUI/icons/dark/radioFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelected.svg" to
"/themes/expUI/icons/dark/radioSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelectedDisabled.svg" to
"/themes/expUI/icons/dark/radioSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelectedFocused.svg" to
"/themes/expUI/icons/dark/radioSelectedFocused.svg"), colorPalette =
mapOf("Checkbox.Background.Default" to "Gray14",
"Checkbox.Border.Default" to "Gray8",
"Checkbox.Foreground.Selected" to "Gray14",
"Checkbox.Background.Selected" to "Blue4",
"Checkbox.Border.Selected" to "Blue4",
"Checkbox.Focus.Wide" to "Blue4",
"Checkbox.Foreground.Disabled" to "Gray9",
"Checkbox.Background.Disabled" to "Gray13",
"Checkbox.Border.Disabled" to "Gray11"),
selectionColorPalette = mapOf()
)
override val iconData: ThemeIconData =
ThemeIconData(
iconOverrides =
mapOf(
"/windows/minimize.svg" to "/expui/windows/minimize.svg",
"/windows/minimizeInactive.svg" to "/expui/windows/minimizeInactive.svg",
"/windows/maximize.svg" to "/expui/windows/maximize.svg",
"/windows/maximizeInactive.svg" to "/expui/windows/maximizeInactive.svg",
"/windows/closeActive.svg" to "/expui/windows/closeActive.svg",
"/windows/closeInactive.svg" to "/expui/windows/closeInactive.svg",
"/windows/restore.svg" to "/expui/windows/restore.svg",
"/windows/restoreInactive.svg" to "/expui/windows/restoreInactive.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBox.svg" to "/themes/expUI/icons/dark/checkBox.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxFocused.svg" to
"/themes/expUI/icons/dark/checkBoxFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelected.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxIndeterminateSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxIndeterminateSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelected.svg" to
"/themes/expUI/icons/dark/checkBoxSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelectedDisabled.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/checkBoxSelectedFocused.svg" to
"/themes/expUI/icons/dark/checkBoxSelectedFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radio.svg" to "/themes/expUI/icons/dark/radio.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioDisabled.svg" to
"/themes/expUI/icons/dark/radioDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioFocused.svg" to
"/themes/expUI/icons/dark/radioFocused.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelected.svg" to
"/themes/expUI/icons/dark/radioSelected.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelectedDisabled.svg" to
"/themes/expUI/icons/dark/radioSelectedDisabled.svg",
"/com/intellij/ide/ui/laf/icons/intellij/radioSelectedFocused.svg" to
"/themes/expUI/icons/dark/radioSelectedFocused.svg",
),
colorPalette =
mapOf(
"Checkbox.Background.Default" to "Gray14",
"Checkbox.Border.Default" to "Gray8",
"Checkbox.Foreground.Selected" to "Gray14",
"Checkbox.Background.Selected" to "Blue4",
"Checkbox.Border.Selected" to "Blue4",
"Checkbox.Focus.Wide" to "Blue4",
"Checkbox.Foreground.Disabled" to "Gray9",
"Checkbox.Background.Disabled" to "Gray13",
"Checkbox.Border.Disabled" to "Gray11",
),
selectionColorPalette = emptyMap(),
)
}

View File

@@ -105,7 +105,8 @@ class CompareBranchesCommand : SuspendingCliktCommand() {
if (anyPathMissing) exitProcess(1)
println(
"🔍 Comparing commits for paths '${Config.PATHS_TO_CHECK.joinToString()}' between '$branch1' and '$branch2' since $sinceDate..."
"🔍 Comparing commits for paths '${Config.PATHS_TO_CHECK.joinToString()}' between " +
"'$branch1' and '$branch2' since $sinceDate..."
)
val pathsArg = Config.PATHS_TO_CHECK.joinToString(separator = " ") { "-- $it" }

View File

@@ -50,7 +50,8 @@ class ExtractReleaseNotesCommand : CliktCommand() {
val latestReleaseDate = getLatestReleaseDate()
if (latestReleaseDate.isNullOrBlank()) {
printlnErr(
"Error: --start-date is required if ${Config.RELEASE_NOTES_FILE} does not exist or contain a release date."
"Error: --start-date is required if ${Config.RELEASE_NOTES_FILE} " +
"does not exist or contain a release date."
)
exitProcess(1)
}
@@ -224,9 +225,9 @@ class ExtractReleaseNotesCommand : CliktCommand() {
val sectionOrder = listOf("⚠️ Important Changes", "New features", "Bug fixes", "Deprecated API", "Other")
val sortedSections =
allReleaseNotes.keys.sortedWith(
compareBy { sectionKey -> sectionOrder.indexOf(sectionKey).let { if (it == -1) Int.MAX_VALUE else it } }
)
allReleaseNotes.keys.sortedBy{ sectionKey ->
sectionOrder.indexOf(sectionKey).takeIf { it >= 0 } ?: Int.MAX_VALUE
}
sortedSections.forEach { sectionHeader ->
val notes = allReleaseNotes[sectionHeader]!!
@@ -273,7 +274,12 @@ class ExtractReleaseNotesCommand : CliktCommand() {
private val workingDir = File("").absoluteFile
// --- Data Structures ---
private data class ReleaseNoteItem(val issueId: String?, val description: String, val prId: String, val prUrl: String)
private data class ReleaseNoteItem(
val issueId: String?,
val description: String,
val prId: String,
val prUrl: String,
)
private enum class PrProcessingStatus {
Extracted,

View File

@@ -50,7 +50,6 @@ private val jewelApiVersionTemplate =
|/** The Jewel API version for this build, expressed as a string. E.g.: "0.30.0" */
|public val JewelBuild.apiVersionString: String
| get() = "%%JEWEL_VERSION%%"
|
"""
.trimMargin()

View File

@@ -11,22 +11,21 @@ import kotlin.time.Duration.Companion.minutes
private fun printHelp() {
println(
"""
Usage: kotlin metalava-signatures.main.kts <command> [options]
Commands:
update Generate and update API signature dumps.
validate Validate the current signatures against previously generated ones.
Options:
--release <version> Tells Metalava to create a versioned release archival dump (or validate against one).
If omitted, it will use the current Jewel API version from gradle.properties.
--module <path> Only checks/generates the dump for one module (e.g., ':ui').
--stable-only Only run tasks for the stable API surface.
--experimental-only Only run tasks for the experimental API surface.
--force Forces a clean build before running the tasks.
--help Display this help and exit.
|Usage: kotlin metalava-signatures.main.kts <command> [options]
|Commands:
| update Generate and update API signature dumps.
| validate Validate the current signatures against previously generated ones.
|
|Options:
| --release <version> Tells Metalava to create a versioned release archival dump (or validate against one).
| If omitted, it will use the current Jewel API version from gradle.properties.
| --module <path> Only checks/generates the dump for one module (e.g., ':ui').
| --stable-only Only run tasks for the stable API surface.
| --experimental-only Only run tasks for the experimental API surface.
| --force Forces a clean build before running the tasks.
| --help Display this help and exit.
"""
.trimIndent()
)
.trimMargin())
}
print("⏳ Locating Jewel folder...")
@@ -99,6 +98,10 @@ while (argIterator.hasNext()) {
exitProcess(1)
}
taskPath = "$modulePath:"
if (!taskPath.startsWith(":")) {
taskPath = ":$taskPath"
}
}
"--stable-only" -> {
if (apiSurface != null) {