diff --git a/Sources/Adwaita/View/Generated/ActionRow.swift b/Sources/Adwaita/View/Generated/ActionRow.swift
index 7932ee4..0e06cc6 100644
--- a/Sources/Adwaita/View/Generated/ActionRow.swift
+++ b/Sources/Adwaita/View/Generated/ActionRow.swift
@@ -2,7 +2,7 @@
// ActionRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/AspectFrame.swift b/Sources/Adwaita/View/Generated/AspectFrame.swift
index 5e0062a..22d56ca 100644
--- a/Sources/Adwaita/View/Generated/AspectFrame.swift
+++ b/Sources/Adwaita/View/Generated/AspectFrame.swift
@@ -2,7 +2,7 @@
// AspectFrame.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Avatar.swift b/Sources/Adwaita/View/Generated/Avatar.swift
index 1cc78aa..8e0188f 100644
--- a/Sources/Adwaita/View/Generated/Avatar.swift
+++ b/Sources/Adwaita/View/Generated/Avatar.swift
@@ -2,7 +2,7 @@
// Avatar.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Banner.swift b/Sources/Adwaita/View/Generated/Banner.swift
index e4592b1..2112039 100644
--- a/Sources/Adwaita/View/Generated/Banner.swift
+++ b/Sources/Adwaita/View/Generated/Banner.swift
@@ -2,7 +2,7 @@
// Banner.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Bin.swift b/Sources/Adwaita/View/Generated/Bin.swift
index eb217e8..944dc71 100644
--- a/Sources/Adwaita/View/Generated/Bin.swift
+++ b/Sources/Adwaita/View/Generated/Bin.swift
@@ -2,7 +2,7 @@
// Bin.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Box.swift b/Sources/Adwaita/View/Generated/Box.swift
index 093a3aa..4027283 100644
--- a/Sources/Adwaita/View/Generated/Box.swift
+++ b/Sources/Adwaita/View/Generated/Box.swift
@@ -2,7 +2,7 @@
// Box.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Button.swift b/Sources/Adwaita/View/Generated/Button.swift
index 2492182..e63e6b4 100644
--- a/Sources/Adwaita/View/Generated/Button.swift
+++ b/Sources/Adwaita/View/Generated/Button.swift
@@ -2,7 +2,7 @@
// Button.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ButtonContent.swift b/Sources/Adwaita/View/Generated/ButtonContent.swift
index efb219c..3d442a6 100644
--- a/Sources/Adwaita/View/Generated/ButtonContent.swift
+++ b/Sources/Adwaita/View/Generated/ButtonContent.swift
@@ -2,7 +2,7 @@
// ButtonContent.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Carousel.swift b/Sources/Adwaita/View/Generated/Carousel.swift
index 78a9137..0e31234 100644
--- a/Sources/Adwaita/View/Generated/Carousel.swift
+++ b/Sources/Adwaita/View/Generated/Carousel.swift
@@ -2,7 +2,7 @@
// Carousel.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/CenterBox.swift b/Sources/Adwaita/View/Generated/CenterBox.swift
index 7c9e229..47901ed 100644
--- a/Sources/Adwaita/View/Generated/CenterBox.swift
+++ b/Sources/Adwaita/View/Generated/CenterBox.swift
@@ -2,7 +2,7 @@
// CenterBox.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/CheckButton.swift b/Sources/Adwaita/View/Generated/CheckButton.swift
index f62af33..ab1c44e 100644
--- a/Sources/Adwaita/View/Generated/CheckButton.swift
+++ b/Sources/Adwaita/View/Generated/CheckButton.swift
@@ -2,7 +2,7 @@
// CheckButton.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Clamp.swift b/Sources/Adwaita/View/Generated/Clamp.swift
index 0d02391..61aa15f 100644
--- a/Sources/Adwaita/View/Generated/Clamp.swift
+++ b/Sources/Adwaita/View/Generated/Clamp.swift
@@ -2,7 +2,7 @@
// Clamp.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ComboRow.swift b/Sources/Adwaita/View/Generated/ComboRow.swift
index ec56bd9..4cb4ebd 100644
--- a/Sources/Adwaita/View/Generated/ComboRow.swift
+++ b/Sources/Adwaita/View/Generated/ComboRow.swift
@@ -2,7 +2,7 @@
// ComboRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/DropDown.swift b/Sources/Adwaita/View/Generated/DropDown.swift
index c1936cc..a42e28d 100644
--- a/Sources/Adwaita/View/Generated/DropDown.swift
+++ b/Sources/Adwaita/View/Generated/DropDown.swift
@@ -2,7 +2,7 @@
// DropDown.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Entry.swift b/Sources/Adwaita/View/Generated/Entry.swift
index a0f6f95..f4f9476 100644
--- a/Sources/Adwaita/View/Generated/Entry.swift
+++ b/Sources/Adwaita/View/Generated/Entry.swift
@@ -2,7 +2,7 @@
// Entry.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/EntryRow.swift b/Sources/Adwaita/View/Generated/EntryRow.swift
index b4abf7f..97310dc 100644
--- a/Sources/Adwaita/View/Generated/EntryRow.swift
+++ b/Sources/Adwaita/View/Generated/EntryRow.swift
@@ -2,7 +2,7 @@
// EntryRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ExpanderRow.swift b/Sources/Adwaita/View/Generated/ExpanderRow.swift
index 0b100e9..44a4846 100644
--- a/Sources/Adwaita/View/Generated/ExpanderRow.swift
+++ b/Sources/Adwaita/View/Generated/ExpanderRow.swift
@@ -2,7 +2,7 @@
// ExpanderRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Fixed.swift b/Sources/Adwaita/View/Generated/Fixed.swift
index 9719fb0..d28dde3 100644
--- a/Sources/Adwaita/View/Generated/Fixed.swift
+++ b/Sources/Adwaita/View/Generated/Fixed.swift
@@ -2,7 +2,7 @@
// Fixed.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/FlowBox.swift b/Sources/Adwaita/View/Generated/FlowBox.swift
index 1a78e81..b224ba4 100644
--- a/Sources/Adwaita/View/Generated/FlowBox.swift
+++ b/Sources/Adwaita/View/Generated/FlowBox.swift
@@ -2,7 +2,7 @@
// FlowBox.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/HeaderBar.swift b/Sources/Adwaita/View/Generated/HeaderBar.swift
index 73dd20d..79c04a6 100644
--- a/Sources/Adwaita/View/Generated/HeaderBar.swift
+++ b/Sources/Adwaita/View/Generated/HeaderBar.swift
@@ -2,7 +2,7 @@
// HeaderBar.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Image.swift b/Sources/Adwaita/View/Generated/Image.swift
index c59d15d..fea4e52 100644
--- a/Sources/Adwaita/View/Generated/Image.swift
+++ b/Sources/Adwaita/View/Generated/Image.swift
@@ -2,7 +2,7 @@
// Image.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Label.swift b/Sources/Adwaita/View/Generated/Label.swift
index 7ed34e7..d073189 100644
--- a/Sources/Adwaita/View/Generated/Label.swift
+++ b/Sources/Adwaita/View/Generated/Label.swift
@@ -2,7 +2,7 @@
// Label.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/LevelBar.swift b/Sources/Adwaita/View/Generated/LevelBar.swift
index f1cbe6e..f95e429 100644
--- a/Sources/Adwaita/View/Generated/LevelBar.swift
+++ b/Sources/Adwaita/View/Generated/LevelBar.swift
@@ -2,7 +2,7 @@
// LevelBar.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/LinkButton.swift b/Sources/Adwaita/View/Generated/LinkButton.swift
index a177b83..9011edf 100644
--- a/Sources/Adwaita/View/Generated/LinkButton.swift
+++ b/Sources/Adwaita/View/Generated/LinkButton.swift
@@ -2,7 +2,7 @@
// LinkButton.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ListBox.swift b/Sources/Adwaita/View/Generated/ListBox.swift
index 3e1988a..b44a07c 100644
--- a/Sources/Adwaita/View/Generated/ListBox.swift
+++ b/Sources/Adwaita/View/Generated/ListBox.swift
@@ -2,7 +2,7 @@
// ListBox.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Menu.swift b/Sources/Adwaita/View/Generated/Menu.swift
index 05ffa70..d2556c5 100644
--- a/Sources/Adwaita/View/Generated/Menu.swift
+++ b/Sources/Adwaita/View/Generated/Menu.swift
@@ -2,7 +2,7 @@
// Menu.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/NavigationView.swift b/Sources/Adwaita/View/Generated/NavigationView.swift
index c6ff408..636eea8 100644
--- a/Sources/Adwaita/View/Generated/NavigationView.swift
+++ b/Sources/Adwaita/View/Generated/NavigationView.swift
@@ -2,7 +2,7 @@
// NavigationView.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Overlay.swift b/Sources/Adwaita/View/Generated/Overlay.swift
index e4ad198..f4f58c4 100644
--- a/Sources/Adwaita/View/Generated/Overlay.swift
+++ b/Sources/Adwaita/View/Generated/Overlay.swift
@@ -2,7 +2,7 @@
// Overlay.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/OverlaySplitView.swift b/Sources/Adwaita/View/Generated/OverlaySplitView.swift
index 8228f68..0b2be31 100644
--- a/Sources/Adwaita/View/Generated/OverlaySplitView.swift
+++ b/Sources/Adwaita/View/Generated/OverlaySplitView.swift
@@ -2,7 +2,7 @@
// OverlaySplitView.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/PasswordEntryRow.swift b/Sources/Adwaita/View/Generated/PasswordEntryRow.swift
index 264db63..9d78b25 100644
--- a/Sources/Adwaita/View/Generated/PasswordEntryRow.swift
+++ b/Sources/Adwaita/View/Generated/PasswordEntryRow.swift
@@ -2,7 +2,7 @@
// PasswordEntryRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Picture.swift b/Sources/Adwaita/View/Generated/Picture.swift
index addd104..ff39c2d 100644
--- a/Sources/Adwaita/View/Generated/Picture.swift
+++ b/Sources/Adwaita/View/Generated/Picture.swift
@@ -2,7 +2,7 @@
// Picture.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Popover.swift b/Sources/Adwaita/View/Generated/Popover.swift
index 3a9966a..e0764e8 100644
--- a/Sources/Adwaita/View/Generated/Popover.swift
+++ b/Sources/Adwaita/View/Generated/Popover.swift
@@ -2,7 +2,7 @@
// Popover.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/PreferencesGroup.swift b/Sources/Adwaita/View/Generated/PreferencesGroup.swift
index 2b5718c..52c7375 100644
--- a/Sources/Adwaita/View/Generated/PreferencesGroup.swift
+++ b/Sources/Adwaita/View/Generated/PreferencesGroup.swift
@@ -2,7 +2,7 @@
// PreferencesGroup.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/PreferencesPage.swift b/Sources/Adwaita/View/Generated/PreferencesPage.swift
index e5ab570..96489da 100644
--- a/Sources/Adwaita/View/Generated/PreferencesPage.swift
+++ b/Sources/Adwaita/View/Generated/PreferencesPage.swift
@@ -2,7 +2,7 @@
// PreferencesPage.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/PreferencesRow.swift b/Sources/Adwaita/View/Generated/PreferencesRow.swift
index 02be8af..a91d8ec 100644
--- a/Sources/Adwaita/View/Generated/PreferencesRow.swift
+++ b/Sources/Adwaita/View/Generated/PreferencesRow.swift
@@ -2,7 +2,7 @@
// PreferencesRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ProgressBar.swift b/Sources/Adwaita/View/Generated/ProgressBar.swift
index e46332c..045d3b0 100644
--- a/Sources/Adwaita/View/Generated/ProgressBar.swift
+++ b/Sources/Adwaita/View/Generated/ProgressBar.swift
@@ -2,7 +2,7 @@
// ProgressBar.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ScrolledWindow.swift b/Sources/Adwaita/View/Generated/ScrolledWindow.swift
index 923a1e2..f509421 100644
--- a/Sources/Adwaita/View/Generated/ScrolledWindow.swift
+++ b/Sources/Adwaita/View/Generated/ScrolledWindow.swift
@@ -2,7 +2,7 @@
// ScrolledWindow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/SearchBar.swift b/Sources/Adwaita/View/Generated/SearchBar.swift
index 585010e..5def1c6 100644
--- a/Sources/Adwaita/View/Generated/SearchBar.swift
+++ b/Sources/Adwaita/View/Generated/SearchBar.swift
@@ -2,7 +2,7 @@
// SearchBar.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/SearchEntry.swift b/Sources/Adwaita/View/Generated/SearchEntry.swift
index 3d702b1..60c4fa3 100644
--- a/Sources/Adwaita/View/Generated/SearchEntry.swift
+++ b/Sources/Adwaita/View/Generated/SearchEntry.swift
@@ -2,7 +2,7 @@
// SearchEntry.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Separator.swift b/Sources/Adwaita/View/Generated/Separator.swift
index bb4a309..a5f3aa0 100644
--- a/Sources/Adwaita/View/Generated/Separator.swift
+++ b/Sources/Adwaita/View/Generated/Separator.swift
@@ -2,7 +2,7 @@
// Separator.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/SpinRow.swift b/Sources/Adwaita/View/Generated/SpinRow.swift
index 088137f..42b31df 100644
--- a/Sources/Adwaita/View/Generated/SpinRow.swift
+++ b/Sources/Adwaita/View/Generated/SpinRow.swift
@@ -2,7 +2,7 @@
// SpinRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/Spinner.swift b/Sources/Adwaita/View/Generated/Spinner.swift
index 5831839..ae61470 100644
--- a/Sources/Adwaita/View/Generated/Spinner.swift
+++ b/Sources/Adwaita/View/Generated/Spinner.swift
@@ -2,7 +2,7 @@
// Spinner.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/SplitButton.swift b/Sources/Adwaita/View/Generated/SplitButton.swift
index d1295a4..3dfece7 100644
--- a/Sources/Adwaita/View/Generated/SplitButton.swift
+++ b/Sources/Adwaita/View/Generated/SplitButton.swift
@@ -2,7 +2,7 @@
// SplitButton.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/StatusPage.swift b/Sources/Adwaita/View/Generated/StatusPage.swift
index 3caa606..39cb751 100644
--- a/Sources/Adwaita/View/Generated/StatusPage.swift
+++ b/Sources/Adwaita/View/Generated/StatusPage.swift
@@ -2,7 +2,7 @@
// StatusPage.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/SwitchRow.swift b/Sources/Adwaita/View/Generated/SwitchRow.swift
index 8083442..ad999af 100644
--- a/Sources/Adwaita/View/Generated/SwitchRow.swift
+++ b/Sources/Adwaita/View/Generated/SwitchRow.swift
@@ -2,7 +2,7 @@
// SwitchRow.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ToastOverlay.swift b/Sources/Adwaita/View/Generated/ToastOverlay.swift
index b661712..809c267 100644
--- a/Sources/Adwaita/View/Generated/ToastOverlay.swift
+++ b/Sources/Adwaita/View/Generated/ToastOverlay.swift
@@ -2,7 +2,7 @@
// ToastOverlay.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ToggleButton.swift b/Sources/Adwaita/View/Generated/ToggleButton.swift
index 45f802a..c09eaea 100644
--- a/Sources/Adwaita/View/Generated/ToggleButton.swift
+++ b/Sources/Adwaita/View/Generated/ToggleButton.swift
@@ -2,7 +2,7 @@
// ToggleButton.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/ToggleGroup.swift b/Sources/Adwaita/View/Generated/ToggleGroup.swift
new file mode 100644
index 0000000..3d6c795
--- /dev/null
+++ b/Sources/Adwaita/View/Generated/ToggleGroup.swift
@@ -0,0 +1,190 @@
+//
+// ToggleGroup.swift
+// Adwaita
+//
+// Created by auto-generation on 03.11.25.
+//
+
+import CAdw
+import LevenshteinTransformations
+
+/// A group of exclusive toggles.
+///
+///
+///
+/// `AdwToggleGroup` presents a set of exclusive toggles, represented as
+/// `Toggle` objects. Each toggle can display an icon, a label, an icon
+/// and a label, or a custom child.
+///
+/// Toggles are indexed by their position, with the first toggle being equivalent
+/// to 0, and so on. Use the ``active(_:)`` to get that position.
+///
+/// Toggles can also have optional names, set via the ``name(_:)``
+/// property. The name of the active toggle can be accessed via the
+/// ``activeName(_:)`` property.
+///
+/// `AdwToggle` objects can be retrieved via their index or name, using
+/// `ToggleGroup.get_toggle` or `ToggleGroup.get_toggle_by_name`
+/// respectively. `AdwToggleGroup` also provides a `Gtk.SelectionModel` of
+/// its toggles via the ``toggles(_:)`` property.
+///
+/// `AdwToggleGroup` is orientable, and the toggles can be displayed horizontally
+/// or vertically. This is mostly useful for icon-only toggles.
+///
+/// Use the ``homogeneous(_:)`` property to make the toggles take
+/// the same size, and the ``canShrink(_:)`` to control whether
+/// the toggles can ellipsize.
+///
+/// Example of an `AdwToggleGroup` UI definition:
+///
+/// ```xml
+///
+/// ```
+///
+/// See also: `InlineViewSwitcher`.
+///
+///
+public struct ToggleGroup: AdwaitaWidget {
+
+ /// Additional update functions for type extensions.
+ var updateFunctions: [(ViewStorage, WidgetData, Bool) -> Void] = []
+ /// Additional appear functions for type extensions.
+ var appearFunctions: [(ViewStorage, WidgetData) -> Void] = []
+
+ /// The index of the active toggle.
+ ///
+ /// Setting the index to a larger value than the number of toggles in the group
+ /// unsets the current active toggle.
+ ///
+ /// If no toggle is active, the property will be set to
+ /// `Gtk.INVALID_LIST_POSITION`.
+ var active: Binding?
+ /// The name of the active toggle.
+ ///
+ /// The name can be set via ``name(_:)``. If the currently active
+ /// toggle doesn't have a name, the property will be set to `NULL`.
+ ///
+ /// Set it to `NULL` to unset the current active toggle.
+ var activeName: Binding?
+ /// Whether the toggles can be smaller than the natural size of their contents.
+ ///
+ /// If set to `true`, the toggle labels will ellipsize.
+ ///
+ /// See ``canShrink(_:)``.
+ var canShrink: Bool?
+ /// Whether all toggles take the same size.
+ var homogeneous: Bool?
+ /// The number of toggles within the group.
+ var nToggles: Binding?
+
+ /// Initialize `ToggleGroup`.
+ public init() {
+ }
+
+ /// The view storage.
+ /// - Parameters:
+ /// - modifiers: Modify views before being updated.
+ /// - type: The view render data type.
+ /// - Returns: The view storage.
+ public func container(data: WidgetData, type: Data.Type) -> ViewStorage where Data: ViewRenderData {
+ let storage = ViewStorage(adw_toggle_group_new()?.opaque())
+ for function in appearFunctions {
+ function(storage, data)
+ }
+ update(storage, data: data, updateProperties: true, type: type)
+
+ return storage
+ }
+
+ /// Update the stored content.
+ /// - Parameters:
+ /// - storage: The storage to update.
+ /// - modifiers: Modify views before being updated
+ /// - updateProperties: Whether to update the view's properties.
+ /// - type: The view render data type.
+ public func update(_ storage: ViewStorage, data: WidgetData, updateProperties: Bool, type: Data.Type) where Data: ViewRenderData {
+ storage.modify { widget in
+
+ storage.notify(name: "active") {
+ let newValue = UInt(adw_toggle_group_get_active(storage.opaquePointer))
+if let active, newValue != active.wrappedValue {
+ active.wrappedValue = newValue
+}
+ }
+ storage.notify(name: "active-name") {
+ let newValue = String(cString: adw_toggle_group_get_active_name(storage.opaquePointer))
+if let activeName, newValue != activeName.wrappedValue {
+ activeName.wrappedValue = newValue
+}
+ }
+ storage.notify(name: "n-toggles") {
+ let newValue = UInt(adw_toggle_group_get_n_toggles(storage.opaquePointer))
+if let nToggles, newValue != nToggles.wrappedValue {
+ nToggles.wrappedValue = newValue
+}
+ }
+ if let active, updateProperties, (UInt(adw_toggle_group_get_active(storage.opaquePointer))) != active.wrappedValue {
+ adw_toggle_group_set_active(storage.opaquePointer, active.wrappedValue.cInt)
+ }
+ if let activeName, updateProperties, (String(cString: adw_toggle_group_get_active_name(storage.opaquePointer))) != activeName.wrappedValue {
+ adw_toggle_group_set_active_name(storage.opaquePointer, activeName.wrappedValue)
+ }
+ if let canShrink, updateProperties, (storage.previousState as? Self)?.canShrink != canShrink {
+ adw_toggle_group_set_can_shrink(widget, canShrink.cBool)
+ }
+ if let homogeneous, updateProperties, (storage.previousState as? Self)?.homogeneous != homogeneous {
+ adw_toggle_group_set_homogeneous(widget, homogeneous.cBool)
+ }
+
+
+
+ }
+ for function in updateFunctions {
+ function(storage, data, updateProperties)
+ }
+ if updateProperties {
+ storage.previousState = self
+ }
+ }
+
+ /// The index of the active toggle.
+ ///
+ /// Setting the index to a larger value than the number of toggles in the group
+ /// unsets the current active toggle.
+ ///
+ /// If no toggle is active, the property will be set to
+ /// `Gtk.INVALID_LIST_POSITION`.
+ public func active(_ active: Binding?) -> Self {
+ modify { $0.active = active }
+ }
+
+ /// The name of the active toggle.
+ ///
+ /// The name can be set via ``name(_:)``. If the currently active
+ /// toggle doesn't have a name, the property will be set to `NULL`.
+ ///
+ /// Set it to `NULL` to unset the current active toggle.
+ public func activeName(_ activeName: Binding?) -> Self {
+ modify { $0.activeName = activeName }
+ }
+
+ /// Whether the toggles can be smaller than the natural size of their contents.
+ ///
+ /// If set to `true`, the toggle labels will ellipsize.
+ ///
+ /// See ``canShrink(_:)``.
+ public func canShrink(_ canShrink: Bool? = true) -> Self {
+ modify { $0.canShrink = canShrink }
+ }
+
+ /// Whether all toggles take the same size.
+ public func homogeneous(_ homogeneous: Bool? = true) -> Self {
+ modify { $0.homogeneous = homogeneous }
+ }
+
+ /// The number of toggles within the group.
+ public func nToggles(_ nToggles: Binding?) -> Self {
+ modify { $0.nToggles = nToggles }
+ }
+
+}
diff --git a/Sources/Adwaita/View/Generated/ToolbarView.swift b/Sources/Adwaita/View/Generated/ToolbarView.swift
index 885f9fc..616a212 100644
--- a/Sources/Adwaita/View/Generated/ToolbarView.swift
+++ b/Sources/Adwaita/View/Generated/ToolbarView.swift
@@ -2,7 +2,7 @@
// ToolbarView.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/Generated/WindowTitle.swift b/Sources/Adwaita/View/Generated/WindowTitle.swift
index 9481bb1..ee7e7e5 100644
--- a/Sources/Adwaita/View/Generated/WindowTitle.swift
+++ b/Sources/Adwaita/View/Generated/WindowTitle.swift
@@ -2,7 +2,7 @@
// WindowTitle.swift
// Adwaita
//
-// Created by auto-generation on 31.10.25.
+// Created by auto-generation on 03.11.25.
//
import CAdw
diff --git a/Sources/Adwaita/View/ToggleGroup+.swift b/Sources/Adwaita/View/ToggleGroup+.swift
new file mode 100644
index 0000000..c53cc55
--- /dev/null
+++ b/Sources/Adwaita/View/ToggleGroup+.swift
@@ -0,0 +1,105 @@
+//
+// ToggleGroup+.swift
+// Adwaita
+//
+// Created by david-swift on 03.11.25.
+//
+
+import CAdw
+import LevenshteinTransformations
+
+extension ToggleGroup {
+
+ /// The identifier for the values.
+ static var values: String { "values" }
+ /// The identifier for the toggles.
+ static var toggle: String { "Toggle::" }
+
+ /// Initialize a toggle group.
+ /// - Parameters:
+ /// - selection: The selected value.
+ /// - values: The available values.
+ public init(
+ selection: Binding,
+ values: [Element]
+ ) where Element: ToggleGroupItem {
+ self.init()
+ appearFunctions.append { storage, _ in
+ storage.notify(name: "active-name", id: "init") {
+ if let name = adw_toggle_group_get_active_name(storage.opaquePointer),
+ let values = storage.fields[Self.values] as? [Element],
+ let value = values.first(where: { $0.id.description == String(cString: name) }) {
+ selection.wrappedValue = value.id
+ }
+ }
+ Self.updateContent(
+ storage: storage,
+ selection: selection.wrappedValue,
+ values: values,
+ updateProperties: true
+ )
+ }
+ updateFunctions.append { storage, _, updateProperties in
+ Self.updateContent(
+ storage: storage,
+ selection: selection.wrappedValue,
+ values: values,
+ updateProperties: updateProperties
+ )
+ }
+ }
+
+ /// Update the combo row's content.
+ /// - Parameters:
+ /// - storage: The view storage.
+ /// - values: The elements.
+ /// - updateProperties: Whether to update the properties.
+ static func updateContent(
+ storage: ViewStorage,
+ selection: Element.ID,
+ values: [Element],
+ updateProperties: Bool
+ ) where Element: ToggleGroupItem {
+ guard updateProperties else {
+ return
+ }
+ let old = storage.fields[Self.values] as? [Element] ?? []
+ old.identifiableTransform(
+ to: values,
+ functions: .init { index in
+ if let id = old[safe: index]?.id.description,
+ let toggle = storage.fields[Self.toggle + id] as? OpaquePointer {
+ adw_toggle_group_remove(storage.opaquePointer, toggle)
+ }
+ } insert: { _, element in
+ let toggle = adw_toggle_new()
+ adw_toggle_set_name(toggle, element.id.description)
+ if element.showLabel {
+ adw_toggle_set_label(toggle, element.id.description)
+ } else {
+ adw_toggle_set_tooltip(toggle, element.id.description)
+ }
+ if let icon = element.icon {
+ adw_toggle_set_icon_name(toggle, icon.string)
+ }
+ storage.fields[Self.toggle + element.id.description] = toggle
+ adw_toggle_group_add(storage.opaquePointer, toggle)
+ }
+ )
+ storage.fields[Self.values] = values
+ adw_toggle_group_set_active_name(storage.opaquePointer, selection.description)
+ }
+
+}
+
+/// An item of a toggle group.
+public protocol ToggleGroupItem: Identifiable where Self.ID: CustomStringConvertible {
+
+ /// The item's icon.
+ var icon: Icon? { get }
+ /// Whether to show the label in the UI (the identifier's string conversion).
+ ///
+ /// Otherwise, it will be used as the tooltip.
+ var showLabel: Bool { get }
+
+}
diff --git a/Sources/Demo/Page.swift b/Sources/Demo/Page.swift
index df94fa7..8ae7b0a 100644
--- a/Sources/Demo/Page.swift
+++ b/Sources/Demo/Page.swift
@@ -35,6 +35,7 @@ enum Page: String, Identifiable, CaseIterable, Codable, CustomStringConvertible
case textEditor
case splitView
case symbol
+ case toggleGroup
var id: Self {
self
@@ -56,6 +57,8 @@ enum Page: String, Identifiable, CaseIterable, Codable, CustomStringConvertible
return "Text Editor"
case .splitView:
return "Split View"
+ case .toggleGroup:
+ return "Toggle Group"
default:
return rawValue.capitalized
}
@@ -118,6 +121,8 @@ enum Page: String, Identifiable, CaseIterable, Codable, CustomStringConvertible
return "A split view whose panes are ajustable in size"
case .symbol:
return "Display a symbolic image"
+ case .toggleGroup:
+ return "Select an item"
}
}
@@ -171,6 +176,8 @@ enum Page: String, Identifiable, CaseIterable, Codable, CustomStringConvertible
SplitViewDemo()
case .symbol:
SymbolDemo()
+ case .toggleGroup:
+ ToggleGroupDemo()
}
}
// swiftlint:enable cyclomatic_complexity
diff --git a/Sources/Demo/ToggleGroupDemo.swift b/Sources/Demo/ToggleGroupDemo.swift
new file mode 100644
index 0000000..1272130
--- /dev/null
+++ b/Sources/Demo/ToggleGroupDemo.swift
@@ -0,0 +1,46 @@
+//
+// ToggleGroupDemo.swift
+// Adwaita
+//
+// Created by david-swift on 03.11.25.
+//
+
+// swiftlint:disable missing_docs no_magic_numbers
+
+import Adwaita
+import Foundation
+
+struct ToggleGroupDemo: View {
+
+ @State private var selection: Subview = .view1
+
+ var view: Body {
+ ToggleGroup(selection: $selection, values: Subview.allCases)
+ .padding()
+ VStack {
+ Text(selection.rawValue)
+ .padding()
+ .padding(50, .vertical)
+ }
+ .card()
+ .padding()
+ }
+
+ enum Subview: String, ToggleGroupItem, CaseIterable, CustomStringConvertible {
+
+ case view1 = "View 1"
+ case view2 = "View 2"
+
+ var id: Self { self }
+
+ var description: String { rawValue }
+
+ var icon: Icon? { nil }
+
+ var showLabel: Bool { true }
+
+ }
+
+}
+
+// swiftlint:enable missing_docs no_magic_numbers
diff --git a/Sources/Generation/GenerationConfiguration.swift b/Sources/Generation/GenerationConfiguration.swift
index 2170757..88de1af 100644
--- a/Sources/Generation/GenerationConfiguration.swift
+++ b/Sources/Generation/GenerationConfiguration.swift
@@ -162,7 +162,12 @@ struct GenerationConfiguration {
class: "NavigationView",
excludeProperties: ["navigation-stack", "visible-page"]
),
- .init(class: "Spinner")
+ .init(class: "Spinner"),
+ .init(
+ class: "ToggleGroup",
+ bindings: [.init(property: "active"), .init(property: "active-name"), .init(property: "n-toggles")],
+ excludeProperties: ["toggles"]
+ )
]
/// The Gtk widgets.