Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/ComposeNet.Compose/ComposeBridges.cs
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,55 @@ public static partial void OutlinedIconToggleButton(bool @checked, [Callback(typ
public static partial void FloatingActionButton(IFunction0 onClick, IModifier? modifier,
IFunction2 content, IComposer composer);

// androidx.compose.material3.FloatingActionButtonKt.SmallFloatingActionButton-X-z6DiA
[ComposeBridge(
Class = "androidx/compose/material3/FloatingActionButtonKt",
JvmName = "SmallFloatingActionButton-X-z6DiA",
Signature = "(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;" +
"Landroidx/compose/ui/graphics/Shape;JJ" +
"Landroidx/compose/material3/FloatingActionButtonElevation;" +
"Landroidx/compose/foundation/interaction/MutableInteractionSource;" +
"Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V",
Defaults = typeof(SmallFloatingActionButtonDefault))]
[ComposeFacade]
public static partial void SmallFloatingActionButton(IFunction0 onClick, IModifier? modifier,
IFunction2 content, IComposer composer);

// androidx.compose.material3.FloatingActionButtonKt.LargeFloatingActionButton-X-z6DiA
[ComposeBridge(
Class = "androidx/compose/material3/FloatingActionButtonKt",
JvmName = "LargeFloatingActionButton-X-z6DiA",
Signature = "(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;" +
"Landroidx/compose/ui/graphics/Shape;JJ" +
"Landroidx/compose/material3/FloatingActionButtonElevation;" +
"Landroidx/compose/foundation/interaction/MutableInteractionSource;" +
"Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V",
Defaults = typeof(LargeFloatingActionButtonDefault))]
[ComposeFacade]
public static partial void LargeFloatingActionButton(IFunction0 onClick, IModifier? modifier,
IFunction2 content, IComposer composer);

// androidx.compose.material3.FloatingActionButtonKt.ExtendedFloatingActionButton-ElI5-7k
// (icon + text + expanded multi-slot variant — the canonical animated extended FAB)
[ComposeBridge(
Class = "androidx/compose/material3/FloatingActionButtonKt",
JvmName = "ExtendedFloatingActionButton-ElI5-7k",
Signature = "(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;" +
"Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Z" +
"Landroidx/compose/ui/graphics/Shape;JJ" +
"Landroidx/compose/material3/FloatingActionButtonElevation;" +
"Landroidx/compose/foundation/interaction/MutableInteractionSource;" +
"Landroidx/compose/runtime/Composer;II)V",
Defaults = typeof(ExtendedFloatingActionButtonDefault))]
[ComposeFacade]
public static partial void ExtendedFloatingActionButton(
IFunction2 text,
IFunction2 icon,
IFunction0 onClick,
IModifier? modifier,
bool expanded,
IComposer composer);

// androidx.compose.material3.SurfaceKt.Surface-T9BRK9s (non-interactive)
[ComposeBridge(
Class = "androidx/compose/material3/SurfaceKt",
Expand Down
18 changes: 18 additions & 0 deletions src/ComposeNet.Compose/ComposeDefaults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,24 @@
"!onClick", "modifier", "shape", "containerColor", "contentColor",
"elevation", "interactionSource", "!content")]

// androidx.compose.material3.FloatingActionButtonKt.SmallFloatingActionButton-X-z6DiA:
// same shape as FloatingActionButton.
[assembly: ComposeDefaults("SmallFloatingActionButtonDefault",
"!onClick", "modifier", "shape", "containerColor", "contentColor",
"elevation", "interactionSource", "!content")]

// androidx.compose.material3.FloatingActionButtonKt.LargeFloatingActionButton-X-z6DiA:
// same shape as FloatingActionButton.
[assembly: ComposeDefaults("LargeFloatingActionButtonDefault",
"!onClick", "modifier", "shape", "containerColor", "contentColor",
"elevation", "interactionSource", "!content")]

// androidx.compose.material3.FloatingActionButtonKt.ExtendedFloatingActionButton-ElI5-7k:
// 10 user params; text/icon/onClick/expanded always provided by the caller.
[assembly: ComposeDefaults("ExtendedFloatingActionButtonDefault",
"!text", "!icon", "!onClick", "modifier", "!expanded", "shape",
"containerColor", "contentColor", "elevation", "interactionSource")]

// androidx.compose.material3.SurfaceKt.Surface-T9BRK9s (non-interactive):
// 8 user params, only bit 7 = content provided.
[assembly: ComposeDefaults("SurfaceDefault",
Expand Down
22 changes: 22 additions & 0 deletions src/ComposeNet.Compose/ExtendedFloatingActionButton.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace ComposeNet;

/// <summary>
/// Material 3 <c>ExtendedFloatingActionButton</c> — the animated
/// extended FAB with separate <c>Icon</c> and <c>Text</c> slots and an
/// <c>Expanded</c> flag that animates between the icon-only and
/// icon&#x202F;+&#x202F;text states.
///
/// <code>
/// new ExtendedFloatingActionButton(onClick: () => count.Value++, expanded: true)
/// {
/// Icon = new Text("+"),
/// Text = new Text("Add"),
/// }
/// </code>
Comment thread
jonathanpeppers marked this conversation as resolved.
///
/// Both <see cref="Icon"/> and <see cref="Text"/> are required — the
/// underlying Kotlin parameters have no default. Setting either to
/// <c>null</c> throws <see cref="System.InvalidOperationException"/> at
/// render time.
/// </summary>
public sealed partial class ExtendedFloatingActionButton;
16 changes: 16 additions & 0 deletions src/ComposeNet.Compose/LargeFloatingActionButton.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace ComposeNet;

/// <summary>
/// Material 3 <c>LargeFloatingActionButton</c>. Identical shape to
/// <see cref="FloatingActionButton"/> — just the larger (96&#x202F;dp)
/// container. Use the collection-initializer form for a single icon
/// child:
///
/// <code>
/// new LargeFloatingActionButton(onClick: () => count.Value++)
/// {
/// new Text("+"),
/// }
Comment thread
jonathanpeppers marked this conversation as resolved.
/// </code>
/// </summary>
public sealed partial class LargeFloatingActionButton;
10 changes: 10 additions & 0 deletions src/ComposeNet.Compose/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,12 @@ ComposeNet.ExposedDropdownMenu
ComposeNet.ExposedDropdownMenu.ExposedDropdownMenu(bool expanded, System.Action! onDismissRequest) -> void
ComposeNet.ExposedDropdownMenuBox
ComposeNet.ExposedDropdownMenuBox.ExposedDropdownMenuBox(bool expanded, System.Action<bool>! onExpandedChange) -> void
ComposeNet.ExtendedFloatingActionButton
ComposeNet.ExtendedFloatingActionButton.ExtendedFloatingActionButton(System.Action! onClick, bool expanded) -> void
ComposeNet.ExtendedFloatingActionButton.Icon.get -> ComposeNet.ComposableNode?
ComposeNet.ExtendedFloatingActionButton.Icon.set -> void
ComposeNet.ExtendedFloatingActionButton.Text.get -> ComposeNet.ComposableNode?
ComposeNet.ExtendedFloatingActionButton.Text.set -> void
ComposeNet.FilledIconButton
ComposeNet.FilledIconButton.FilledIconButton(System.Action! onClick) -> void
ComposeNet.FilledIconToggleButton
Expand Down Expand Up @@ -280,6 +286,8 @@ ComposeNet.LargeFlexibleTopAppBar.Subtitle.get -> ComposeNet.ComposableNode?
ComposeNet.LargeFlexibleTopAppBar.Subtitle.set -> void
ComposeNet.LargeFlexibleTopAppBar.Title.get -> ComposeNet.ComposableNode?
ComposeNet.LargeFlexibleTopAppBar.Title.set -> void
ComposeNet.LargeFloatingActionButton
ComposeNet.LargeFloatingActionButton.LargeFloatingActionButton(System.Action! onClick) -> void
ComposeNet.LargeTopAppBar
ComposeNet.LargeTopAppBar.Actions.get -> ComposeNet.ComposableNode?
ComposeNet.LargeTopAppBar.Actions.set -> void
Expand Down Expand Up @@ -562,6 +570,8 @@ ComposeNet.SingleChoiceSegmentedButtonRow
ComposeNet.SingleChoiceSegmentedButtonRow.SingleChoiceSegmentedButtonRow() -> void
ComposeNet.Slider
ComposeNet.Slider.Slider(float value, System.Action<float>! onValueChange) -> void
ComposeNet.SmallFloatingActionButton
ComposeNet.SmallFloatingActionButton.SmallFloatingActionButton(System.Action! onClick) -> void
ComposeNet.Snackbar
ComposeNet.Snackbar.Action.get -> ComposeNet.ComposableNode?
ComposeNet.Snackbar.Action.set -> void
Expand Down
16 changes: 16 additions & 0 deletions src/ComposeNet.Compose/SmallFloatingActionButton.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace ComposeNet;

/// <summary>
/// Material 3 <c>SmallFloatingActionButton</c>. Identical shape to
/// <see cref="FloatingActionButton"/> — just the smaller (40&#x202F;dp)
/// container. Use the collection-initializer form for a single icon
/// child:
///
/// <code>
/// new SmallFloatingActionButton(onClick: () => count.Value++)
/// {
/// new Text("+"),
/// }
Comment thread
jonathanpeppers marked this conversation as resolved.
/// </code>
/// </summary>
public sealed partial class SmallFloatingActionButton;
10 changes: 10 additions & 0 deletions src/ComposeNet.Sample/MainActivity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,16 @@ protected override void OnCreate(Bundle? savedInstanceState)
{
new Text("✕"),
},
new Row
{
new SmallFloatingActionButton(onClick: () => count++) { new Text("+") },
new LargeFloatingActionButton(onClick: () => count++) { new Text("+") },
},
new ExtendedFloatingActionButton(onClick: () => count++, expanded: true)
{
Icon = new Text("✓"),
Text = new Text("Increment"),
},
new Button(onClick: () => showSnack.Value = true)
{
new Text("Show snackbar"),
Expand Down
Loading