From 3f8aab6685221fb8885b1a2cc33198db2e84857e Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Sun, 22 Oct 2023 13:39:02 +0100 Subject: [PATCH 1/5] Clean up code, add simple IntUiTheme entry point Moved foundation.tree into foundation.lazy, too. --- .../jetbrains/jewel/window/DecoratedWindow.kt | 2 +- .../jetbrains/jewel/window/TitleBar.Linux.kt | 9 +- .../jetbrains/jewel/window/TitleBar.MacOS.kt | 3 +- .../jewel/window/TitleBar.Windows.kt | 3 +- .../org/jetbrains/jewel/window/TitleBar.kt | 6 +- foundation/api/foundation.api | 554 +++++++++--------- .../foundation/lazy/SelectableLazyColumn.kt | 8 +- .../{ => lazy}/tree/BasicLazyTree.kt | 2 +- .../foundation/{ => lazy}/tree/BuildTree.kt | 2 +- .../tree/DefaultTreeViewKeybindings.kt | 2 +- .../tree/DefaultTreeViewOnKeyEvent.kt | 2 +- .../{ => lazy}/tree/KeyBindingActions.kt | 2 +- .../jewel/foundation/{ => lazy}/tree/Tree.kt | 4 +- .../foundation/{ => lazy}/tree/TreeState.kt | 2 +- .../{ => lazy}/tree/TreeViewOnKeyEvent.kt | 2 +- .../jewel/foundation/{ => modifier}/Border.kt | 6 +- .../api/int-ui-standalone.api | 1 + .../styling/IntUiCheckboxStyling.kt | 8 +- .../intui/standalone/theme/IntUiTheme.kt | 21 + .../samples/ideplugin/ComponentShowcaseTab.kt | 11 +- .../samples/standalone/components/Borders.kt | 2 +- .../standalone/components/ChipsAndTree.kt | 2 +- ui/api/ui.api | 4 +- .../kotlin/org/jetbrains/jewel/ui/Outline.kt | 2 +- .../jetbrains/jewel/ui/component/Button.kt | 2 +- .../org/jetbrains/jewel/ui/component/Chip.kt | 2 +- .../jetbrains/jewel/ui/component/Dropdown.kt | 2 +- .../jewel/ui/component/InputField.kt | 2 +- .../jetbrains/jewel/ui/component/LazyTree.kt | 14 +- .../org/jetbrains/jewel/ui/component/Menu.kt | 2 +- .../ui/component/styling/LazyTreeStyling.kt | 2 +- 31 files changed, 359 insertions(+), 327 deletions(-) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/BasicLazyTree.kt (99%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/BuildTree.kt (99%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/DefaultTreeViewKeybindings.kt (98%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/DefaultTreeViewOnKeyEvent.kt (98%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/KeyBindingActions.kt (99%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/Tree.kt (97%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/TreeState.kt (96%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => lazy}/tree/TreeViewOnKeyEvent.kt (91%) rename foundation/src/main/kotlin/org/jetbrains/jewel/foundation/{ => modifier}/Border.kt (98%) diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/DecoratedWindow.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/DecoratedWindow.kt index 9f3ea21d3..521e0e795 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/DecoratedWindow.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/DecoratedWindow.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState import com.jetbrains.JBR import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.window.styling.DecoratedWindowStyle import org.jetbrains.jewel.window.utils.DesktopPlatform diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Linux.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Linux.kt index 6e05f29c2..839882a16 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Linux.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Linux.kt @@ -26,7 +26,8 @@ import java.awt.Frame import java.awt.event.MouseEvent import java.awt.event.WindowEvent -@Composable internal fun DecoratedWindowScope.TitleBarOnLinux( +@Composable +internal fun DecoratedWindowScope.TitleBarOnLinux( modifier: Modifier = Modifier, gradientStartColor: Color = Color.Unspecified, style: TitleBarStyle = JewelTheme.defaultTitleBarStyle, @@ -72,7 +73,8 @@ import java.awt.event.WindowEvent } } -@Composable private fun TitleBarScope.CloseButton( +@Composable +private fun TitleBarScope.CloseButton( onClick: () -> Unit, state: DecoratedWindowState, style: TitleBarStyle = JewelTheme.defaultTitleBarStyle, @@ -80,7 +82,8 @@ import java.awt.event.WindowEvent ControlButton(onClick, state, style.icons.closeButton, "Close", style, style.paneCloseButtonStyle) } -@Composable private fun TitleBarScope.ControlButton( +@Composable +private fun TitleBarScope.ControlButton( onClick: () -> Unit, state: DecoratedWindowState, painterProvider: PainterProvider, diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.MacOS.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.MacOS.kt index 6b5397c54..d81074faa 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.MacOS.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.MacOS.kt @@ -55,7 +55,8 @@ private class NewFullscreenControlsNode( var newControls: Boolean, ) : Modifier.Node() -@Composable internal fun DecoratedWindowScope.TitleBarOnMacOs( +@Composable +internal fun DecoratedWindowScope.TitleBarOnMacOs( modifier: Modifier = Modifier, gradientStartColor: Color = Color.Unspecified, style: TitleBarStyle = JewelTheme.defaultTitleBarStyle, diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Windows.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Windows.kt index f7185c64c..6897c351b 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Windows.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.Windows.kt @@ -17,7 +17,8 @@ import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.ui.util.isDark import org.jetbrains.jewel.window.styling.TitleBarStyle -@Composable internal fun DecoratedWindowScope.TitleBarOnWindows( +@Composable +internal fun DecoratedWindowScope.TitleBarOnWindows( modifier: Modifier = Modifier, gradientStartColor: Color = Color.Unspecified, style: TitleBarStyle = JewelTheme.defaultTitleBarStyle, diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.kt index 63d95f77d..4a2a8174c 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/TitleBar.kt @@ -70,7 +70,8 @@ internal const val TITLE_BAR_BORDER_LAYOUT_ID = "__TITLE_BAR_BORDER__" } } -@Composable internal fun DecoratedWindowScope.TitleBarImpl( +@Composable +internal fun DecoratedWindowScope.TitleBarImpl( modifier: Modifier = Modifier, gradientStartColor: Color = Color.Unspecified, style: TitleBarStyle = JewelTheme.defaultTitleBarStyle, @@ -224,7 +225,8 @@ internal class TitleBarMeasurePolicy( } } -@Composable internal fun rememberTitleBarMeasurePolicy( +@Composable +internal fun rememberTitleBarMeasurePolicy( window: Window, state: DecoratedWindowState, applyTitleBar: (Dp, DecoratedWindowState) -> PaddingValues, diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index 8fa1c415f..e2173d4ea 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -13,14 +13,6 @@ public final class org/jetbrains/jewel/foundation/BorderColors { public final class org/jetbrains/jewel/foundation/BorderColors$Companion { } -public final class org/jetbrains/jewel/foundation/BorderKt { - public static final fun border (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; - public static final fun border-AkepmR4 (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;F)Landroidx/compose/ui/Modifier; - public static synthetic fun border-AkepmR4$default (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; - public static final fun border-QWjY48E (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FJLandroidx/compose/ui/graphics/Shape;F)Landroidx/compose/ui/Modifier; - public static synthetic fun border-QWjY48E$default (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FJLandroidx/compose/ui/graphics/Shape;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; -} - public final class org/jetbrains/jewel/foundation/CompatibilityKt { public static final fun enableNewSwingCompositing ()V } @@ -248,7 +240,7 @@ public final class org/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEven } public final class org/jetbrains/jewel/foundation/lazy/SelectableLazyColumnKt { - public static final fun SelectableLazyColumn (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLkotlin/jvm/functions/Function1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;Lorg/jetbrains/jewel/foundation/tree/KeyBindingActions;Lorg/jetbrains/jewel/foundation/tree/PointerEventActions;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V + public static final fun SelectableLazyColumn (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLkotlin/jvm/functions/Function1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;Lorg/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions;Lorg/jetbrains/jewel/foundation/lazy/tree/PointerEventActions;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V } public abstract interface class org/jetbrains/jewel/foundation/lazy/SelectableLazyItemScope : androidx/compose/foundation/lazy/LazyItemScope { @@ -333,187 +325,35 @@ public final class org/jetbrains/jewel/foundation/lazy/SelectionMode : java/lang public static fun values ()[Lorg/jetbrains/jewel/foundation/lazy/SelectionMode; } -public final class org/jetbrains/jewel/foundation/modifier/OnHoverModifierKt { - public static final fun onHover (Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -} - -public final class org/jetbrains/jewel/foundation/state/CommonStateBitMask { - public static final field $stable I - public static final field FIRST_AVAILABLE_OFFSET I - public static final field INSTANCE Lorg/jetbrains/jewel/foundation/state/CommonStateBitMask; - public final fun getActive-s-VKNKU ()J - public final fun getEnabled-s-VKNKU ()J - public final fun getFocused-s-VKNKU ()J - public final fun getHovered-s-VKNKU ()J - public final fun getIndeterminate-s-VKNKU ()J - public final fun getPressed-s-VKNKU ()J - public final fun getSelected-s-VKNKU ()J -} - -public abstract interface class org/jetbrains/jewel/foundation/state/FocusableComponentState : org/jetbrains/jewel/foundation/state/InteractiveComponentState { - public abstract fun chooseValue (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; - public abstract fun isFocused ()Z -} - -public final class org/jetbrains/jewel/foundation/state/FocusableComponentState$DefaultImpls { - public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/FocusableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; -} - -public abstract interface class org/jetbrains/jewel/foundation/state/InteractiveComponentState { - public abstract fun isActive ()Z - public abstract fun isEnabled ()Z - public abstract fun isHovered ()Z - public abstract fun isPressed ()Z -} - -public abstract interface class org/jetbrains/jewel/foundation/state/SelectableComponentState : org/jetbrains/jewel/foundation/state/FocusableComponentState { - public abstract fun isSelected ()Z -} - -public final class org/jetbrains/jewel/foundation/state/SelectableComponentState$DefaultImpls { - public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/SelectableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; -} - -public abstract interface class org/jetbrains/jewel/foundation/state/ToggleableComponentState : org/jetbrains/jewel/foundation/state/SelectableComponentState { - public static final field Companion Lorg/jetbrains/jewel/foundation/state/ToggleableComponentState$Companion; - public abstract fun getToggleableState ()Landroidx/compose/ui/state/ToggleableState; -} - -public final class org/jetbrains/jewel/foundation/state/ToggleableComponentState$Companion { - public final fun readToggleableState-VKZWuLQ (J)Landroidx/compose/ui/state/ToggleableState; -} - -public final class org/jetbrains/jewel/foundation/state/ToggleableComponentState$DefaultImpls { - public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/ToggleableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; -} - -public abstract interface class org/jetbrains/jewel/foundation/theme/JewelTheme { - public static final field Companion Lorg/jetbrains/jewel/foundation/theme/JewelTheme$Companion; -} - -public final class org/jetbrains/jewel/foundation/theme/JewelTheme$Companion { - public final fun getContentColor (Landroidx/compose/runtime/Composer;I)J - public final fun getGlobalColors (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalColors; - public final fun getGlobalMetrics (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalMetrics; - public final fun getTextStyle (Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/TextStyle; - public final fun isDark (Landroidx/compose/runtime/Composer;I)Z - public final fun isSwingCompatMode (Landroidx/compose/runtime/Composer;I)Z -} - -public final class org/jetbrains/jewel/foundation/theme/JewelThemeKt { - public static final fun JewelTheme (Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V - public static final fun JewelTheme (Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V - public static final fun OverrideDarkMode (ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V - public static final fun getLocalColorPalette ()Landroidx/compose/runtime/ProvidableCompositionLocal; - public static final fun getLocalContentColor ()Landroidx/compose/runtime/ProvidableCompositionLocal; - public static final fun getLocalIconData ()Landroidx/compose/runtime/ProvidableCompositionLocal; - public static final fun getLocalTextStyle ()Landroidx/compose/runtime/ProvidableCompositionLocal; -} - -public final class org/jetbrains/jewel/foundation/theme/ThemeColorPalette { - public static final field $stable I - public static final field Companion Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette$Companion; - public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;)V - public final fun blue-vNxB06k (I)J - public final fun blueOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public fun equals (Ljava/lang/Object;)Z - public final fun getBlue ()Ljava/util/List; - public final fun getGreen ()Ljava/util/List; - public final fun getGrey ()Ljava/util/List; - public final fun getOrange ()Ljava/util/List; - public final fun getPurple ()Ljava/util/List; - public final fun getRawMap ()Ljava/util/Map; - public final fun getRed ()Ljava/util/List; - public final fun getTeal ()Ljava/util/List; - public final fun getYellow ()Ljava/util/List; - public final fun green-vNxB06k (I)J - public final fun greenOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public final fun grey-vNxB06k (I)J - public final fun greyOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public fun hashCode ()I - public final fun lookup-ijrfgN4 (Ljava/lang/String;)Landroidx/compose/ui/graphics/Color; - public final fun orange-vNxB06k (I)J - public final fun orangeOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public final fun purple-vNxB06k (I)J - public final fun purpleOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public final fun red-vNxB06k (I)J - public final fun redOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public final fun teal-vNxB06k (I)J - public final fun tealOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; - public fun toString ()Ljava/lang/String; - public final fun yellow-vNxB06k (I)J - public final fun yellowOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; -} - -public final class org/jetbrains/jewel/foundation/theme/ThemeColorPalette$Companion { - public final fun getEmpty ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; -} - -public final class org/jetbrains/jewel/foundation/theme/ThemeDefinition { - public static final field $stable I - public synthetic fun (ZLorg/jetbrains/jewel/foundation/GlobalColors;Lorg/jetbrains/jewel/foundation/GlobalMetrics;Landroidx/compose/ui/text/TextStyle;JLorg/jetbrains/jewel/foundation/theme/ThemeColorPalette;Lorg/jetbrains/jewel/foundation/theme/ThemeIconData;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun equals (Ljava/lang/Object;)Z - public final fun getColorPalette ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; - public final fun getContentColor-0d7_KjU ()J - public final fun getDefaultTextStyle ()Landroidx/compose/ui/text/TextStyle; - public final fun getGlobalColors ()Lorg/jetbrains/jewel/foundation/GlobalColors; - public final fun getGlobalMetrics ()Lorg/jetbrains/jewel/foundation/GlobalMetrics; - public final fun getIconData ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; - public fun hashCode ()I - public final fun isDark ()Z - public fun toString ()Ljava/lang/String; -} - -public abstract interface class org/jetbrains/jewel/foundation/theme/ThemeDescriptor { - public abstract fun getColors ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; - public abstract fun getIconData ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; - public abstract fun getName ()Ljava/lang/String; - public abstract fun isDark ()Z -} - -public final class org/jetbrains/jewel/foundation/theme/ThemeIconData { - public static final field $stable I - public static final field Companion Lorg/jetbrains/jewel/foundation/theme/ThemeIconData$Companion; - public fun (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V - public final fun getColorPalette ()Ljava/util/Map; - public final fun getIconOverrides ()Ljava/util/Map; - public final fun getSelectionColorPalette ()Ljava/util/Map; - public final fun selectionColorMapping ()Ljava/util/Map; -} - -public final class org/jetbrains/jewel/foundation/theme/ThemeIconData$Companion { - public final fun getEmpty ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; -} - -public final class org/jetbrains/jewel/foundation/tree/BasicLazyTreeKt { - public static final fun BasicLazyTree-orM9XXQ (Lorg/jetbrains/jewel/foundation/tree/Tree;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Lkotlin/jvm/functions/Function1;JJJFLandroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FFLorg/jetbrains/jewel/foundation/tree/TreeState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;JLorg/jetbrains/jewel/foundation/tree/KeyBindingActions;Lorg/jetbrains/jewel/foundation/tree/PointerEventActions;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;IIII)V +public final class org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTreeKt { + public static final fun BasicLazyTree-orM9XXQ (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Lkotlin/jvm/functions/Function1;JJJFLandroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FFLorg/jetbrains/jewel/foundation/lazy/tree/TreeState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;JLorg/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions;Lorg/jetbrains/jewel/foundation/lazy/tree/PointerEventActions;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;IIII)V } -public final class org/jetbrains/jewel/foundation/tree/BuildTreeKt { - public static final fun asTree (Ljava/io/File;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/tree/Tree; - public static final fun asTree (Ljava/nio/file/Path;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/tree/Tree; - public static synthetic fun asTree$default (Ljava/io/File;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/Tree; - public static synthetic fun asTree$default (Ljava/nio/file/Path;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/Tree; - public static final fun buildTree (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/tree/Tree; +public final class org/jetbrains/jewel/foundation/lazy/tree/BuildTreeKt { + public static final fun asTree (Ljava/io/File;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; + public static final fun asTree (Ljava/nio/file/Path;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; + public static synthetic fun asTree$default (Ljava/io/File;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; + public static synthetic fun asTree$default (Ljava/nio/file/Path;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; + public static final fun buildTree (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; } -public final class org/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope : org/jetbrains/jewel/foundation/tree/TreeGeneratorScope { +public final class org/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope : org/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope { public static final field $stable I - public fun (Lorg/jetbrains/jewel/foundation/tree/Tree$Element$Node;)V - public fun add (Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element;)V + public fun (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element$Node;)V + public fun add (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element;)V public fun addLeaf (Ljava/lang/Object;Ljava/lang/Object;)V public fun addNode (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V - public final fun getParent ()Lorg/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$ParentInfo; + public final fun getParent ()Lorg/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope$ParentInfo; } -public final class org/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$ParentInfo { +public final class org/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope$ParentInfo { public static final field $stable I public fun (Ljava/lang/Object;II)V public final fun component1 ()Ljava/lang/Object; public final fun component2 ()I public final fun component3 ()I - public final fun copy (Ljava/lang/Object;II)Lorg/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$ParentInfo; - public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$ParentInfo;Ljava/lang/Object;IIILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$ParentInfo; + public final fun copy (Ljava/lang/Object;II)Lorg/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope$ParentInfo; + public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope$ParentInfo;Ljava/lang/Object;IIILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/ChildrenGeneratorScope$ParentInfo; public fun equals (Ljava/lang/Object;)Z public final fun getData ()Ljava/lang/Object; public final fun getDepth ()I @@ -522,18 +362,18 @@ public final class org/jetbrains/jewel/foundation/tree/ChildrenGeneratorScope$Pa public fun toString ()Ljava/lang/String; } -public class org/jetbrains/jewel/foundation/tree/DefaultMacOsTreeColumnKeybindings : org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings { +public class org/jetbrains/jewel/foundation/lazy/tree/DefaultMacOsTreeColumnKeybindings : org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings { public static final field $stable I - public static final field Companion Lorg/jetbrains/jewel/foundation/tree/DefaultMacOsTreeColumnKeybindings$Companion; + public static final field Companion Lorg/jetbrains/jewel/foundation/lazy/tree/DefaultMacOsTreeColumnKeybindings$Companion; public fun ()V public fun isKeyboardMultiSelectionKeyPressed-5xRPYO0 (I)Z public fun isKeyboardMultiSelectionKeyPressed-ZmokQxo (Ljava/lang/Object;)Z } -public final class org/jetbrains/jewel/foundation/tree/DefaultMacOsTreeColumnKeybindings$Companion : org/jetbrains/jewel/foundation/tree/DefaultMacOsTreeColumnKeybindings { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultMacOsTreeColumnKeybindings$Companion : org/jetbrains/jewel/foundation/lazy/tree/DefaultMacOsTreeColumnKeybindings { } -public final class org/jetbrains/jewel/foundation/tree/DefaultSelectableLazyColumnEventAction : org/jetbrains/jewel/foundation/tree/PointerEventActions { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultSelectableLazyColumnEventAction : org/jetbrains/jewel/foundation/lazy/tree/PointerEventActions { public static final field $stable I public fun ()V public fun handlePointerEventPress (Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V @@ -541,7 +381,7 @@ public final class org/jetbrains/jewel/foundation/tree/DefaultSelectableLazyColu public fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public class org/jetbrains/jewel/foundation/tree/DefaultSelectableLazyColumnKeyActions : org/jetbrains/jewel/foundation/tree/KeyBindingActions { +public class org/jetbrains/jewel/foundation/lazy/tree/DefaultSelectableLazyColumnKeyActions : org/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions { public static final field $stable I public fun ()V public fun getActions ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent; @@ -549,19 +389,19 @@ public class org/jetbrains/jewel/foundation/tree/DefaultSelectableLazyColumnKeyA public fun handleOnKeyEvent-jhbQyNo (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)Lkotlin/jvm/functions/Function1; } -public final class org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeyActions : org/jetbrains/jewel/foundation/tree/DefaultSelectableLazyColumnKeyActions { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeyActions : org/jetbrains/jewel/foundation/lazy/tree/DefaultSelectableLazyColumnKeyActions { public static final field $stable I - public fun (Lorg/jetbrains/jewel/foundation/tree/TreeState;)V + public fun (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeState;)V public synthetic fun getActions ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent; - public fun getActions ()Lorg/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent; + public fun getActions ()Lorg/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewOnKeyEvent; public synthetic fun getKeybindings ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings; - public fun getKeybindings ()Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings; + public fun getKeybindings ()Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings; public fun handleOnKeyEvent-jhbQyNo (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)Lkotlin/jvm/functions/Function1; } -public class org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings : org/jetbrains/jewel/foundation/lazy/DefaultSelectableColumnKeybindings, org/jetbrains/jewel/foundation/tree/TreeViewKeybindings { +public class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings : org/jetbrains/jewel/foundation/lazy/DefaultSelectableColumnKeybindings, org/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings { public static final field $stable I - public static final field Companion Lorg/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings$Companion; + public static final field Companion Lorg/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings$Companion; public fun ()V public fun edit-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; public fun extendSelectionToChild-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; @@ -574,18 +414,18 @@ public class org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings : or public fun selectPreviousSibling-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Void; } -public final class org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings$Companion : org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings$Companion : org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings { } -public final class org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindingsKt { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindingsKt { public static final fun getDefaultWindowsTreeViewClickModifierHandler ()Lkotlin/jvm/functions/Function1; } -public class org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent : org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent { +public class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewOnKeyEvent : org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent { public static final field $stable I - public fun (Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings;Lorg/jetbrains/jewel/foundation/tree/TreeState;)V + public fun (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings;Lorg/jetbrains/jewel/foundation/lazy/tree/TreeState;)V public synthetic fun getKeybindings ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings; - public fun getKeybindings ()Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings; + public fun getKeybindings ()Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings; public fun onEdit ()V public fun onExtendSelectionToFirst (Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V public fun onExtendSelectionToLastItem (Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V @@ -604,124 +444,124 @@ public class org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent : org public fun onSelectPreviousItem (Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public final class org/jetbrains/jewel/foundation/tree/DefaultTreeViewPointerEventAction : org/jetbrains/jewel/foundation/tree/PointerEventActions { +public final class org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewPointerEventAction : org/jetbrains/jewel/foundation/lazy/tree/PointerEventActions { public static final field $stable I - public fun (Lorg/jetbrains/jewel/foundation/tree/TreeState;)V + public fun (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeState;)V public fun handlePointerEventPress (Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V public fun onExtendSelectionToKey (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V public fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public abstract interface class org/jetbrains/jewel/foundation/tree/KeyBindingActions { +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions { public abstract fun getActions ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent; public abstract fun getKeybindings ()Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings; public abstract fun handleOnKeyEvent-jhbQyNo (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)Lkotlin/jvm/functions/Function1; } -public abstract interface class org/jetbrains/jewel/foundation/tree/PointerEventActions { +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/PointerEventActions { public abstract fun handlePointerEventPress (Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V public abstract fun onExtendSelectionToKey (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V public abstract fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public final class org/jetbrains/jewel/foundation/tree/PointerEventActions$DefaultImpls { - public static fun handlePointerEventPress (Lorg/jetbrains/jewel/foundation/tree/PointerEventActions;Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V - public static fun onExtendSelectionToKey (Lorg/jetbrains/jewel/foundation/tree/PointerEventActions;Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V - public static fun toggleKeySelection (Lorg/jetbrains/jewel/foundation/tree/PointerEventActions;Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V +public final class org/jetbrains/jewel/foundation/lazy/tree/PointerEventActions$DefaultImpls { + public static fun handlePointerEventPress (Lorg/jetbrains/jewel/foundation/lazy/tree/PointerEventActions;Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V + public static fun onExtendSelectionToKey (Lorg/jetbrains/jewel/foundation/lazy/tree/PointerEventActions;Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V + public static fun toggleKeySelection (Lorg/jetbrains/jewel/foundation/lazy/tree/PointerEventActions;Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public final class org/jetbrains/jewel/foundation/tree/Tree { +public final class org/jetbrains/jewel/foundation/lazy/tree/Tree { public static final field $stable I - public static final field Companion Lorg/jetbrains/jewel/foundation/tree/Tree$Companion; + public static final field Companion Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Companion; public final fun getRoots ()Ljava/util/List; public final fun isEmpty ()Z public final fun walkBreadthFirst ()Lkotlin/sequences/Sequence; public final fun walkDepthFirst ()Lkotlin/sequences/Sequence; } -public final class org/jetbrains/jewel/foundation/tree/Tree$Companion { +public final class org/jetbrains/jewel/foundation/lazy/tree/Tree$Companion { } -public abstract interface class org/jetbrains/jewel/foundation/tree/Tree$Element { +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/Tree$Element { public abstract fun getChildIndex ()I public abstract fun getData ()Ljava/lang/Object; public abstract fun getDepth ()I public abstract fun getId ()Ljava/lang/Object; - public abstract fun getNext ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public abstract fun getParent ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public abstract fun getPrevious ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; + public abstract fun getNext ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public abstract fun getParent ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public abstract fun getPrevious ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; public abstract fun nextElementsIterable ()Ljava/lang/Iterable; public abstract fun path ()Ljava/util/List; public abstract fun previousElementsIterable ()Ljava/lang/Iterable; - public abstract fun setNext (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V - public abstract fun setPrevious (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V + public abstract fun setNext (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V + public abstract fun setPrevious (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V } -public final class org/jetbrains/jewel/foundation/tree/Tree$Element$DefaultImpls { - public static fun nextElementsIterable (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)Ljava/lang/Iterable; - public static fun path (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)Ljava/util/List; - public static fun previousElementsIterable (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)Ljava/lang/Iterable; +public final class org/jetbrains/jewel/foundation/lazy/tree/Tree$Element$DefaultImpls { + public static fun nextElementsIterable (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)Ljava/lang/Iterable; + public static fun path (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)Ljava/util/List; + public static fun previousElementsIterable (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)Ljava/lang/Iterable; } -public final class org/jetbrains/jewel/foundation/tree/Tree$Element$Leaf : org/jetbrains/jewel/foundation/tree/Tree$Element { +public final class org/jetbrains/jewel/foundation/lazy/tree/Tree$Element$Leaf : org/jetbrains/jewel/foundation/lazy/tree/Tree$Element { public static final field $stable I - public fun (Ljava/lang/Object;IILorg/jetbrains/jewel/foundation/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/tree/Tree$Element;Ljava/lang/Object;)V + public fun (Ljava/lang/Object;IILorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Ljava/lang/Object;)V public fun getChildIndex ()I public fun getData ()Ljava/lang/Object; public fun getDepth ()I public fun getId ()Ljava/lang/Object; - public fun getNext ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public fun getParent ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public fun getPrevious ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; + public fun getNext ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public fun getParent ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public fun getPrevious ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; public fun nextElementsIterable ()Ljava/lang/Iterable; public fun path ()Ljava/util/List; public fun previousElementsIterable ()Ljava/lang/Iterable; - public fun setNext (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V - public fun setPrevious (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V + public fun setNext (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V + public fun setPrevious (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V } -public final class org/jetbrains/jewel/foundation/tree/Tree$Element$Node : org/jetbrains/jewel/foundation/tree/Tree$Element { +public final class org/jetbrains/jewel/foundation/lazy/tree/Tree$Element$Node : org/jetbrains/jewel/foundation/lazy/tree/Tree$Element { public static final field $stable I - public fun (Ljava/lang/Object;IILorg/jetbrains/jewel/foundation/tree/Tree$Element;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/tree/Tree$Element;Ljava/lang/Object;)V + public fun (Ljava/lang/Object;IILorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;Ljava/lang/Object;)V public final fun close ()V public fun getChildIndex ()I public final fun getChildren ()Ljava/util/List; public fun getData ()Ljava/lang/Object; public fun getDepth ()I public fun getId ()Ljava/lang/Object; - public fun getNext ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public fun getParent ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; - public fun getPrevious ()Lorg/jetbrains/jewel/foundation/tree/Tree$Element; + public fun getNext ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public fun getParent ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; + public fun getPrevious ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element; public fun nextElementsIterable ()Ljava/lang/Iterable; public final fun open (Z)V - public static synthetic fun open$default (Lorg/jetbrains/jewel/foundation/tree/Tree$Element$Node;ZILjava/lang/Object;)V + public static synthetic fun open$default (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element$Node;ZILjava/lang/Object;)V public fun path ()Ljava/util/List; public fun previousElementsIterable ()Ljava/lang/Iterable; - public fun setNext (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V - public fun setPrevious (Lorg/jetbrains/jewel/foundation/tree/Tree$Element;)V + public fun setNext (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V + public fun setPrevious (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree$Element;)V } -public final class org/jetbrains/jewel/foundation/tree/TreeBuilder : org/jetbrains/jewel/foundation/tree/TreeGeneratorScope { +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder : org/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope { public static final field $stable I public fun ()V - public fun add (Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element;)V + public fun add (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element;)V public fun addLeaf (Ljava/lang/Object;Ljava/lang/Object;)V public fun addNode (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V - public final fun build ()Lorg/jetbrains/jewel/foundation/tree/Tree; + public final fun build ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; } -public abstract class org/jetbrains/jewel/foundation/tree/TreeBuilder$Element { +public abstract class org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element { public static final field $stable I public abstract fun getId ()Ljava/lang/Object; } -public final class org/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Leaf : org/jetbrains/jewel/foundation/tree/TreeBuilder$Element { +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Leaf : org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element { public static final field $stable I public fun (Ljava/lang/Object;Ljava/lang/Object;)V public final fun component1 ()Ljava/lang/Object; public final fun component2 ()Ljava/lang/Object; - public final fun copy (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Leaf; - public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Leaf;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Leaf; + public final fun copy (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Leaf; + public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Leaf;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Leaf; public fun equals (Ljava/lang/Object;)Z public final fun getData ()Ljava/lang/Object; public fun getId ()Ljava/lang/Object; @@ -729,14 +569,14 @@ public final class org/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Leaf public fun toString ()Ljava/lang/String; } -public final class org/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Node : org/jetbrains/jewel/foundation/tree/TreeBuilder$Element { +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Node : org/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element { public static final field $stable I public fun (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V public final fun component1 ()Ljava/lang/Object; public final fun component2 ()Ljava/lang/Object; public final fun component3 ()Lkotlin/jvm/functions/Function1; - public final fun copy (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Node; - public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Node;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Node; + public final fun copy (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Node; + public static synthetic fun copy$default (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Node;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element$Node; public fun equals (Ljava/lang/Object;)Z public final fun getChildrenGenerator ()Lkotlin/jvm/functions/Function1; public final fun getData ()Ljava/lang/Object; @@ -745,14 +585,14 @@ public final class org/jetbrains/jewel/foundation/tree/TreeBuilder$Element$Node public fun toString ()Ljava/lang/String; } -public final class org/jetbrains/jewel/foundation/tree/TreeElementState : org/jetbrains/jewel/foundation/state/InteractiveComponentState, org/jetbrains/jewel/foundation/state/SelectableComponentState { - public static final field Companion Lorg/jetbrains/jewel/foundation/tree/TreeElementState$Companion; - public static final synthetic fun box-impl (J)Lorg/jetbrains/jewel/foundation/tree/TreeElementState; +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeElementState : org/jetbrains/jewel/foundation/state/InteractiveComponentState, org/jetbrains/jewel/foundation/state/SelectableComponentState { + public static final field Companion Lorg/jetbrains/jewel/foundation/lazy/tree/TreeElementState$Companion; + public static final synthetic fun box-impl (J)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeElementState; public fun chooseValue (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; public static fun chooseValue-impl (JLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; public static fun constructor-impl (J)J - public static final fun copy-ZVebPRw (JZZZZZZZ)J - public static synthetic fun copy-ZVebPRw$default (JZZZZZZZILjava/lang/Object;)J + public static final fun copy-do3-xvo (JZZZZZZZ)J + public static synthetic fun copy-do3-xvo$default (JZZZZZZZILjava/lang/Object;)J public fun equals (Ljava/lang/Object;)Z public static fun equals-impl (JLjava/lang/Object;)Z public static final fun equals-impl0 (JJ)Z @@ -777,27 +617,27 @@ public final class org/jetbrains/jewel/foundation/tree/TreeElementState : org/je public final synthetic fun unbox-impl ()J } -public final class org/jetbrains/jewel/foundation/tree/TreeElementState$Companion { - public final fun of-ZVebPRw (ZZZZZZZ)J - public static synthetic fun of-ZVebPRw$default (Lorg/jetbrains/jewel/foundation/tree/TreeElementState$Companion;ZZZZZZZILjava/lang/Object;)J +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeElementState$Companion { + public final fun of-do3-xvo (ZZZZZZZ)J + public static synthetic fun of-do3-xvo$default (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeElementState$Companion;ZZZZZZZILjava/lang/Object;)J } -public abstract interface class org/jetbrains/jewel/foundation/tree/TreeGeneratorScope { - public abstract fun add (Lorg/jetbrains/jewel/foundation/tree/TreeBuilder$Element;)V +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope { + public abstract fun add (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeBuilder$Element;)V public abstract fun addLeaf (Ljava/lang/Object;Ljava/lang/Object;)V public abstract fun addNode (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V } -public final class org/jetbrains/jewel/foundation/tree/TreeGeneratorScope$DefaultImpls { - public static synthetic fun addLeaf$default (Lorg/jetbrains/jewel/foundation/tree/TreeGeneratorScope;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V - public static synthetic fun addNode$default (Lorg/jetbrains/jewel/foundation/tree/TreeGeneratorScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope$DefaultImpls { + public static synthetic fun addLeaf$default (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)V + public static synthetic fun addNode$default (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeGeneratorScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V } -public final class org/jetbrains/jewel/foundation/tree/TreeKt { - public static final fun emptyTree ()Lorg/jetbrains/jewel/foundation/tree/Tree; +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeKt { + public static final fun emptyTree ()Lorg/jetbrains/jewel/foundation/lazy/tree/Tree; } -public final class org/jetbrains/jewel/foundation/tree/TreeState : androidx/compose/foundation/gestures/ScrollableState, org/jetbrains/jewel/foundation/lazy/SelectableScope { +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeState : androidx/compose/foundation/gestures/ScrollableState, org/jetbrains/jewel/foundation/lazy/SelectableScope { public static final field $stable I public fun (Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V public fun dispatchRawDelta (F)F @@ -813,11 +653,11 @@ public final class org/jetbrains/jewel/foundation/tree/TreeState : androidx/comp public final fun toggleNode (Ljava/lang/Object;)V } -public final class org/jetbrains/jewel/foundation/tree/TreeStateKt { - public static final fun rememberTreeState (Landroidx/compose/foundation/lazy/LazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/runtime/Composer;II)Lorg/jetbrains/jewel/foundation/tree/TreeState; +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeStateKt { + public static final fun rememberTreeState (Landroidx/compose/foundation/lazy/LazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Landroidx/compose/runtime/Composer;II)Lorg/jetbrains/jewel/foundation/lazy/tree/TreeState; } -public abstract interface class org/jetbrains/jewel/foundation/tree/TreeViewKeybindings : org/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings { +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings : org/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings { public abstract fun extendSelectionToChild-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; public abstract fun extendSelectionToParent-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; public abstract fun selectChild-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; @@ -826,31 +666,191 @@ public abstract interface class org/jetbrains/jewel/foundation/tree/TreeViewKeyb public abstract fun selectPreviousSibling-ZmokQxo (Ljava/lang/Object;)Ljava/lang/Boolean; } -public final class org/jetbrains/jewel/foundation/tree/TreeViewKeybindings$DefaultImpls { - public static fun isKeyboardCtrlMetaKeyPressed-ZmokQxo (Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings;Ljava/lang/Object;)Z - public static fun isKeyboardMultiSelectionKeyPressed-5xRPYO0 (Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings;I)Z - public static fun isKeyboardMultiSelectionKeyPressed-ZmokQxo (Lorg/jetbrains/jewel/foundation/tree/TreeViewKeybindings;Ljava/lang/Object;)Z +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings$DefaultImpls { + public static fun isKeyboardCtrlMetaKeyPressed-ZmokQxo (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings;Ljava/lang/Object;)Z + public static fun isKeyboardMultiSelectionKeyPressed-5xRPYO0 (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings;I)Z + public static fun isKeyboardMultiSelectionKeyPressed-ZmokQxo (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewKeybindings;Ljava/lang/Object;)Z } -public abstract interface class org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent : org/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent { +public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent : org/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent { public abstract fun onSelectChild (Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V public abstract fun onSelectParent (Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V } -public final class org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent$DefaultImpls { - public static fun onEdit (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;)V - public static fun onExtendSelectionToFirst (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onExtendSelectionToLastItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onExtendSelectionWithNextItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onExtendSelectionWithPreviousItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onScrollPageDownAndExtendSelection (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onScrollPageDownAndSelectItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onScrollPageUpAndExtendSelection (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onScrollPageUpAndSelectItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onSelectAll (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onSelectFirstItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onSelectLastItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onSelectNextItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V - public static fun onSelectPreviousItem (Lorg/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V +public final class org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent$DefaultImpls { + public static fun onEdit (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;)V + public static fun onExtendSelectionToFirst (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onExtendSelectionToLastItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onExtendSelectionWithNextItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onExtendSelectionWithPreviousItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onScrollPageDownAndExtendSelection (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onScrollPageDownAndSelectItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onScrollPageUpAndExtendSelection (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onScrollPageUpAndSelectItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onSelectAll (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onSelectFirstItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onSelectLastItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onSelectNextItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public static fun onSelectPreviousItem (Lorg/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V +} + +public final class org/jetbrains/jewel/foundation/modifier/BorderKt { + public static final fun border (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; + public static final fun border-AkepmR4 (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;F)Landroidx/compose/ui/Modifier; + public static synthetic fun border-AkepmR4$default (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; + public static final fun border-QWjY48E (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FJLandroidx/compose/ui/graphics/Shape;F)Landroidx/compose/ui/Modifier; + public static synthetic fun border-QWjY48E$default (Landroidx/compose/ui/Modifier;Lorg/jetbrains/jewel/foundation/Stroke$Alignment;FJLandroidx/compose/ui/graphics/Shape;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +} + +public final class org/jetbrains/jewel/foundation/modifier/OnHoverModifierKt { + public static final fun onHover (Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +} + +public final class org/jetbrains/jewel/foundation/state/CommonStateBitMask { + public static final field $stable I + public static final field FIRST_AVAILABLE_OFFSET I + public static final field INSTANCE Lorg/jetbrains/jewel/foundation/state/CommonStateBitMask; + public final fun getActive-s-VKNKU ()J + public final fun getEnabled-s-VKNKU ()J + public final fun getFocused-s-VKNKU ()J + public final fun getHovered-s-VKNKU ()J + public final fun getIndeterminate-s-VKNKU ()J + public final fun getPressed-s-VKNKU ()J + public final fun getSelected-s-VKNKU ()J +} + +public abstract interface class org/jetbrains/jewel/foundation/state/FocusableComponentState : org/jetbrains/jewel/foundation/state/InteractiveComponentState { + public abstract fun chooseValue (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; + public abstract fun isFocused ()Z +} + +public final class org/jetbrains/jewel/foundation/state/FocusableComponentState$DefaultImpls { + public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/FocusableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +} + +public abstract interface class org/jetbrains/jewel/foundation/state/InteractiveComponentState { + public abstract fun isActive ()Z + public abstract fun isEnabled ()Z + public abstract fun isHovered ()Z + public abstract fun isPressed ()Z +} + +public abstract interface class org/jetbrains/jewel/foundation/state/SelectableComponentState : org/jetbrains/jewel/foundation/state/FocusableComponentState { + public abstract fun isSelected ()Z +} + +public final class org/jetbrains/jewel/foundation/state/SelectableComponentState$DefaultImpls { + public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/SelectableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +} + +public abstract interface class org/jetbrains/jewel/foundation/state/ToggleableComponentState : org/jetbrains/jewel/foundation/state/SelectableComponentState { + public static final field Companion Lorg/jetbrains/jewel/foundation/state/ToggleableComponentState$Companion; + public abstract fun getToggleableState ()Landroidx/compose/ui/state/ToggleableState; +} + +public final class org/jetbrains/jewel/foundation/state/ToggleableComponentState$Companion { + public final fun readToggleableState-VKZWuLQ (J)Landroidx/compose/ui/state/ToggleableState; +} + +public final class org/jetbrains/jewel/foundation/state/ToggleableComponentState$DefaultImpls { + public static fun chooseValue (Lorg/jetbrains/jewel/foundation/state/ToggleableComponentState;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +} + +public abstract interface class org/jetbrains/jewel/foundation/theme/JewelTheme { + public static final field Companion Lorg/jetbrains/jewel/foundation/theme/JewelTheme$Companion; +} + +public final class org/jetbrains/jewel/foundation/theme/JewelTheme$Companion { + public final fun getContentColor (Landroidx/compose/runtime/Composer;I)J + public final fun getGlobalColors (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalColors; + public final fun getGlobalMetrics (Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/foundation/GlobalMetrics; + public final fun getTextStyle (Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/TextStyle; + public final fun isDark (Landroidx/compose/runtime/Composer;I)Z + public final fun isSwingCompatMode (Landroidx/compose/runtime/Composer;I)Z +} + +public final class org/jetbrains/jewel/foundation/theme/JewelThemeKt { + public static final fun JewelTheme (Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V + public static final fun JewelTheme (Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V + public static final fun OverrideDarkMode (ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V + public static final fun getLocalColorPalette ()Landroidx/compose/runtime/ProvidableCompositionLocal; + public static final fun getLocalContentColor ()Landroidx/compose/runtime/ProvidableCompositionLocal; + public static final fun getLocalIconData ()Landroidx/compose/runtime/ProvidableCompositionLocal; + public static final fun getLocalTextStyle ()Landroidx/compose/runtime/ProvidableCompositionLocal; +} + +public final class org/jetbrains/jewel/foundation/theme/ThemeColorPalette { + public static final field $stable I + public static final field Companion Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette$Companion; + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;)V + public final fun blue-vNxB06k (I)J + public final fun blueOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlue ()Ljava/util/List; + public final fun getGreen ()Ljava/util/List; + public final fun getGrey ()Ljava/util/List; + public final fun getOrange ()Ljava/util/List; + public final fun getPurple ()Ljava/util/List; + public final fun getRawMap ()Ljava/util/Map; + public final fun getRed ()Ljava/util/List; + public final fun getTeal ()Ljava/util/List; + public final fun getYellow ()Ljava/util/List; + public final fun green-vNxB06k (I)J + public final fun greenOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public final fun grey-vNxB06k (I)J + public final fun greyOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public fun hashCode ()I + public final fun lookup-ijrfgN4 (Ljava/lang/String;)Landroidx/compose/ui/graphics/Color; + public final fun orange-vNxB06k (I)J + public final fun orangeOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public final fun purple-vNxB06k (I)J + public final fun purpleOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public final fun red-vNxB06k (I)J + public final fun redOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public final fun teal-vNxB06k (I)J + public final fun tealOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; + public fun toString ()Ljava/lang/String; + public final fun yellow-vNxB06k (I)J + public final fun yellowOrNull-ijrfgN4 (I)Landroidx/compose/ui/graphics/Color; +} + +public final class org/jetbrains/jewel/foundation/theme/ThemeColorPalette$Companion { + public final fun getEmpty ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; +} + +public final class org/jetbrains/jewel/foundation/theme/ThemeDefinition { + public static final field $stable I + public synthetic fun (ZLorg/jetbrains/jewel/foundation/GlobalColors;Lorg/jetbrains/jewel/foundation/GlobalMetrics;Landroidx/compose/ui/text/TextStyle;JLorg/jetbrains/jewel/foundation/theme/ThemeColorPalette;Lorg/jetbrains/jewel/foundation/theme/ThemeIconData;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun equals (Ljava/lang/Object;)Z + public final fun getColorPalette ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; + public final fun getContentColor-0d7_KjU ()J + public final fun getDefaultTextStyle ()Landroidx/compose/ui/text/TextStyle; + public final fun getGlobalColors ()Lorg/jetbrains/jewel/foundation/GlobalColors; + public final fun getGlobalMetrics ()Lorg/jetbrains/jewel/foundation/GlobalMetrics; + public final fun getIconData ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; + public fun hashCode ()I + public final fun isDark ()Z + public fun toString ()Ljava/lang/String; +} + +public abstract interface class org/jetbrains/jewel/foundation/theme/ThemeDescriptor { + public abstract fun getColors ()Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette; + public abstract fun getIconData ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; + public abstract fun getName ()Ljava/lang/String; + public abstract fun isDark ()Z +} + +public final class org/jetbrains/jewel/foundation/theme/ThemeIconData { + public static final field $stable I + public static final field Companion Lorg/jetbrains/jewel/foundation/theme/ThemeIconData$Companion; + public fun (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V + public final fun getColorPalette ()Ljava/util/Map; + public final fun getIconOverrides ()Ljava/util/Map; + public final fun getSelectionColorPalette ()Ljava/util/Map; + public final fun selectionColorMapping ()Ljava/util/Map; +} + +public final class org/jetbrains/jewel/foundation/theme/ThemeIconData$Companion { + public final fun getEmpty ()Lorg/jetbrains/jewel/foundation/theme/ThemeIconData; } diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyColumn.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyColumn.kt index 2e50e999d..2982ff9f0 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyColumn.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyColumn.kt @@ -25,10 +25,10 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch import org.jetbrains.jewel.foundation.lazy.SelectableLazyListScopeContainer.Entry -import org.jetbrains.jewel.foundation.tree.DefaultSelectableLazyColumnEventAction -import org.jetbrains.jewel.foundation.tree.DefaultSelectableLazyColumnKeyActions -import org.jetbrains.jewel.foundation.tree.KeyBindingActions -import org.jetbrains.jewel.foundation.tree.PointerEventActions +import org.jetbrains.jewel.foundation.lazy.tree.DefaultSelectableLazyColumnEventAction +import org.jetbrains.jewel.foundation.lazy.tree.DefaultSelectableLazyColumnKeyActions +import org.jetbrains.jewel.foundation.lazy.tree.KeyBindingActions +import org.jetbrains.jewel.foundation.lazy.tree.PointerEventActions /** * A composable that displays a scrollable and selectable list of items in diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BasicLazyTree.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt similarity index 99% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BasicLazyTree.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt index 6e7fda8cb..da2ebdbf2 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BasicLazyTree.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BasicLazyTree.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BuildTree.kt similarity index 99% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BuildTree.kt index b7c99d8d0..ad97b8d95 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/BuildTree.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import java.io.File import java.nio.file.Path diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings.kt similarity index 98% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings.kt index 1c6d0e976..fa5015dcb 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewKeybindings.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEvent diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewOnKeyEvent.kt similarity index 98% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewOnKeyEvent.kt index be23f6538..c4d4bc937 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/DefaultTreeViewOnKeyEvent.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import org.jetbrains.jewel.foundation.lazy.SelectableLazyListKey import org.jetbrains.jewel.foundation.lazy.SelectableLazyListState diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/KeyBindingActions.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions.kt similarity index 99% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/KeyBindingActions.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions.kt index fb336c305..a7def175e 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/KeyBindingActions.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.input.key.KeyEventType diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/Tree.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/Tree.kt similarity index 97% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/Tree.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/Tree.kt index 89649c200..927dc5927 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/Tree.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/Tree.kt @@ -1,6 +1,6 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree -import org.jetbrains.jewel.foundation.tree.Tree.Element.Node +import org.jetbrains.jewel.foundation.lazy.tree.Tree.Element.Node @Suppress("UNCHECKED_CAST") fun emptyTree() = Tree.EMPTY as Tree diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeState.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeState.kt similarity index 96% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeState.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeState.kt index a970b46d6..43bce01fa 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeState.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeState.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import androidx.compose.foundation.gestures.ScrollableState import androidx.compose.foundation.lazy.LazyListState diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent.kt similarity index 91% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent.kt index 56eb3912e..e1807eee0 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/TreeViewOnKeyEvent.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation.tree +package org.jetbrains.jewel.foundation.lazy.tree import org.jetbrains.jewel.foundation.lazy.SelectableColumnOnKeyEvent import org.jetbrains.jewel.foundation.lazy.SelectableLazyListKey diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/Border.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/modifier/Border.kt similarity index 98% rename from foundation/src/main/kotlin/org/jetbrains/jewel/foundation/Border.kt rename to foundation/src/main/kotlin/org/jetbrains/jewel/foundation/modifier/Border.kt index b3a5643d0..6d44f0add 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/Border.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/modifier/Border.kt @@ -1,4 +1,4 @@ -package org.jetbrains.jewel.foundation +package org.jetbrains.jewel.foundation.modifier import androidx.compose.foundation.border import androidx.compose.foundation.shape.RoundedCornerShape @@ -36,6 +36,10 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.isUnspecified import androidx.compose.ui.unit.takeOrElse import androidx.compose.ui.unit.toSize +import org.jetbrains.jewel.foundation.Stroke +import org.jetbrains.jewel.foundation.grow +import org.jetbrains.jewel.foundation.hasAtLeastOneNonRoundedCorner +import org.jetbrains.jewel.foundation.shrink import kotlin.math.ceil import kotlin.math.max import kotlin.math.min diff --git a/int-ui/int-ui-standalone/api/int-ui-standalone.api b/int-ui/int-ui-standalone/api/int-ui-standalone.api index 3a235de02..acd492f65 100644 --- a/int-ui/int-ui-standalone/api/int-ui-standalone.api +++ b/int-ui/int-ui-standalone/api/int-ui-standalone.api @@ -337,6 +337,7 @@ public final class org/jetbrains/jewel/intui/standalone/theme/IntUiGlobalMetrics public final class org/jetbrains/jewel/intui/standalone/theme/IntUiThemeKt { public static final fun IntUiTheme (Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;Lkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V + public static final fun IntUiTheme (ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V public static final fun darkComponentStyling (Lorg/jetbrains/jewel/foundation/theme/JewelTheme$Companion;Lorg/jetbrains/jewel/ui/component/styling/CheckboxStyle;Lorg/jetbrains/jewel/ui/component/styling/ChipStyle;Lorg/jetbrains/jewel/ui/component/styling/CircularProgressStyle;Lorg/jetbrains/jewel/ui/component/styling/ButtonStyle;Lorg/jetbrains/jewel/ui/component/styling/TabStyle;Lorg/jetbrains/jewel/ui/component/styling/DividerStyle;Lorg/jetbrains/jewel/ui/component/styling/DropdownStyle;Lorg/jetbrains/jewel/ui/component/styling/TabStyle;Lorg/jetbrains/jewel/ui/component/styling/GroupHeaderStyle;Lorg/jetbrains/jewel/ui/component/styling/HorizontalProgressBarStyle;Lorg/jetbrains/jewel/ui/component/styling/IconButtonStyle;Lorg/jetbrains/jewel/ui/component/styling/LabelledTextFieldStyle;Lorg/jetbrains/jewel/ui/component/styling/LazyTreeStyle;Lorg/jetbrains/jewel/ui/component/styling/LinkStyle;Lorg/jetbrains/jewel/ui/component/styling/MenuStyle;Lorg/jetbrains/jewel/ui/component/styling/ButtonStyle;Lorg/jetbrains/jewel/ui/component/styling/RadioButtonStyle;Lorg/jetbrains/jewel/ui/component/styling/ScrollbarStyle;Lorg/jetbrains/jewel/ui/component/styling/TextAreaStyle;Lorg/jetbrains/jewel/ui/component/styling/TextFieldStyle;Lorg/jetbrains/jewel/ui/component/styling/TooltipStyle;Lorg/jetbrains/jewel/ui/component/styling/DropdownStyle;Landroidx/compose/runtime/Composer;IIII)Lorg/jetbrains/jewel/ui/ComponentStyling; public static final fun darkThemeDefinition-RFMEUTM (Lorg/jetbrains/jewel/foundation/theme/JewelTheme$Companion;Lorg/jetbrains/jewel/foundation/GlobalColors;Lorg/jetbrains/jewel/foundation/GlobalMetrics;Lorg/jetbrains/jewel/foundation/theme/ThemeColorPalette;Lorg/jetbrains/jewel/foundation/theme/ThemeIconData;Landroidx/compose/ui/text/TextStyle;JLandroidx/compose/runtime/Composer;II)Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition; public static final fun defaultComponentStyling (Lorg/jetbrains/jewel/foundation/theme/JewelTheme$Companion;Lorg/jetbrains/jewel/foundation/theme/ThemeDefinition;Landroidx/compose/runtime/Composer;I)Lorg/jetbrains/jewel/ui/ComponentStyling; diff --git a/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiCheckboxStyling.kt b/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiCheckboxStyling.kt index 965d3f49f..4a1b8c82f 100644 --- a/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiCheckboxStyling.kt +++ b/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/styling/IntUiCheckboxStyling.kt @@ -60,14 +60,10 @@ fun CheckboxMetrics.Companion.defaults( @Composable fun CheckboxIcons.Companion.light( - checkbox: PainterProvider = checkbox("com/intellij/ide/ui/laf/icons/intellij/checkBox.svg"), + checkbox: PainterProvider = standalonePainterProvider("com/intellij/ide/ui/laf/icons/intellij/checkBox.svg"), ) = CheckboxIcons(checkbox) @Composable fun CheckboxIcons.Companion.dark( - checkbox: PainterProvider = checkbox("com/intellij/ide/ui/laf/icons/darcula/checkBox.svg"), + checkbox: PainterProvider = standalonePainterProvider("com/intellij/ide/ui/laf/icons/darcula/checkBox.svg"), ) = CheckboxIcons(checkbox) - -@Composable -private fun checkbox(basePath: String): PainterProvider = - standalonePainterProvider(basePath) diff --git a/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt b/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt index db0355727..42d9421db 100644 --- a/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt +++ b/int-ui/int-ui-standalone/src/main/kotlin/org/jetbrains/jewel/intui/standalone/theme/IntUiTheme.kt @@ -178,6 +178,27 @@ fun JewelTheme.Companion.lightComponentStyling( undecoratedDropdownStyle = undecoratedDropdownStyle, ) +@Composable +fun IntUiTheme( + isDark: Boolean = false, + swingCompatMode: Boolean = false, + content: @Composable () -> Unit, +) { + val themeDefinition = + if (isDark) { + JewelTheme.darkThemeDefinition() + } else { + JewelTheme.lightThemeDefinition() + } + + IntUiTheme( + theme = themeDefinition, + componentStyling = { emptyArray() }, + swingCompatMode = swingCompatMode, + content = content, + ) +} + @Composable fun IntUiTheme( theme: ThemeDefinition, diff --git a/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/ComponentShowcaseTab.kt b/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/ComponentShowcaseTab.kt index f6617726a..4f2ad890a 100644 --- a/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/ComponentShowcaseTab.kt +++ b/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/ComponentShowcaseTab.kt @@ -28,8 +28,8 @@ import com.intellij.ui.JBColor import icons.JewelIcons import org.jetbrains.jewel.bridge.theme.SwingBridgeTheme import org.jetbrains.jewel.bridge.toComposeColor +import org.jetbrains.jewel.foundation.lazy.tree.buildTree import org.jetbrains.jewel.foundation.theme.JewelTheme -import org.jetbrains.jewel.foundation.tree.buildTree import org.jetbrains.jewel.ui.component.CheckboxRow import org.jetbrains.jewel.ui.component.CircularProgressIndicator import org.jetbrains.jewel.ui.component.CircularProgressIndicatorBig @@ -43,7 +43,8 @@ import org.jetbrains.jewel.ui.component.Text import org.jetbrains.jewel.ui.component.TextField import org.jetbrains.jewel.ui.component.Tooltip -@Composable internal fun ComponentShowcaseTab() { +@Composable +internal fun ComponentShowcaseTab() { SwingBridgeTheme { val bgColor by remember(JewelTheme.isDark) { mutableStateOf(JBColor.PanelBackground.toComposeColor()) } @@ -58,7 +59,8 @@ import org.jetbrains.jewel.ui.component.Tooltip } } -@Composable private fun RowScope.ColumnOne() { +@Composable +private fun RowScope.ColumnOne() { Column( Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(16.dp), @@ -167,7 +169,8 @@ import org.jetbrains.jewel.ui.component.Tooltip } } -@Composable private fun RowScope.ColumnTwo() { +@Composable +private fun RowScope.ColumnTwo() { Column( Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(16.dp), diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/Borders.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/Borders.kt index c20e57253..2b196e9dd 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/Borders.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/Borders.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.unit.dp import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.ui.component.GroupHeader import org.jetbrains.jewel.ui.component.OutlinedButton diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/ChipsAndTree.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/ChipsAndTree.kt index 133931556..8d907ffe8 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/ChipsAndTree.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/components/ChipsAndTree.kt @@ -23,8 +23,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn +import org.jetbrains.jewel.foundation.lazy.tree.buildTree import org.jetbrains.jewel.foundation.theme.JewelTheme -import org.jetbrains.jewel.foundation.tree.buildTree import org.jetbrains.jewel.ui.component.Chip import org.jetbrains.jewel.ui.component.GroupHeader import org.jetbrains.jewel.ui.component.LazyTree diff --git a/ui/api/ui.api b/ui/api/ui.api index 1e6b5df87..ea2c0b680 100644 --- a/ui/api/ui.api +++ b/ui/api/ui.api @@ -320,7 +320,7 @@ public final class org/jetbrains/jewel/ui/component/LabelledTextFieldKt { } public final class org/jetbrains/jewel/ui/component/LazyTreeKt { - public static final fun LazyTree (Lorg/jetbrains/jewel/foundation/tree/Tree;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/tree/TreeState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/tree/KeyBindingActions;Lorg/jetbrains/jewel/ui/component/styling/LazyTreeStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V + public static final fun LazyTree (Lorg/jetbrains/jewel/foundation/lazy/tree/Tree;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/lazy/tree/TreeState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lorg/jetbrains/jewel/foundation/lazy/tree/KeyBindingActions;Lorg/jetbrains/jewel/ui/component/styling/LazyTreeStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V } public final class org/jetbrains/jewel/ui/component/LinearProgressBarKt { @@ -1298,7 +1298,7 @@ public final class org/jetbrains/jewel/ui/component/styling/LazyTreeColors { public static final field $stable I public static final field Companion Lorg/jetbrains/jewel/ui/component/styling/LazyTreeColors$Companion; public synthetic fun (JJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun contentFor-iZdlh1w (JLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; + public final fun contentFor-EWxiZrY (JLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; public fun equals (Ljava/lang/Object;)Z public final fun getContent-0d7_KjU ()J public final fun getContentFocused-0d7_KjU ()J diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/Outline.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/Outline.kt index 46cdf10f4..0fa31fcc6 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/Outline.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/Outline.kt @@ -5,7 +5,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.Dp import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.state.FocusableComponentState import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.ui.util.thenIf diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Button.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Button.kt index 04d973830..5294d2039 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Button.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Button.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.graphics.takeOrElse import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.TextStyle import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Focused diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Chip.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Chip.kt index a480b848c..c101c68cb 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Chip.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Chip.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.isUnspecified import androidx.compose.ui.semantics.Role import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Focused diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt index 4e2215637..304e3731b 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Dropdown.kt @@ -37,7 +37,7 @@ import androidx.compose.ui.semantics.Role import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupProperties import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Focused diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt index 016048e55..488432fd9 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/InputField.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Focused diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/LazyTree.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/LazyTree.kt index f041230f9..e93d8b37f 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/LazyTree.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/LazyTree.kt @@ -7,15 +7,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.takeOrElse import org.jetbrains.jewel.foundation.ExperimentalJewelApi import org.jetbrains.jewel.foundation.lazy.SelectableLazyItemScope +import org.jetbrains.jewel.foundation.lazy.tree.BasicLazyTree +import org.jetbrains.jewel.foundation.lazy.tree.DefaultTreeViewKeyActions +import org.jetbrains.jewel.foundation.lazy.tree.KeyBindingActions +import org.jetbrains.jewel.foundation.lazy.tree.Tree +import org.jetbrains.jewel.foundation.lazy.tree.TreeElementState +import org.jetbrains.jewel.foundation.lazy.tree.TreeState +import org.jetbrains.jewel.foundation.lazy.tree.rememberTreeState import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.foundation.theme.LocalContentColor -import org.jetbrains.jewel.foundation.tree.BasicLazyTree -import org.jetbrains.jewel.foundation.tree.DefaultTreeViewKeyActions -import org.jetbrains.jewel.foundation.tree.KeyBindingActions -import org.jetbrains.jewel.foundation.tree.Tree -import org.jetbrains.jewel.foundation.tree.TreeElementState -import org.jetbrains.jewel.foundation.tree.TreeState -import org.jetbrains.jewel.foundation.tree.rememberTreeState import org.jetbrains.jewel.ui.component.styling.LazyTreeStyle import org.jetbrains.jewel.ui.theme.treeStyle diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt index 5fef49ac3..5f5dc3775 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Menu.kt @@ -61,7 +61,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupProperties import org.jetbrains.jewel.foundation.Stroke -import org.jetbrains.jewel.foundation.border +import org.jetbrains.jewel.foundation.modifier.border import org.jetbrains.jewel.foundation.modifier.onHover import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Active import org.jetbrains.jewel.foundation.state.CommonStateBitMask.Enabled diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/LazyTreeStyling.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/LazyTreeStyling.kt index 85aa12c8c..b43b930c1 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/LazyTreeStyling.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/styling/LazyTreeStyling.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import org.jetbrains.jewel.foundation.GenerateDataFunctions -import org.jetbrains.jewel.foundation.tree.TreeElementState +import org.jetbrains.jewel.foundation.lazy.tree.TreeElementState import org.jetbrains.jewel.ui.painter.PainterProvider @Stable From 932b1ae7f3b2b4a54837c858e32b690d29827f11 Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Sun, 22 Oct 2023 13:41:00 +0100 Subject: [PATCH 2/5] Update README for 0.8.0 Added code samples, updated project structure, added sections on custom window decoration and icon runtime patching. --- README.md | 138 ++++++++++++++++++++++++++++++------- art/docs/custom-chrome.png | Bin 0 -> 46405 bytes 2 files changed, 114 insertions(+), 24 deletions(-) create mode 100644 art/docs/custom-chrome.png diff --git a/README.md b/README.md index 64cb06248..cc8e12184 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ [![JetBrains incubator](https://img.shields.io/badge/JetBrains-incubator-yellow)](https://github.com/JetBrains#jetbrains-on-github) [![CI checks](https://img.shields.io/github/actions/workflow/status/JetBrains/jewel/build.yml?logo=github)](https://github.com/JetBrains/jewel/actions/workflows/build.yml) [![Licensed under Apache 2.0](https://img.shields.io/github/license/JetBrains/jewel)](https://github.com/JetBrains/jewel/blob/main/LICENSE) [![Latest release](https://img.shields.io/github/v/release/JetBrains/jewel?include_prereleases&label=Latest%20Release&logo=github)](https://github.com/JetBrains/jewel/releases/latest) - # Jewel: a Compose for Desktop theme Jewel logo @@ -10,11 +9,14 @@ desktop-optimized theme and set of components. > [!WARNING] > -> This project is in active development, and caution is advised when considering it for production uses. You _can_, -> but you should expect APIs to change often, things to move around and/or break, and all that jazz. Binary -> compatibility is not currently guaranteed across releases, but it is an eventual aim for 1.0, if it is possible. +> This project is in active development, and caution is advised when considering it for production uses. You _can_ use +> it, but you should expect APIs to change often, things to move around and/or break, and all that jazz. Binary +> compatibility is not guaranteed across releases, and APIs are still in flux and subject to change. +> +> Writing 3rd party IntelliJ Plugins in Compose for Desktop is currently **not officially supported** by the IntelliJ +> Platform. It should work, but your mileage may vary, and if things break you're on your own. > -> Use at your own risk! (but have fun if you do!) +> Use at your own risk! Jewel provides stand-alone implementations of the IntelliJ Platform themes that can be used in any Compose for Desktop application, and a Swing LaF Bridge that only works in the IntelliJ Platform (i.e., used to create IDE plugins), but @@ -26,15 +28,27 @@ The project is split in modules: 1. `buildSrc` contains the build logic, including: * The `jewel` and `jewel-publish` configuration plugins + * The `jewel-check-public-api` and `jewel-linting` configuration plugins * The Theme Palette generator plugin -2. `core` contains the foundational Jewel functionality, including the components and their styling primitives -3. `int-ui` implements the standalone version of the IntelliJ New UI, which implements the - ["Int UI" design system](https://www.figma.com/community/file/1227732692272811382/int-ui-kit), and can be used - anywhere -4. `ide-laf-bridge` contains the Swing LaF bridge to use in IntelliJ Platform plugins (see more below) -5. `samples` contains the example apps, which showcase the available components: - 1. `standalone` is a regular CfD app, using the predefined "base" theme definitions - 2. `ide-plugin` is an IntelliJ plugin, adding some UI to the IDE, and showcasing the use of the Swing Bridge + * The Studio Releases generator plugin +2. `foundation` contains the foundational Jewel functionality: + * Basic components without strong styling (e.g., `SelectableLazyColumn`, `BasicLazyTree`) + * The `JewelTheme` interface with a few basic composition locals + * The state management primitives + * The Jewel annotations + * A few other primitives +3. `ui` contains all the styled components and custom painters logic +4. `decorated-window` contains basic, unstyled functionality to have custom window decoration on the JetBrains Runtime +5. `int-ui` contains two modules: + * `int-ui-standalone` has a standalone version of the Int UI styling values that can be used in any Compose for + Desktop app + * `int-ui-decorated-window` has a standalone version of the Int UI styling values for the custom window decoration + that can be used in any Compose for Desktop app +5. `ide-laf-bridge` contains the Swing LaF bridge to use in IntelliJ Platform plugins (see more below) + * The `ide-laf-bridge-*` sub-modules contain code that is specific to a certain IntelliJ Platform version +6. `samples` contains the example apps, which showcase the available components: + * `standalone` is a regular CfD app, using the standalone theme definitions and custom window decoration + * `ide-plugin` is an IntelliJ plugin that showcases the use of the Swing Bridge ### Int UI Standalone theme @@ -46,31 +60,107 @@ to your heart's content. By default, it matches the official Int UI specs. > as it has extra features and patches for UI functionalities that aren't available in other JDKs. > We **do not support** running Jewel on any other JDK. +To use Jewel components in a non-IntelliJ Platform environment, you need to wrap your UI hierarchy in a `IntUiTheme` +composable: + +```kotlin +IntUiTheme(isDark = false) { + // ... +} +``` + +If you want more control over the theming, you can use other `IntUiTheme` overloads, like the standalone sample does. + +#### Custom window decoration +The JetBrains Runtime allows windows to have a custom decoration instead of the regular title bar. + +![A screenshot of the custom window decoration in the standalone sample](art/docs/custom-chrome.png) + +The standalone sample app shows how to easily get something that looks like a JetBrains IDE; if you want to go _very_ +custom, you only need to depend on the `decorated-window` module, which contains all the required primitives, but not +the Int UI styling. + +To get an IntelliJ-like custom title bar, you need to pass the window decoration styling to your theme call, and add the +`DecoratedWindow` composable at the top level of the theme: + +```kotlin +IntUiTheme( + themeDefinition, + componentStyling = { + themeDefinition.decoratedWindowComponentStyling( + titleBarStyle = TitleBarStyle.light() + ) + }, +) { + DecoratedWindow( + onCloseRequest = { exitApplication() }, + ) { + // ... + } +} +``` + ### The Swing Bridge -Jewel includes a crucial element for proper integration with the IDE: a bridge between the Swing components, theme -and LaF, and the Compose world. +Jewel includes a crucial element for proper integration with the IDE: a bridge between the Swing components — theme +and LaF — and the Compose world. This bridge ensures that we pick up the colours, typography, metrics, and images as defined in the current IntelliJ -theme, and apply them to the Compose components as well — at least for themes that use the -standard [IntelliJ theming](https://plugins.jetbrains.com/docs/intellij/themes-getting-started.html) mechanisms. +theme, and apply them to the Compose components as well. This means Jewel will automatically adapt to IntelliJ Platform +themes that use the [standard theming](https://plugins.jetbrains.com/docs/intellij/themes-getting-started.html) mechanisms. > [!NOTE] > IntelliJ themes that use non-standard mechanisms (such as providing custom UI implementations for Swing components) -> are not, and will never, be supported. +> are not, and can never, be supported. -If you're writing an IntelliJ Platform plugin, you should use the `SwingBridgeTheme` instead of a standalone theme. +If you're writing an IntelliJ Platform plugin, you should use the `SwingBridgeTheme` instead of the standalone theme: + +```kotlin +SwingBridgeTheme { + // ... +} +``` #### Accessing icons -When you want to draw an icon from the resources, you should use a `PainterProvider`. Reading an icon from the IDE is -as easy as using the `retrieveStatefulIcon()` and `retrieveStatelessIcon()`: +When you want to draw an icon from the resources, you can either use the `Icon` composable and pass it the resource path +and the corresponding class to look up the classpath from, or go one lever deeper and use the lower level, +`Painter`-based API. + +The `Icon` approach looks like this: ```kotlin -val svgLoader = service().svgLoader -val painterProvider = retrieveStatelessIcon("icons/bot-toolwindow.svg", svgLoader, iconData) +// Load the "close" icon from the IDE's AllIcons class +Icon( + "actions/close.svg", + iconClass = AllIcons::class.java, + contentDescription = "Close", +) ``` +To obtain a `Painter`, instead, you'd use: + +```kotlin +val painterProvider = rememberResourcePainterProvider( + path = "actions/close.svg", + iconClass = AllIcons::class.java +) +val painter by painterProvider.getPainter() +``` + +#### Icon runtime patching +Jewel emulates the under-the-hood machinations that happen in the IntelliJ Platform when loading icons. Specifically, +the resource will be subject to some transformations before being loaded. + +For example, in the IDE, if New UI is active, the icon path may be replaced with a different one. Some key colors in SVG +icons will also be replaced based on the current theme. See +[the docs](https://plugins.jetbrains.com/docs/intellij/work-with-icons-and-images.html#new-ui-icons). + +Beyond that, even in standalone, Jewel will pick up icons with the appropriate dark/light variant for the current theme, +and for bitmap icons it will try to pick the 2x variants based on the `LocalDensity`. + +If you want to learn more about this system, the entry point is the `PainterHint` class. + ### Swing interoperability As this is Compose for Desktop, you get a good degree of interoperability with Swing. To avoid glitches and z-order @@ -79,7 +169,7 @@ issues, you should enable the before you initialize Compose content. The `ToolWindow.addComposeTab()` extension function provided by the `ide-laf-bridge` module will take care of that for -you, but if you want to also enable it in other scenarios and in standalone applications, you can call the +you. However, if you want to also enable it in other scenarios and in standalone applications, you can call the `enableNewSwingCompositing()` function in your Compose entry points (that is, right before creating a `ComposePanel`). > [!NOTE] diff --git a/art/docs/custom-chrome.png b/art/docs/custom-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a331a18fe9e8cf42fbb73fa19ec25fde6be44d GIT binary patch literal 46405 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 Date: Sun, 22 Oct 2023 13:55:34 +0100 Subject: [PATCH 3/5] Add getting started section --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cc8e12184..6bb08675c 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,42 @@ desktop-optimized theme and set of components. > > Use at your own risk! -Jewel provides stand-alone implementations of the IntelliJ Platform themes that can be used in any Compose for Desktop -application, and a Swing LaF Bridge that only works in the IntelliJ Platform (i.e., used to create IDE plugins), but -automatically mirrors the current Swing LaF into Compose for a native-looking, consistent UI. +Jewel provides an implementation of the IntelliJ Platform themes that can be used in any Compose for Desktop +application. Additionally, it has a Swing LaF Bridge that only works in the IntelliJ Platform (i.e., used to create IDE +plugins), but automatically mirrors the current Swing LaF into Compose for a native-looking, consistent UI. + +## Getting started +To use Jewel in your app, you only need to add the relevant dependency. There are two scenarios: standalone Compose for +Desktop app, and IntelliJ Platform plugin. + +For now, Jewel artifacts aren't available on Maven Central. You need to add a custom Maven repository to your build: + +```kotlin +repositories { + maven("https://packages.jetbrains.team/maven/p/kpm/public/") + // Any other repositories you need (e.g., mavenCentral()) +} +``` + +If you're writing a **standalone app**, then you should depend on the `int-ui-standalone` artifact: + +```kotlin +dependencies { + implementation("org.jetbrains.jewel:jewel-int-ui-standalone:[jewel version]") + + // Optional, for custom decorated windows: + implementation("org.jetbrains.jewel:jewel-int-ui-decorated-window:[jewel version]") +} +``` + +For an **IntelliJ Platform plugin**, then you should depend on the appropriate `ide-laf-bridge` artifact: + +```kotlin +dependencies { + // The platform version is a supported major IJP version (e.g., 232 or 233 for 2023.2 and 2023.3 respectively) + implementation("org.jetbrains.jewel:jewel-ide-laf-bridge-platform-specific:[jewel version]-ij-[platform version]") +} +``` ## Project structure From 42cdb838afb2ebe60404895c0b741e0a6f8b4a77 Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Sun, 22 Oct 2023 14:24:41 +0100 Subject: [PATCH 4/5] Add stateful icon example --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 6bb08675c..91b80ae10 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ desktop-optimized theme and set of components. > This project is in active development, and caution is advised when considering it for production uses. You _can_ use > it, but you should expect APIs to change often, things to move around and/or break, and all that jazz. Binary > compatibility is not guaranteed across releases, and APIs are still in flux and subject to change. -> -> Writing 3rd party IntelliJ Plugins in Compose for Desktop is currently **not officially supported** by the IntelliJ +> +> Writing 3rd party IntelliJ Plugins in Compose for Desktop is currently **not officially supported** by the IntelliJ > Platform. It should work, but your mileage may vary, and if things break you're on your own. > > Use at your own risk! @@ -23,8 +23,9 @@ application. Additionally, it has a Swing LaF Bridge that only works in the Inte plugins), but automatically mirrors the current Swing LaF into Compose for a native-looking, consistent UI. ## Getting started + To use Jewel in your app, you only need to add the relevant dependency. There are two scenarios: standalone Compose for -Desktop app, and IntelliJ Platform plugin. +Desktop app, and IntelliJ Platform plugin. For now, Jewel artifacts aren't available on Maven Central. You need to add a custom Maven repository to your build: @@ -39,10 +40,10 @@ If you're writing a **standalone app**, then you should depend on the `int-ui-st ```kotlin dependencies { - implementation("org.jetbrains.jewel:jewel-int-ui-standalone:[jewel version]") + implementation("org.jetbrains.jewel:jewel-int-ui-standalone:[jewel version]") // Optional, for custom decorated windows: - implementation("org.jetbrains.jewel:jewel-int-ui-decorated-window:[jewel version]") + implementation("org.jetbrains.jewel:jewel-int-ui-decorated-window:[jewel version]") } ``` @@ -51,7 +52,7 @@ For an **IntelliJ Platform plugin**, then you should depend on the appropriate ` ```kotlin dependencies { // The platform version is a supported major IJP version (e.g., 232 or 233 for 2023.2 and 2023.3 respectively) - implementation("org.jetbrains.jewel:jewel-ide-laf-bridge-platform-specific:[jewel version]-ij-[platform version]") + implementation("org.jetbrains.jewel:jewel-ide-laf-bridge-platform-specific:[jewel version]-ij-[platform version]") } ``` @@ -101,10 +102,11 @@ IntUiTheme(isDark = false) { // ... } ``` - + If you want more control over the theming, you can use other `IntUiTheme` overloads, like the standalone sample does. - + #### Custom window decoration + The JetBrains Runtime allows windows to have a custom decoration instead of the regular title bar. ![A screenshot of the custom window decoration in the standalone sample](art/docs/custom-chrome.png) @@ -140,7 +142,8 @@ and LaF — and the Compose world. This bridge ensures that we pick up the colours, typography, metrics, and images as defined in the current IntelliJ theme, and apply them to the Compose components as well. This means Jewel will automatically adapt to IntelliJ Platform -themes that use the [standard theming](https://plugins.jetbrains.com/docs/intellij/themes-getting-started.html) mechanisms. +themes that use the [standard theming](https://plugins.jetbrains.com/docs/intellij/themes-getting-started.html) +mechanisms. > [!NOTE] > IntelliJ themes that use non-standard mechanisms (such as providing custom UI implementations for Swing components) @@ -157,7 +160,7 @@ SwingBridgeTheme { #### Accessing icons When you want to draw an icon from the resources, you can either use the `Icon` composable and pass it the resource path -and the corresponding class to look up the classpath from, or go one lever deeper and use the lower level, +and the corresponding class to look up the classpath from, or go one lever deeper and use the lower level, `Painter`-based API. The `Icon` approach looks like this: @@ -182,17 +185,45 @@ val painter by painterProvider.getPainter() ``` #### Icon runtime patching + Jewel emulates the under-the-hood machinations that happen in the IntelliJ Platform when loading icons. Specifically, the resource will be subject to some transformations before being loaded. For example, in the IDE, if New UI is active, the icon path may be replaced with a different one. Some key colors in SVG -icons will also be replaced based on the current theme. See +icons will also be replaced based on the current theme. See [the docs](https://plugins.jetbrains.com/docs/intellij/work-with-icons-and-images.html#new-ui-icons). Beyond that, even in standalone, Jewel will pick up icons with the appropriate dark/light variant for the current theme, and for bitmap icons it will try to pick the 2x variants based on the `LocalDensity`. -If you want to learn more about this system, the entry point is the `PainterHint` class. +If you have a _stateful_ icon, that is if you need to display different icons based on some state, you can use the +`PainterProvider.getPainter(PainterHint...)` overload. You can then use one of the state-mapping `PainterHint` to let +Jewel load the appropriate icon automatically: + +```kotlin +// myState implements SelectableComponentState and has a ToggleableState property +val myPainter by myPainterProvider.getPainter( + if (myState.toggleableState == ToggleableState.Indeterminate) { + IndeterminateHint + } else { + PainterHint.None + }, + Selected(myState), + Stateful(myState), +) +``` + +Where the `IndeterminateHint` looks like this: + +```kotlin +private object IndeterminateHint : PainterSuffixHint() { + override fun suffix(): String = "Indeterminate" +} +``` + +Assuming the PainterProvider has a base path of `components/myIcon.svg`, Jewel will automatically translate it to the +right path based on the state. If you want to learn more about this system, look at the `PainterHint` interface and its +implementations. ### Swing interoperability @@ -217,6 +248,7 @@ If you don't already have access to the Kotlin Slack, you can request it [here](https://surveys.jetbrains.com/s3/kotlin-slack-sign-up). ## License + Jewel is licensed under the [Apache 2.0 license](https://github.com/JetBrains/jewel/blob/main/LICENSE). ``` From 3cd6d8f8a3cab4cfc5f90f7e9de1d9ae80e9c864 Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Sun, 22 Oct 2023 14:28:22 +0100 Subject: [PATCH 5/5] Fix numbering in readme --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 91b80ae10..219566d95 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ The project is split in modules: Desktop app * `int-ui-decorated-window` has a standalone version of the Int UI styling values for the custom window decoration that can be used in any Compose for Desktop app -5. `ide-laf-bridge` contains the Swing LaF bridge to use in IntelliJ Platform plugins (see more below) +6. `ide-laf-bridge` contains the Swing LaF bridge to use in IntelliJ Platform plugins (see more below) * The `ide-laf-bridge-*` sub-modules contain code that is specific to a certain IntelliJ Platform version -6. `samples` contains the example apps, which showcase the available components: +7. `samples` contains the example apps, which showcase the available components: * `standalone` is a regular CfD app, using the standalone theme definitions and custom window decoration * `ide-plugin` is an IntelliJ plugin that showcases the use of the Swing Bridge @@ -252,17 +252,17 @@ If you don't already have access to the Kotlin Slack, you can request it Jewel is licensed under the [Apache 2.0 license](https://github.com/JetBrains/jewel/blob/main/LICENSE). ``` - Copyright 2022–3 JetBrains s.r.o. +Copyright 2022–3 JetBrains s.r.o. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. ```