🖥
FluidMenuBarExtra
A lightweight tool for building great menu bar extras with SwiftUI.
About
SwiftUI’s built-in MenuBarExtra
API makes it easy to create menu bar applications in pure SwiftUI. However, as of macOS 13 its functionality is extremely limited. Worse, it doesn’t behave correctly (e.g. it doesn’t animate, it doesn’t close the pop-up when the user interacts with other menu items, etc).
FluidMenuBarExtra provides a drop-in replacement to correct these issues.
Key Features
- Animated resizing when SwiftUI content changes.
- Ability to access the scene phase of the menu using the
scenePhase
environment key.
- Persisted highlighting of the menu bar button.
- Smooth fade out animation when the menu is dismissed.
- Automatic repositioning if the menu would otherwise surpass the screen edge.
Usage
Use FluidMenuBarExtra like you would Apple’s MenuBarExtra, e.g.:
import SwiftUI
import FluidMenuBarExtra
@main
private struct DemoApp: App {
@AppStorage("showMenuBarExtra") var showMenuBarExtra = true
var body: some Scene {
FluidMenuBarExtra("Demo", systemImage: "chevron.down.circle", isInserted: $showMenuBarExtra) {
Text("Hello, world!")
.padding(20)
}
}
}
See also the included demo application for a more elaborate example.
Caveats
- Since FluidMenuBarExtra uses an
NSWindow
, not an NSMenu
, you’ll find that the window presented by FluidMenuBarExtra has a slighter wider corner radius than other menus.
Contributions
All contributions are welcome. If you have a need for this kind of package, feel free to resolve any issues and add any features that may be useful.
License
FluidMenuBarExtra is released under the MIT License unless otherwise noted.
🖥
FluidMenuBarExtra
A lightweight tool for building great menu bar extras with SwiftUI.
About
SwiftUI’s built-in
MenuBarExtra
API makes it easy to create menu bar applications in pure SwiftUI. However, as of macOS 13 its functionality is extremely limited. Worse, it doesn’t behave correctly (e.g. it doesn’t animate, it doesn’t close the pop-up when the user interacts with other menu items, etc).FluidMenuBarExtra provides a drop-in replacement to correct these issues.
Key Features
scenePhase
environment key.Usage
Use FluidMenuBarExtra like you would Apple’s MenuBarExtra, e.g.:
See also the included demo application for a more elaborate example.
Caveats
NSWindow
, not anNSMenu
, you’ll find that the window presented by FluidMenuBarExtra has a slighter wider corner radius than other menus.Contributions
All contributions are welcome. If you have a need for this kind of package, feel free to resolve any issues and add any features that may be useful.
License
FluidMenuBarExtra is released under the MIT License unless otherwise noted.