diff --git a/src/ComposeNet.Compose/ComposeBridges.cs b/src/ComposeNet.Compose/ComposeBridges.cs
index 72e4a8a7..bcfba35c 100644
--- a/src/ComposeNet.Compose/ComposeBridges.cs
+++ b/src/ComposeNet.Compose/ComposeBridges.cs
@@ -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",
diff --git a/src/ComposeNet.Compose/ComposeDefaults.cs b/src/ComposeNet.Compose/ComposeDefaults.cs
index 1605d39a..74bc7243 100644
--- a/src/ComposeNet.Compose/ComposeDefaults.cs
+++ b/src/ComposeNet.Compose/ComposeDefaults.cs
@@ -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",
diff --git a/src/ComposeNet.Compose/ExtendedFloatingActionButton.cs b/src/ComposeNet.Compose/ExtendedFloatingActionButton.cs
new file mode 100644
index 00000000..aaeeb522
--- /dev/null
+++ b/src/ComposeNet.Compose/ExtendedFloatingActionButton.cs
@@ -0,0 +1,22 @@
+namespace ComposeNet;
+
+///
+/// Material 3 ExtendedFloatingActionButton — the animated
+/// extended FAB with separate Icon and Text slots and an
+/// Expanded flag that animates between the icon-only and
+/// icon + text states.
+///
+///
+/// new ExtendedFloatingActionButton(onClick: () => count.Value++, expanded: true)
+/// {
+/// Icon = new Text("+"),
+/// Text = new Text("Add"),
+/// }
+///
+///
+/// Both and are required — the
+/// underlying Kotlin parameters have no default. Setting either to
+/// null throws at
+/// render time.
+///
+public sealed partial class ExtendedFloatingActionButton;
diff --git a/src/ComposeNet.Compose/LargeFloatingActionButton.cs b/src/ComposeNet.Compose/LargeFloatingActionButton.cs
new file mode 100644
index 00000000..0d3b8228
--- /dev/null
+++ b/src/ComposeNet.Compose/LargeFloatingActionButton.cs
@@ -0,0 +1,16 @@
+namespace ComposeNet;
+
+///
+/// Material 3 LargeFloatingActionButton. Identical shape to
+/// — just the larger (96 dp)
+/// container. Use the collection-initializer form for a single icon
+/// child:
+///
+///
+/// new LargeFloatingActionButton(onClick: () => count.Value++)
+/// {
+/// new Text("+"),
+/// }
+///
+///
+public sealed partial class LargeFloatingActionButton;
diff --git a/src/ComposeNet.Compose/PublicAPI.Unshipped.txt b/src/ComposeNet.Compose/PublicAPI.Unshipped.txt
index aead0202..a61c6207 100644
--- a/src/ComposeNet.Compose/PublicAPI.Unshipped.txt
+++ b/src/ComposeNet.Compose/PublicAPI.Unshipped.txt
@@ -193,6 +193,12 @@ ComposeNet.ExposedDropdownMenu
ComposeNet.ExposedDropdownMenu.ExposedDropdownMenu(bool expanded, System.Action! onDismissRequest) -> void
ComposeNet.ExposedDropdownMenuBox
ComposeNet.ExposedDropdownMenuBox.ExposedDropdownMenuBox(bool expanded, System.Action! 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
@@ -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
@@ -562,6 +570,8 @@ ComposeNet.SingleChoiceSegmentedButtonRow
ComposeNet.SingleChoiceSegmentedButtonRow.SingleChoiceSegmentedButtonRow() -> void
ComposeNet.Slider
ComposeNet.Slider.Slider(float value, System.Action! onValueChange) -> void
+ComposeNet.SmallFloatingActionButton
+ComposeNet.SmallFloatingActionButton.SmallFloatingActionButton(System.Action! onClick) -> void
ComposeNet.Snackbar
ComposeNet.Snackbar.Action.get -> ComposeNet.ComposableNode?
ComposeNet.Snackbar.Action.set -> void
diff --git a/src/ComposeNet.Compose/SmallFloatingActionButton.cs b/src/ComposeNet.Compose/SmallFloatingActionButton.cs
new file mode 100644
index 00000000..a57198e2
--- /dev/null
+++ b/src/ComposeNet.Compose/SmallFloatingActionButton.cs
@@ -0,0 +1,16 @@
+namespace ComposeNet;
+
+///
+/// Material 3 SmallFloatingActionButton. Identical shape to
+/// — just the smaller (40 dp)
+/// container. Use the collection-initializer form for a single icon
+/// child:
+///
+///
+/// new SmallFloatingActionButton(onClick: () => count.Value++)
+/// {
+/// new Text("+"),
+/// }
+///
+///
+public sealed partial class SmallFloatingActionButton;
diff --git a/src/ComposeNet.Sample/MainActivity.cs b/src/ComposeNet.Sample/MainActivity.cs
index 40123513..084acf69 100644
--- a/src/ComposeNet.Sample/MainActivity.cs
+++ b/src/ComposeNet.Sample/MainActivity.cs
@@ -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"),