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..a998d9eea1d59 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 @@ -104,6 +104,7 @@ internal fun createBridgeComponentStyling(theme: ThemeDefinition): ComponentStyl undecoratedDropdownStyle = readUndecoratedDropdownStyle(menuStyle), speedSearchStyle = readSpeedSearchStyle(), searchMatchStyle = readSearchMatchStyle(theme.isDark), + popupAdStyle = readPopupAdStyle(), ) } diff --git a/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgePopupAd.kt b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgePopupAd.kt new file mode 100644 index 0000000000000..6e89b18445daa --- /dev/null +++ b/platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/theme/IntUiBridgePopupAd.kt @@ -0,0 +1,42 @@ +package org.jetbrains.jewel.bridge.theme + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.ui.graphics.takeOrElse +import androidx.compose.ui.unit.dp +import com.intellij.ui.NewUiValue +import com.intellij.util.ui.JBUI +import org.jetbrains.jewel.bridge.retrieveColorOrUnspecified +import org.jetbrains.jewel.bridge.retrieveInsetsAsPaddingValuesOrNull +import org.jetbrains.jewel.bridge.toComposeColor +import org.jetbrains.jewel.ui.component.styling.PopupAdColors +import org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle + +internal fun readPopupAdStyle(): PopupAdStyle { + // Get colors from LaF following JBUI.CurrentTheme.Advertiser pattern + // Uses Popup.Advertiser.* keys with fallback to SearchEverywhere.Advertiser.* + val backgroundColor = + retrieveColorOrUnspecified("Popup.Advertiser.background").takeOrElse { + retrieveColorOrUnspecified("SearchEverywhere.Advertiser.background").takeOrElse { + JBUI.CurrentTheme.Advertiser.background().toComposeColor() + } + } + + val colors = PopupAdColors(background = backgroundColor) + + // Get border insets from LaF following JBUI.CurrentTheme.Advertiser.borderInsets() pattern + // For new UI: insets(6, 20), for legacy UI: insets(5, 10, 5, 15) + val borderInsets = + retrieveInsetsAsPaddingValuesOrNull("Popup.Advertiser.borderInsets") + ?: if (NewUiValue.isEnabled()) { + // New UI default + PaddingValues(horizontal = 20.dp, vertical = 6.dp) + } else { + // Legacy UI default + PaddingValues(start = 10.dp, top = 5.dp, end = 15.dp, bottom = 5.dp) + } + + val metrics = PopupAdMetrics(padding = borderInsets, minHeight = 20.dp) + + return PopupAdStyle(colors = colors, metrics = metrics) +} 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..1c57687147845 100644 --- a/platform/jewel/int-ui/int-ui-standalone/api-dump.txt +++ b/platform/jewel/int-ui/int-ui-standalone/api-dump.txt @@ -394,6 +394,19 @@ f:org.jetbrains.jewel.intui.standalone.styling.IntUiOutlinedSplitButtonStyleFact - bs:dark-NqQqPsg$default(org.jetbrains.jewel.intui.standalone.styling.IntUiOutlinedSplitButtonStyleFactory,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DividerMetrics,J,J,F,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.SplitButtonStyle - f:light-NqQqPsg(org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DividerMetrics,J,J,F,J):org.jetbrains.jewel.ui.component.styling.SplitButtonStyle - bs:light-NqQqPsg$default(org.jetbrains.jewel.intui.standalone.styling.IntUiOutlinedSplitButtonStyleFactory,org.jetbrains.jewel.ui.component.styling.ButtonStyle,org.jetbrains.jewel.ui.component.styling.DividerMetrics,J,J,F,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.SplitButtonStyle +f:org.jetbrains.jewel.intui.standalone.styling.IntUiPopupAdStylingKt +- sf:dark(org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupAdColors,org.jetbrains.jewel.ui.component.styling.PopupAdMetrics):org.jetbrains.jewel.ui.component.styling.PopupAdStyle +- bs:dark$default(org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupAdColors,org.jetbrains.jewel.ui.component.styling.PopupAdMetrics,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdStyle +- sf:dark-4WTKRHQ(org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion,J):org.jetbrains.jewel.ui.component.styling.PopupAdColors +- bs:dark-4WTKRHQ$default(org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdColors +- sf:dark-wH6b6FI(org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion,androidx.compose.foundation.layout.PaddingValues,F):org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +- bs:dark-wH6b6FI$default(org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion,androidx.compose.foundation.layout.PaddingValues,F,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +- sf:light(org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupAdColors,org.jetbrains.jewel.ui.component.styling.PopupAdMetrics):org.jetbrains.jewel.ui.component.styling.PopupAdStyle +- bs:light$default(org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupAdColors,org.jetbrains.jewel.ui.component.styling.PopupAdMetrics,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdStyle +- sf:light-4WTKRHQ(org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion,J):org.jetbrains.jewel.ui.component.styling.PopupAdColors +- bs:light-4WTKRHQ$default(org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion,J,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdColors +- sf:light-wH6b6FI(org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion,androidx.compose.foundation.layout.PaddingValues,F):org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +- bs:light-wH6b6FI$default(org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion,androidx.compose.foundation.layout.PaddingValues,F,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupAdMetrics f:org.jetbrains.jewel.intui.standalone.styling.IntUiPopupContainerStylingKt - sf:dark(org.jetbrains.jewel.ui.component.styling.PopupContainerStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupContainerColors,org.jetbrains.jewel.ui.component.styling.PopupContainerMetrics):org.jetbrains.jewel.ui.component.styling.PopupContainerStyle - bs:dark$default(org.jetbrains.jewel.ui.component.styling.PopupContainerStyle$Companion,org.jetbrains.jewel.ui.component.styling.PopupContainerColors,org.jetbrains.jewel.ui.component.styling.PopupContainerMetrics,I,java.lang.Object):org.jetbrains.jewel.ui.component.styling.PopupContainerStyle @@ -679,10 +692,12 @@ 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 - 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 +- 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.component.styling.PopupAdStyle):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.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.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.component.styling.PopupAdStyle,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 - bsf:darkThemeDefinition-aKPr-nQ(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.theme.ThemeDefinition - bs:darkThemeDefinition-aKPr-nQ$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,I,java.lang.Object):org.jetbrains.jewel.foundation.theme.ThemeDefinition @@ -690,10 +705,12 @@ f:org.jetbrains.jewel.intui.standalone.theme.IntUiThemeKt - 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 - 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 +- 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.component.styling.PopupAdStyle):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.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.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.component.styling.PopupAdStyle,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 - bsf:lightThemeDefinition-aKPr-nQ(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.theme.ThemeDefinition - bs:lightThemeDefinition-aKPr-nQ$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,I,java.lang.Object):org.jetbrains.jewel.foundation.theme.ThemeDefinition diff --git a/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiPopupAdStyling.kt b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiPopupAdStyling.kt new file mode 100644 index 0000000000000..15c683d8c2a13 --- /dev/null +++ b/platform/jewel/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiPopupAdStyling.kt @@ -0,0 +1,38 @@ +// 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.intui.standalone.styling + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import org.jetbrains.jewel.intui.core.theme.IntUiDarkTheme +import org.jetbrains.jewel.ui.component.styling.PopupAdColors +import org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle + +public fun PopupAdStyle.Companion.light( + colors: PopupAdColors = PopupAdColors.light(), + metrics: PopupAdMetrics = PopupAdMetrics.light(), +): PopupAdStyle = PopupAdStyle(colors = colors, metrics = metrics) + +public fun PopupAdColors.Companion.light(background: Color = Color(0xFFF2F2F2)): PopupAdColors = + PopupAdColors(background = background) + +public fun PopupAdMetrics.Companion.light( + padding: PaddingValues = PaddingValues(horizontal = 20.dp, vertical = 6.dp), + minHeight: Dp = 20.dp, +): PopupAdMetrics = PopupAdMetrics(padding = padding, minHeight = minHeight) + +public fun PopupAdStyle.Companion.dark( + colors: PopupAdColors = PopupAdColors.dark(), + metrics: PopupAdMetrics = PopupAdMetrics.dark(), +): PopupAdStyle = PopupAdStyle(colors = colors, metrics = metrics) + +public fun PopupAdColors.Companion.dark( + background: Color = IntUiDarkTheme.colors.grayOrNull(2) ?: Color(0xFF2B2B2B) +): PopupAdColors = PopupAdColors(background = background) + +public fun PopupAdMetrics.Companion.dark( + padding: PaddingValues = PaddingValues(horizontal = 20.dp, vertical = 6.dp), + minHeight: Dp = 20.dp, +): PopupAdMetrics = PopupAdMetrics(padding = padding, minHeight = minHeight) 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..534e74efb5958 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 @@ -50,6 +50,7 @@ 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.MenuStyle +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle import org.jetbrains.jewel.ui.component.styling.PopupContainerStyle import org.jetbrains.jewel.ui.component.styling.RadioButtonStyle import org.jetbrains.jewel.ui.component.styling.ScrollbarStyle @@ -278,6 +279,7 @@ public fun ComponentStyling.dark( undecoratedDropdownStyle: DropdownStyle = DropdownStyle.Undecorated.dark(), speedSearchStyle: SpeedSearchStyle = SpeedSearchStyle.dark(), searchMatchStyle: SearchMatchStyle = SearchMatchStyle.dark(), + popupAdStyle: PopupAdStyle = PopupAdStyle.dark(), ): ComponentStyling = DefaultComponentStyling( checkboxStyle = checkboxStyle, @@ -315,6 +317,85 @@ public fun ComponentStyling.dark( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = speedSearchStyle, searchMatchStyle = searchMatchStyle, + popupAdStyle = popupAdStyle, + ) + +@Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") +@Deprecated("Use the variant with popupAdTextStyle.", 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( + 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, + popupAdStyle = PopupAdStyle.dark(), ) @Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") @@ -390,6 +471,7 @@ public fun ComponentStyling.dark( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = SpeedSearchStyle.dark(), searchMatchStyle = SearchMatchStyle.dark(), + popupAdStyle = PopupAdStyle.dark(), ) @Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") @@ -464,9 +546,89 @@ public fun ComponentStyling.dark( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = SpeedSearchStyle.dark(), searchMatchStyle = SearchMatchStyle.dark(), + popupAdStyle = PopupAdStyle.dark(), ) @Suppress("UnusedReceiverParameter") +public fun ComponentStyling.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(), + popupAdStyle: PopupAdStyle = PopupAdStyle.light(), +): ComponentStyling = + DefaultComponentStyling( + 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, + popupAdStyle = popupAdStyle, + ) + +@Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") +@Deprecated("Use the variant with popupAdTextStyle.", level = DeprecationLevel.HIDDEN) public fun ComponentStyling.light( checkboxStyle: CheckboxStyle = CheckboxStyle.light(), chipStyle: ChipStyle = ChipStyle.light(), @@ -540,6 +702,7 @@ public fun ComponentStyling.light( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = speedSearchStyle, searchMatchStyle = searchMatchStyle, + popupAdStyle = PopupAdStyle.light(), ) @Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") @@ -615,6 +778,7 @@ public fun ComponentStyling.light( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = SpeedSearchStyle.light(), searchMatchStyle = SearchMatchStyle.light(), + popupAdStyle = PopupAdStyle.light(), ) @Suppress("UnusedReceiverParameter", "DEPRECATION_ERROR") @@ -689,6 +853,7 @@ public fun ComponentStyling.light( undecoratedDropdownStyle = undecoratedDropdownStyle, speedSearchStyle = SpeedSearchStyle.light(), searchMatchStyle = SearchMatchStyle.light(), + popupAdStyle = PopupAdStyle.light(), ) @Composable diff --git a/platform/jewel/samples/showcase/api-dump.txt b/platform/jewel/samples/showcase/api-dump.txt index 4fdef35983bf1..907bffeb202f9 100644 --- a/platform/jewel/samples/showcase/api-dump.txt +++ b/platform/jewel/samples/showcase/api-dump.txt @@ -21,6 +21,7 @@ f:org.jetbrains.jewel.samples.showcase.ShowcaseIcons$Components - f:getCheckbox():org.jetbrains.jewel.ui.icon.PathIconKey - f:getComboBox():org.jetbrains.jewel.ui.icon.PathIconKey - f:getLinks():org.jetbrains.jewel.ui.icon.PathIconKey +- f:getMenu():org.jetbrains.jewel.ui.icon.PathIconKey - f:getProgressBar():org.jetbrains.jewel.ui.icon.PathIconKey - f:getRadioButton():org.jetbrains.jewel.ui.icon.PathIconKey - f:getScrollbar():org.jetbrains.jewel.ui.icon.PathIconKey @@ -57,6 +58,8 @@ f:org.jetbrains.jewel.samples.showcase.components.IconsKt - sf:Icons(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V f:org.jetbrains.jewel.samples.showcase.components.LinksKt - sf:Links(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V +f:org.jetbrains.jewel.samples.showcase.components.MenusKt +- sf:Menus(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V f:org.jetbrains.jewel.samples.showcase.components.ProgressBarKt - sf:ProgressBar(androidx.compose.ui.Modifier,androidx.compose.runtime.Composer,I,I):V f:org.jetbrains.jewel.samples.showcase.components.RadioButtonsKt 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..02bd15b92f536 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 @@ -24,6 +24,7 @@ public object ShowcaseIcons { public val checkbox: PathIconKey = PathIconKey("icons/components/checkBox.svg", ShowcaseIcons::class.java) public val comboBox: PathIconKey = PathIconKey("icons/components/comboBox.svg", ShowcaseIcons::class.java) public val links: PathIconKey = PathIconKey("icons/components/links.svg", ShowcaseIcons::class.java) + public val menu: PathIconKey = PathIconKey("icons/components/menu.svg", ShowcaseIcons::class.java) public val progressBar: PathIconKey = PathIconKey("icons/components/progressbar.svg", ShowcaseIcons::class.java) public val radioButton: PathIconKey = PathIconKey("icons/components/radioButton.svg", ShowcaseIcons::class.java) public val scrollbar: PathIconKey = PathIconKey("icons/components/scrollbar.svg", ShowcaseIcons::class.java) diff --git a/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Menus.kt b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Menus.kt new file mode 100644 index 0000000000000..f6c92e6eba03e --- /dev/null +++ b/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/Menus.kt @@ -0,0 +1,252 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.jewel.samples.showcase.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +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.unit.dp +import org.jetbrains.jewel.foundation.theme.JewelTheme +import org.jetbrains.jewel.ui.component.DefaultButton +import org.jetbrains.jewel.ui.component.GroupHeader +import org.jetbrains.jewel.ui.component.PopupMenu +import org.jetbrains.jewel.ui.component.Text +import org.jetbrains.jewel.ui.component.VerticallyScrollableContainer +import org.jetbrains.jewel.ui.component.separator +import org.jetbrains.jewel.ui.icons.AllIconsKeys +import org.jetbrains.jewel.ui.typography + +@Composable +public fun Menus(modifier: Modifier = Modifier) { + VerticallyScrollableContainer(modifier.fillMaxSize()) { + Column( + modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + verticalArrangement = Arrangement.spacedBy(24.dp), + ) { + BasicMenus() + MenusWithIcons() + MenusWithSubmenus() + MenusWithAdContent() + } + } +} + +@Composable +private fun BasicMenus() { + Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + GroupHeader("Basic menus") + + var showMenu by remember { mutableStateOf(false) } + var selectedItem by remember { mutableStateOf("Item 1") } + + Box { + DefaultButton(onClick = { showMenu = true }) { Text("Show Menu") } + + if (showMenu) { + PopupMenu( + onDismissRequest = { + showMenu = false + true + }, + horizontalAlignment = Alignment.Start, + ) { + selectableItem(selected = selectedItem == "Item 1", onClick = { selectedItem = "Item 1" }) { + Text("Item 1") + } + selectableItem(selected = selectedItem == "Item 2", onClick = { selectedItem = "Item 2" }) { + Text("Item 2") + } + separator() + selectableItem(selected = selectedItem == "Item 3", onClick = { selectedItem = "Item 3" }) { + Text("Item 3") + } + } + } + } + + Text("Selected: $selectedItem", color = JewelTheme.contentColor) + } +} + +@Composable +private fun MenusWithIcons() { + Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + GroupHeader("Menus with icons") + + var showMenu by remember { mutableStateOf(false) } + var selectedAction by remember { mutableStateOf("Copy") } + + Box { + DefaultButton(onClick = { showMenu = true }) { Text("Show Menu with Icons") } + + if (showMenu) { + PopupMenu( + onDismissRequest = { + showMenu = false + true + }, + horizontalAlignment = Alignment.Start, + ) { + selectableItem( + selected = selectedAction == "Copy", + onClick = { selectedAction = "Copy" }, + iconKey = AllIconsKeys.Actions.Copy, + keybinding = setOf("Ctrl", "C"), + ) { + Text("Copy") + } + selectableItem( + selected = selectedAction == "Paste", + onClick = { selectedAction = "Paste" }, + iconKey = AllIconsKeys.Actions.MenuPaste, + keybinding = setOf("Ctrl", "V"), + ) { + Text("Paste") + } + separator() + selectableItem( + selected = selectedAction == "Delete", + onClick = { selectedAction = "Delete" }, + iconKey = AllIconsKeys.Actions.GC, + keybinding = setOf("Delete"), + ) { + Text("Delete") + } + } + } + } + + Text("Last action: $selectedAction", color = JewelTheme.contentColor) + } +} + +@Composable +private fun MenusWithSubmenus() { + Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + GroupHeader("Menus with submenus") + + var showMenu by remember { mutableStateOf(false) } + var selectedItem by remember { mutableStateOf("None") } + + Box { + DefaultButton(onClick = { showMenu = true }) { Text("Show Menu with Submenus") } + + if (showMenu) { + PopupMenu( + onDismissRequest = { + showMenu = false + true + }, + horizontalAlignment = Alignment.Start, + ) { + selectableItem( + selected = selectedItem == "Direct Item", + onClick = { selectedItem = "Direct Item" }, + ) { + Text("Direct Item") + } + separator() + submenu( + iconKey = AllIconsKeys.General.ChevronRight, + submenu = { + selectableItem( + selected = selectedItem == "Submenu Item 1", + onClick = { selectedItem = "Submenu Item 1" }, + ) { + Text("Submenu Item 1") + } + selectableItem( + selected = selectedItem == "Submenu Item 2", + onClick = { selectedItem = "Submenu Item 2" }, + ) { + Text("Submenu Item 2") + } + separator() + submenu( + submenu = { + selectableItem( + selected = selectedItem == "Nested Item 1", + onClick = { selectedItem = "Nested Item 1" }, + ) { + Text("Nested Item 1") + } + selectableItem( + selected = selectedItem == "Nested Item 2", + onClick = { selectedItem = "Nested Item 2" }, + ) { + Text("Nested Item 2") + } + }, + content = { Text("Nested Submenu") }, + ) + }, + content = { Text("More Options") }, + ) + } + } + } + + Text("Selected: $selectedItem", color = JewelTheme.contentColor) + } +} + +@Composable +private fun MenusWithAdContent() { + Column(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) { + GroupHeader("Menus with ad content") + + var showMenu by remember { mutableStateOf(false) } + var selectedMode by remember { mutableStateOf("Standard") } + + Box { + DefaultButton(onClick = { showMenu = true }) { Text("Show Menu with Ad") } + + if (showMenu) { + PopupMenu( + onDismissRequest = { + showMenu = false + true + }, + horizontalAlignment = Alignment.Start, + adContent = { + Text( + text = "Tip: Use Ctrl+Space to quickly change modes", + style = JewelTheme.typography.small, + color = JewelTheme.globalColors.text.info, + ) + }, + ) { + selectableItem(selected = selectedMode == "Beginner", onClick = { selectedMode = "Beginner" }) { + Text("Beginner Mode") + } + selectableItem(selected = selectedMode == "Standard", onClick = { selectedMode = "Standard" }) { + Text("Standard Mode") + } + selectableItem(selected = selectedMode == "Advanced", onClick = { selectedMode = "Advanced" }) { + Text("Advanced Mode") + } + selectableItem(selected = selectedMode == "Expert", onClick = { selectedMode = "Expert" }) { + Text("Expert Mode") + } + selectableItem(selected = selectedMode == "Pro", onClick = { selectedMode = "Pro" }) { + Text("Pro Mode") + } + selectableItem(selected = selectedMode == "Admin", onClick = { selectedMode = "Admin" }) { + Text("Admin Mode") + } + } + } + } + + Text("Current mode: $selectedMode", color = JewelTheme.contentColor) + } +} 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..36a4aeeb581cf 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 @@ -17,6 +17,7 @@ import org.jetbrains.jewel.samples.showcase.components.ChipsAndTrees import org.jetbrains.jewel.samples.showcase.components.ComboBoxes import org.jetbrains.jewel.samples.showcase.components.Icons import org.jetbrains.jewel.samples.showcase.components.Links +import org.jetbrains.jewel.samples.showcase.components.Menus import org.jetbrains.jewel.samples.showcase.components.ProgressBar import org.jetbrains.jewel.samples.showcase.components.RadioButtons import org.jetbrains.jewel.samples.showcase.components.Scrollbars @@ -51,6 +52,7 @@ public class ComponentsViewModel( ), ViewInfo(title = "Checkboxes", iconKey = ShowcaseIcons.Components.checkbox, content = { Checkboxes() }), ViewInfo(title = "Combo Boxes", iconKey = ShowcaseIcons.Components.comboBox, content = { ComboBoxes() }), + ViewInfo(title = "Menus", iconKey = ShowcaseIcons.Components.menu, content = { Menus() }), ViewInfo(title = "Chips and trees", iconKey = ShowcaseIcons.Components.tree, content = { ChipsAndTrees() }), ViewInfo( title = "Progressbar", diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/components/menu.svg b/platform/jewel/samples/showcase/src/main/resources/icons/components/menu.svg new file mode 100644 index 0000000000000..f70028b895bda --- /dev/null +++ b/platform/jewel/samples/showcase/src/main/resources/icons/components/menu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/platform/jewel/samples/showcase/src/main/resources/icons/components/menu_dark.svg b/platform/jewel/samples/showcase/src/main/resources/icons/components/menu_dark.svg new file mode 100644 index 0000000000000..78d8fa1f0a5ab --- /dev/null +++ b/platform/jewel/samples/showcase/src/main/resources/icons/components/menu_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/platform/jewel/ui/api-dump.txt b/platform/jewel/ui/api-dump.txt index 30483656ee0d1..5ecd839a5ccba 100644 --- a/platform/jewel/ui/api-dump.txt +++ b/platform/jewel/ui/api-dump.txt @@ -13,7 +13,8 @@ f:org.jetbrains.jewel.ui.DefaultComponentStyling - org.jetbrains.jewel.ui.ComponentStyling - sf:$stable:I - 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 +- (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,org.jetbrains.jewel.ui.component.styling.PopupAdStyle):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:getCheckboxStyle():org.jetbrains.jewel.ui.component.styling.CheckboxStyle @@ -36,6 +37,7 @@ f:org.jetbrains.jewel.ui.DefaultComponentStyling - f:getMenuStyle():org.jetbrains.jewel.ui.component.styling.MenuStyle - f:getOutlinedButtonStyle():org.jetbrains.jewel.ui.component.styling.ButtonStyle - f:getOutlinedSplitButtonStyle():org.jetbrains.jewel.ui.component.styling.SplitButtonStyle +- f:getPopupAdStyle():org.jetbrains.jewel.ui.component.styling.PopupAdStyle - f:getPopupContainerStyle():org.jetbrains.jewel.ui.component.styling.PopupContainerStyle - f:getRadioButtonStyle():org.jetbrains.jewel.ui.component.styling.RadioButtonStyle - f:getScrollbarStyle():org.jetbrains.jewel.ui.component.styling.ScrollbarStyle @@ -533,8 +535,10 @@ f:org.jetbrains.jewel.ui.component.MenuItemState$Companion f:org.jetbrains.jewel.ui.component.MenuKt - sf:MenuSeparator(androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuItemMetrics,org.jetbrains.jewel.ui.component.styling.MenuItemColors,androidx.compose.runtime.Composer,I,I):V - sf:MenuSubmenuItem(androidx.compose.ui.Modifier,Z,Z,org.jetbrains.jewel.ui.icon.IconKey,androidx.compose.foundation.interaction.MutableInteractionSource,org.jetbrains.jewel.ui.component.styling.MenuStyle,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V -- sf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V -- sf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.window.PopupPositionProvider,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V +- bsf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V +- sf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V +- bsf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.window.PopupPositionProvider,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V +- sf:PopupMenu(kotlin.jvm.functions.Function1,androidx.compose.ui.window.PopupPositionProvider,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.MenuStyle,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function1,androidx.compose.runtime.Composer,I,I):V - sf:items(org.jetbrains.jewel.ui.component.MenuScope,I,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function3):V - sf:items(org.jetbrains.jewel.ui.component.MenuScope,java.util.List,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function3):V - sf:separator(org.jetbrains.jewel.ui.component.MenuScope):V @@ -558,8 +562,11 @@ org.jetbrains.jewel.ui.component.MenuScope - bs:selectableItemWithActionType$default(org.jetbrains.jewel.ui.component.MenuScope,Z,org.jetbrains.jewel.ui.icon.IconKey,org.jetbrains.jewel.ui.component.ContextMenuItemOptionAction,kotlin.jvm.functions.Function0,Z,kotlin.jvm.functions.Function2,I,java.lang.Object):V - a:submenu(Z,org.jetbrains.jewel.ui.icon.IconKey,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2):V - bs:submenu$default(org.jetbrains.jewel.ui.component.MenuScope,Z,org.jetbrains.jewel.ui.icon.IconKey,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,I,java.lang.Object):V +f:org.jetbrains.jewel.ui.component.PopupAdKt +- sf:PopupAd(androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.PopupAdStyle,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V f:org.jetbrains.jewel.ui.component.PopupContainerKt -- sf:PopupContainer(kotlin.jvm.functions.Function0,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,androidx.compose.ui.window.PopupProperties,androidx.compose.ui.window.PopupPositionProvider,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V +- bsf:PopupContainer(kotlin.jvm.functions.Function0,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,androidx.compose.ui.window.PopupProperties,androidx.compose.ui.window.PopupPositionProvider,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V +- sf:PopupContainer(kotlin.jvm.functions.Function0,androidx.compose.ui.Alignment$Horizontal,androidx.compose.ui.Modifier,org.jetbrains.jewel.ui.component.styling.PopupContainerStyle,androidx.compose.ui.window.PopupProperties,androidx.compose.ui.window.PopupPositionProvider,kotlin.jvm.functions.Function2,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V f:org.jetbrains.jewel.ui.component.PopupKt - sf:Popup(androidx.compose.ui.window.PopupPositionProvider,androidx.compose.foundation.shape.CornerSize,kotlin.jvm.functions.Function0,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V - sf:Popup(androidx.compose.ui.window.PopupPositionProvider,kotlin.jvm.functions.Function0,androidx.compose.ui.window.PopupProperties,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function2,androidx.compose.runtime.Composer,I,I):V @@ -1644,6 +1651,32 @@ f:org.jetbrains.jewel.ui.component.styling.MenuStyle f:org.jetbrains.jewel.ui.component.styling.MenuStyle$Companion f:org.jetbrains.jewel.ui.component.styling.MenuStylingKt - sf:getLocalMenuStyle():androidx.compose.runtime.ProvidableCompositionLocal +f:org.jetbrains.jewel.ui.component.styling.PopupAdColors +- sf:$stable:I +- sf:Companion:org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion +- equals(java.lang.Object):Z +- f:getBackground-0d7_KjU():J +- hashCode():I +f:org.jetbrains.jewel.ui.component.styling.PopupAdColors$Companion +f:org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +- sf:$stable:I +- sf:Companion:org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion +- equals(java.lang.Object):Z +- f:getMinHeight-D9Ej5fM():F +- f:getPadding():androidx.compose.foundation.layout.PaddingValues +- hashCode():I +f:org.jetbrains.jewel.ui.component.styling.PopupAdMetrics$Companion +f:org.jetbrains.jewel.ui.component.styling.PopupAdStyle +- sf:$stable:I +- sf:Companion:org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion +- (org.jetbrains.jewel.ui.component.styling.PopupAdColors,org.jetbrains.jewel.ui.component.styling.PopupAdMetrics):V +- equals(java.lang.Object):Z +- f:getColors():org.jetbrains.jewel.ui.component.styling.PopupAdColors +- f:getMetrics():org.jetbrains.jewel.ui.component.styling.PopupAdMetrics +- hashCode():I +f:org.jetbrains.jewel.ui.component.styling.PopupAdStyle$Companion +f:org.jetbrains.jewel.ui.component.styling.PopupAdStyleKt +- sf:getLocalPopupAdStyle():androidx.compose.runtime.ProvidableCompositionLocal f:org.jetbrains.jewel.ui.component.styling.PopupContainerColors - sf:$stable:I - sf:Companion:org.jetbrains.jewel.ui.component.styling.PopupContainerColors$Companion @@ -3964,6 +3997,7 @@ f:org.jetbrains.jewel.ui.theme.JewelThemeKt - sf:getMenuStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.MenuStyle - sf:getOutlinedButtonStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.ButtonStyle - sf:getOutlinedSplitButtonStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.SplitButtonStyle +- sf:getPopupAdStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.PopupAdStyle - sf:getPopupContainerStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.PopupContainerStyle - sf:getRadioButtonStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.RadioButtonStyle - sf:getScrollbarStyle(org.jetbrains.jewel.foundation.theme.JewelTheme$Companion,androidx.compose.runtime.Composer,I):org.jetbrains.jewel.ui.component.styling.ScrollbarStyle 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..11c021f70d985 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 @@ -42,6 +42,7 @@ import org.jetbrains.jewel.ui.component.styling.LocalLinkStyle import org.jetbrains.jewel.ui.component.styling.LocalMenuStyle import org.jetbrains.jewel.ui.component.styling.LocalOutlinedButtonStyle import org.jetbrains.jewel.ui.component.styling.LocalOutlinedSplitButtonStyle +import org.jetbrains.jewel.ui.component.styling.LocalPopupAdStyle import org.jetbrains.jewel.ui.component.styling.LocalPopupContainerStyle import org.jetbrains.jewel.ui.component.styling.LocalRadioButtonStyle import org.jetbrains.jewel.ui.component.styling.LocalScrollbarStyle @@ -58,6 +59,7 @@ import org.jetbrains.jewel.ui.component.styling.LocalTooltipStyle import org.jetbrains.jewel.ui.component.styling.LocalTransparentIconButtonStyle import org.jetbrains.jewel.ui.component.styling.LocalUndecoratedDropdownStyle import org.jetbrains.jewel.ui.component.styling.MenuStyle +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle import org.jetbrains.jewel.ui.component.styling.PopupContainerStyle import org.jetbrains.jewel.ui.component.styling.RadioButtonStyle import org.jetbrains.jewel.ui.component.styling.ScrollbarStyle @@ -73,6 +75,7 @@ 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.fallbackPopupAdStyle import org.jetbrains.jewel.ui.component.styling.fallbackSearchMatchStyle import org.jetbrains.jewel.ui.component.styling.fallbackSpeedSearchStyle @@ -114,7 +117,84 @@ public class DefaultComponentStyling( public val undecoratedDropdownStyle: DropdownStyle, public val speedSearchStyle: SpeedSearchStyle, public val searchMatchStyle: SearchMatchStyle, + public val popupAdStyle: PopupAdStyle, ) : ComponentStyling { + @Deprecated("Use the variant with popupAdStyle.", 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( + 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, + fallbackPopupAdStyle(), + ) + @Deprecated("Use the variant with speedSearchStyle.", level = DeprecationLevel.HIDDEN) public constructor( checkboxStyle: CheckboxStyle, @@ -186,6 +266,7 @@ public class DefaultComponentStyling( undecoratedDropdownStyle, fallbackSpeedSearchStyle(), fallbackSearchMatchStyle(), + fallbackPopupAdStyle(), ) @Deprecated("Use the variant with transparentIconButtonStyle.", level = DeprecationLevel.HIDDEN) @@ -258,6 +339,7 @@ public class DefaultComponentStyling( undecoratedDropdownStyle, fallbackSpeedSearchStyle(), fallbackSearchMatchStyle(), + fallbackPopupAdStyle(), ) @Composable @@ -300,6 +382,7 @@ public class DefaultComponentStyling( LocalUndecoratedDropdownStyle provides undecoratedDropdownStyle, LocalSpeedSearchStyle provides speedSearchStyle, LocalSearchMatchStyle provides searchMatchStyle, + LocalPopupAdStyle provides popupAdStyle, ) override fun equals(other: Any?): Boolean { @@ -343,6 +426,7 @@ public class DefaultComponentStyling( if (undecoratedDropdownStyle != other.undecoratedDropdownStyle) return false if (speedSearchStyle != other.speedSearchStyle) return false if (searchMatchStyle != other.searchMatchStyle) return false + if (popupAdStyle != other.popupAdStyle) return false return true } @@ -383,6 +467,7 @@ public class DefaultComponentStyling( result = 31 * result + undecoratedDropdownStyle.hashCode() result = 31 * result + speedSearchStyle.hashCode() result = 31 * result + searchMatchStyle.hashCode() + result = 31 * result + popupAdStyle.hashCode() return result } @@ -422,6 +507,7 @@ public class DefaultComponentStyling( "tooltipStyle=$tooltipStyle, " + "undecoratedDropdownStyle=$undecoratedDropdownStyle, " + "speedSearchStyle=$speedSearchStyle, " + - "searchMatchStyle=$searchMatchStyle" + + "searchMatchStyle=$searchMatchStyle," + + "popupAdStyle=$popupAdStyle" + ")" } diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt index 19ace84bffb7d..b79f0f64b0e25 100644 --- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt +++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt @@ -39,6 +39,7 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.FocusManager import androidx.compose.ui.focus.FocusRequester @@ -108,6 +109,7 @@ import org.jetbrains.skiko.hostOs * @param modifier Modifier to be applied to the menu container * @param style The visual styling configuration for the menu and its items * @param popupProperties Properties controlling the popup window behavior + * @param adContent Optional composable content to display ad content at the bottom * @param content The menu content builder using [MenuScope] * @see javax.swing.JPopupMenu */ @@ -118,6 +120,7 @@ public fun PopupMenu( modifier: Modifier = Modifier, style: MenuStyle = JewelTheme.menuStyle, popupProperties: PopupProperties = PopupProperties(focusable = true), + adContent: (@Composable () -> Unit)? = null, content: MenuScope.() -> Unit, ) { val density = LocalDensity.current @@ -132,7 +135,65 @@ public fun PopupMenu( ) } - PopupMenu(onDismissRequest, popupPositionProvider, modifier, style, popupProperties, content) + PopupMenuImpl( + onDismissRequest = onDismissRequest, + popupPositionProvider = popupPositionProvider, + modifier = modifier, + style = style, + popupProperties = popupProperties, + adContent = adContent, + content = content, + ) +} + +/** + * A popup menu component that follows the standard visual styling with customizable content. + * + * Provides a floating menu that can be used for context menus, dropdown menus, and other popup menu scenarios. The menu + * supports keyboard navigation, icons, keybindings, and nested submenus. + * + * **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/popups-and-menus.html) + * + * **Swing equivalent:** [`JPopupMenu`](https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#popup) + * + * @param onDismissRequest Called when the menu should be dismissed, returns true if the dismissal was handled + * @param horizontalAlignment The horizontal alignment of the menu relative to its anchor point + * @param modifier Modifier to be applied to the menu container + * @param style The visual styling configuration for the menu and its items + * @param popupProperties Properties controlling the popup window behavior + * @param content The menu content builder using [MenuScope] + * @see javax.swing.JPopupMenu + */ +@Composable +@Deprecated("Use the variant with adContent.", level = DeprecationLevel.HIDDEN) +public fun PopupMenu( + onDismissRequest: (InputMode) -> Boolean, + horizontalAlignment: Alignment.Horizontal, + modifier: Modifier = Modifier, + style: MenuStyle = JewelTheme.menuStyle, + popupProperties: PopupProperties = PopupProperties(focusable = true), + content: MenuScope.() -> Unit, +) { + val density = LocalDensity.current + + val popupPositionProvider = + remember(style.metrics.offset, style.metrics.menuMargin, horizontalAlignment, density) { + AnchorVerticalMenuPositionProvider( + contentOffset = style.metrics.offset, + contentMargin = style.metrics.menuMargin, + alignment = horizontalAlignment, + density = density, + ) + } + + PopupMenuImpl( + onDismissRequest = onDismissRequest, + popupPositionProvider = popupPositionProvider, + modifier = modifier, + style = style, + popupProperties = popupProperties, + content = content, + ) } /** @@ -150,6 +211,7 @@ public fun PopupMenu( * @param modifier Modifier to be applied to the menu container * @param style The visual styling configuration for the menu and its items * @param popupProperties Properties controlling the popup window behavior + * @param adContent Optional composable content to display ad content at the bottom * @param content The menu content builder using [MenuScope] * @see javax.swing.JPopupMenu */ @@ -160,6 +222,66 @@ public fun PopupMenu( modifier: Modifier = Modifier, style: MenuStyle = JewelTheme.menuStyle, popupProperties: PopupProperties = PopupProperties(focusable = true), + adContent: (@Composable () -> Unit)? = null, + content: MenuScope.() -> Unit, +) { + PopupMenuImpl( + onDismissRequest = onDismissRequest, + popupPositionProvider = popupPositionProvider, + modifier = modifier, + style = style, + popupProperties = popupProperties, + adContent = adContent, + content = content, + ) +} + +/** + * A popup menu component that follows the standard visual styling with customizable content. + * + * Provides a floating menu that can be used for context menus, dropdown menus, and other popup menu scenarios. The menu + * supports keyboard navigation, icons, keybindings, and nested submenus. + * + * **Guidelines:** [on IJP SDK webhelp](https://plugins.jetbrains.com/docs/intellij/popups-and-menus.html) + * + * **Swing equivalent:** [`JPopupMenu`](https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#popup) + * + * @param onDismissRequest Called when the menu should be dismissed, returns true if the dismissal was handled + * @param popupPositionProvider Determines the position of the popup menu on the screen. + * @param modifier Modifier to be applied to the menu container + * @param style The visual styling configuration for the menu and its items + * @param popupProperties Properties controlling the popup window behavior + * @param content The menu content builder using [MenuScope] + * @see javax.swing.JPopupMenu + */ +@Composable +@Deprecated("Use the variant with adContent.", level = DeprecationLevel.HIDDEN) +public fun PopupMenu( + onDismissRequest: (InputMode) -> Boolean, + popupPositionProvider: PopupPositionProvider, + modifier: Modifier = Modifier, + style: MenuStyle = JewelTheme.menuStyle, + popupProperties: PopupProperties = PopupProperties(focusable = true), + content: MenuScope.() -> Unit, +) { + PopupMenuImpl( + onDismissRequest = onDismissRequest, + popupPositionProvider = popupPositionProvider, + modifier = modifier, + style = style, + popupProperties = popupProperties, + content = content, + ) +} + +@Composable +private fun PopupMenuImpl( + onDismissRequest: (InputMode) -> Boolean, + popupPositionProvider: PopupPositionProvider, + modifier: Modifier = Modifier, + style: MenuStyle = JewelTheme.menuStyle, + popupProperties: PopupProperties = PopupProperties(focusable = true), + adContent: (@Composable () -> Unit)? = null, content: MenuScope.() -> Unit, ) { var focusManager: FocusManager? by remember { mutableStateOf(null) } @@ -186,7 +308,7 @@ public fun PopupMenu( OverrideDarkMode(style.isDark) { CompositionLocalProvider(LocalMenuController provides menuController, LocalMenuStyle provides style) { - MenuContent(modifier = modifier, content = content) + MenuContent(modifier = modifier, adContent = adContent, content = content) } } } @@ -199,6 +321,7 @@ public fun PopupMenu( public fun MenuContent( modifier: Modifier = Modifier, style: MenuStyle = JewelTheme.menuStyle, + adContent: (@Composable () -> Unit)? = null, content: MenuScope.() -> Unit, ) { val items by remember(content) { derivedStateOf { content.asList() } } @@ -247,17 +370,21 @@ public fun MenuContent( .width(IntrinsicSize.Max) .onHover { localMenuController.onHoveredChange(it) } ) { - Column(Modifier.verticalScroll(scrollState).padding(style.metrics.contentPadding)) { - var selectedSubMenu by remember { mutableStateOf(null) } - items.forEach { item -> - MenuItem( - item = item, - showIcons = anyItemHasIcon, - showKeybindings = anyItemHasKeybinding, - selectedSubMenu = selectedSubMenu, - setSelectedSubMenu = { selectedSubMenu = it }, - ) + Column(Modifier.clip(menuShape).verticalScroll(scrollState)) { + Column(Modifier.padding(style.metrics.contentPadding)) { + var selectedSubMenu by remember { mutableStateOf(null) } + items.forEach { item -> + MenuItem( + item = item, + showIcons = anyItemHasIcon, + showKeybindings = anyItemHasKeybinding, + selectedSubMenu = selectedSubMenu, + setSelectedSubMenu = { selectedSubMenu = it }, + ) + } } + + adContent?.let { PopupAd(modifier = Modifier.fillMaxWidth()) { it() } } } Box(modifier = Modifier.matchParentSize()) { diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupAd.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupAd.kt new file mode 100644 index 0000000000000..884b9bc107c19 --- /dev/null +++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupAd.kt @@ -0,0 +1,47 @@ +// 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.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.jetbrains.jewel.foundation.theme.JewelTheme +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle +import org.jetbrains.jewel.ui.theme.popupAdStyle + +/** + * A composable that provides a styled container for supplementary content at the bottom of popups, similar to + * IntelliJ's + * [`AbstractPopup.setAdText(String)`](https://github.com/JetBrains/intellij-community/blob/master/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java#L464) + * + * This component is typically used to display hints, shortcuts, or additional information in popup menus and combo + * boxes. + * + * **Usage example:** + * [`ComboBoxes.kt`](https://github.com/JetBrains/intellij-community/blob/master/platform/jewel/samples/showcase/src/main/kotlin/org/jetbrains/jewel/samples/showcase/components/ComboBoxes.kt) + * + * @param modifier The modifier to be applied to the container. + * @param style The style to apply to the container. Defaults to the theme's popup ad style. + * @param content The content to display inside the container. + */ +@Composable +public fun PopupAd( + modifier: Modifier = Modifier, + style: PopupAdStyle = JewelTheme.popupAdStyle, + content: @Composable () -> Unit, +) { + val colors = style.colors + val metrics = style.metrics + + Box( + modifier = + modifier + .background(colors.background) + .defaultMinSize(minHeight = metrics.minHeight) + .padding(metrics.padding) + ) { + content() + } +} diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupContainer.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupContainer.kt index b98d0695e4c80..bfdd4c624b1c2 100644 --- a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupContainer.kt +++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/PopupContainer.kt @@ -1,7 +1,8 @@ package org.jetbrains.jewel.ui.component import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -16,6 +17,36 @@ import org.jetbrains.jewel.ui.component.styling.PopupContainerStyle import org.jetbrains.jewel.ui.popupShadowAndBorder import org.jetbrains.jewel.ui.theme.popupContainerStyle +/** + * A reusable popup container that provides standard visual styling for floating content. + * + * Creates a popup window with configurable positioning, appearance, and optional advertising content at the bottom. The + * container automatically applies shadows, borders, rounded corners, and background colors based on the provided style, + * ensuring visual consistency across the application. + * + * **Usage example:** + * + * ```kotlin + * PopupContainer( + * onDismissRequest = { /* handle dismiss */ }, + * horizontalAlignment = Alignment.Start, + * adContent = { Text("Tip: Use Ctrl+Space for suggestions") } + * ) { + * // Your popup content here + * Text("Popup content") + * } + * ``` + * + * @param onDismissRequest Called when the popup should be dismissed (e.g., clicking outside or pressing Esc) + * @param horizontalAlignment The horizontal alignment of the popup relative to its anchor point + * @param modifier Modifier to be applied to the container + * @param style The visual styling configuration for the popup container + * @param popupProperties Properties controlling the popup window behavior + * @param popupPositionProvider Determines the position of the popup on the screen + * @param adContent Optional composable content to display at the bottom of the popup, typically used for hints or + * promotional messages + * @param content The main content to display inside the popup container + */ @Composable public fun PopupContainer( onDismissRequest: () -> Unit, @@ -30,6 +61,7 @@ public fun PopupContainer( alignment = horizontalAlignment, density = LocalDensity.current, ), + adContent: (@Composable () -> Unit)? = null, content: @Composable () -> Unit, ) { Popup( @@ -42,7 +74,7 @@ public fun PopupContainer( val colors = style.colors val popupShape = RoundedCornerShape(style.metrics.cornerSize) - Box( + Column( modifier = modifier .popupShadowAndBorder( @@ -56,7 +88,37 @@ public fun PopupContainer( .clip(popupShape) ) { content() + + adContent?.let { PopupAd(modifier = Modifier.fillMaxWidth()) { it() } } } } } } + +@Composable +@Deprecated(message = "Deprecated in favor of the method with 'adContent' parameter", level = DeprecationLevel.HIDDEN) +public fun PopupContainer( + onDismissRequest: () -> Unit, + horizontalAlignment: Alignment.Horizontal, + modifier: Modifier = Modifier, + style: PopupContainerStyle = JewelTheme.popupContainerStyle, + popupProperties: PopupProperties = PopupProperties(focusable = true), + popupPositionProvider: PopupPositionProvider = + AnchorVerticalMenuPositionProvider( + contentOffset = style.metrics.offset, + contentMargin = style.metrics.menuMargin, + alignment = horizontalAlignment, + density = LocalDensity.current, + ), + content: @Composable () -> Unit, +) { + PopupContainer( + onDismissRequest = onDismissRequest, + horizontalAlignment = horizontalAlignment, + modifier = modifier, + style = style, + popupProperties = popupProperties, + popupPositionProvider = popupPositionProvider, + content = content, + ) +} diff --git a/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/PopupAdStyle.kt b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/PopupAdStyle.kt new file mode 100644 index 0000000000000..7b0d419196ced --- /dev/null +++ b/platform/jewel/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/PopupAdStyle.kt @@ -0,0 +1,96 @@ +// 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.styling + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.ProvidableCompositionLocal +import androidx.compose.runtime.Stable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import org.jetbrains.jewel.foundation.GenerateDataFunctions + +@Stable +@GenerateDataFunctions +public class PopupAdStyle(public val colors: PopupAdColors, public val metrics: PopupAdMetrics) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PopupAdStyle + + 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 = "PopupAdStyle(colors=$colors, metrics=$metrics)" + + public companion object +} + +@Immutable +@GenerateDataFunctions +public class PopupAdColors(public val background: Color) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PopupAdColors + + if (background != other.background) return false + + return true + } + + override fun hashCode(): Int = background.hashCode() + + override fun toString(): String = "PopupAdColors(background=$background)" + + public companion object +} + +@Stable +@GenerateDataFunctions +public class PopupAdMetrics(public val padding: PaddingValues, public val minHeight: Dp) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PopupAdMetrics + + if (padding != other.padding) return false + if (minHeight != other.minHeight) return false + + return true + } + + override fun hashCode(): Int { + var result = padding.hashCode() + result = 31 * result + minHeight.hashCode() + return result + } + + override fun toString(): String = "PopupAdMetrics(padding=$padding, minHeight=$minHeight)" + + public companion object +} + +public val LocalPopupAdStyle: ProvidableCompositionLocal = staticCompositionLocalOf { + error("No PopupAdStyle provided. Have you forgotten the theme?") +} + +/** Creating a fallback style for compatibility with older versions. */ +internal fun fallbackPopupAdStyle() = + PopupAdStyle( + colors = PopupAdColors(background = Color(0xFFF2F2F2)), + metrics = PopupAdMetrics(padding = PaddingValues(horizontal = 20.dp, vertical = 6.dp), minHeight = 20.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..98b904fbea6bf 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 @@ -51,6 +51,7 @@ import org.jetbrains.jewel.ui.component.styling.LocalLinkStyle import org.jetbrains.jewel.ui.component.styling.LocalMenuStyle import org.jetbrains.jewel.ui.component.styling.LocalOutlinedButtonStyle import org.jetbrains.jewel.ui.component.styling.LocalOutlinedSplitButtonStyle +import org.jetbrains.jewel.ui.component.styling.LocalPopupAdStyle import org.jetbrains.jewel.ui.component.styling.LocalPopupContainerStyle import org.jetbrains.jewel.ui.component.styling.LocalRadioButtonStyle import org.jetbrains.jewel.ui.component.styling.LocalScrollbarStyle @@ -66,6 +67,7 @@ import org.jetbrains.jewel.ui.component.styling.LocalTextFieldStyle import org.jetbrains.jewel.ui.component.styling.LocalTooltipStyle import org.jetbrains.jewel.ui.component.styling.LocalTransparentIconButtonStyle import org.jetbrains.jewel.ui.component.styling.MenuStyle +import org.jetbrains.jewel.ui.component.styling.PopupAdStyle import org.jetbrains.jewel.ui.component.styling.PopupContainerStyle import org.jetbrains.jewel.ui.component.styling.RadioButtonStyle import org.jetbrains.jewel.ui.component.styling.ScrollbarStyle @@ -196,6 +198,9 @@ public val JewelTheme.Companion.speedSearchStyle: SpeedSearchStyle public val JewelTheme.Companion.searchMatchStyle: SearchMatchStyle @Composable @ReadOnlyComposable get() = LocalSearchMatchStyle.current +public val JewelTheme.Companion.popupAdStyle: PopupAdStyle + @Composable @ReadOnlyComposable get() = LocalPopupAdStyle.current + @Composable public fun BaseJewelTheme(theme: ThemeDefinition, styling: ComponentStyling, content: @Composable () -> Unit) { BaseJewelTheme(theme, styling, swingCompatMode = false, content)