tauri-nspanel 2.1.0

A plugin for subclassing Tauri's NSWindow to NSPanel
# tauri-nspanel

Create macOS panels for your Tauri app. Convert a regular window into a panel, or configure a new window with the panel builder.

## What are panels?

Panels are a special type of window on macOS ([`NSPanel`](https://developer.apple.com/documentation/appkit/nspanel)) that float above other windows and provide auxiliary controls or information. They're commonly used for tool palettes, inspectors, floating controls, and HUD displays.

## Quick Start

### 1. Installation

```toml
[dependencies]
tauri-nspanel = "2.1"
```

You can also install directly from the maintained `v2.1` branch. This follows the latest commit on
the branch rather than a published crates.io release:

```toml
tauri-nspanel = { git = "https://github.com/ahkohd/tauri-nspanel", branch = "v2.1" }
```

```rust
fn main() {
    tauri::Builder::default()
        .plugin(tauri_nspanel::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
```

### 2. Define and create a panel

```rust
use tauri::{Manager, WebviewUrl};
use tauri_nspanel::{tauri_panel, ManagerExt, PanelBuilder, PanelLevel};

// Define panel class
tauri_panel! {
    panel!(MyPanel {
        config: {
            can_become_key_window: true,
            is_floating_panel: true
        }
    })
}

// Create panel with builder
let panel = PanelBuilder::<_, MyPanel>::new(app.handle(), "my-panel")
    .url(WebviewUrl::App("panel.html".into()))
    .level(PanelLevel::Floating)
    .build()?;

panel.show();
```

### 3. Access from commands

```rust
use tauri::Manager;
use tauri_nspanel::ManagerExt;

#[tauri::command]
fn show_panel(app: tauri::AppHandle) {
    if let Ok(panel) = app.get_webview_panel("my-panel") {
        panel.show_and_make_key();
    }
}

#[tauri::command]
fn close_panel(app_handle: tauri::AppHandle) {
    app_handle
        .get_webview_panel("my-panel")
        .ok()
        .and_then(|panel| panel.to_window())
        .map(|window| window.close());
}
```

## Documentation

See the [documentation](docs/) & [API Reference](https://docs.aremu.dev/tauri-nspanel/).

## Features

- Create panels with PanelBuilder API or convert existing windows
- Mouse tracking with enter, exit, and move events
- Handle panel events
- Works with existing Tauri windows and commands
- Thread-safe operations handled on main thread

## Examples

Check out the [examples](examples/) directory.

## Showcase

Some projects using `tauri-nspanel`:
- [Cap]https://github.com/CapSoftware/Cap - Screen recording
- [Screenpipe]https://github.com/mediar-ai/screenpipe - AI screen recording
- [EcoPaste]https://github.com/EcoPasteHub/EcoPaste - Clipboard manager
- [Hyprnote]https://github.com/fastrepl/hyprnote - Note-taking
- [BongoCat]https://github.com/ayangweb/BongoCat - Desktop pet
- [Coco]https://github.com/infinilabs/coco-app - AI Search and Assistant
- [Overlayed]https://github.com/overlayeddev/overlayed - Screen overlay
- [Verve]https://github.com/ParthJadhav/verve - Launcher
- [JET Pilot]https://github.com/unxsist/jet-pilot - Kubernetes manager
- [Buffer]https://buffer.md - AI-powered Markdown note app
- [Asyar]https://github.com/Xoshbin/asyar-launcher - Cross platform alternative to Raycast

## Contributing

PRs accepted. Please read the Contributing Guide before making a pull request.

## License

MIT or MIT/Apache 2.0 where applicable.