diff --git a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridge.kt b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridge.kt
index 9f41d0c669c88..467648a24bbf8 100644
--- a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridge.kt
+++ b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridge.kt
@@ -69,6 +69,7 @@ internal fun createBridgeComponentStyling(theme: ThemeDefinition): ComponentStyl
val menuStyle = readMenuStyle()
return DefaultComponentStyling(
+ badgeStyle = readBadgeStyle(),
checkboxStyle = readCheckboxStyle(),
chipStyle = readChipStyle(),
circularProgressStyle = readCircularProgressStyle(theme.isDark),
diff --git a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeBadge.kt b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeBadge.kt
new file mode 100644
index 0000000000000..9fed3f62fdb2f
--- /dev/null
+++ b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgeBadge.kt
@@ -0,0 +1,48 @@
+package org.jetbrains.jewel.bridge.theme
+
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.shape.CornerSize
+import androidx.compose.ui.graphics.takeOrElse
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+import org.jetbrains.jewel.bridge.createVerticalBrush
+import org.jetbrains.jewel.bridge.retrieveColorOrUnspecified
+import org.jetbrains.jewel.bridge.retrieveColorsOrUnspecified
+import org.jetbrains.jewel.ui.component.styling.BadgeColors
+import org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
+
+// Note: there isn't a badge spec in the IntelliJ Platform LaF, so we're deriving
+// this from similar small promotional UI elements.
+// Badges are small colored elements used to display promotional text like "New", "Beta", etc.
+internal fun readBadgeStyle(): BadgeStyle {
+ val normalBackground =
+ retrieveColorsOrUnspecified("Button.startBackground", "Button.endBackground").createVerticalBrush()
+
+ val normalContent = retrieveColorOrUnspecified("Label.foreground")
+ val disabledContent = retrieveColorOrUnspecified("Label.disabledForeground").takeOrElse { normalContent }
+
+ val colors =
+ BadgeColors(
+ background = normalBackground,
+ backgroundDisabled = normalBackground,
+ backgroundFocused = normalBackground,
+ backgroundPressed = normalBackground,
+ backgroundHovered = normalBackground,
+ content = normalContent,
+ contentDisabled = disabledContent,
+ contentFocused = normalContent,
+ contentPressed = normalContent,
+ contentHovered = normalContent,
+ )
+
+ return BadgeStyle(
+ colors = colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(0.dp),
+ padding = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
+ minSize = DpSize(32.dp, 18.dp),
+ ),
+ )
+}
diff --git a/platform/jewel/int-ui/int-ui-standalone/api-dump.txt b/platform/jewel/int-ui/int-ui-standalone/api-dump.txt
index 7ee937012b2f5..729388e2df1ec 100644
--- a/platform/jewel/int-ui/int-ui-standalone/api-dump.txt
+++ b/platform/jewel/int-ui/int-ui-standalone/api-dump.txt
@@ -60,6 +60,17 @@ f:org.jetbrains.jewel.intui.standalone.styling.IntUIBannerStylingKt
- sf:getWarning(org.jetbrains.jewel.ui.component.styling.BannerColors$Companion):org.jetbrains.jewel.intui.standalone.styling.IntUiWarningBannerColorFactory
- sf:getWarning(org.jetbrains.jewel.ui.component.styling.DefaultBannerStyle$Companion):org.jetbrains.jewel.intui.standalone.styling.IntUiDefaultWarningBannerStyleFactory
- sf:getWarning(org.jetbrains.jewel.ui.component.styling.InlineBannerStyle$Companion):org.jetbrains.jewel.intui.standalone.styling.IntUiInlineWarningBannerStyleFactory
+f:org.jetbrains.jewel.intui.standalone.styling.IntUiBadgeStylingKt
+- sf:dark(org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion,org.jetbrains.jewel.ui.component.styling.BadgeColors,org.jetbrains.jewel.ui.component.styling.BadgeMetrics):org.jetbrains.jewel.ui.component.styling.BadgeStyle
+- bs:dark$default(org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion,org.jetbrains.jewel.ui.component.styling.BadgeColors,org.jetbrains.jewel.ui.component.styling.BadgeMetrics,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.BadgeStyle
+- sf:dark-d4pgSKA(org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,J,J,J,J,J):org.jetbrains.jewel.ui.component.styling.BadgeColors
+- bs:dark-d4pgSKA$default(org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,J,J,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.BadgeColors
+- sf:defaults-aAmSZ4M(org.jetbrains.jewel.ui.component.styling.BadgeMetrics$Companion,androidx.compose.foundation.shape.CornerSize,androidx.compose.foundation.layout.PaddingValues,J):org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+- bs:defaults-aAmSZ4M$default(org.jetbrains.jewel.ui.component.styling.BadgeMetrics$Companion,androidx.compose.foundation.shape.CornerSize,androidx.compose.foundation.layout.PaddingValues,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+- sf:light(org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion,org.jetbrains.jewel.ui.component.styling.BadgeColors,org.jetbrains.jewel.ui.component.styling.BadgeMetrics):org.jetbrains.jewel.ui.component.styling.BadgeStyle
+- bs:light$default(org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion,org.jetbrains.jewel.ui.component.styling.BadgeColors,org.jetbrains.jewel.ui.component.styling.BadgeMetrics,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.BadgeStyle
+- sf:light-d4pgSKA(org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,J,J,J,J,J):org.jetbrains.jewel.ui.component.styling.BadgeColors
+- bs:light-d4pgSKA$default(org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,androidx.compose.ui.graphics.Brush,J,J,J,J,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.BadgeColors
f:org.jetbrains.jewel.intui.standalone.styling.IntUiButtonStylingKt
- sf:default-Kzyhx1A(org.jetbrains.jewel.ui.component.styling.ButtonMetrics$Companion,androidx.compose.foundation.shape.CornerSize,androidx.compose.foundation.layout.PaddingValues,J,F,F):org.jetbrains.jewel.ui.component.styling.ButtonMetrics
- bs:default-Kzyhx1A$default(org.jetbrains.jewel.ui.component.styling.ButtonMetrics$Companion,androidx.compose.foundation.shape.CornerSize,androidx.compose.foundation.layout.PaddingValues,J,F,F,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.ButtonMetrics
@@ -678,9 +689,11 @@ f:org.jetbrains.jewel.intui.standalone.theme.IntUiGrayFilterValuesKt
f:org.jetbrains.jewel.intui.standalone.theme.IntUiThemeKt
- sf:IntUiTheme(org.jetbrains.jewel.foundation.theme.ThemeDefinition,org.jetbrains.jewel.ui.ComponentStyling,Z,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
- sf:IntUiTheme(Z,Z,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:dark(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.BadgeStyle,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
- bsf:dark(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):org.jetbrains.jewel.ui.ComponentStyling
-- sf:dark(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
+- bsf:dark(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
- bsf:dark(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):org.jetbrains.jewel.ui.ComponentStyling
+- bs:dark$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.BadgeStyle,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:dark$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:dark$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:dark$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
@@ -689,9 +702,11 @@ f:org.jetbrains.jewel.intui.standalone.theme.IntUiThemeKt
- sf:darkThemeDefinition-uyGnus8(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,org.jetbrains.jewel.foundation.GlobalColors,org.jetbrains.jewel.foundation.GlobalMetrics,org.jetbrains.jewel.foundation.theme.ThemeColorPalette,org.jetbrains.jewel.foundation.theme.ThemeIconData,androidx.compose.ui.text.TextStyle,androidx.compose.ui.text.TextStyle,androidx.compose.ui.text.TextStyle,J,org.jetbrains.jewel.foundation.DisabledAppearanceValues):org.jetbrains.jewel.foundation.theme.ThemeDefinition
- bs:darkThemeDefinition-uyGnus8$default(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,org.jetbrains.jewel.foundation.GlobalColors,org.jetbrains.jewel.foundation.GlobalMetrics,org.jetbrains.jewel.foundation.theme.ThemeColorPalette,org.jetbrains.jewel.foundation.theme.ThemeIconData,androidx.compose.ui.text.TextStyle,androidx.compose.ui.text.TextStyle,androidx.compose.ui.text.TextStyle,J,org.jetbrains.jewel.foundation.DisabledAppearanceValues,I,java.lang.Object):org.jetbrains.jewel.foundation.theme.ThemeDefinition
- sf:default(org.jetbrains.jewel.ui.ComponentStyling,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.ComponentStyling
+- sf:light(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.BadgeStyle,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
- bsf:light(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):org.jetbrains.jewel.ui.ComponentStyling
-- sf:light(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
+- bsf:light(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):org.jetbrains.jewel.ui.ComponentStyling
- bsf:light(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):org.jetbrains.jewel.ui.ComponentStyling
+- bs:light$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.BadgeStyle,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:light$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:light$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle,I,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
- bs:light$default(org.jetbrains.jewel.ui.ComponentStyling,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,I,java.lang.Object):org.jetbrains.jewel.ui.ComponentStyling
diff --git a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiBadgeStyling.kt b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiBadgeStyling.kt
new file mode 100644
index 0000000000000..5b8e10cfd5c82
--- /dev/null
+++ b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiBadgeStyling.kt
@@ -0,0 +1,80 @@
+package org.jetbrains.jewel.intui.standalone.styling
+
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.shape.CornerSize
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+import org.jetbrains.jewel.intui.core.theme.IntUiDarkTheme
+import org.jetbrains.jewel.intui.core.theme.IntUiLightTheme
+import org.jetbrains.jewel.ui.component.styling.BadgeColors
+import org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
+
+public fun BadgeStyle.Companion.light(
+ colors: BadgeColors = BadgeColors.light(),
+ metrics: BadgeMetrics = BadgeMetrics.defaults(),
+): BadgeStyle = BadgeStyle(colors = colors, metrics = metrics)
+
+public fun BadgeStyle.Companion.dark(
+ colors: BadgeColors = BadgeColors.dark(),
+ metrics: BadgeMetrics = BadgeMetrics.defaults(),
+): BadgeStyle = BadgeStyle(colors = colors, metrics = metrics)
+
+public fun BadgeColors.Companion.light(
+ background: Brush = SolidColor(IntUiLightTheme.colors.blue(4)),
+ backgroundDisabled: Brush = SolidColor(IntUiLightTheme.colors.gray(12)),
+ backgroundFocused: Brush = SolidColor(IntUiLightTheme.colors.blue(5)),
+ backgroundPressed: Brush = SolidColor(IntUiLightTheme.colors.blue(6)),
+ backgroundHovered: Brush = SolidColor(IntUiLightTheme.colors.blue(5)),
+ content: Color = IntUiLightTheme.colors.gray(14),
+ contentDisabled: Color = IntUiLightTheme.colors.gray(8),
+ contentFocused: Color = IntUiLightTheme.colors.gray(14),
+ contentPressed: Color = IntUiLightTheme.colors.gray(14),
+ contentHovered: Color = IntUiLightTheme.colors.gray(14),
+): BadgeColors =
+ BadgeColors(
+ background = background,
+ backgroundDisabled = backgroundDisabled,
+ backgroundFocused = backgroundFocused,
+ backgroundPressed = backgroundPressed,
+ backgroundHovered = backgroundHovered,
+ content = content,
+ contentDisabled = contentDisabled,
+ contentFocused = contentFocused,
+ contentPressed = contentPressed,
+ contentHovered = contentHovered,
+ )
+
+public fun BadgeColors.Companion.dark(
+ background: Brush = SolidColor(IntUiDarkTheme.colors.blue(6)),
+ backgroundDisabled: Brush = SolidColor(IntUiDarkTheme.colors.gray(3)),
+ backgroundFocused: Brush = SolidColor(IntUiDarkTheme.colors.blue(5)),
+ backgroundPressed: Brush = SolidColor(IntUiDarkTheme.colors.blue(7)),
+ backgroundHovered: Brush = SolidColor(IntUiDarkTheme.colors.blue(5)),
+ content: Color = IntUiDarkTheme.colors.gray(14),
+ contentDisabled: Color = IntUiDarkTheme.colors.gray(8),
+ contentFocused: Color = IntUiDarkTheme.colors.gray(14),
+ contentPressed: Color = IntUiDarkTheme.colors.gray(14),
+ contentHovered: Color = IntUiDarkTheme.colors.gray(14),
+): BadgeColors =
+ BadgeColors(
+ background = background,
+ backgroundDisabled = backgroundDisabled,
+ backgroundFocused = backgroundFocused,
+ backgroundPressed = backgroundPressed,
+ backgroundHovered = backgroundHovered,
+ content = content,
+ contentDisabled = contentDisabled,
+ contentFocused = contentFocused,
+ contentPressed = contentPressed,
+ contentHovered = contentHovered,
+ )
+
+public fun BadgeMetrics.Companion.defaults(
+ cornerSize: CornerSize = CornerSize(0.dp),
+ padding: PaddingValues = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
+ minSize: DpSize = DpSize(32.dp, 18.dp),
+): BadgeMetrics = BadgeMetrics(cornerSize = cornerSize, padding = padding, minSize = minSize)
diff --git a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt
index 22e0ea17b1711..b4b6ba1e2f6d0 100644
--- a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt
+++ b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt
@@ -35,6 +35,7 @@ import org.jetbrains.jewel.ui.DefaultComponentStyling
import org.jetbrains.jewel.ui.LocalMenuItemShortcutHintProvider
import org.jetbrains.jewel.ui.LocalMenuItemShortcutProvider
import org.jetbrains.jewel.ui.LocalTypography
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
import org.jetbrains.jewel.ui.component.styling.ButtonStyle
import org.jetbrains.jewel.ui.component.styling.CheckboxStyle
import org.jetbrains.jewel.ui.component.styling.ChipStyle
@@ -243,6 +244,7 @@ public fun ComponentStyling.default(): ComponentStyling = with {
@Suppress("UnusedReceiverParameter")
public fun ComponentStyling.dark(
+ badgeStyle: BadgeStyle = BadgeStyle.dark(),
checkboxStyle: CheckboxStyle = CheckboxStyle.dark(),
chipStyle: ChipStyle = ChipStyle.dark(),
circularProgressStyle: CircularProgressStyle = CircularProgressStyle.dark(),
@@ -280,6 +282,85 @@ public fun ComponentStyling.dark(
searchMatchStyle: SearchMatchStyle = SearchMatchStyle.dark(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = badgeStyle,
+ checkboxStyle = checkboxStyle,
+ chipStyle = chipStyle,
+ circularProgressStyle = circularProgressStyle,
+ defaultBannerStyle = defaultBannerStyle,
+ comboBoxStyle = comboBoxStyle,
+ defaultButtonStyle = defaultButtonStyle,
+ defaultDropdownStyle = dropdownStyle,
+ defaultSplitButtonStyle = defaultSplitButtonStyle,
+ defaultTabStyle = defaultTabStyle,
+ dividerStyle = dividerStyle,
+ editorTabStyle = editorTabStyle,
+ groupHeaderStyle = groupHeaderStyle,
+ horizontalProgressBarStyle = horizontalProgressBarStyle,
+ iconButtonStyle = iconButtonStyle,
+ transparentIconButtonStyle = transparentIconButtonStyle,
+ inlineBannerStyle = inlineBannerStyle,
+ lazyTreeStyle = lazyTreeStyle,
+ linkStyle = linkStyle,
+ menuStyle = menuStyle,
+ outlinedButtonStyle = outlinedButtonStyle,
+ popupContainerStyle = popupContainerStyle,
+ outlinedSplitButtonStyle = outlinedSplitButtonStyle,
+ radioButtonStyle = radioButtonStyle,
+ scrollbarStyle = scrollbarStyle,
+ segmentedControlButtonStyle = segmentedControlButtonStyle,
+ segmentedControlStyle = segmentedControlStyle,
+ selectableLazyColumnStyle = selectableLazyColumnStyle,
+ simpleListItemStyle = simpleListItemStyle,
+ sliderStyle = sliderStyle,
+ textAreaStyle = textAreaStyle,
+ textFieldStyle = textFieldStyle,
+ tooltipStyle = tooltipStyle,
+ undecoratedDropdownStyle = undecoratedDropdownStyle,
+ speedSearchStyle = speedSearchStyle,
+ searchMatchStyle = searchMatchStyle,
+ )
+
+@Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR")
+@Deprecated("Use the variant with badgeStyle.", level = DeprecationLevel.HIDDEN)
+public fun ComponentStyling.dark(
+ checkboxStyle: CheckboxStyle = CheckboxStyle.dark(),
+ chipStyle: ChipStyle = ChipStyle.dark(),
+ circularProgressStyle: CircularProgressStyle = CircularProgressStyle.dark(),
+ defaultBannerStyle: DefaultBannerStyles = DefaultBannerStyles.Default.dark(),
+ comboBoxStyle: ComboBoxStyle = ComboBoxStyle.Default.dark(),
+ defaultButtonStyle: ButtonStyle = ButtonStyle.Default.dark(),
+ defaultSplitButtonStyle: SplitButtonStyle = SplitButtonStyle.Default.dark(),
+ defaultTabStyle: TabStyle = TabStyle.Default.dark(),
+ dividerStyle: DividerStyle = DividerStyle.dark(),
+ dropdownStyle: DropdownStyle = DropdownStyle.Default.dark(),
+ editorTabStyle: TabStyle = TabStyle.Editor.dark(),
+ groupHeaderStyle: GroupHeaderStyle = GroupHeaderStyle.dark(),
+ horizontalProgressBarStyle: HorizontalProgressBarStyle = HorizontalProgressBarStyle.dark(),
+ iconButtonStyle: IconButtonStyle = IconButtonStyle.dark(),
+ transparentIconButtonStyle: IconButtonStyle = IconButtonStyle.darkTransparentBackground(),
+ inlineBannerStyle: InlineBannerStyles = InlineBannerStyles.Default.dark(),
+ lazyTreeStyle: LazyTreeStyle = LazyTreeStyle.dark(),
+ linkStyle: LinkStyle = LinkStyle.dark(),
+ menuStyle: MenuStyle = MenuStyle.dark(),
+ outlinedButtonStyle: ButtonStyle = ButtonStyle.Outlined.dark(),
+ popupContainerStyle: PopupContainerStyle = PopupContainerStyle.dark(),
+ outlinedSplitButtonStyle: SplitButtonStyle = SplitButtonStyle.Outlined.dark(),
+ radioButtonStyle: RadioButtonStyle = RadioButtonStyle.dark(),
+ scrollbarStyle: ScrollbarStyle = ScrollbarStyle.dark(),
+ segmentedControlButtonStyle: SegmentedControlButtonStyle = SegmentedControlButtonStyle.dark(),
+ segmentedControlStyle: SegmentedControlStyle = SegmentedControlStyle.dark(),
+ selectableLazyColumnStyle: SelectableLazyColumnStyle = SelectableLazyColumnStyle.dark(),
+ sliderStyle: SliderStyle = SliderStyle.dark(),
+ simpleListItemStyle: SimpleListItemStyle = SimpleListItemStyle.dark(),
+ textAreaStyle: TextAreaStyle = TextAreaStyle.dark(),
+ textFieldStyle: TextFieldStyle = TextFieldStyle.dark(),
+ tooltipStyle: TooltipStyle = TooltipStyle.dark(autoHideBehavior = TooltipAutoHideBehavior.Normal),
+ undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.dark(),
+ speedSearchStyle: SpeedSearchStyle = SpeedSearchStyle.dark(),
+ searchMatchStyle: SearchMatchStyle = SearchMatchStyle.dark(),
+): ComponentStyling =
+ DefaultComponentStyling(
+ badgeStyle = BadgeStyle.dark(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
@@ -355,6 +436,7 @@ public fun ComponentStyling.dark(
undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.dark(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = BadgeStyle.dark(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
@@ -429,6 +511,7 @@ public fun ComponentStyling.dark(
undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.dark(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = BadgeStyle.dark(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
@@ -467,6 +550,85 @@ public fun ComponentStyling.dark(
)
@Suppress("UnusedReceiverParameter")
+public fun ComponentStyling.light(
+ badgeStyle: BadgeStyle = BadgeStyle.light(),
+ checkboxStyle: CheckboxStyle = CheckboxStyle.light(),
+ chipStyle: ChipStyle = ChipStyle.light(),
+ circularProgressStyle: CircularProgressStyle = CircularProgressStyle.light(),
+ defaultBannerStyle: DefaultBannerStyles = DefaultBannerStyles.Default.light(),
+ comboBoxStyle: ComboBoxStyle = ComboBoxStyle.Default.light(),
+ defaultButtonStyle: ButtonStyle = ButtonStyle.Default.light(),
+ defaultSplitButtonStyle: SplitButtonStyle = SplitButtonStyle.Default.light(),
+ defaultTabStyle: TabStyle = TabStyle.Default.light(),
+ dividerStyle: DividerStyle = DividerStyle.light(),
+ dropdownStyle: DropdownStyle = DropdownStyle.Default.light(),
+ editorTabStyle: TabStyle = TabStyle.Editor.light(),
+ groupHeaderStyle: GroupHeaderStyle = GroupHeaderStyle.light(),
+ horizontalProgressBarStyle: HorizontalProgressBarStyle = HorizontalProgressBarStyle.light(),
+ iconButtonStyle: IconButtonStyle = IconButtonStyle.light(),
+ transparentIconButtonStyle: IconButtonStyle = IconButtonStyle.lightTransparentBackground(),
+ inlineBannerStyle: InlineBannerStyles = InlineBannerStyles.Default.light(),
+ lazyTreeStyle: LazyTreeStyle = LazyTreeStyle.light(),
+ linkStyle: LinkStyle = LinkStyle.light(),
+ menuStyle: MenuStyle = MenuStyle.light(),
+ popupContainerStyle: PopupContainerStyle = PopupContainerStyle.light(),
+ outlinedButtonStyle: ButtonStyle = ButtonStyle.Outlined.light(),
+ outlinedSplitButtonStyle: SplitButtonStyle = SplitButtonStyle.Outlined.light(),
+ radioButtonStyle: RadioButtonStyle = RadioButtonStyle.light(),
+ scrollbarStyle: ScrollbarStyle = ScrollbarStyle.light(),
+ segmentedControlButtonStyle: SegmentedControlButtonStyle = SegmentedControlButtonStyle.light(),
+ segmentedControlStyle: SegmentedControlStyle = SegmentedControlStyle.light(),
+ sliderStyle: SliderStyle = SliderStyle.light(),
+ selectableLazyColumnStyle: SelectableLazyColumnStyle = SelectableLazyColumnStyle.light(),
+ simpleListItemStyle: SimpleListItemStyle = SimpleListItemStyle.light(),
+ textAreaStyle: TextAreaStyle = TextAreaStyle.light(),
+ textFieldStyle: TextFieldStyle = TextFieldStyle.light(),
+ tooltipStyle: TooltipStyle = TooltipStyle.light(autoHideBehavior = TooltipAutoHideBehavior.Normal),
+ undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.light(),
+ speedSearchStyle: SpeedSearchStyle = SpeedSearchStyle.light(),
+ searchMatchStyle: SearchMatchStyle = SearchMatchStyle.light(),
+): ComponentStyling =
+ DefaultComponentStyling(
+ badgeStyle = badgeStyle,
+ checkboxStyle = checkboxStyle,
+ chipStyle = chipStyle,
+ circularProgressStyle = circularProgressStyle,
+ comboBoxStyle = comboBoxStyle,
+ defaultBannerStyle = defaultBannerStyle,
+ defaultButtonStyle = defaultButtonStyle,
+ defaultDropdownStyle = dropdownStyle,
+ defaultSplitButtonStyle = defaultSplitButtonStyle,
+ defaultTabStyle = defaultTabStyle,
+ dividerStyle = dividerStyle,
+ editorTabStyle = editorTabStyle,
+ groupHeaderStyle = groupHeaderStyle,
+ horizontalProgressBarStyle = horizontalProgressBarStyle,
+ iconButtonStyle = iconButtonStyle,
+ transparentIconButtonStyle = transparentIconButtonStyle,
+ inlineBannerStyle = inlineBannerStyle,
+ lazyTreeStyle = lazyTreeStyle,
+ linkStyle = linkStyle,
+ menuStyle = menuStyle,
+ outlinedButtonStyle = outlinedButtonStyle,
+ popupContainerStyle = popupContainerStyle,
+ outlinedSplitButtonStyle = outlinedSplitButtonStyle,
+ radioButtonStyle = radioButtonStyle,
+ scrollbarStyle = scrollbarStyle,
+ segmentedControlButtonStyle = segmentedControlButtonStyle,
+ segmentedControlStyle = segmentedControlStyle,
+ selectableLazyColumnStyle = selectableLazyColumnStyle,
+ sliderStyle = sliderStyle,
+ simpleListItemStyle = simpleListItemStyle,
+ textAreaStyle = textAreaStyle,
+ textFieldStyle = textFieldStyle,
+ tooltipStyle = tooltipStyle,
+ undecoratedDropdownStyle = undecoratedDropdownStyle,
+ speedSearchStyle = speedSearchStyle,
+ searchMatchStyle = searchMatchStyle,
+ )
+
+@Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR")
+@Deprecated("Use the variant with badgeStyle.", level = DeprecationLevel.HIDDEN)
public fun ComponentStyling.light(
checkboxStyle: CheckboxStyle = CheckboxStyle.light(),
chipStyle: ChipStyle = ChipStyle.light(),
@@ -505,6 +667,7 @@ public fun ComponentStyling.light(
searchMatchStyle: SearchMatchStyle = SearchMatchStyle.light(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = BadgeStyle.light(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
@@ -580,6 +743,7 @@ public fun ComponentStyling.light(
undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.light(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = BadgeStyle.light(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
@@ -654,6 +818,7 @@ public fun ComponentStyling.light(
undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.light(),
): ComponentStyling =
DefaultComponentStyling(
+ badgeStyle = BadgeStyle.light(),
checkboxStyle = checkboxStyle,
chipStyle = chipStyle,
circularProgressStyle = circularProgressStyle,
diff --git a/platform/jewel/samples/showcase/api-dump.txt b/platform/jewel/samples/showcase/api-dump.txt
index 4fdef35983bf1..40d5f962e9316 100644
--- a/platform/jewel/samples/showcase/api-dump.txt
+++ b/platform/jewel/samples/showcase/api-dump.txt
@@ -14,6 +14,7 @@ f:org.jetbrains.jewel.samples.showcase.ShowcaseIcons
f:org.jetbrains.jewel.samples.showcase.ShowcaseIcons$Components
- sf:$stable:I
- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.ShowcaseIcons$Components
+- f:getBadge():org.jetbrains.jewel.ui.icon.PathIconKey
- f:getBanners():org.jetbrains.jewel.ui.icon.PathIconKey
- f:getBorders():org.jetbrains.jewel.ui.icon.PathIconKey
- f:getBrush():org.jetbrains.jewel.ui.icon.PathIconKey
@@ -38,6 +39,8 @@ f:org.jetbrains.jewel.samples.showcase.ShowcaseIcons$ProgrammingLanguages
- sf:$stable:I
- sf:INSTANCE:org.jetbrains.jewel.samples.showcase.ShowcaseIcons$ProgrammingLanguages
- f:getKotlin():org.jetbrains.jewel.ui.icon.PathIconKey
+f:org.jetbrains.jewel.samples.showcase.components.BadgesKt
+- sf:Badges(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.samples.showcase.components.BannersKt
- sf:Banners(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V
f:org.jetbrains.jewel.samples.showcase.components.BordersKt
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/ShowcaseIcons.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/ShowcaseIcons.kt
index 66bbb0bb37dd3..e70aee7bc3641 100644
--- a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/ShowcaseIcons.kt
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/ShowcaseIcons.kt
@@ -17,6 +17,7 @@ public object ShowcaseIcons {
public val sunny: PathIconKey = PathIconKey("icons/sunny.svg", ShowcaseIcons::class.java)
public object Components {
+ public val badge: PathIconKey = PathIconKey("icons/components/badge.svg", ShowcaseIcons::class.java)
public val banners: PathIconKey = PathIconKey("icons/components/banners.svg", ShowcaseIcons::class.java)
public val borders: PathIconKey = PathIconKey("icons/components/borders.svg", ShowcaseIcons::class.java)
public val brush: PathIconKey = PathIconKey("icons/components/brush.svg", ShowcaseIcons::class.java)
diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Badges.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Badges.kt
new file mode 100644
index 0000000000000..68a4aa0fd59dd
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Badges.kt
@@ -0,0 +1,207 @@
+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.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.CornerSize
+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.Modifier
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.unit.dp
+import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.ui.component.Badge
+import org.jetbrains.jewel.ui.component.GroupHeader
+import org.jetbrains.jewel.ui.component.VerticallyScrollableContainer
+import org.jetbrains.jewel.ui.component.styling.BadgeColors
+import org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
+import org.jetbrains.jewel.ui.theme.badgeStyle
+
+@Composable
+public fun Badges(modifier: Modifier = Modifier) {
+ VerticallyScrollableContainer(modifier.fillMaxSize()) {
+ Column(Modifier.fillMaxWidth().padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) {
+ GroupHeader("Basic Badges (Non-clickable)")
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Badge(text = "New")
+ Badge(text = "Beta")
+ Badge(text = "Preview")
+ Badge(text = "Experimental")
+ }
+
+ GroupHeader("Clickable Badges")
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ var clickCount by remember { mutableIntStateOf(0) }
+ Badge(text = "Clicks: $clickCount", onClick = { clickCount++ })
+
+ Badge(text = "Action", onClick = { println("Badge clicked!") })
+ }
+
+ GroupHeader("Disabled Badges")
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Badge(text = "Disabled", enabled = false)
+
+ Badge(text = "Disabled Clickable", enabled = false, onClick = { println("This won't print") })
+ }
+
+ GroupHeader("Custom Background Colors")
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Badge(
+ text = "Success",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = SolidColor(Color(0xFF4CAF50)),
+ backgroundDisabled = SolidColor(Color(0xFFE0E0E0)),
+ backgroundFocused = SolidColor(Color(0xFF45A049)),
+ backgroundPressed = SolidColor(Color(0xFF3D8B40)),
+ backgroundHovered = SolidColor(Color(0xFF45A049)),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+
+ Badge(
+ text = "Warning",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = SolidColor(Color(0xFFFF9800)),
+ backgroundDisabled = SolidColor(Color(0xFFE0E0E0)),
+ backgroundFocused = SolidColor(Color(0xFFFB8C00)),
+ backgroundPressed = SolidColor(Color(0xFFEF6C00)),
+ backgroundHovered = SolidColor(Color(0xFFFB8C00)),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+
+ Badge(
+ text = "Error",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = SolidColor(Color(0xFFF44336)),
+ backgroundDisabled = SolidColor(Color(0xFFE0E0E0)),
+ backgroundFocused = SolidColor(Color(0xFFE53935)),
+ backgroundPressed = SolidColor(Color(0xFFD32F2F)),
+ backgroundHovered = SolidColor(Color(0xFFE53935)),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+
+ Badge(
+ text = "Horizontal Gradient",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background =
+ Brush.horizontalGradient(colors = listOf(Color(0xFF667EEA), Color(0xFF764BA2))),
+ backgroundDisabled = SolidColor(Color.Gray),
+ backgroundFocused =
+ Brush.horizontalGradient(colors = listOf(Color(0xFF667EEA), Color(0xFF764BA2))),
+ backgroundPressed =
+ Brush.horizontalGradient(colors = listOf(Color(0xFF667EEA), Color(0xFF764BA2))),
+ backgroundHovered =
+ Brush.horizontalGradient(colors = listOf(Color(0xFF667EEA), Color(0xFF764BA2))),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+ }
+
+ GroupHeader("Rounded Corners")
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
+ Badge(
+ text = "2dp",
+ style =
+ BadgeStyle(
+ colors = JewelTheme.badgeStyle.colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(2.dp),
+ padding = JewelTheme.badgeStyle.metrics.padding,
+ minSize = JewelTheme.badgeStyle.metrics.minSize,
+ ),
+ ),
+ )
+
+ Badge(
+ text = "4dp",
+ style =
+ BadgeStyle(
+ colors = JewelTheme.badgeStyle.colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(4.dp),
+ padding = JewelTheme.badgeStyle.metrics.padding,
+ minSize = JewelTheme.badgeStyle.metrics.minSize,
+ ),
+ ),
+ )
+
+ Badge(
+ text = "8dp",
+ style =
+ BadgeStyle(
+ colors = JewelTheme.badgeStyle.colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(8.dp),
+ padding = JewelTheme.badgeStyle.metrics.padding,
+ minSize = JewelTheme.badgeStyle.metrics.minSize,
+ ),
+ ),
+ )
+
+ Badge(
+ text = "Pill",
+ style =
+ BadgeStyle(
+ colors = JewelTheme.badgeStyle.colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(100),
+ padding = JewelTheme.badgeStyle.metrics.padding,
+ minSize = JewelTheme.badgeStyle.metrics.minSize,
+ ),
+ ),
+ )
+ }
+ }
+ }
+}
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 a904e30cb26af..6803802b803ad 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
@@ -8,6 +8,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotStateList
import org.jetbrains.jewel.samples.showcase.ShowcaseIcons
+import org.jetbrains.jewel.samples.showcase.components.Badges
import org.jetbrains.jewel.samples.showcase.components.Banners
import org.jetbrains.jewel.samples.showcase.components.Borders
import org.jetbrains.jewel.samples.showcase.components.BrushesShowcase
@@ -96,6 +97,7 @@ public class ComponentsViewModel(
)
},
),
+ ViewInfo(title = "Badges", iconKey = ShowcaseIcons.Components.badge, content = { Badges() }),
ViewInfo(title = "Banners", iconKey = ShowcaseIcons.Components.banners, content = { Banners() }),
ViewInfo(
title = "Typography",
diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/components/badge.svg b/platform/jewel/samples/showcase/src/main/resources/icons/components/badge.svg
new file mode 100644
index 0000000000000..48b281fe3a4ca
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/resources/icons/components/badge.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/components/badge_dark.svg b/platform/jewel/samples/showcase/src/main/resources/icons/components/badge_dark.svg
new file mode 100644
index 0000000000000..6615fd7b0ff25
--- /dev/null
+++ b/platform/jewel/samples/showcase/src/main/resources/icons/components/badge_dark.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/BadgeUiTest.kt b/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/BadgeUiTest.kt
new file mode 100644
index 0000000000000..8c4c24d2ea851
--- /dev/null
+++ b/platform/jewel/ui-tests/src/test/kotlin/org/jetbrains/jewel/ui/component/BadgeUiTest.kt
@@ -0,0 +1,208 @@
+// 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.ui.component
+
+import androidx.compose.foundation.shape.CornerSize
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.SemanticsProperties
+import androidx.compose.ui.test.SemanticsMatcher
+import androidx.compose.ui.test.assert
+import androidx.compose.ui.test.assertHasClickAction
+import androidx.compose.ui.test.assertHasNoClickAction
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.assertIsEnabled
+import androidx.compose.ui.test.assertIsNotEnabled
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.unit.dp
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme
+import org.jetbrains.jewel.ui.component.styling.BadgeColors
+import org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
+import org.jetbrains.jewel.ui.theme.badgeStyle
+import org.junit.Rule
+import org.junit.Test
+
+class BadgeUiTest {
+ @get:Rule val rule = createComposeRule()
+
+ @Test
+ fun `should render badge with text`() {
+ rule.setContent { IntUiTheme { Badge("New") } }
+
+ rule.onNodeWithText("New").assertExists().assertIsDisplayed()
+ }
+
+ @Test
+ fun `should apply provided modifier correctly`() {
+ rule.setContent { IntUiTheme { Badge("Beta", modifier = Modifier.testTag("badge-tag")) } }
+
+ rule.onNodeWithText("Beta").assertExists()
+ rule.onNodeWithTag("badge-tag").assertExists()
+ }
+
+ @Test
+ fun `non-clickable badge should not have click action`() {
+ rule.setContent { IntUiTheme { Badge("New", onClick = null) } }
+
+ rule.onNodeWithText("New").assertHasNoClickAction()
+ }
+
+ @Test
+ fun `non-clickable badge should not have button role`() {
+ rule.setContent { IntUiTheme { Badge("New") } }
+
+ val node = rule.onNodeWithText("New")
+ node.assertExists()
+
+ val hasRole = node.fetchSemanticsNode().config.contains(SemanticsProperties.Role)
+ assertFalse(hasRole, "Non-clickable badge should not have a button role")
+ }
+
+ @Test
+ fun `clickable badge should have click action`() {
+ rule.setContent { IntUiTheme { Badge("New", onClick = {}) } }
+
+ rule.onNodeWithText("New").assertHasClickAction()
+ }
+
+ @Test
+ fun `clickable badge should have button role`() {
+ rule.setContent { IntUiTheme { Badge("New", onClick = {}) } }
+
+ rule.onNodeWithText("New").assert(SemanticsMatcher.expectValue(SemanticsProperties.Role, Role.Button))
+ }
+
+ @Test
+ fun `clicking badge should trigger onClick`() {
+ var clicked = false
+ rule.setContent { IntUiTheme { Badge("New", onClick = { clicked = true }) } }
+
+ assertFalse(clicked, "Badge should not be clicked initially")
+
+ rule.onNodeWithText("New").performClick()
+ rule.waitForIdle()
+
+ assertTrue(clicked, "Badge onClick should have been triggered")
+ }
+
+ @Test
+ fun `enabled badge should be enabled`() {
+ rule.setContent { IntUiTheme { Badge("New", onClick = {}, enabled = true) } }
+
+ rule.onNodeWithText("New").assertIsEnabled()
+ }
+
+ @Test
+ fun `disabled badge should not be enabled`() {
+ rule.setContent { IntUiTheme { Badge("New", onClick = {}, enabled = false) } }
+
+ rule.onNodeWithText("New").assertIsNotEnabled()
+ }
+
+ @Test
+ fun `disabled badge should not trigger onClick`() {
+ var clicked = false
+ rule.setContent { IntUiTheme { Badge("New", onClick = { clicked = true }, enabled = false) } }
+
+ rule.onNodeWithText("New").performClick()
+ rule.waitForIdle()
+
+ assertFalse(clicked, "Disabled badge should not trigger onClick")
+ }
+
+ @Test
+ fun `badge should support custom background color`() {
+ val customGreen = Color(0xFF4CAF50)
+ rule.setContent {
+ IntUiTheme {
+ Badge(
+ text = "Success",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = SolidColor(customGreen),
+ backgroundDisabled = SolidColor(Color.Gray),
+ backgroundFocused = SolidColor(customGreen),
+ backgroundPressed = SolidColor(customGreen),
+ backgroundHovered = SolidColor(customGreen),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+ }
+ }
+
+ rule.onNodeWithText("Success").assertExists().assertIsDisplayed()
+ }
+
+ @Test
+ fun `badge should support brush background`() {
+ rule.setContent {
+ IntUiTheme {
+ Badge(
+ text = "Gradient",
+ style =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = Brush.linearGradient(colors = listOf(Color.Blue, Color.Cyan)),
+ backgroundDisabled = SolidColor(Color.Gray),
+ backgroundFocused = Brush.linearGradient(colors = listOf(Color.Blue, Color.Cyan)),
+ backgroundPressed = Brush.linearGradient(colors = listOf(Color.Blue, Color.Cyan)),
+ backgroundHovered = Brush.linearGradient(colors = listOf(Color.Blue, Color.Cyan)),
+ content = Color.White,
+ contentDisabled = Color.Gray,
+ contentFocused = Color.White,
+ contentPressed = Color.White,
+ contentHovered = Color.White,
+ ),
+ metrics = JewelTheme.badgeStyle.metrics,
+ ),
+ )
+ }
+ }
+
+ rule.onNodeWithText("Gradient").assertExists().assertIsDisplayed()
+ }
+
+ @Test
+ fun `badge should support custom corner radius via metrics`() {
+ rule.setContent {
+ IntUiTheme {
+ Badge(
+ text = "Rounded",
+ style =
+ BadgeStyle(
+ colors = JewelTheme.badgeStyle.colors,
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(8.dp),
+ padding = JewelTheme.badgeStyle.metrics.padding,
+ minSize = JewelTheme.badgeStyle.metrics.minSize,
+ ),
+ ),
+ modifier = Modifier.testTag("rounded-badge"),
+ )
+ }
+ }
+
+ rule.onNodeWithTag("rounded-badge").assertExists().assertIsDisplayed()
+ rule.onNodeWithText("Rounded").assertExists()
+ }
+}
diff --git a/platform/jewel/ui/api-dump.txt b/platform/jewel/ui/api-dump.txt
index 30483656ee0d1..c514f7a538b84 100644
--- a/platform/jewel/ui/api-dump.txt
+++ b/platform/jewel/ui/api-dump.txt
@@ -12,10 +12,12 @@ f:org.jetbrains.jewel.ui.ComponentStyling$Companion
f:org.jetbrains.jewel.ui.DefaultComponentStyling
- org.jetbrains.jewel.ui.ComponentStyling
- sf:$stable:I
+- (org.jetbrains.jewel.ui.component.styling.BadgeStyle,org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):V
- b:(org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):V
-- (org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):V
+- b:(org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SpeedSearchStyle,org.jetbrains.jewel.ui.component.styling.SearchMatchStyle):V
- b:(org.jetbrains.jewel.ui.component.styling.CheckboxStyle,org.jetbrains.jewel.ui.component.styling.ChipStyle,org.jetbrains.jewel.ui.component.styling.CircularProgressStyle,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyles,org.jetbrains.jewel.ui.component.styling.ComboBoxStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.DividerStyle,org.jetbrains.jewel.ui.component.styling.TabStyle,org.jetbrains.jewel.ui.component.styling.GroupHeaderStyle,org.jetbrains.jewel.ui.component.styling.HorizontalProgressBarStyle,org.jetbrains.jewel.ui.component.styling.IconButtonStyle,org.jetbrains.jewel.ui.component.styling.InlineBannerStyles,org.jetbrains.jewel.ui.component.styling.LazyTreeStyle,org.jetbrains.jewel.ui.component.styling.LinkStyle,org.jetbrains.jewel.ui.component.styling.MenuStyle,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,org.jetbrains.jewel.ui.component.styling.SplitButtonStyle,org.jetbrains.jewel.ui.component.styling.RadioButtonStyle,org.jetbrains.jewel.ui.component.styling.ScrollbarStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlButtonStyle,org.jetbrains.jewel.ui.component.styling.SegmentedControlStyle,org.jetbrains.jewel.ui.component.styling.SelectableLazyColumnStyle,org.jetbrains.jewel.ui.component.styling.SimpleListItemStyle,org.jetbrains.jewel.ui.component.styling.SliderStyle,org.jetbrains.jewel.ui.component.styling.TextAreaStyle,org.jetbrains.jewel.ui.component.styling.TextFieldStyle,org.jetbrains.jewel.ui.component.styling.TooltipStyle,org.jetbrains.jewel.ui.component.styling.DropdownStyle):V
- equals(java.lang.Object):Z
+- f:getBadgeStyle():org.jetbrains.jewel.ui.component.styling.BadgeStyle
- f:getCheckboxStyle():org.jetbrains.jewel.ui.component.styling.CheckboxStyle
- f:getChipStyle():org.jetbrains.jewel.ui.component.styling.ChipStyle
- f:getCircularProgressStyle():org.jetbrains.jewel.ui.component.styling.CircularProgressStyle
@@ -115,6 +117,36 @@ e:org.jetbrains.jewel.ui.component.AutoHideBehavior
- s:getEntries():kotlin.enums.EnumEntries
- s:valueOf(java.lang.String):org.jetbrains.jewel.ui.component.AutoHideBehavior
- s:values():org.jetbrains.jewel.ui.component.AutoHideBehavior[]
+f:org.jetbrains.jewel.ui.component.BadgeKt
+- sf:Badge(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function0,Z,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.BadgeStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
+f:org.jetbrains.jewel.ui.component.BadgeState
+- org.jetbrains.jewel.foundation.state.FocusableComponentState
+- sf:Companion:org.jetbrains.jewel.ui.component.BadgeState$Companion
+- bsf:box-impl(J):org.jetbrains.jewel.ui.component.BadgeState
+- s:constructor-impl(J):J
+- sf:copy-pFhIJiE(J,Z,Z,Z,Z,Z):J
+- bs:copy-pFhIJiE$default(J,Z,Z,Z,Z,Z,I,java.lang.Object):J
+- equals(java.lang.Object):Z
+- s:equals-impl(J,java.lang.Object):Z
+- sf:equals-impl0(J,J):Z
+- f:getState-s-VKNKU():J
+- hashCode():I
+- s:hashCode-impl(J):I
+- isActive():Z
+- s:isActive-impl(J):Z
+- isEnabled():Z
+- s:isEnabled-impl(J):Z
+- isFocused():Z
+- s:isFocused-impl(J):Z
+- isHovered():Z
+- s:isHovered-impl(J):Z
+- isPressed():Z
+- s:isPressed-impl(J):Z
+- s:toString-impl(J):java.lang.String
+- bf:unbox-impl():J
+f:org.jetbrains.jewel.ui.component.BadgeState$Companion
+- f:of-pFhIJiE(Z,Z,Z,Z,Z):J
+- bs:of-pFhIJiE$default(org.jetbrains.jewel.ui.component.BadgeState$Companion,Z,Z,Z,Z,Z,I,java.lang.Object):J
f:org.jetbrains.jewel.ui.component.BannerKt
- sf:DefaultErrorBanner(androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
- sf:DefaultErrorBanner(java.lang.String,androidx.compose.ui.Modifier,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,org.jetbrains.jewel.ui.component.styling.DefaultBannerStyle,androidx.compose.ui.text.TextStyle,androidx.compose.runtime.Composer,I,I):V
@@ -963,6 +995,44 @@ f:org.jetbrains.jewel.ui.component.search.HighlightKt
f:org.jetbrains.jewel.ui.component.search.SpeedSearchableComboBoxKt
f:org.jetbrains.jewel.ui.component.search.SpeedSearchableLazyColumnKt
f:org.jetbrains.jewel.ui.component.search.SpeedSearchableTreeKt
+f:org.jetbrains.jewel.ui.component.styling.BadgeColors
+- sf:$stable:I
+- sf:Companion:org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion
+- f:backgroundFor-nFed6Z8(J,androidx.compose.runtime.Composer,I):androidx.compose.runtime.State
+- f:contentFor-nFed6Z8(J,androidx.compose.runtime.Composer,I):androidx.compose.runtime.State
+- equals(java.lang.Object):Z
+- f:getBackground():androidx.compose.ui.graphics.Brush
+- f:getBackgroundDisabled():androidx.compose.ui.graphics.Brush
+- f:getBackgroundFocused():androidx.compose.ui.graphics.Brush
+- f:getBackgroundHovered():androidx.compose.ui.graphics.Brush
+- f:getBackgroundPressed():androidx.compose.ui.graphics.Brush
+- f:getContent-0d7_KjU():J
+- f:getContentDisabled-0d7_KjU():J
+- f:getContentFocused-0d7_KjU():J
+- f:getContentHovered-0d7_KjU():J
+- f:getContentPressed-0d7_KjU():J
+- hashCode():I
+f:org.jetbrains.jewel.ui.component.styling.BadgeColors$Companion
+f:org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+- sf:$stable:I
+- sf:Companion:org.jetbrains.jewel.ui.component.styling.BadgeMetrics$Companion
+- equals(java.lang.Object):Z
+- f:getCornerSize():androidx.compose.foundation.shape.CornerSize
+- f:getMinSize-MYxV2XQ():J
+- f:getPadding():androidx.compose.foundation.layout.PaddingValues
+- hashCode():I
+f:org.jetbrains.jewel.ui.component.styling.BadgeMetrics$Companion
+f:org.jetbrains.jewel.ui.component.styling.BadgeStyle
+- sf:$stable:I
+- sf:Companion:org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion
+- (org.jetbrains.jewel.ui.component.styling.BadgeColors,org.jetbrains.jewel.ui.component.styling.BadgeMetrics):V
+- equals(java.lang.Object):Z
+- f:getColors():org.jetbrains.jewel.ui.component.styling.BadgeColors
+- f:getMetrics():org.jetbrains.jewel.ui.component.styling.BadgeMetrics
+- hashCode():I
+f:org.jetbrains.jewel.ui.component.styling.BadgeStyle$Companion
+f:org.jetbrains.jewel.ui.component.styling.BadgeStylingKt
+- sf:getLocalBadgeStyle():androidx.compose.runtime.ProvidableCompositionLocal
f:org.jetbrains.jewel.ui.component.styling.BannerColors
- sf:$stable:I
- sf:Companion:org.jetbrains.jewel.ui.component.styling.BannerColors$Companion
@@ -3943,6 +4013,7 @@ f:org.jetbrains.jewel.ui.painter.hints.StatefulKt
f:org.jetbrains.jewel.ui.theme.JewelThemeKt
- sf:BaseJewelTheme(org.jetbrains.jewel.foundation.theme.ThemeDefinition,org.jetbrains.jewel.ui.ComponentStyling,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I):V
- sf:BaseJewelTheme(org.jetbrains.jewel.foundation.theme.ThemeDefinition,org.jetbrains.jewel.ui.ComponentStyling,Z,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V
+- sf:getBadgeStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.BadgeStyle
- sf:getCheckboxStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.CheckboxStyle
- sf:getChipStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.ChipStyle
- sf:getCircularProgressStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.CircularProgressStyle
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/DefaultComponentStyling.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/DefaultComponentStyling.kt
index afb15cc4a2e6e..d89b9a17b0be7 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/DefaultComponentStyling.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/DefaultComponentStyling.kt
@@ -8,6 +8,7 @@ import androidx.compose.runtime.Stable
import org.jetbrains.jewel.foundation.GenerateDataFunctions
import org.jetbrains.jewel.ui.component.ContextMenuRepresentation
import org.jetbrains.jewel.ui.component.TextContextMenu
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
import org.jetbrains.jewel.ui.component.styling.ButtonStyle
import org.jetbrains.jewel.ui.component.styling.CheckboxStyle
import org.jetbrains.jewel.ui.component.styling.ChipStyle
@@ -22,6 +23,7 @@ import org.jetbrains.jewel.ui.component.styling.IconButtonStyle
import org.jetbrains.jewel.ui.component.styling.InlineBannerStyles
import org.jetbrains.jewel.ui.component.styling.LazyTreeStyle
import org.jetbrains.jewel.ui.component.styling.LinkStyle
+import org.jetbrains.jewel.ui.component.styling.LocalBadgeStyle
import org.jetbrains.jewel.ui.component.styling.LocalCheckboxStyle
import org.jetbrains.jewel.ui.component.styling.LocalChipStyle
import org.jetbrains.jewel.ui.component.styling.LocalCircularProgressStyle
@@ -73,12 +75,14 @@ import org.jetbrains.jewel.ui.component.styling.TabStyle
import org.jetbrains.jewel.ui.component.styling.TextAreaStyle
import org.jetbrains.jewel.ui.component.styling.TextFieldStyle
import org.jetbrains.jewel.ui.component.styling.TooltipStyle
+import org.jetbrains.jewel.ui.component.styling.fallbackBadgeStyle
import org.jetbrains.jewel.ui.component.styling.fallbackSearchMatchStyle
import org.jetbrains.jewel.ui.component.styling.fallbackSpeedSearchStyle
@Stable
@GenerateDataFunctions
public class DefaultComponentStyling(
+ public val badgeStyle: BadgeStyle,
public val checkboxStyle: CheckboxStyle,
public val chipStyle: ChipStyle,
public val circularProgressStyle: CircularProgressStyle,
@@ -115,6 +119,82 @@ public class DefaultComponentStyling(
public val speedSearchStyle: SpeedSearchStyle,
public val searchMatchStyle: SearchMatchStyle,
) : ComponentStyling {
+ @Deprecated("Use the variant with badgeStyle.", level = DeprecationLevel.HIDDEN)
+ public constructor(
+ checkboxStyle: CheckboxStyle,
+ chipStyle: ChipStyle,
+ circularProgressStyle: CircularProgressStyle,
+ defaultBannerStyle: DefaultBannerStyles,
+ comboBoxStyle: ComboBoxStyle,
+ defaultButtonStyle: ButtonStyle,
+ defaultDropdownStyle: DropdownStyle,
+ defaultSplitButtonStyle: SplitButtonStyle,
+ defaultTabStyle: TabStyle,
+ dividerStyle: DividerStyle,
+ editorTabStyle: TabStyle,
+ groupHeaderStyle: GroupHeaderStyle,
+ horizontalProgressBarStyle: HorizontalProgressBarStyle,
+ iconButtonStyle: IconButtonStyle,
+ transparentIconButtonStyle: IconButtonStyle,
+ inlineBannerStyle: InlineBannerStyles,
+ lazyTreeStyle: LazyTreeStyle,
+ linkStyle: LinkStyle,
+ menuStyle: MenuStyle,
+ outlinedButtonStyle: ButtonStyle,
+ popupContainerStyle: PopupContainerStyle,
+ outlinedSplitButtonStyle: SplitButtonStyle,
+ radioButtonStyle: RadioButtonStyle,
+ scrollbarStyle: ScrollbarStyle,
+ segmentedControlButtonStyle: SegmentedControlButtonStyle,
+ segmentedControlStyle: SegmentedControlStyle,
+ selectableLazyColumnStyle: SelectableLazyColumnStyle,
+ simpleListItemStyle: SimpleListItemStyle,
+ sliderStyle: SliderStyle,
+ textAreaStyle: TextAreaStyle,
+ textFieldStyle: TextFieldStyle,
+ tooltipStyle: TooltipStyle,
+ undecoratedDropdownStyle: DropdownStyle,
+ speedSearchStyle: SpeedSearchStyle,
+ searchMatchStyle: SearchMatchStyle,
+ ) : this(
+ badgeStyle = fallbackBadgeStyle(),
+ checkboxStyle,
+ chipStyle,
+ circularProgressStyle,
+ defaultBannerStyle,
+ comboBoxStyle,
+ defaultButtonStyle,
+ defaultDropdownStyle,
+ defaultSplitButtonStyle,
+ defaultTabStyle,
+ dividerStyle,
+ editorTabStyle,
+ groupHeaderStyle,
+ horizontalProgressBarStyle,
+ iconButtonStyle,
+ transparentIconButtonStyle,
+ inlineBannerStyle,
+ lazyTreeStyle,
+ linkStyle,
+ menuStyle,
+ outlinedButtonStyle,
+ popupContainerStyle,
+ outlinedSplitButtonStyle,
+ radioButtonStyle,
+ scrollbarStyle,
+ segmentedControlButtonStyle,
+ segmentedControlStyle,
+ selectableLazyColumnStyle,
+ simpleListItemStyle,
+ sliderStyle,
+ textAreaStyle,
+ textFieldStyle,
+ tooltipStyle,
+ undecoratedDropdownStyle,
+ speedSearchStyle,
+ searchMatchStyle,
+ )
+
@Deprecated("Use the variant with speedSearchStyle.", level = DeprecationLevel.HIDDEN)
public constructor(
checkboxStyle: CheckboxStyle,
@@ -151,6 +231,7 @@ public class DefaultComponentStyling(
tooltipStyle: TooltipStyle,
undecoratedDropdownStyle: DropdownStyle,
) : this(
+ badgeStyle = fallbackBadgeStyle(),
checkboxStyle,
chipStyle,
circularProgressStyle,
@@ -223,6 +304,7 @@ public class DefaultComponentStyling(
tooltipStyle: TooltipStyle,
undecoratedDropdownStyle: DropdownStyle,
) : this(
+ badgeStyle = fallbackBadgeStyle(),
checkboxStyle,
chipStyle,
circularProgressStyle,
@@ -263,6 +345,7 @@ public class DefaultComponentStyling(
@Composable
override fun styles(): Array> =
arrayOf(
+ LocalBadgeStyle provides badgeStyle,
LocalCheckboxStyle provides checkboxStyle,
LocalChipStyle provides chipStyle,
LocalCircularProgressStyle provides circularProgressStyle,
@@ -308,6 +391,7 @@ public class DefaultComponentStyling(
other as DefaultComponentStyling
+ if (badgeStyle != other.badgeStyle) return false
if (checkboxStyle != other.checkboxStyle) return false
if (chipStyle != other.chipStyle) return false
if (circularProgressStyle != other.circularProgressStyle) return false
@@ -348,7 +432,8 @@ public class DefaultComponentStyling(
}
override fun hashCode(): Int {
- var result = checkboxStyle.hashCode()
+ var result = badgeStyle.hashCode()
+ result = 31 * result + checkboxStyle.hashCode()
result = 31 * result + chipStyle.hashCode()
result = 31 * result + circularProgressStyle.hashCode()
result = 31 * result + defaultBannerStyle.hashCode()
@@ -388,6 +473,7 @@ public class DefaultComponentStyling(
override fun toString(): String =
"DefaultComponentStyling(" +
+ "badgeStyle=$badgeStyle, " +
"checkboxStyle=$checkboxStyle, " +
"chipStyle=$chipStyle, " +
"circularProgressStyle=$circularProgressStyle, " +
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Badge.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Badge.kt
new file mode 100644
index 0000000000000..735e8d610bf01
--- /dev/null
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Badge.kt
@@ -0,0 +1,205 @@
+package org.jetbrains.jewel.ui.component
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.FocusInteraction
+import androidx.compose.foundation.interaction.HoverInteraction
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.PressInteraction
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.LaunchedEffect
+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.semantics.Role
+import androidx.compose.ui.text.TextStyle
+import org.jetbrains.annotations.Nls
+import org.jetbrains.jewel.foundation.modifier.thenIf
+import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active
+import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled
+import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Focused
+import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Hovered
+import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Pressed
+import org.jetbrains.jewel.foundation.state.FocusableComponentState
+import org.jetbrains.jewel.foundation.theme.JewelTheme
+import org.jetbrains.jewel.foundation.theme.LocalContentColor
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
+import org.jetbrains.jewel.ui.focusOutline
+import org.jetbrains.jewel.ui.theme.badgeStyle
+
+/**
+ * A small, colored badge component used to display promotional text like "New", "Beta", or other short labels.
+ *
+ * Badges are compact UI elements with customizable backgrounds and text colors, typically used to highlight features,
+ * statuses, or promotional messages. They can be either static (non-clickable) or interactive (clickable).
+ *
+ * By default, badges have square corners. To add rounded corners, provide a custom [BadgeStyle] with modified metrics:
+ * ```kotlin
+ * Badge(
+ * text = "New",
+ * style = BadgeStyle(
+ * colors = JewelTheme.badgeStyle.colors,
+ * metrics = BadgeMetrics(
+ * cornerSize = CornerSize(4.dp),
+ * padding = JewelTheme.badgeStyle.metrics.padding,
+ * minSize = JewelTheme.badgeStyle.metrics.minSize
+ * )
+ * )
+ * )
+ * ```
+ *
+ * **Usage example:**
+ * [`Badges.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Badges.kt)
+ *
+ * @param text The text to display in the badge (e.g., "New", "Beta").
+ * @param modifier [Modifier] to be applied to the badge.
+ * @param onClick Optional click handler. When provided, the badge becomes clickable. When null, the badge is static.
+ * @param enabled Controls the enabled state of the badge. When false, the badge appears dimmed and is not clickable.
+ * @param interactionSource An optional [MutableInteractionSource] for observing and emitting interactions for this
+ * badge. Use this to observe state changes or customize interaction handling.
+ * @param style The visual styling configuration for the badge. Defaults to the theme's badge style.
+ * @param textStyle The typography style to be applied to the badge's text content.
+ */
+@Composable
+public fun Badge(
+ @Nls text: String,
+ modifier: Modifier = Modifier,
+ onClick: (() -> Unit)? = null,
+ enabled: Boolean = true,
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
+ style: BadgeStyle = JewelTheme.badgeStyle,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+) {
+ BadgeImpl(
+ text = text,
+ modifier = modifier,
+ onClick = onClick,
+ enabled = enabled,
+ interactionSource = interactionSource,
+ style = style,
+ textStyle = textStyle,
+ )
+}
+
+@Composable
+internal fun BadgeImpl(
+ @Nls text: String,
+ modifier: Modifier = Modifier,
+ onClick: (() -> Unit)? = null,
+ enabled: Boolean = true,
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
+ style: BadgeStyle = JewelTheme.badgeStyle,
+ textStyle: TextStyle = JewelTheme.defaultTextStyle,
+) {
+ val colors = style.colors
+ val metrics = style.metrics
+ val shape = RoundedCornerShape(metrics.cornerSize)
+
+ var badgeState by remember(interactionSource) { mutableStateOf(BadgeState.of(enabled = enabled)) }
+
+ remember(enabled) { badgeState = badgeState.copy(enabled = enabled) }
+
+ LaunchedEffect(interactionSource) {
+ interactionSource.interactions.collect { interaction ->
+ when (interaction) {
+ is PressInteraction.Press -> badgeState = badgeState.copy(pressed = true)
+ is PressInteraction.Cancel,
+ is PressInteraction.Release -> badgeState = badgeState.copy(pressed = false)
+ is HoverInteraction.Enter -> badgeState = badgeState.copy(hovered = true)
+ is HoverInteraction.Exit -> badgeState = badgeState.copy(hovered = false)
+ is FocusInteraction.Focus -> badgeState = badgeState.copy(focused = true)
+ is FocusInteraction.Unfocus -> badgeState = badgeState.copy(focused = false)
+ }
+ }
+ }
+
+ val backgroundColor by colors.backgroundFor(badgeState)
+ val contentColor by colors.contentFor(badgeState)
+
+ Row(
+ modifier =
+ modifier
+ .thenIf(onClick != null) {
+ clickable(
+ onClick = onClick ?: {},
+ enabled = enabled,
+ role = Role.Button,
+ interactionSource = interactionSource,
+ indication = null,
+ )
+ }
+ .defaultMinSize(metrics.minSize.width, metrics.minSize.height)
+ .background(backgroundColor, shape)
+ .focusOutline(badgeState, shape)
+ .padding(metrics.padding),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.Center,
+ ) {
+ CompositionLocalProvider(LocalContentColor provides contentColor) { Text(text = text, style = textStyle) }
+ }
+}
+
+/**
+ * Represents the visual state of a [Badge](org.jetbrains.jewel.ui.component.Badge).
+ *
+ * This is an immutable state object that tracks whether the badge is enabled, focused, hovered, pressed, and active.
+ *
+ * @property state The underlying state value as a ULong bit mask.
+ */
+@Immutable
+@JvmInline
+public value class BadgeState(public val state: ULong) : FocusableComponentState {
+ override val isActive: Boolean
+ get() = state and Active != 0UL
+
+ override val isEnabled: Boolean
+ get() = state and Enabled != 0UL
+
+ override val isFocused: Boolean
+ get() = state and Focused != 0UL
+
+ override val isHovered: Boolean
+ get() = state and Hovered != 0UL
+
+ override val isPressed: Boolean
+ get() = state and Pressed != 0UL
+
+ public fun copy(
+ enabled: Boolean = isEnabled,
+ focused: Boolean = isFocused,
+ hovered: Boolean = isHovered,
+ pressed: Boolean = isPressed,
+ active: Boolean = isActive,
+ ): BadgeState = of(enabled = enabled, focused = focused, hovered = hovered, pressed = pressed, active = active)
+
+ override fun toString(): String =
+ "BadgeState(isEnabled=$isEnabled, isFocused=$isFocused, isHovered=$isHovered, " +
+ "isPressed=$isPressed, isActive=$isActive)"
+
+ public companion object {
+ public fun of(
+ enabled: Boolean = true,
+ focused: Boolean = false,
+ hovered: Boolean = false,
+ pressed: Boolean = false,
+ active: Boolean = false,
+ ): BadgeState =
+ BadgeState(
+ (if (enabled) Enabled else 0UL) or
+ (if (focused) Focused else 0UL) or
+ (if (hovered) Hovered else 0UL) or
+ (if (pressed) Pressed else 0UL) or
+ (if (active) Active else 0UL)
+ )
+ }
+}
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/BadgeStyling.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/BadgeStyling.kt
new file mode 100644
index 0000000000000..77266eb5eff36
--- /dev/null
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/BadgeStyling.kt
@@ -0,0 +1,193 @@
+package org.jetbrains.jewel.ui.component.styling
+
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.shape.CornerSize
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.ProvidableCompositionLocal
+import androidx.compose.runtime.State
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.staticCompositionLocalOf
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
+import org.jetbrains.jewel.foundation.GenerateDataFunctions
+import org.jetbrains.jewel.ui.component.BadgeState
+
+@Immutable
+@GenerateDataFunctions
+public class BadgeStyle(public val colors: BadgeColors, public val metrics: BadgeMetrics) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as BadgeStyle
+
+ if (colors != other.colors) return false
+ if (metrics != other.metrics) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = colors.hashCode()
+ result = 31 * result + metrics.hashCode()
+ return result
+ }
+
+ override fun toString(): String = "BadgeStyle(colors=$colors, metrics=$metrics)"
+
+ public companion object
+}
+
+@Immutable
+@GenerateDataFunctions
+public class BadgeColors(
+ public val background: Brush,
+ public val backgroundDisabled: Brush,
+ public val backgroundFocused: Brush,
+ public val backgroundPressed: Brush,
+ public val backgroundHovered: Brush,
+ public val content: Color,
+ public val contentDisabled: Color,
+ public val contentFocused: Color,
+ public val contentPressed: Color,
+ public val contentHovered: Color,
+) {
+
+ @Composable
+ public fun backgroundFor(state: BadgeState): State =
+ rememberUpdatedState(
+ when {
+ !state.isEnabled -> backgroundDisabled
+ state.isPressed -> backgroundPressed
+ state.isFocused -> backgroundFocused
+ state.isHovered -> backgroundHovered
+ else -> background
+ }
+ )
+
+ @Composable
+ public fun contentFor(state: BadgeState): State =
+ rememberUpdatedState(
+ when {
+ !state.isEnabled -> contentDisabled
+ state.isPressed -> contentPressed
+ state.isFocused -> contentFocused
+ state.isHovered -> contentHovered
+ else -> content
+ }
+ )
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as BadgeColors
+
+ if (background != other.background) return false
+ if (backgroundDisabled != other.backgroundDisabled) return false
+ if (backgroundFocused != other.backgroundFocused) return false
+ if (backgroundPressed != other.backgroundPressed) return false
+ if (backgroundHovered != other.backgroundHovered) return false
+ if (content != other.content) return false
+ if (contentDisabled != other.contentDisabled) return false
+ if (contentFocused != other.contentFocused) return false
+ if (contentPressed != other.contentPressed) return false
+ if (contentHovered != other.contentHovered) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = background.hashCode()
+ result = 31 * result + backgroundDisabled.hashCode()
+ result = 31 * result + backgroundFocused.hashCode()
+ result = 31 * result + backgroundPressed.hashCode()
+ result = 31 * result + backgroundHovered.hashCode()
+ result = 31 * result + content.hashCode()
+ result = 31 * result + contentDisabled.hashCode()
+ result = 31 * result + contentFocused.hashCode()
+ result = 31 * result + contentPressed.hashCode()
+ result = 31 * result + contentHovered.hashCode()
+ return result
+ }
+
+ override fun toString(): String =
+ "BadgeColors(" +
+ "background=$background, " +
+ "backgroundDisabled=$backgroundDisabled, " +
+ "backgroundFocused=$backgroundFocused, " +
+ "backgroundPressed=$backgroundPressed, " +
+ "backgroundHovered=$backgroundHovered, " +
+ "content=$content, " +
+ "contentDisabled=$contentDisabled, " +
+ "contentFocused=$contentFocused, " +
+ "contentPressed=$contentPressed, " +
+ "contentHovered=$contentHovered" +
+ ")"
+
+ public companion object
+}
+
+@Immutable
+@GenerateDataFunctions
+public class BadgeMetrics(
+ public val cornerSize: CornerSize,
+ public val padding: PaddingValues,
+ public val minSize: DpSize,
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as BadgeMetrics
+
+ if (cornerSize != other.cornerSize) return false
+ if (padding != other.padding) return false
+ if (minSize != other.minSize) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = cornerSize.hashCode()
+ result = 31 * result + padding.hashCode()
+ result = 31 * result + minSize.hashCode()
+ return result
+ }
+
+ override fun toString(): String = "BadgeMetrics(cornerSize=$cornerSize, padding=$padding, minSize=$minSize)"
+
+ public companion object
+}
+
+public val LocalBadgeStyle: ProvidableCompositionLocal = staticCompositionLocalOf {
+ error("No BadgeStyle provided. Have you forgotten the theme?")
+}
+
+/** Creating fallback style for compatibility with older versions. */
+internal fun fallbackBadgeStyle() =
+ BadgeStyle(
+ colors =
+ BadgeColors(
+ background = SolidColor(Color(0xFF3574F0)),
+ backgroundDisabled = SolidColor(Color(0xFFEBECF0)),
+ backgroundFocused = SolidColor(Color(0xFF4682FA)),
+ backgroundPressed = SolidColor(Color(0xFF588CF3)),
+ backgroundHovered = SolidColor(Color(0xFF4682FA)),
+ content = Color(0xFFFFFFFF),
+ contentDisabled = Color(0xFFA8ADBD),
+ contentFocused = Color(0xFFFFFFFF),
+ contentPressed = Color(0xFFFFFFFF),
+ contentHovered = Color(0xFFFFFFFF),
+ ),
+ metrics =
+ BadgeMetrics(
+ cornerSize = CornerSize(0.dp),
+ padding = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
+ minSize = DpSize(32.dp, 18.dp),
+ ),
+ )
diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/theme/JewelTheme.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/theme/JewelTheme.kt
index edfd99fbc3e6c..cba8d026a7c68 100644
--- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/theme/JewelTheme.kt
+++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/theme/JewelTheme.kt
@@ -17,6 +17,7 @@ import org.jetbrains.jewel.foundation.theme.ThemeColorPalette
import org.jetbrains.jewel.foundation.theme.ThemeDefinition
import org.jetbrains.jewel.foundation.theme.ThemeIconData
import org.jetbrains.jewel.ui.ComponentStyling
+import org.jetbrains.jewel.ui.component.styling.BadgeStyle
import org.jetbrains.jewel.ui.component.styling.ButtonStyle
import org.jetbrains.jewel.ui.component.styling.CheckboxStyle
import org.jetbrains.jewel.ui.component.styling.ChipStyle
@@ -31,6 +32,7 @@ import org.jetbrains.jewel.ui.component.styling.IconButtonStyle
import org.jetbrains.jewel.ui.component.styling.InlineBannerStyles
import org.jetbrains.jewel.ui.component.styling.LazyTreeStyle
import org.jetbrains.jewel.ui.component.styling.LinkStyle
+import org.jetbrains.jewel.ui.component.styling.LocalBadgeStyle
import org.jetbrains.jewel.ui.component.styling.LocalCheckboxStyle
import org.jetbrains.jewel.ui.component.styling.LocalChipStyle
import org.jetbrains.jewel.ui.component.styling.LocalCircularProgressStyle
@@ -107,6 +109,9 @@ public val JewelTheme.Companion.defaultSplitButtonStyle: SplitButtonStyle
public val JewelTheme.Companion.outlinedSplitButtonStyle: SplitButtonStyle
@Composable @ReadOnlyComposable get() = LocalOutlinedSplitButtonStyle.current
+public val JewelTheme.Companion.badgeStyle: BadgeStyle
+ @Composable @ReadOnlyComposable get() = LocalBadgeStyle.current
+
public val JewelTheme.Companion.checkboxStyle: CheckboxStyle
@Composable @ReadOnlyComposable get() = LocalCheckboxStyle.current